看完了《操作系统》后,感觉还是存储管理最重要。存储管理的方案有很多种,先简单的总结下早期的存储管理方式。
1.单一连续分配
优点:方法简单,易于实现。
缺点:仅适用于单道程序设计,不能使处理剂和贮存得到充分利用
2.分区分配
(1)固定分区法:系统生成时,将主存划分为若干那个分区,每个分区大小可以不等,但事先必须固定,以后不能改变
缺点:有内碎片,内存浪费
(2)可变分区:系统为了管理主存分区分配情况,需建立2张表,分别记录已分配和未分配区域的容量,位置和状态信息
*** 空白区域的分配算法:
i.最佳适应算法: 空白区域中按容量递增方式排序,当要求分配一个空白区时,从小到大查找, 即x1 <= x2 <= x3 <= x4 <= ... <= xn 当s <= xi 时,从xi中分配s,若 分配后有剩余,将剩余的空白区插入到合适位置,若xn仍不能满足要求分配失 败
优点:1.平均而言只要查找一般的表格便能够找到最佳的空白区。
2.若有一个空白区的容量刚好满足,则它必被选中
3.如果不存在恰好满足的空白区,则选中一个容量最接近的空白区,
而较大的空白区则可以以备后用
缺点:分配后造成的碎片很小,无法使用
ii.最差适应:空白区按容量递减派讯,即x1 >= x2 >= x3 >= ... >= xn ,若分配的容量是s
,并且x1 >= s ,则从x1里分配s,若有剩余,则将其插入到合适的位置;若x1<s
则分配失败
优点:只要比较s和x1即可
x1分配出去后,剩余的空白区仍然很大,仍可以使用
缺点:个空白区比较均匀的减少,工作一段时间后,不能满足大空白区的要求
iii.最先适应:空白区按照地址大小顺序递增排序,对于要求分配的分区s,从头开始比较,知道 找到xi >= s为止,若满足则分配,剩余部分保留位置不变
优点:在释放内存分区时,若有相邻空白区就合并,使其成为一个较大的空白 区,以后要使用较大空白区,较容易满足。
缺点:低地址区域集中了很多较小的空白区,因而在空白区的分配时搜索次数 增加了,影响效率
*********************************************
固定式分区和可变式分区的优点和缺点分析:
优点:利于多道程序设计
不受过多硬件限制,只需要地址寄存器,用于存储保护
算法简单
缺点:会产生碎片,降低存储器利用率
分区的大小受到了主存容量的限制,无法扩充主存容量
*********************************************
(3)可在定位式分区:移动所有分配了的分区,使之成为一个连续区域,而留下一个较大的空白区,将碎片统一使用, 优点:高了存储器的利用率,
缺点:需要硬件支持,成本很高,降低了计算速度,耗时
解决浮动问题:1.模块装入程序重新装入(耗时,一旦执行不能重新开始)
2.动态在定位
解决聚集靠拢时机:1.某分区内的作业一完成,就靠拢(频繁,耗时)
2.为某个作业请求一个分区时(较好)
(4)多重分区:给一个作业分配一个以上的分区(提高了利用率,但是需要很多硬件支持,管理复杂)
*********************
分区的优点:实现了主存共享
算法简单
实现存储保护的措施比较简单
多重分区实现了对子程序,数据段的共享
分区的缺点:主存仍不能使用
不能实现对主存的扩容
和单一连续分配一样,要求作业执行前,全部装入主存
采用靠拢方法,虽然解决了碎片,但是需要移动大量信息,损失了处理时间
除了多重分区外,几个共行作业间不能共享存入主存的单一信息副本(子程序,数据段)
*********************