拼接示意图
拼接需要的技术支持
动态重定位:拼接后程序在内存的位置发生了变化,因此需要动态重定位技术支持。
空闲区放在何处:拼接后的空闲区放在何处不能一概而论,应根据移动信息量的多少来决定。
拼接的时机:
回收分区时拼接:只有一个空闲区,但拼接频率过高增加系统开销。
找不到足够大的空闲区且系统空闲空间总量能满足要求:拼接频率小于前者,空闲区管理稍复杂。也可以只拼接部分空闲区。
7.3 伙伴系统
伙伴系统是一种较为实用的动态存储管理办法。
在伙伴系统中,内存块的大小为2k。初始时,系统可供分配的空间为2m个单元。但进程申请大小为n的空间时,2i-1 伙伴地址公式 当一块被分成两个大小相等的块时,这两块称为伙伴。 设开始地址为d,长度为2K的块,其伙伴的公式为: Buddy(k,d)=d+2k,若d % 2k+1=0 =d-2k,若d % 2k+1= 2k 如果参与分配的2m个单元从a开始,则任何一个长度为2K的开始地址为d的块,其伙伴的公式为: Buddy(k,d)=d+2k,若(d-a)% 2k+1=0 =d-2k,若(d-a)% 2k+1= 2k 伙伴系统分配及回收例 设系统中初始内存空间大小为1MB,进程请求和释放空间的操作序列为: 进程A申请200KB;B申请120KB;C申请240KB; D申请100KB; 进程B释放;E申请60KB; 进程A、C释放; 进程D释放;进程E释放。 分配过程示意图 0 128K 256K 384K 512K 640K 768K 896K 1M 伙伴系统的二叉树表示 可以用二叉树表示内存分配情况。叶结点表示存储器中的当前分区,如果两个伙伴是叶子,则至少有一个被分配。 右图表示A(200)、B(120)、C(240)、D(100)分配之后的情况。 伙伴系统的不足 分配和回收时需要对伙伴进行分拆及合并。 存储空间有浪费。 7.4 分页存储管理 分区管理中存在碎片,而紧凑技术开销太大,若能取消作业对存储区的连续性要求,则能较好地解决碎片问题。分页存储管理就是基于这一思想提出的。 1.分页存储管理的基本原理 在分页存储管理中,将进程的逻辑地址空间划分成若干大小相等的页(或称页面),相应地将主存空间也划分成与页大小相等的块(或称物理块)。在为进程分配存储空间时,总是以块为单位来分配,可以将进程中的某一页存放到主存的某一空闲块中。 页内碎片:由于进程最后一页装不满而形成的碎片。 页表 为了在内存中找到进程的每个页面所对应的物理块,系统为每个进程建立一张页面映象表,简称页表。 页表:记录页面在内存中对应物理块的数据结构。 页表的作用 页面大小的选择 页面的大小应适中。若页面太大,以至和一般进程大小相差无几,则页面分配退化为分区分配,同时页内碎片也较大。若页面太小,虽然可减少页内碎片,但会导致页表增长。因此,页面大小应适中,通常为2的幂,一般在512B到4KB之间。 页表一般存放在内存中。也可以在页表中设置存取控制字段,以实现存储保护。 存储分块表 存储分块表用来记录内存中各物理块的使用情况及未分配物理块总数。