离散分配:允许将一个进程分散地分配到许多不相邻接的分区中,高效利用分区空间,不必再进行紧凑的方式。
离散分配的三种方式
- 分页存储管理方式:将用户程序的地址空间按“页”或“块”进行分割(固定大小,如1kB),同样地,将内存空间也按“页”或“块”进行划分,这样便可以分散地将用户程序的任一页放入内存空间中
- 分段存储管理方式:将用户程序的地址空间分为若干个大小不同的段,每段都有一组相对完整的信息。
- 段页式存储管理方式:以上两种方式的结合,目前应用广泛。
分页存储管理方式
1. 页面和物理块
- 页面:进程的逻辑地址分为若干个页,并给予编号(0,1)。内存的物理地址分为若干个块,同样也有编号(0#,1#)。一个物理块可以装入若干个逻辑页。
- 页内碎片:由于最后一页经常填不满一个块所产生的不可利用的空间。
- 页面大小:
- 太小:空间利用率高,但是会有很多页面,导致页表过长,页面换入换出频繁,占用大量内存。
- 太大:空间利用率低,减少页面,缩短页表,提高换入换出速度,但是会增加页内碎片。
- 大小的选择:大小应该是2的幂,通常为 2KB ~ 8 KB
2. 地址结构
3. 页表
- 解释:系统为进程创建一张页面映射表,可以将页号对应到物理块。
地址变换机构
- 基本任务:完成逻辑地址到物理地址的转换。
- 因为页内地址和物理块内的地址是一一对应的,所以实际上是将页转化为物理块号。借助于页表。
- 页表寄存器
- 页表始址: 页表在内存中的起始位置
- 页表长度: 页表的长度
- 变换过程:
- 先将逻辑地址转化为页号 p 和页内地址 d。页号用来检索页表。
- 如果 p 大于 页表长度,则发生越界中断
- 否则得到物理块号 = 页表始址 + 页表长度 × 页号
- 将物理块号放入物理地址寄存器,再将页内地址送入物理地址寄存器
- 逻辑地址到物理地址的变换结束
- 具有快表的地址变换机构
- 出现原因:基本地址变换机构是处理机的速度降低了 1/2(存取一个数据时要访问两次内存)
- 快表:特殊的高速缓存寄存器,又叫“联想寄存器”
- 变换过程
- 先将页号p送入告诉缓存寄存器,如果缓存器中有与 匹配的页号,则表示p的物理块号在快表中,直接得到物理快号。
- 如果没有匹配的页号,则去内存中寻找页表。找到后将此页表号放入快表中。(需要找一个老的页号换掉)
- 将物理块号放入物理寄存器中。
访问内存的有效时间
- 有效访问时间( ): 进程发出指定逻辑地址的请求,经过地址变换,到内存中获得实际物理地址单元的数据的时间。
假设一次访问内存的时间为 t, 命中率为a, 查找快表的时间为 lambda
- 基本的地址变换结构中的
- 具有快表的地址变换结构中
两级页表和多级页表
-
出现目的:解决页表占用内存太大的问题
-
方式
- 采用离散分配方式(多级页表)。
- 当需要某个页表时,再请求调入该页表。
-
两级页表
- 外层页表:其页表项记录页表页面(页表)所在的物理块
- 外层页内地址:页表的地址,最大地址在数值上表示一个外层页表可以记录的最大页表数
-
多级页表
反置页表
- 反置页表:为每一个物理块设置一个页表项,并将他们按物理块的编号排序