基本分段存储管理系统.docx
- 文档编号:1903003
- 上传时间:2022-10-25
- 格式:DOCX
- 页数:8
- 大小:104.55KB
基本分段存储管理系统.docx
《基本分段存储管理系统.docx》由会员分享,可在线阅读,更多相关《基本分段存储管理系统.docx(8页珍藏版)》请在冰豆网上搜索。
基本分段存储管理系统
一、课程设计的目的
操作系统课程设计是重要的实践课程,课程开设的目的是让学生学习完《计算机操作系统》课程后,进行一次全面的综合训练,让学生更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。
二、课程设计的内容及要求
基本分段存储管理系统的设计
要求:
(1)建立段表
(2)设计地址变换机构
(3)将变换后的结果显示出来
三、实验原理
为了实现从进程的逻辑地址到物理地址的变换功能,在系统中设置了段表寄存器,用于存放段首地址,段长和段表长度TL。
首先建立段表,段表内容包括段首地址,段长和段表长度。
在建立段表时,应判断段表地址是否冲突(如第一个段的首地址为1,段长为50,在建立第二个段的时候,段首地址应大于1+50),若不冲突,该段建立成功,否则重新建立该段。
然后进行地址变换,在进行地址变换时,系统将逻辑地址中的段号与段表长度进行比较。
若S>TL,表示段号太大,是访问越界,于是产生越界中断信号;若未越界,则根基段表的首地址和该段的段号,计算出该段在在段表项的位置,从中读出该段在内存中的首地址,然后,再检查,段内地址d是否超过该段的段长SL。
若超过,即d>SL,同样发出越界中断信号;若未越界则将该段的基址与段内地址相加,即可得到要访问内存的物理地址。
最后,再将得到的物理地址显示出来。
四、地址换算变换过程结构
五、关键算法实现流程图
地址换算程序流程图
六、程序代码
//*****************************************************
#include
#include
typedefstructsegtable//段表结构说明
{
intsegadd[256];//段首地址
intseglen[256];//段长
intlen;//表的长度
}segtable;
structsegtablest;//定义一个段表
//*****************************************************
//段表的建立
voidcreate()
{
charch;
inti=0;
printf("建立段表\n");
st.len=0;
printf("请输入第1个段首地址:
");
scanf("%d",&st.segadd[0]);
printf("请输入第1个段的长度:
");
scanf("%d",&st.seglen[0]);
st.len=1;
i=1;
while(i<256)
{
fflush(stdin);
printf("是否继续输入(y/n)?
\n");
ch=getchar();
if(ch=='n')
break;
printf("第%d个段首地址应大于%d\n",i+1,st.segadd[i-1]+st.seglen[i-1]);
printf("请输入第%d个段首地址:
",i+1);
scanf("%d",&st.segadd[i]);
if(st.segadd[i]<=st.segadd[i-1]+st.seglen[i-1])
{
printf("地址冲突,请重新输入:
");
scanf("%d",&st.segadd[i]);
}
printf("请输入第%d个段的长度:
",i+1);
scanf("%d",&st.seglen[i]);
st.len++;
i++;
}
}
//*****************************************************
//地址换算
intsegment(intsn,intsd)//sn为逻辑地址,sd为段内地址
{
inti,add;
if(sn>st.len)
{
printf("段号%d大于段表长度%d,越界中断\n",sn,st.len);
return0;
}
elseif(sd>st.seglen[sn-1])
{
printf("段内地址%d大于段长,越界中断\n",sd);
return0;
}
else
{
printf("根据段号找到段首地址为%d\n",st.segadd[sn-1]);
printf("物理地址=段首地址%d+段内地址%d\n",st.segadd[sn-1],sd);
add=st.segadd[sn-1]+sd;
}
return(add);
}
//*****************************************************
voidmain()
{
intx,y;//x表示段号,y表示段内地址
intadd;
charch='y';
create();
while(ch=='y')
{
printf("地址换算\n");
printf("请输入段号:
");
scanf("%d",&x);
printf("请输入段内地址:
");
scanf("%d",&y);
add=segment(x,y);
if(add!
=0)
printf("换算后的物理地址为:
%d\n",add);
fflush(stdin);
printf("是否继续进行地址换算(y/n)?
\n");
scanf("%c",&ch);
if(ch=='n')printf("程序运行结束!
\n");
}
}
七、运行结果及分析
1.建立段表
第一个段的物理地址为12-61,在建立第二个段的时候,输入的段首地址与第一个冲突,所以需要重新输入,70>61,所以该段建立成功
2.建立的段表如下
3.地址换算
地址换算的时候需要输入逻辑地址的段号和段内地址
因为段号大于段表长度5,所以越界中断
段号满足要求,但是段内地址大于段表中对应段的段长,所以越界中断
地址换算成功
八、心得体会
通过这次课程设计,不仅让我对操作系统这门课程有了更深刻的了解,而且增强了我的动手能力。
对操作系统这门课程,经过了一个学期的学习,我们主要学习了操作系统的一些功能,如进程管理,设备管理,存储器管理等等,看似学了很多东西,实际上只是学到了一些皮毛,只是对对这门课程的大概有了一些大概了解。
以后如果有机会,我会继续深入对操作系统这门课程的学习。
由于时间的仓促,这次课程设计做的很粗糙,但是我依然学到了很多实用性知识。
除了对分段存储管理有了更深刻的了解,还加深了我对C语言的使用。
在做这次课程设计的过程中,遇到了很多问题,多亏了杨老师的指导和同学们的帮助。
最后感谢杨老师对我们一学期孜孜不倦的教导!
九、参考文献
《计算机操作系统》(第三版)作者:
汤小丹,梁红兵西安电子科技大学出版社2010
《C语言程序设计》(第三版)作者:
谭浩强清华大学出版社2008
欢迎您的下载,
资料仅供参考!
致力为企业和个人提供合同协议,策划案计划书,学习资料等等
打造全网一站式需求
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基本 分段 存储 管理 系统