如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
精选范本,供参考!精选范本,供参考!精选范本,供参考!目录TOC\o"1-1"\h\uHYPERLINK\l_Toc25024一、课程设计的目的PAGEREF_Toc250242HYPERLINK\l_Toc3878二、课程设计的内容及要求PAGEREF_Toc38782HYPERLINK\l_Toc21608三、实验原理PAGEREF_Toc216082HYPERLINK\l_Toc1652四、地址换算变换过程结构PAGEREF_Toc16522HYPERLINK\l_Toc27722五、关键算法实现流程图PAGEREF_Toc277223HYPERLINK\l_Toc648六、程序代码PAGEREF_Toc6484HYPERLINK\l_Toc30082七、运行结果及分析PAGEREF_Toc300827HYPERLINK\l_Toc5284八、心得体会PAGEREF_Toc52849HYPERLINK\l_Toc17271九、参考文献PAGEREF_Toc172719课程设计的目的操作系统课程设计是重要的实践课程,课程开设的目的是让学生学习完《计算机操作系统》课程后,进行一次全面的综合训练,让学生更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。课程设计的内容及要求基本分段存储管理系统的设计要求:(1)建立段表(2)设计地址变换机构(3)将变换后的结果显示出来实验原理为了实现从进程的逻辑地址到物理地址的变换功能,在系统中设置了段表寄存器,用于存放段首地址,段长和段表长度TL。首先建立段表,段表内容包括段首地址,段长和段表长度。在建立段表时,应判断段表地址是否冲突(如第一个段的首地址为1,段长为50,在建立第二个段的时候,段首地址应大于1+50),若不冲突,该段建立成功,否则重新建立该段。然后进行地址变换,在进行地址变换时,系统将逻辑地址中的段号与段表长度进行比较。若S>TL,表示段号太大,是访问越界,于是产生越界中断信号;若未越界,则根基段表的首地址和该段的段号,计算出该段在在段表项的位置,从中读出该段在内存中的首地址,然后,再检查,段内地址d是否超过该段的段长SL。若超过,即d>SL,同样发出越界中断信号;若未越界则将该段的基址与段内地址相加,即可得到要访问内存的物理地址。最后,再将得到的物理地址显示出来。地址换算变换过程结构五、关键算法实现流程图地址换算程序流程图六、程序代码//*****************************************************#include<stdio.h>#include<stdlib.h>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);scan