4.多级页表及反向页表
现代计算机系统都支持非常大的逻辑地址空间,致使页表很大,用连续空间存放页表显然不现实。
如逻辑地址32位,页面大小4KB,则页表项为1M,若每个页表项占4字节,则页表共需要4MB内存空间。
解决方案:
用离散方式存储 页表
仅将当前需要的部分页表项放在内存,其余放在磁盘上,需要时调入。
两级页表及多级页表
将页表再分页,使每页与内存物理块大小相同,并为它们进行编号0、1、…,同时还为离散存放的页表建立一张页表。
例如:32位地址可以划分为
两级页表结构
具有两级页表的地址变换过程
利用逻辑地址中的一级页号作为索引访问一级页表,找到第二级页表的起始地址,
再利用第二级页号找到指定页表项,从中取出块号与页内地址拼接形成物理地址。
具有两级页表的地址变换机构
多级页表
对两级页表进行扩充,便可得到三级、四级或更多级的页表。
多级页表的实现方式与两级页表类似。
反向页表
现代操作系统 一般允许大逻辑地址空间,如232,这使得页表太大,为解决页表占用大量存储空间的问题,引入了反向页表。
反向页表为每个物理块设置一个页表项,并将它们按物理块号大小排序,表项内容为页号及其隶属进程的标识号。
反向页表地址变换过程
利用进程标识号及页号检索反向页表,若找到相应的页表项,则将其物理块号与页内地址拼接;否则请求调入该进程相应页,在无调页功能的系统中则出错。
由于反向页表中没有存放进程中尚未调入页,因此必须为每个进程建立一张传统页表并存放在外存中,当所访问页不在内存时使用这张页表。页表中包含各页在外存的地址。
反向页表的地址变换
反向页表的不足
反向页表查找慢:因为进程号及页号不能作为索引,查找时必须在整个反向页表中进行。
解决办法:
将常用页表项存入快表
用散列函数存放反向页表
5.存储保护
分页存储管理采用两种方式保护内存:
地址越界保护:页表长度与逻辑地址中的页号比较
存取控制保护:在页表中增加保护位
7.5 分段管理
由于分页按物理单位进行,没有考虑程序段的逻辑完整性,给程序段的共享和保护带来不便,另外动态链接及段的动态增长也要求以逻辑上完整的程序段为单位管理。
1. 分段管理的原理
在分段存储管理系统中,作业的地址空间由若干个逻辑分段组成,每个分段是一组逻辑意义相对完整的信息集合,每个分段都有自己的名字,每个分段都从0开始编址并采用一段连续的地址空间。
在进行存储分配时,以段为单位分配内存,每段分配一个连续的内存区,但各段之间不要求连续。
作业的地址空间是二维的
作业的地址空间分为多段,每段都从0开始编址,故地址是二维的。
分段系统的逻辑地址结构
该地址结构最多允许多少分段?每段最大长度为多少?
该地址结构允许作业最多有64K个段,每段的最大长度为64KB。
转自 http://www.csaiky.com/rjxy/200804281009101332.htm