一,单一模式分配
最简单的储存管理方式,只能用于单用户、单任务的操作系统中。
将内存分为系统区和用户区。
二,固定分区分配
将用户内存划分成若干个分区,允许几个作业共享主存空间,这几个作业被装入不同的分区中,每个分区可用来装入一个作业。
1.划分方法有以下俩种:
(1).分区大小相同
(2).分区大小不相同
2.内存分配
借助一张分区使用表来进行分配
三,动态分区分配
根据时间需要,动态的分配内存空间
1,分配的数据结构
(1)空闲分区表:通过表记录每个空闲分区使用情况。每个空闲分区占一个表目,包括分区序号、起始地址、分区大小。
(2)空闲分区链:在每个分区的起始部分设置一些控制分区的信息和链接各个分区的前后指针。
2,分区分配算法
(1)首次适应算法(First Fit)
算法思想:将空闲分区链以地址递增的顺序连接;在进行内存分配时,从链首开始顺序查找,直到找到一块分区的大小可以满足需求 时,按照该作业的大小,从该分区中分配出内存,将剩下的空闲分区仍然链在空闲分区链中。
优点:高址部分的大的空闲分区得到保留,为大作业的内存分配创造了条件;
缺点:1.每次都是优先利用低址部分的空闲分区,造成低址部分产生大量的外碎 片。
2.每次都是从低址部分查找,使得查找空闲分区的开销增大;
(2)循环首次适应算法(Next Fit)
算法:分配内存时不是从链首进行查找可以分配 内存的空闲分区,而是从上一次分配内存的空闲分区的下一个分区开始查找,直到 找到可以为该进程分配内存的空闲分区;
优点:1.使得空闲分区分布更加均匀;
2.空闲分区的查找开销小;
缺点:高址部分的大空闲分区被分小,使得大作业进入无法分配内存;
(3)最佳适应算法(Best Fit)
算法:将空闲分区链中的空闲分区按照空闲分区由小到大的顺序排序,从而形成空闲分区链。每次从链首进行查找合适的空闲分区为 作业分配内存,这样每次找到的空闲分区是和作业大小最接近的,所谓“最佳”。
优点:第一次找到的空闲分区是大小最接近待分配内存作业大小的;
缺点:产生大量难以利用的外部碎片。
(4)最坏适应算法(Worst Fit)
算法:与最佳适应算法刚好相反,将空闲分区链的分区按照从大到小的顺序排序形成空闲分区链,每次查找时只要看第一个空闲分 区是否满足即可。
优点:效率高,分区查找方便;
缺点:当小作业把大空闲分区分小了,那么,大作业就找不到合适的空闲分区。
(5)快速适应算法(Quick Fit)
算法:将空闲分区按照其大小分类,对每一类单独设立一个空闲分区表,当然还需要一张表来管理各个类的空闲分区表,分配时根据进 程的长度,寻找可以容纳它的最小空闲区并进行分配。
优点:效率高,不会对任何分区进行分割,不会产生内存碎片;
缺点:算法复杂,系统开销大而且空闲分区分的越细,内存浪费严重,典型的空间换时间的做法。
四,伙伴系统
伙伴系统规定:所有的分区大小都为2的K次幂(0<k<m),2的m-1次幂为可分配的最大大小。
大体流程图如下:
网友评论