操作系统-------内存管理(1)

操作系统内存管理详解
这篇博客详细介绍了操作系统中内存管理的任务,包括支持多道程序、方便用户、提高存储器利用率和逻辑上扩充内存等。讨论了连续分配和离散分配两种内存分区方式,以及单一连续分配、固定分区、动态分区等具体方法,特别强调了动态分区中的外碎片和内碎片问题,以及各种分配算法的优缺点。最后提到了动态分区的回收策略。

存储管理的任务:

1、支持多道程序的并发处理,对共享的资源进行管理。

2、方便用户,减少用户直接对内存的管理

3、提高存储器的利用率,加大系统的吞吐量

4、在逻辑上扩充内存的大小,使大于内存容量的进程能够存入到内存中运行


任何程序必须将代码以及数据等信息都调入到内存中才能运行。内存中分为两部分,操作系统固定的占用内存中低地址段的部分,这部分是不变的,从开机开始就分配给操作系统使用,用户进程不能访问。

而内存剩下的空间就都留给了用户进程,每个用户进程在内存中都有着固定的空间。


在对内存进行分区的时候分为连续分配和离散分配两个大类


连续分配方式:


A、单一连续分配:除了留给操作系统的固定的空间之外,其余的空间连续分为一个区,每次只能允许调用一个进程进入内存,这样会使系统的吞吐量下降而且内存的利用率也会下降。主要适用于单用户单任务。

这里有一个概念就是碎片,所谓碎片分为内碎片和外碎片,内碎片为程序调入内存分配给它的区域之后,在该区域还 剩下一些空间没有用,这就是内碎片,即是分区内部没有被利用的空间,而外碎片主要是用于动态分区的时候,分区与分区之间的空间太小,不能再容纳程序进入,这些分区之间没有被利用的空间就是外碎片


B、固定分区: 将用户可用的内存空间可以划分为都相等的小的空间或者划分成不等的空间,在程序未进入内存就已经把内存分好区,这样一来,一些比分区中最大空间还大的程序不能进入,再一个就是,较小的程序调用内存可能会浪费内存空间,不能充分利用,另外还有减少系统的吞吐量,限制了并发进程的数目。固定分区的时候会维护一个分区说明表,里面记录了分区的各项信息以及 分区的状态。在每次进入内存的程序到来 时都会遍历一下这个说明表,看是否有合适的空闲分区可以分配。回收的时候直接将分区状态改为未分配即可。


C、动态分区:没有事先对内存分好区,在程序调入内存的时候,根据实际情况为其分配一块合适的空间,这样一来看似很完美,但是当有程序不断的调入和调出内存的时候,对内存不断的分割,会留出很多的外碎片,将很多大的内存空间切割的很零碎,以至于一些比较大的程序无法调入内存。在分配期间会维护一个空闲分区表和已分配表

(在动态分配内存的过程中,要不断维护已分配表还有空闲表)

D、可 重定位的动态分区:可以利用压缩技术奖所有的外碎片压缩到一起的一种动态内存分配方式。这样固然是不错,但是开销太大,并且要把内存中已经存好的程序进行 移动,非常麻烦


动态分区中的程序放置算法:


1、首次适应算法:优先从低地址的空闲区开始分配内存空间,再分配的时候会遍历空闲分区表中的情况,此时的空闲分区表要根据地址的从低到高来排序,以至于在查找到第一个可以分配的区域(区域空间大于等于所需要的空间)时就截止查询。这样一来效率就大大提高了,而且高地址较大的内存空间就被剩下,这样再有大的程序来的时候也可以调入,但是一方面不断的切割低地址处的内存空间会造成很多外碎片,而且最坏的情况下,可能遍历整个空闲表仍然没有找到合适的空间调入,这样的效率也会低很多。另外,如果一直没有大的程序调入的话,那么高地址 部分的空间会被浪费


2、下次适应算法:基本上和首次适应算法类似,但是在查找空闲表的时候是从上一次查找结束的位置开始查找,这样可以提高查找效率增加高地址内存空间的利用率,同时也破坏了高地址比较大的空间,较大的进程可能进不来。


 3、最佳适应算法:将空闲列表 中的分区情况按照分区大小从低到高进行排序,当一个程序进入的时候,遍历空闲表,找一个与其要求最接近的空间分配给他,这样基本没有内碎片。但是由于每次分配的都是最接近程序要求的空间,切割内存空间留下来的空间就会非常小,变成了不能利用的内碎片,所以,某种程度上也降低了内存的利用率。


4、最坏适应算法:针对最佳适应算法的问题,外碎片过多,最坏适应算法将空闲表按照容量的从大到小排序,每次程序进来依次查找每个分区,这样切割下来的分区也不会是不能用的外碎片,减少了外碎片太多的情况,但是同样存在,先是一堆小程序后来一个大程序的这样放置顺序,如此一来,大程序又进不来了。


(最终动态分区的办法中,如果一个空闲分区的容量大于这个要求的空间,将会计算一下分配之后剩余的空间,如果剩余的空间小于可再分区的最小分区容量,那么就把整个这段空间都分配给该程序不在切割,因为即使留下也只能留下外碎片。如果大于等于,则把这一段空闲分区的空间切割一下,最终的算法基于的是最佳适应算法)


动态分区的回收:

回收分区涉及到首地址,空闲分区数量,分区大小。

a、当回收的分区上下都是空闲分区的时候,空闲分区数量减2,新的空闲分区首地址为上面空闲分区的首地址,大小为三个分区的大小相加。


b、当回收的分区上面是空闲分区的时候,空闲分区数量减去1,新的空闲分区首地址为上面 空闲分区的首地址,大小为两个分区相加


c、当回收分区下面是空闲分区的时候,首地址变为当前回收分区的首地址


d、当回收分区上下都没有空闲分区的时候,大小就是这个回收分区的大小,首地址也就是该 分区的首地址。











评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值