收藏 分销(赏)

基本分段存储管理系统.doc

上传人:精*** 文档编号:1784615 上传时间:2024-05-09 格式:DOC 页数:9 大小:140KB 下载积分:6 金币
下载 相关 举报
基本分段存储管理系统.doc_第1页
第1页 / 共9页
基本分段存储管理系统.doc_第2页
第2页 / 共9页


点击查看更多>>
资源描述
目录 一、 课程设计的目的 2 二、 课程设计的内容及要求 2 三、 实验原理 2 四、 地址换算变换过程结构 2 五、关键算法实现流程图 3 六、程序代码 4 七、运行结果及分析 7 八、心得体会 9 九、参考文献 9 一、 课程设计的目的 操作系统课程设计是重要的实践课程,课程开设的目的是让学生学习完《计算机操作系统》课程后,进行一次全面的综合训练,让学生更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。 二、 课程设计的内容及要求 基本分段存储管理系统的设计 要求:(1)建立段表 (2)设计地址变换机构 (3)将变换后的结果显示出来 三、 实验原理 为了实现从进程的逻辑地址到物理地址的变换功能,在系统中设置了段表寄存器,用于存放段首地址,段长和段表长度TL。首先建立段表,段表内容包括段首地址,段长和段表长度。在建立段表时,应判断段表地址是否冲突(如第一个段的首地址为1,段长为50,在建立第二个段的时候,段首地址应大于1+50),若不冲突,该段建立成功,否则重新建立该段。然后进行地址变换,在进行地址变换时,系统将逻辑地址中的段号与段表长度进行比较。若S>TL,表示段号太大,是访问越界,于是产生越界中断信号;若未越界,则根基段表的首地址和该段的段号,计算出该段在在段表项的位置,从中读出该段在内存中的首地址,然后,再检查,段内地址d是否超过该段的段长SL。若超过,即d>SL,同样发出越界中断信号;若未越界则将该段的基址与段内地址相加,即可得到要访问内存的物理地址。最后,再将得到的物理地址显示出来。 四、 地址换算变换过程结构 五、关键算法实现流程图 地址换算程序流程图 六、程序代码 //***************************************************** #include<stdio.h> #include<stdlib.h> 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",&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++; } } //***************************************************** //地址换算 int segment(int sn,int sd) //sn为逻辑地址,sd为段内地址 { int i,add; if(sn>st.len) { printf("段号%d大于段表长度%d,越界中断\n",sn,st.len); return 0; } else if(sd>st.seglen[sn-1]) { printf("段内地址%d大于段长,越界中断\n",sd); return 0; } 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); } //***************************************************** void main() { int x,y; //x表示段号,y表示段内地址 int add; char ch='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 【本文档内容可以自由复制内容或自由编辑修改内容期待你的好评和关注,我们将会做得更好】 精选范本,供参考!
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服