6
四、存储管理
存储管理为了确保计算机有足够的内存处理数据;确保程序可以从可用内存中获取一部分内存使用;确保程序可以归还使用后的内存以供其他程序使用。
4.1 存储管理之内存分配与回收
内存分配的过程:单一连续分配(已经过时)、固定分区分配、动态分区分配(根据实际需要,动态的分配内存)。
动态分区分配算法:
首次适应算法:分配内存时,从开始顺序查找适合内存区,若无合适内存区,则分配失败,每次从头部开始,使得头部地址空间不断被划分;
最佳适应算法:要求空闲区链表按照容量大小排序,遍历以找到最佳适合的空闲区(会留下越来越多的内部碎片)。
快速适应算法:要求有多个空闲区链表,每个空闲区链表存储一种容量的空闲区。
内存回收的过程:
回收区在空闲区下方:不需要新建空闲链表节点;只需要把空闲区1的容量增大即可;
回收区在空闲区上方:将回收区与空闲区合并;新的空闲区使用回收区的地址;
回收区在空闲区中间方:将空闲区1、空闲区2和回收区合并;新的空闲区使用空闲区1的地址;
仅仅剩余回收区:为回收区创建新的空闲节点;插入到相应的空闲区链表中去;
4.2 存储管理之段页式存储管理
页式存储管理:将进程逻辑空间等分成若干大小的页面,相应的把物理内存空间分成与页面大小的物理块,以页面为单位把进程空间装进物理内存中分散的物理块。
页面大小应该适中,过大难以分配,过小内存碎片过多;页面大小通常是512B~8K;
现代计算机系统中,可以支持非常大的逻辑地址空间(232~264),具有32位逻辑地址空间的分页系统,规定页面大小为4KB,则在每个进程页表中的页表项可达1M(2个20)个,如果每个页表项占用1Byte,故每个进程仅仅页表就要占用1MB的内存空间。
段式存储管理:将进程逻辑空间分成若干段(不等分),段的长度由连续逻辑的长度决定。
页式和者段式存储管理相比:
段式存储和页式存储都离散地管理了进程的逻辑空间;
页是物理单位,段是逻辑单位;
分页是为了合理利用空间,分段是满足用户要求页大小由硬件固定,段长度可动态变化;
页表信息是一维的,段表信息是二维的;
段页式存储管理:现将逻辑空间按照段式管理分成若干段,再将内存空间按照页式管理分成若干页,分页可以有效提高内存利用率,分段可以更好的满足用户需求。