您好,欢迎来到飒榕旅游知识分享网。
搜索
您的当前位置:首页基本分段存储管理系统

基本分段存储管理系统

来源:飒榕旅游知识分享网


目录

一、 二、 三、 四、

课程设计的目的 .......................................................................................................................................................... 1 课程设计的内容及要求 .............................................................................................................................................. 1 实验原理 ...................................................................................................................................................................... 2 地址换算变换过程结构 .............................................................................................................................................. 2

五、关键算法实现流程图 .......................................................................................................................................................... 3 六、程序代码 .............................................................................................................................................................................. 3 七、运行结果及分析 ................................................................................................................................................................ 10 八、心得体会 ............................................................................................................................................................................ 12 九、参考文献 ............................................................................................................................................................................ 13

一、 课程设计的目的

操作系统课程设计是重要的实践课程,课程开设的目的是让学生学习完《计算机操作系统》课程后,进行一次全面的综合训练,让学生更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。

二、 课程设计的内容及要求

基本分段存储管理系统的设计

要求:(1)建立段表

(2)设计地址变换机构

(3)将变换后的结果显示出来

三、 实验原理

为了实现从进程的逻辑地址到物理地址的变换功能,在系统中设置了段表寄存器,用于存放段首地址,段长和段表长度TL。首先建立段表,段表内容包括段首地址,段长和段表长度。在建立段表时,应判断段表地址是否冲突(如第一个段的首地址为1,段长为50,在建立第二个段的时候,段首地址应大于1+50),若不冲突,该段建立成功,否则重新建立该段。然后进行地址变换,在进行地址变换时,系统将逻辑地址中的段号与段表长度进行比较。若S>TL,表示段号太大,是访问越界,于是产生越界中断信号;若未越界,则根基段表的首地址和该段的段号,计算出该段在在段表项的位置,从中读出该段在内存中的首地址,然后,再检查,段内地址d是否超过该段的段长SL。若超过,即d>SL,同样发出越界中断信号;若未越界则将该段的基址与段内地址相加,即可得到要访问内存的物理地址。最后,再将得到的物理地址显示出来。

四、 地址换算变换过程结构

五、关键算法实现流程图

开始输入段号和段内地址段号是否大于段表长度越界中断段内地址是否大于对应段段长越界中断物理地址=段首地址+段内地址输出物理地址结束

地址换算程序流程图

六、程序代码

//*****************************************************

#include

#include

typedef struct segtable //段表结构说明

{

int segadd[256]; //段首地址

int seglen[256]; //段长

int len; //表的长度

}segtable;

struct segtable st; //定义一个段表

//*****************************************************

//段表的建立

void create()

{

char ch;

int i=0;

printf(\"建立段表\\n\");

st.len=0;

printf(\"请输入第1个段首地址:\");

scanf(\"%d\

printf(\"请输入第1个段的长度:\");

scanf(\"%d\

st.len=1;

i=1;

while(i<256)

{

fflush(stdin);

printf(\"是否继续输入(y/n)?\\n\");

ch=getchar();

if(ch=='n')

break;

printf(\"第%d个段首地址应大于%d\\n\

printf(\"请输入第%d个段首地址:\

scanf(\"%d\

if(st.segadd[i]<=st.segadd[i-1]+st.seglen[i-1])

{

printf(\"地址冲突,请重新输入:\");

scanf(\"%d\

}

printf(\"请输入第%d个段的长度:\

scanf(\"%d\

st.len++;

i++;

}

}

//*****************************************************

//地址换算

int segment(int sn,int sd) //sn为逻辑地址,sd为段内地址

{

int i,add;

if(sn>st.len)

{

printf(\"段号%d大于段表长度%d,越界中断\\n\

return 0;

}

else if(sd>st.seglen[sn-1])

{

printf(\"段内地址%d大于段长,越界中断\\n\

return 0;

}

else

{

printf(\"根据段号找到段首地址为%d\\n\

printf(\"物理地址=段首地址%d+段内地址%d\\n\

add=st.segadd[sn-1]+sd;

}

return (add);

}

//*****************************************************

void main()

{

int x,y; //x表示段号,y表示段内地址

int add;

char ch='y';

create();

while(ch=='y')

{

printf(\"地址换算\\n\");

printf(\"请输入段号:\");

scanf(\"%d\

printf(\"请输入段内地址:\");

scanf(\"%d\

add=segment(x,y);

if(add!=0)

printf(\"换算后的物理地址为:%d\\n\

fflush(stdin);

printf(\"是否继续进行地址换算(y/n)?\\n\");

scanf(\"%c\

if(ch=='n') printf(\"程序运行结束!\\n\");

}

}

七、运行结果及分析

1.建立段表

第一个段的物理地址为12-61,在建立第二个段的时候,输入的段首地址与第一个冲突,所以需要重新输入,70>61,所以该段建立成功

2.建立的段表如下

3.地址换算

地址换算的时候需要输入逻辑地址的段号和段内地址

因为段号大于段表长度5,所以越界中断

段号满足要求,但是段内地址大于段表中对应段的段长,所以越界中断

地址换算成功

八、心得体会

通过这次课程设计,不仅让我对操作系统这门课程有了更深刻的了解,而且增强了我的动手能力。对操作系统这门课程,经过了一个学期的学习,我们主要学习了操作系统的一些功能,如进程管理,设备管理,存储器管理等等,看似学了很多东西,实际上只是学到了一些皮毛,只是对对这门课程的大概有了一些大概了解。以后如果有机会,我会继续深入对操作系统这门课程的学习。

由于时间的仓促,这次课程设计做的很粗糙,但是我依然学到了很多实用性知识。除了对分段存储管理 有了更深刻的了解,还加深了我对C语言的使用。在做这次课程设计的过程中,遇到了很多问题,多亏了杨老师的指导和同学们的帮助。

最后感谢杨老师对我们一学期孜孜不倦的教导!

九、参考文献

《计算机操作系统》(第三版) 作者:汤小丹,梁红兵 西安电子科技大学出版社 2010

《C语言程序设计》(第三版) 作者:谭浩强 清华大学出版社 2008

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sarr.cn 版权所有 赣ICP备2024042794号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务