-
存储管理的三个目的
确保计算机有足够的内存来处理数据。
确保计算机可以在所有内存中拿来一部分内存使用。
确保程序可以归还使用完了的内存,让其他程序接着用。 -
内存分配的方法
单一连续分配:这是最简单的内存分配方式,他只能在单用户,单进程的操作系统中使用。把内存分为系统区和用户区,系统区给系统,用户区给用户使用这种分配方式已过时。
固定分区分配方法:固定分区方法是支持多道程序的最简单的方法,就是将内存分为若干个固定大小的区域,每个分区只给一个程序使用,所有程序互不干扰。
动态分区分配:是最常用的方法,这种方法会根据进程的实际需要,去动态的分配空间,这就需要相关的数据结构和算法。
动态分区空闲表:标示分区是否被使用的一个表
动态分区空闲链:使用一个双向链表,可以将空闲的节点合并起来,并且因为每个节点的大小不同,我们还可以在节点中标示空间的大小。 -
动态分区的算法
首次适应算法(FF算法)
在每次分配内存时都从开始按照顺序开始查找,寻找和程序大小匹配的分区,当我们遍历了整个链表还找不到合适的分区时,那么这次分区就失败了,找到就成功,我们就将该分区分配给他。这个算法的问题是,每次从头部开始,使得头部的空间一次次被划分,那么头部的空间就会变得碎片化。这么看来的话,这个算法中的合适,指得可能仅仅是所需的空间比分区空间小,我们就可以把该分区空间称为合适。如果最后只有尾节点有足够的空间,那么每次都要把所有节点遍历一边,这一点也很不好。因此,我们在这种算法之后,提出了一个算法叫循环适应算法。用了这个算法,就不用每次从头部开始了,而是从上一次分配的那个分区开始。
最佳适应算法(BF算法)
这个算法需要将所有空闲分区按照容量,从小到大进行排序,然后再遍历空闲区的节点找到最适合他的分区。这个算法可以避免首次适应算法中的大材小用的问题,第一个适应他的,就是距离他实际占用空间最近的。
快速适应算法(QF算法)
这种算法要求创建很多空闲链表,同一种容量的空闲分区存入到同一个链表中。 -
内存的回收过程
空闲区位于需要回收的区域上面时:内存回收时,我们不需要新建链表,只需要把链表扩大,然后放入回收区。
在空闲区位于需要护手的区域下面时:将回收区与空闲区合并,新的空闲区使用回收区的地址。
在被回收区位于两个空闲去之间时:将空闲区1,空闲区2,以及回收区都合并,将新的空闲区使用空闲区1的地址。
在链表里只有需要被回收的区域时:只需要创建一个新的空闲节点然后把新的空闲区插入到链表中去,然后就可以参考上面的三种情况来应对了。