物理地址空间:硬件支持的地址空间。
逻辑地址空间:在CPU运行的进程看到的地址。
逻辑地址空间>物理地址空间
一、连续内存分配:
1.匹配策略:
最先匹配策略:空闲分区列表按地址顺序排序,遇到第一个大于所需空间的空闲分区就分配。
最佳匹配策略: 空闲分区列表按从小到大排序,遇到第一个大于所需空间的空闲分区就分配(即大于所需空间的空闲分区中 空间最小的一个分区)。
最差匹配策略:空闲分区列表按从大到小排序,分配第一个空闲分区(即最大的空闲分区)。第一个都小于所需空间的话,则没有空间分配。
2.碎片整理:
紧凑:应用程序可动态重定位的时候,就把应用程序的地址合并在一起,这样碎片就整合成一块大的空闲分区。
分区对换:当内存中有处于等待状态的进程时,其他运行的进程可以抢占该等待状态进程的分区,该等待状态的进程移动到硬盘中等待,运行的进程就可以在内存
中运行了。
3.伙伴系统:
空闲块按大小和起始地址组织成二维数组,第一维是按大小区分,第二维是在大小相同的情况下按地址区分。初始状态是一个2的幂次方的空闲块, 由小到大在二维数组中找最小的可用空闲块,如空闲块过大,则对空闲块二等分,直到找到合适的空闲块。即再二等分就小了,不二等分又大了,这样就可以分配了。
二、非连续内存分配:
1.段式存储管理:
段的大小可能不一样,可以把进程分为代码段,堆栈段,初始化数据段等。
根据(s,addr)来寻址内存中的相应数据。
2.页式存储管理:
页帧,帧,物理页面。
页面,页,逻辑页面。
3.快表:
快表利用缓存机制,在CPU寄存器里缓存近期访问的页表项,减少对内存的访问,从而使物理页帧的查找速度得到提高。
4.多级页表:
多级页表利用间接引用的方式,将页表分为多级进行访问,从而减少了页表的长度。
当各级页表都存在时,页表所占的内存容量并不会因为使用多级页表而减少。但是进程的页表一般不是全部占满的,所以会空出一些页表项,减少了页表所占的 内存空间。
每一级页表项保存着下一级页表的起始地址,然后根据下一级页表项的偏移量得到下一级页表项的地址。这样一级一级的下去,直到找到物理地址。
5.页寄存器和反置页表
正常的页表是 每一逻辑页对应页表中的一项,页寄存器和反置页表则是 每一物理帧对应页表中的一项,这样随着进程的增加,即使逻辑页的数量增加,页表的长
度也不会增加。页表的长度只与物理帧的大小有关,经过计算,占物理内存的容量很小。
6.段页式存储
段式存储在内存保护方面有优势,段与段之间基本很少互相访问。
页式存储在内存利用和优化转移到后备存储方面有优势。
将两者结合,即段页式存储。先根据段号找到相应的段,再根据页号(一级或多级)找到最终的物理地址。