本实验要实现的功能是用首次适应算法来实现动态分区分配,通过不断调试,程序中出现了多处不足之处,首先是程序的运行结果不够清晰,不便于用户进行观察,不过这个比较容易优化,其次就是在内存回收功能上不够完善,开始的时候每次回收最后一个作业时都会出现问题,如图3所示,回收别的作业都很成功,原因就在与在回收情况的判断上少了一种情况后来,后来增加了
if(p->next->next==NULL)p->next=null;else{}满足了要求,得到了正确
结果,还有就是程序允许回收内存中不存在的作业,如图4所示这是不符合要求的,因为才程序中少了对用户输入作业号的判断不符合情况的处理。
7 测试结果
作业1 申请30KB 作业5 申请70KB 作业2 申请600KB 作业2 申请-80KB 作业2申请30KB 作业2 回收30KB 作业3 申请78KB
测试分区分配如图5所示
10
测试分区分配如图6所示
测试分区分配如图7所示
测试分区回收如图8所示
11
测试主存当前分配情况如图9所示
程序运行结果如图10所示
12
参考文献
[1]任满杰等《操作系统原理实用教程》 电子工业出版社 2006
[2]汤子瀛 《计算机操作系统》(修订版)西安电子科技大学出版社 2001 [3]张尧学 史美林《计算机操作系统教程》实验指导 清华大学出版社 2000 [4]罗宇等 《操作系统课程设计》机械工业出版社 2005 [5]曾平,曾林 《操作系统》清华大学出版社 2006
13
心得体会
由于已经学过动态分区分配,我也了解了什么是首次适应算法,以及首次适应算法的实现过程,刚开始以为会很顺利的做完此次课程设计,但往往会出现眼高手低的情况,先是因为很久都没用过C++来编写代码了,以致刚开始时,出现了很多小问题,真是把头都搞大了,如具体的格式,以及链表的具体使用等等出现问题,还得拿出原来的课本学习查看,费了点时间,不过让我再次回味了曾经的C++编程,加深了原来的记忆。经过网上搜材料以及整体平时的学习材料,后来程序的大体框架算是出来了,不过在不断调试过程中我发现了很多不完善的地方,比如在回收内存方面,少了一种情况的处理,以致每次要回收最后一个作业时都会出现错误的框子;还有就是若要删除内存中不存在的作业,程序却允许执行,这个问题难为了我好久,改完后又接着出现新的问题,成了内存中存在的作业在删除时也提示用户重新输入,原因在于判断条件加的地方不合适。通过本次课程设计我学到了很多东西,也增加了我不断摸索和学习的兴趣,由原来的书本知识演化成了真的动手实践,获益匪浅。
14