操作系统课程设计--编程演示三种存储管理方式的地址换算过程Word文档格式.docx
- 文档编号:13181236
- 上传时间:2022-10-07
- 格式:DOCX
- 页数:14
- 大小:387.56KB
操作系统课程设计--编程演示三种存储管理方式的地址换算过程Word文档格式.docx
《操作系统课程设计--编程演示三种存储管理方式的地址换算过程Word文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计--编程演示三种存储管理方式的地址换算过程Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
[3]计算机操作系统教程(第二版),张尧学、史美林,清华大学出版社
[4]现代操作系统,A.S.Tanenbaum著,陈向群等译机械工业出版社
指导教师签字:
审查意见
系主任签字:
年
月
日
设计思想说明
1.1设计环境
在实现地址转换的程序实现时,运用了C++6.0来实现,因为对C语言程序的编写稍微熟悉点,可以很好的编写及调试。
程序很容易看懂,输入条件在后边备注。
1.2设计思想
编程演示三种存储管理方式的地址换算过程,分别为分页方式的地址换算,分段方式的地址换算,段页式的地址换算。
分页方式通过逻辑地址算出页号与叶内地址,然后通过页表来实现向物理地址的转换。
分段方式通过段号和段内地址得到物理地址。
段叶式通过段号得到页表首地址,通过页号得到块号,进而得到物理地址。
2、系统结构
程序主要有三个功能,分别是分页方式的地址换算,分段方式的地址换算,段页式的地址换算。
Switch函数包含3个case语句,分别用page,Segment,SegPagt完成分页方式的地址换算,分段方式的地址换算,段页式的地址换算。
3、数据结构的说明
typedefstructsegtable
{
intsegf[256];
intsegl[256];
}segtable;
structsegtablest;
typedefstructsegpagt
intptl[256];
intpt[256];
intpf[256];
intpl;
}segpagt;
structsegpagtsp;
4、算法流程图
分页式:
分段式:
段页式:
5、主要函数列表
函数原型
voidmain()
功能
输入、输出
入口、出口参数说明
Int整形变量
6、测试与分析
分页式地址换算结果:
分页式地址越界中断:
分段式地址转换结果:
分段式地址段号越界中断:
分段式地址段内越界中断:
段页式地址转换结果:
段页式地址转换段号越界中断:
段页式地址转换页号越界中断:
段页式地址转换段内地址越界中断:
结束:
7、用户使用说明
根据提示输入1-4,然后有相应的提示说明,分别输入,错误的时候有提示,正确的输入会输出相应的正确的结果。
附录:
#include<
stdlib.h>
#include<
stdio.h>
intpage(intA,intL);
intSegment(intsn,intsl);
intSegPagt(intsn,intpn,intpd);
typedefstructsegtable
intmain()
intcode;
intpl,pa,sn,sd,pd,pn,pc;
//constintptl;
inttemp;
do{
printf("
---- 地 址 换 算 过 程
----\n\n"
);
******本程序由陈泳鑫设计--2013年1月3号*****\n"
printf("
1.分页式地址换算\n"
2.分段式地址换算\n"
3.段页式地址换算\n"
4.结束运行\n\n"
--\n"
请输入1-4:
"
scanf("
%d"
&
temp);
switch(temp)
case1:
预设页表长度为256\n"
page(pl,pa);
break;
case2:
intpl,pa;
预设段表长度为256\n"
printf("
请输入您的逻辑地址段号:
scanf("
pl);
printf("
请输入您的页内地址:
pa);
if(pl>
256)
printf("
段号%d大于段表长度256,越界中断\n"
pl);
else{
if(pa>
printf("
段内地址%d大于段长度256,越界中断\n"
pa);
else
Segment(pl,pa);
}
}
case3:
预设段表长度为256,页面大小为256\n"
printf("
请输入您的逻辑地址段号:
请输入您的页号:
请输入您的页内地址:
pc);
if(pl>
页号长度%d大于页表长度256,越界中断\n"
if(pc>
页内地址%d大于页面长度256,越界中断\n"
pc);
else
SegPagt(pl,pa,pc);
break;
}while(temp!
=4);
return0;
//分页式地址换算部分:
intpage(intA,intL)
{
请输入您的逻辑地址:
scanf("
请输入您的页面大小:
if(pl>
页号%d大于页表长度256,越界中断\n"
else{
intd,P,kd,i;
intWD;
intPT[256];
for(i=0;
i<
256;
i++)
{
PT[i]=rand()%512;
//定义随机产生的快号在1到512之间
}
P=A/L;
//页号等于逻辑地址/页面大小
d=A%L;
//页内地址=逻辑地址%页面大小
if(P>
=256)printf("
页号大于页表长度,越界中断\n\n"
//如果页号大于页表长度,输出越界中段
else{
页号=逻辑地址/页面大小=%d,页内地址=逻辑地址%页面大小
=%d\n"
P,d);
//输出页号和页内地址
kd=PT[P];
// 根据页号随机产生快号
根据页号%d得到块号%d\n"
P,kd);
WD=kd*L+d;
// 计算物理地址的公式
物理地址=块号*页面大小+页内地址\n"
物理地址=%d*%d+%d\n"
kd,L,d);
//输出物理地址=块号*页面大小+页内地址
逻辑地址%d换算后的物理地址=%d\n\n"
A,WD);
//输出物理地址的结果
return(0);
}
//分段式地址换算部分:
intSegment(intsn,intsd)
inti,wd;
for(i=0;
255;
st.segf[i]=rand()%255;
//定义随机产生段首地址为1到255之间
st.segl[i]=rand()%2048;
//定义随机产生段长度为1到2048之间
if(sn>
256)printf("
段号%d大于段表长度256,越界中断\n\n"
sn);
//如果段号大于段表长度,输出越界中断
else if(sd>
st.segl[sn])printf("
段内地址%d大于段长度%d,越界中断
\n\n"
sd,st.segl[sn]);
//如果段内地址大于段长度,输出越界中断
else{
根据段号找到段首地址%d\n"
st.segf[sn]);
物理地址=段首地址+段内地址\n"
物理地址=%d+%d\n"
st.segf[sn],sd);
//输出物理地址=段首地址+段内地址
wd=st.segf[sn]+sd;
//计算物理地址的算法
换算得到的物理地址=%d\n\n"
wd);
//输出物理地址
//段页式地址换算部分:
intSegPagt(intsn,intpn,intpd)
inti,wd;
sp.pl=256;
sp.pf[i]=sp.segf[i]=rand()%26624;
//定义随机产生的数在1到26624之间
sp.ptl[i]=sp.segl[i]=rand()%512;
//定义随机产生的数在1到512之间
sp.pt[i]=rand()%256;
//定义随机产生的数在1到256之间
}if(sn>
=256)
段号%d大于段表长度
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 编程 演示 存储 管理 方式 地址 换算 过程