计算机操作系统教程——分区存储管理
目录
1 分区管理基本原理
给每一个内存中的进程划分一块适当大小的存储区,以连续存储个进程的程序和数据,是各进程得以并发执行。按分区的时机,分区管理可以分为固定分区和动态分区两种方法。
1.1 固定分区法
固定分区法就是把内存固定划分为若干个大小不等的区域。分区划分的原理有一般系统操作员或操作系统决定。
系统对内存的管理和控制通过数据结构——分区说明表进行,分区说明表说明个分区号、分区大小、起始地址和是否空闲区。
1.2 动态分区法
在作业的处理过程中进行分区建立,其大小可随作业或进程对内存的要求而改变。
2 分区的分配与回收
2.1 固定分区时的分配与回收
固定分区时的分配与回收不会涉及到空闲区的合并,相对来说比较简单。
2.2 动态分区是的分配与回收
动态分区是的分配与回收主要解决3个问题:
- 对于请求中的要求内存长度,从可用表或*链中寻找合适的空闲区分配程序。
- 分配空闲区之后,更新可用表或*链。
- 进程或作业释放内存资源时,和相邻的空闲去进行链接合并,更新可用表或*链。
2.2.1 最先适应算法(first fit algorithm)
可用表或*链按起始地址递增的次序排列,一旦找到大于或等于所要求内存长度的分区,则结束搜索。
2.2.2 最佳适应算法(best fit algorithm)
从小到大的次序组成空闲区可用表或*链,从表头开始查找,当找到第一个满足要求的空闲区是,停止查找。
2.2.3 最坏适应算法(worst fit algorithm)
空闲区按其大小递减的顺序组成空闲区可用表或*链。当用户作业或进程申请一个空闲区是,先检查空闲区可用表或*链的第一个空闲可用区的大小是否大于或等于所要求的的内存长度,若可用表或*链的第一个项长度小于所要求的的,则分配失败,否则从空闲区可用表或*链中分配相应的存储空间给用户,然后修改空闲区可用表或*链。
2.3 动态分区时的回收与拼接
在将一个空闲区插入可用表或*链是,该空闲区和上下相邻区的关系是下述四关系之一:
- 上下相邻分区都是空闲区
- 上相邻区是空闲区
- 下相邻区是空闲区
- 上下相邻区都不是空闲区
2.4 其中分配算法的比较
2.4.1 搜索速度
从搜索速度上看,最先适应算法具有最佳性能。尽管最佳适应算法或最坏适应算法看上去能很快的找到一个最适合的或最大的空闲区,但后两种算法都要求首先把大小不同的空闲区按其大小进行排队,这实际上是对所有空闲区进行一次搜索。
2.4.2 释放速度
从回收过程来看,最先适应算法也是最佳的。因为使用最先适应算法回收某一空闲区时,无论被释放区是否与空闲区相邻,都不用改变该去在可用表或*链中的位置,只需要修改其大小或起始地址。而最佳适应算法和最坏适应算法都必须重新调整该区的位置。
2.4.3 空闲区的利用
最先适应算法尽可能地利用了低地址空间,从而保证高地址有较大的空闲区来放置要求内存较多的进程或作业。
反过来,最佳适应法找到的空闲区是最佳的,也就是说,用最佳适应法找到的空闲区或者是正好等于用户请求的大小或者是能满足用户要求的最小空闲区。不过,尽管最佳适应法能选出最适合用户要求的可用空闲区,但这样做在某些情况下并不一定能提高内存的利用率(有些小空间可能可不到利用)。
最坏适应算法正是基于不留下碎片空闲区这一出发点的,它选择最大的空闲区来满足用户要求,以期分配后的剩余部分仍能进行再分配。
3 有关分区管理其他问题的讨论
3.1 关于虚存的实现
利用分区式管理,也同样存在每个用户可以*编程的虚拟空间。但是,分区式管理方式无法实现那种用户进程所需内存容量只受内存和外存容量之和限制的虚拟存储器。事实上,如果不采用内存扩充技术,每个用户进程所需内存容量是受到分区大小限制的。
3.2 关于内存扩充
由于分区式管理时各用户进程或作业所要求的内存容量受到分区大小的限制,如果不采用内存扩充技术,将会极大地限制分区式管理技术的使用。在分区式管理中,可以使用覆盖或交换技术来扩充内存。
3.3 关于地址变换和内存保护
静态地址重定位和动态地址重定位技术都可用来完成分区式内存管理的地址变换。显然,动态分区时分区大小不固定,而空闲区的拼接会移动内存中的程序和数据,因此,使用静态定制重定位的方法来完成动态分区时的地址变换是不妥当的。
在进行动态地址重定位是,每个分区需要一对硬件寄存器的支持,即基址寄存器和限长寄存器,分别用来存放作业或进程在内存分区的起始地址和长度。这一对硬件寄存器除了完成动态地址重定位的功能之外,还具有保护内存中数据和程序的功能。
保护键法也可用来存放作业或进程在内存分区的起始地址和长度。
3.4 分区管理的主要优缺点
3.4.1 优点
- 实现了多个作业或进程对内存的共享,有助于多道程序设计,从而提高了系统的资源利用率。
- 该方法要求的硬件支持少,管理算法简单,因而实现容易。
3.4.2 缺点
- 内存利用率不高。和单一连续分配算法一样,内存可能含有从未用过的信息。而且,还存在着严重的碎小空闲区(碎片)不能利用的问题,这更进一步影响了内存的利用率。
- 作业或进程的大小受分区大小控制,除非配合采用覆盖和交换技术。
- 无法实现各分区间的信息共享。
4 Reference
[1] 张尧学. 计算机操作系统教程[M]. 清华大学出版社, 2018.
本文地址:https://blog.csdn.net/qq_40634175/article/details/107338371