进程调度 作业调度 主存空间的分配与回收 文件系统 下载本文

分配完毕还会显示已分配作业表如下:

作业分配完毕回到主菜单,选择回收作业:

回收作业上方可以显示待回收作业列表,输入相应名字则完成回收操作:

作业【22222】回收完毕内存空闲表显示情况:

45

回收完第一个作业,则会提示是否继续回收,这里测试选择y,继续回收:

【33333】回收完毕情况图示:

同上,继续回收【44444】

可以看到回收作业完毕每一次内存空闲表的数据是不同的:

最后一个作业暂时选择不回收n:

46

查看一下空闲分区表,可以发现分区one是还有作业占领的,因为刚才没有回收【11111】

再次进行回收作业操作,这里当然是回收最后一个作业【11111】

回收完毕,可以查看内存空闲表最新情况:

所有作业已经成功回收完毕:

最后显示的内存空闲表跟初始值是一致的,回收结束:

47

六、调试总结及心得体会

个人觉得主存分配和内存回收是这么多次实验最为复杂的,涉及到主存的划分,作业的首次适应算法分配内存,这个得熟读书中分配算法才能明白这个实验的意义所在,作业和内存的回收,回收的过程也需要特别细心,其中涉及了好几种情况是不容易看出来的,我就因为这样修改了好久。由于结构比较复杂,这对编程设计和实现也是一个难点,为了方便主存的搜索和分配,我尝试了用双链表的数据结构来实现链接,通过了不断的修改和学习,原本不怎么熟练用双链表指针操作结构体突然有种豁然开朗的感觉,当然对于整体的设计还是十分重要的,必须了解每条指针的用途和用法,要不程序就经常出错了。最后在调试阶段感觉软件的界面人性化做的还不够,这在以后有时间还是需要继续用心做好的事情!

七、思考题

1、内存的主要分配方式有哪些?回收时可能出现的什么情况?应怎样处理这些情况? 答:内在的主要分配方式有连续分配方式,基本分布存储管理方式,基本分段存储管理方式。 回收时可能出现回收不到,这样就会出现内存泄漏,可以像JAVA一样,当回收不到时,抛出异常之类,编程时注意分配的空间对应有释放该空间的命令。

2、动态分区管理的常用内存分配算法有哪几种?比较它们各自的使用范围

答:动态分区管理的常用内存分配算法有首次适应算法,循环首次适应算法和最佳适应算法。 首次适应算法倾向于优先利用内存中低址部分的空间分区,从而保留了高址部分的大空闲区,为大作业分配内存空间创造条件,适用大作业。 循环首次适应算法使内存中的空闲分区分布得更均匀,减少查找空闲分区的开销,但这样会缺乏大的空闲分区,适用小作业。 最佳首次适应算法,总是把能满足要求、又是最小的空闲分区分配给作业,适用大部份作业。

48