《计算机操作系统”课程设计大作业.pdf》由会员分享,可在线阅读,更多相关《计算机操作系统”课程设计大作业.pdf(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、华南理工大学华南理工大学“计算机操作系统”课程设计大作业“计算机操作系统”课程设计大作业1 1)给出数据定义和详细说明;给出数据定义和详细说明;struct block_s/*该块的实际长度,不包括 block_s 的大小。*/int length;/*申请该块的作业,为 0 表示该块空闲。*/int owner;/*当该块是空闲块时,offset 表示下一空闲块的偏移,offset 为 TOTAL_BYTE 表示该块是最后一个空闲块。当该块非空闲块时,offset 表示作业实际申请的大小。*/int offset;2 2)给出实现思想和设计流程;给出实现思想和设计流程;该算法遍历空闲链表,找
2、第一个大小能满足要求的块。然后,若找到的块足够大,再把该块切成两块,返回第一块给调用者;把第二块加到空闲区链表中。把该块分成两块返回第一块把第二块插入空闲链表YN找到满足条件的块YN该块的长度大于申请的内存返回找到的块返回 NULL遍历空闲链表,找第一个满足条件的块该算法遍历整个空闲链表,找一个大小能满足要求的块。并且该块是所有能满足要求的空闲块中,大小最小的块。然后,若找到的块足够大,再把该块切成两块,返回第一块给调用者;把第二块加到空闲区链表中。遍历整个空闲块,找一个长度比要求的大小长,且是所有主要的块中最小的块N找到满足条件的块YN该块的长度大于申请的内存返回 NULL返回找到的块Y把该
3、块分成两块返回第一块把第二块插入空闲链表3 3)调试完成源程序;调试完成源程序;#include stdio.h#include#include#define n 10/*假定系统允许的最大作业为 n,假定模拟实验中 n 值为 10*/#define m 10/*假定系统允许的空闲区表最大为 m,假定模拟实验中 m 值为 10*/#define minisize 100structfloat address;/*已分分区起始地址*/float length;/*已分分区长度,单位为字节*/int flag;/*已分配区表登记栏标志,用0表示空栏目*/used_tablen;/*已分配区表*/s
4、tructfloat address;/*空闲区起始地址*/float length;/*空闲区长度,单位为字节*/int flag;/*空闲区表登记栏标志,用0表示空栏目,用1表示未分配*/free_tablem;/*空闲区表*/allocate(char J,float xk)/*采用最优分配算法分配 xk 大小的空间*/int i,k;float ad;k=-1;for(i=0;i=xk&free_tablei.flag=1)if(k=-1|free_tablei.lengthfree_tablek.length)k=i;if(k=-1)/*未找到可用空闲区,返回*/printf(无可用
5、空闲区n);return 0;/*找到可用空闲区,开始分配:若空闲区大小与要求分配的空间差小于 msize 大小,则空闲区全部分配;若空闲区大小与要求分配的空间差大于 minisize 大小,则从空闲区划出一部分分配*/if(free_tablek.length-xk=minisize)free_tablek.flag=0;ad=free_tablek.address;xk=free_tablek.length;elsefree_tablek.length=free_tablek.length-xk;ad=free_tablek.address+free_tablek.length;/*修改已
6、分配区表*/i=0;while(used_tablei.flag!=0&i=n)/*无表目填写已分分区*/printf(无表目填写已分分区,错误n);/*修正空闲区表*/if(free_tablek.flag=0)/*前面找到的是整个空闲分区*/free_tablek.flag=1;else/*前面找到的是某个空闲分区的一部分*/free_tablek.length=free_tablek.length+xk;return 1;else/*修改已分配表*/used_tablei.address=ad;used_tablei.length=xk;used_tablei.flag=J;return
7、 1;/*主存分配函数结束*/reclaim(char J)/*回收作业名为 J 的作业所占主存空间*/int i,k,j,s,t;float S,L;/*寻找已分配表中对应登记项*/s=0;while(used_tables.flag!=J|used_tables.flag=0)&s=n)/*在已分配表中找不到名字为 J 的作业*/printf(找不到该作业n);return 0;/*修改已分配表*/used_tables.flag=0;/*取得归还分区的起始地址 S 和长度 L*/S=used_tables.address;L=used_tables.length;j=-1;k=-1;i=
8、0;/*寻找回收分区的空闲上下邻,上邻表目 k,下邻表目 j*/while(im&(j=-1|k=-1)if(free_tablei.flag=1)if(free_tablei.address+free_tablei.length=S)k=i;/*找到上邻*/if(free_tablei.address=S+L)j=i;/*找到下邻*/i+;if(k!=-1)if(j!=-1)/*上邻空闲区,下邻空闲区,三项合并*/free_tablek.length=free_tablej.length+free_tablek.length+L;free_tablej.flag=0;else/*上邻空闲区,
9、下邻非空闲区,与上邻合并*/free_tablek.length=free_tablek.length+L;else if(j!=-1)/*上邻非空闲区,下邻为空闲区,与下邻合并*/free_tablej.address=S;free_tablej.length=free_tablej.length+L;else/*上下邻均为非空闲区,回收区域直接填入*/*在空闲区表中寻找空栏目*/t=0;while(free_tablet.flag=1&t=m)/*空闲区表满,回收空间失败,将已分配表复原*/printf(主存空闲表没有空间,回收空间失败n);used_tables.flag=J;retur
10、n 0;free_tablet.address=S;free_tablet.length=L;free_tablet.flag=1;return 1;/*主存回收函数结束*/main()int i,a;float xk;char J;/*空闲分区表初始化:*/free_table0.address=10240;free_table0.length=102400;free_table0.flag=1;for(i=1;im;i+)free_tablei.flag=0;/*已分配表初始化:*/for(i=0;in;i+)used_tablei.flag=0;while(1)printf(选择功能项(
11、0-退出,1-分配主存,2-回收主存,3-显示主存)n);printf(选择功项(03):);scanf(%d,&a);switch(a)case 0:exit(0);break;case 1:/*a=1 分配主存空间 这一句后面需要代码*/printf(请输入作业名 请输入作业大小:);scanf(%c%fn,&J,&xk);allocate(J,xk);case 2:/*a=2 回收主存空间 这一句后面需要代码*/printf(需要回收的作业:);scanf(%cn,&J);reclaim(J);case 3:/*a=3 显示主存情况*/*输出空闲区表和已分配表的内容*/printf(输出
12、空闲区表:n 起始地址 分区长度 标志n);for(i=0;im;i+)printf(%6.0f%9.0f%6dn,free_tablei.address,free_tablei.length,free_tablei.flag);printf(按任意键,输出已分配区表n);getch();printf(输出已分配区表:n 起始地址 分区长度 标志n);for(i=0;in;i+)if(used_tablei.flag!=0)printf(%6.0f%9.0f%6cn,used_tablei.address,used_tablei.length,used_tablei.flag);else pr
13、intf(%6.0f%9.0f%6dn,used_tablei.address,used_tablei.length,used_tablei.flag);break;default:printf(没有该选项n);/*case*/*while*/*主函数结束*/4 4)屏幕观察运行结果;屏幕观察运行结果;5 5)总结自己的设计体会;总结自己的设计体会;通过这次课程设计,不仅让我了解了模型机的硬件结构和怎么去通过这次课程设计,不仅让我了解了模型机的硬件结构和怎么去设计微程序,更重要的还让我学会了、或者说是验证了“做事一设计微程序,更重要的还让我学会了、或者说是验证了“做事一定要有次序和对事物的总体
14、把握”这句话。开始,我没有按照步定要有次序和对事物的总体把握”这句话。开始,我没有按照步骤先设计机器指令格式,而是一下子就开始去设计微程序,这使骤先设计机器指令格式,而是一下子就开始去设计微程序,这使我对整个课程设计没有什么总体把握,我对整个课程设计没有什么总体把握,也不知道接下来要干什么。也不知道接下来要干什么。后来我问了蒋老师,在他热心耐心的指导下,我终于明白要严格后来我问了蒋老师,在他热心耐心的指导下,我终于明白要严格按照实验步骤来做。我自己的思路也慢慢清晰了,我设计好机器按照实验步骤来做。我自己的思路也慢慢清晰了,我设计好机器指令格式,马上请教蒋老师,在确认我的机器指令格式正确的基指令
15、格式,马上请教蒋老师,在确认我的机器指令格式正确的基础上,我开始用老师的仿真软件编写微指令,这时我碰到了怎样础上,我开始用老师的仿真软件编写微指令,这时我碰到了怎样去设计此设计中去设计此设计中 0202 次地址,次地址,发现很巧妙而又富有随意性,发现很巧妙而又富有随意性,看到其看到其他同学一贯的雷同现象,我决定还是应该自己动脑筋换成别的地他同学一贯的雷同现象,我决定还是应该自己动脑筋换成别的地址。况且只是地址上的一次改变,其他也不费工夫,那为什么不址。况且只是地址上的一次改变,其他也不费工夫,那为什么不做呢!通过努力,微程序和机器指令测试程序都已经完成,我开做呢!通过努力,微程序和机器指令测试
16、程序都已经完成,我开始调试,居然一边就成功了,我开始不感相信,我再一次找来蒋始调试,居然一边就成功了,我开始不感相信,我再一次找来蒋老师来帮我看了一下做好的设计,老师来帮我看了一下做好的设计,结果真是另人开心。结果真是另人开心。此时此刻,此时此刻,我心里多了些成就感。在这里,我如果不说感谢的话,不知道要我心里多了些成就感。在这里,我如果不说感谢的话,不知道要说些什么好;首先感谢学校和父母,然后更重要的是感谢蒋老师说些什么好;首先感谢学校和父母,然后更重要的是感谢蒋老师的教导。的教导。“活到老,学到老”“活到老,学到老”,这也是我整个学习过程中的一次经,这也是我整个学习过程中的一次经验、一次总结,我相信它肯定会给我今后的学习有所启示和指导验、一次总结,我相信它肯定会给我今后的学习有所启示和指导作用。作用。