给每一个内存中的进程划分一块适当大小的存储区,以连续存储个进程的程序和数据,是各进程得以并发执行。按分区的时机,分区管理可以分为固定分区和动态分区两种方法。
固定分区法就是把内存固定划分为若干个大小不等的区域。分区划分的原理有一般系统操作员或操作系统决定。
系统对内存的管理和控制通过数据结构——分区说明表进行,分区说明表说明个分区号、分区大小、起始地址和是否空闲区。
在作业的处理过程中进行分区建立,其大小可随作业或进程对内存的要求而改变。
固定分区时的分配与回收不会涉及到空闲区的合并,相对来说比较简单。
动态分区是的分配与回收主要解决3个问题:
可用表或自由链按起始地址递增的次序排列,一旦找到大于或等于所要求内存长度的分区,则结束搜索。
从小到大的次序组成空闲区可用表或自由链,从表头开始查找,当找到第一个满足要求的空闲区是,停止查找。
空闲区按其大小递减的顺序组成空闲区可用表或自由链。当用户作业或进程申请一个空闲区是,先检查空闲区可用表或自由链的第一个空闲可用区的大小是否大于或等于所要求的的内存长度,若可用表或自由链的第一个项长度小于所要求的的,则分配失败,否则从空闲区可用表或自由链中分配相应的存储空间给用户,然后修改空闲区可用表或自由链。
在将一个空闲区插入可用表或自由链是,该空闲区和上下相邻区的关系是下述四关系之一:
从搜索速度上看,最先适应算法具有最佳性能。尽管最佳适应算法或最坏适应算法看上去能很快的找到一个最适合的或最大的空闲区,但后两种算法都要求首先把大小不同的空闲区按其大小进行排队,这实际上是对所有空闲区进行一次搜索。
从回收过程来看,最先适应算法也是最佳的。因为使用最先适应算法回收某一空闲区时,无论被释放区是否与空闲区相邻,都不用改变该去在可用表或自由链中的位置,只需要修改其大小或起始地址。而最佳适应算法和最坏适应算法都必须重新调整该区的位置。
最先适应算法尽可能地利用了低地址空间,从而保证高地址有较大的空闲区来放置要求内存较多的进程或作业。
反过来,最佳适应法找到的空闲区是最佳的,也就是说,用最佳适应法找到的空闲区或者是正好等于用户请求的大小或者是能满足用户要求的最小空闲区。不过,尽管最佳适应法能选出最适合用户要求的可用空闲区,但这样做在某些情况下并不一定能提高内存的利用率(有些小空间可能可不到利用)。
最坏适应算法正是基于不留下碎片空闲区这一出发点的,它选择最大的空闲区来满足用户要求,以期分配后的剩余部分仍能进行再分配。
利用分区式管理,也同样存在每个用户可以自由编程的虚拟空间。但是,分区式管理方式无法实现那种用户进程所需内存容量只受内存和外存容量之和限制的虚拟存储器。事实上,如果不采用内存扩充技术,每个用户进程所需内存容量是受到分区大小限制的。
由于分区式管理时各用户进程或作业所要求的内存容量受到分区大小的限制,如果不采用内存扩充技术,将会极大地限制分区式管理技术的使用。在分区式管理中,可以使用覆盖或交换技术来扩充内存。
静态地址重定位和动态地址重定位技术都可用来完成分区式内存管理的地址变换。显然,动态分区时分区大小不固定,而空闲区的拼接会移动内存中的程序和数据,因此,使用静态定制重定位的方法来完成动态分区时的地址变换是不妥当的。
在进行动态地址重定位是,每个分区需要一对硬件寄存器的支持,即基址寄存器和限长寄存器,分别用来存放作业或进程在内存分区的起始地址和长度。这一对硬件寄存器除了完成动态地址重定位的功能之外,还具有保护内存中数据和程序的功能。
保护键法也可用来存放作业或进程在内存分区的起始地址和长度。
[1] 张尧学. 计算机操作系统教程[M]. 清华大学出版社, 2018.
本文地址:https://blog.csdn.net/qq_40634175/article/details/107338371
如对本文有疑问, 点击进行留言回复!!
利用python将Mysql信息以Excel文件并作为邮件附件发送
springmvc+mybaits+mysql上传表情Incorrect string value: ‘\xF0\x9F\xA4\xB4\xF0\x9F...‘ for
SpringCloud Greenwich集成Seata1.2.0详解说明(原创by ulwfcyvi)
mybatis generator生成代码库 与指定的库不一致 为其他库的同名表
网友评论