1.静态划分
分页:特殊的静态分区,需要事先将内存空间划分为若干个大小相同的分区,称为页框,或帧( frame )。
当进程申请存储空间时,系统可以为之分配多个空闲页框。
固定分区
管理简单,只需要建立一张分区使用表,登记分区的使用情况。( 等长分区只需要标明分区状态是已分配,还是空闲)
固定分区:等长
所有分区的长度相同。
优点:分配简单,只要进程大小不超过分区大小,就可以装到任何一个分区中运行。
浪费存储空间。若进程申请的存储空间很小,却需要占用整个分区,分区内存在不可用的浪
费空间,称为内零头。无法运行超过分区大小的程序。
固定分区:异长
将内存空间划分为若干个长度不同的分区,以适合于不同大小的进程需要
既提高存储空间的利用率、减少浪费,又使长进程能装入运行。
但是,确定每个分区的大小也是一件十分困难的事情。
固定分区:分配
首先,检索分区使用表,从中找出- -个尚未分配的、能满足大小且内零头最小的分区。
若分区使用表中的分区按从小到大的顺序排列则分配时,从表中的第一个表项开始查找,找到的第一个尚未分配并满足大小的分区即是最佳的分区。
将分区使用表中该分区的状态修改为已分配。若找不到大小足够的分区,则系统将拒绝运行该进程,或采用其它技术进行处理,如覆盖技术等。
动态分区
首次适应算法(FFA: First Fit Algorithm)
算法思想:将空闲分区链以地址递增的顺序连接;在进行内存分配时,从链首开始顺序查找,直到找到一块分区的大小可以满足需求时,按照该作业的大小,从该分区中分配出内存,将剩下的空闲分区仍然链在空闲分区链中。
优点:尽量使用低地址空间,因而在高地址的空间可能会保留较大的空闲分区。所以,大进程申请的存储空间大都能在高地址端得到满足。
缺点:由于每次只简单地使用找到的第一个分区,结果可能导致将较大的空闲分区不断地分割为较小的空闲分区。每次都是从低址部分查找,使得查找空闲分区的开销增大;
循环首次适应算法(Next Fit)
算法思想:分配内存时不是从链首进行查找可以分配内存的空闲分区,而是从上一次分配内存的空闲分区的下一个分区开始查找,直到找到可以为该进程分配内存的空闲分区。
优点:使得空闲分区分布更加均匀;空闲分区的查找开销小;
缺点:高址部分的大空闲分区被分小,使得大作业进入无法分配内存;
最佳适应算法(Best Fit)
算法思想:将空闲分区链中的空闲分区按照空闲分区由小到大的顺序排序,从而形成空闲分区链。每次从链首进行查找合适的空闲分区为作业分配内存,这样每次找到的空闲分区是和作业大小最接近的,所谓“最佳”.
优点:第一次找到的空闲分区是大小最接近待分配内存作业大小的;
缺点:产生大量难以利用的外部碎片。
最坏适应算法(Worst Fit)
算法思想:与最佳适应算法刚好相反,将空闲分区链的分区按照从大到小的顺序排序形成空闲分区链,每次查找时只要看第一个空闲分区是否满足即可。
优点:效率高,分区查找方便;
缺点:当小作业把大空闲分区分小了,那么,大作业就找不到合适的空闲分区。
快速适应算法
将空闲分区根据其容量大小进行分类,对于每一类具有相同容量的所有分区,单独设立一个空闲分区链表,这样系统中存在多个空闲分区链表。同时,在内存中设立一张管理索引表,其中的每一个索引表项对应了一种空闲分区类型。
在搜索可分配空闲分区时,第一步根据进程的长度,从索引表中去寻找能容纳它的最小空闲区链表;第二步是从链表中取下第一块进行分配即可。
优先是查找效率高,缺点是,该算法在分配空闲分区时,是以进程为单位的,一个分区只属于一个进程,因此在为进程所分配的一个分区中,或多或少存在一定的浪费。
伙伴系统(Buddy System)
静态划分方案限制了系统中活跃进的数目。并且,只能运行不超过分区大小的进程,如果进程远远小于分区大小,则内存空间的利用率非常低。
动态划分方案使存储管理复杂化,并且需要系统付出紧凑外零头的额外开销。
伙伴系统:综合静态划分技术和动态划分技术的优点
算法思想:每个空间都为2的整数倍,无限细分直至刚好合适
分页式存储管理
将一个进程的逻辑地址空间分成若干个大小相等的片称为页面或页,并为各页加以编号, 从0开始。同时把内存空间分成与页面相同大小的若干个存储块,称为块或页框。在为进程分配内存时,以块为单位将进程的若干个页分别装入到多个可以不相邻的物理块中。进程的最后一页经常装不满一块而形成“页内碎片”。