下面我们来介绍反置页表
反置页表也是一种
为了减少页表所占用
存储空间的一种做法
那它是怎么做的呢
提出反置页表的原因
还是说我们多级页表
它访问存储空间的次数比较多
然后特别是在大地址空间的情况下
那这时候呢
由于大地址空间和多级页表
它和逻辑地址空间
的大小呢有对应关系
每一个逻辑页面
都会对应着页表项的一项
那这样的话我的进程数目的增加
都会导致你页表的数目
占用的空间增大
好 针对这种情况呢
反置页表和页寄存器
是两个类似的做法
那它们在这里头做法是
让页表项和物理地址空间
的大小相对应起来
而不是说像多级页表里
和逻辑地址空间相对应起来
那这样的话 你的进程数目的增加
和虚拟地址空间的增大
都对这页表占用的空间没有影响
下面我们来讨论页寄存器的实现
那么在页寄存器里头呢
它是把每一个物理帧
和一个页寄存器相对应
那在这个寄存器里头
存的内容有些啥呢
一个是 这个物理帧
是否被某一个进程占用
这是使用位
第二个就是页号 占用页号
那么在这个
占用页号相当于
我一个进程占用了这一页
它的逻辑页号是多少
那我在这里头给它保存
那这样的话我就知道
这个物理帧它分配给了哪一个进程
它的逻辑地址是多少
另外还有一个保护位
是来约定这一页的访问方式
你比如说可读 可写
有了这样一种对应关系之后
我们看它占用的存储的情况
在这儿通过一个例子来说明
在这个例子当中呢
它整个系统里有16M的物理内存
然后页面大小呢是4K
那这时候呢16M 4K
那这时候呢我有4096个页面
好 那这4096个页面
它的页寄存器占多大呢
那在这儿是说 假定
每一个页寄存器占8字节
那4096乘8是32K字节
那这32K字节
和16M物理内存比较起来呢
占到的比例是0.2%
那这个比例相对来说还是比较小的
那这时候 它和虚拟内存的大小
就没有关系了
那这时候我在里创建多少个进程
它只是每一个物理页面
和一个页寄存器相对应
那这是它占用存储的情况
那具体说起来这样的话
这种方法它的好处是说
我跟物理内存相比较起来
它占用的空间比较小
而且和逻辑地址空间没关系
但是它也有很大的麻烦
它的麻烦是什么
在多级页表里头
我们这个信息查询呢
我是从逻辑页号到物理页号
利用下标查里头的内容
我就可以找到它的页帧号
而现在呢我排序的办法呢是页帧号
我要从 找的是里头的逻辑页号
是否是我想找的那个
那这样的话
就要在页寄存器里头进行搜索
那这个搜索是会比较困难的
下面我们来讨论
页寄存器机制的地址转换
CPU生成的是逻辑地址
那在页寄存器机制下
它所对应的物理地址是多少呢
那么这个多少呢
是把逻辑地址做Hash
Hash的原因是这样
我可以减少搜索范围
然后呢如果说有冲突
Hash之后的值 它可能是
两个不同的逻辑地址
对应到同一个Hash值上
那这种情况下Hash值相同
那这时候我就会产生冲突
这种冲突是需要解决的
好 这时候呢
我们可以利用快表来和
这个页寄存器机制搁到一起来用
那么这时候的做法什么呢
逻辑地址进行Hash
然后在快表当中去查找相应的页表项
如果说查找的过程当中出现冲突
这时 我就需要遍历所有的冲突链表
好 如果说查找不到
那么这时候呢它就会出现异常
好 那么在这里头
它也有一个问题
和我们前面的快表是一样的
由于快表它的容量有限
这时候呢快表的功耗又很大
这对于我们页寄存器机制
还是有很大影响的
比如说在这里说到StrongARM上的
快表的功耗占到27%
这是不可以忽视的
好 接下来我们说反置页表
反置页表和页寄存器的做法的区别是
在于它把进程ID也考虑进来了
那它和页寄存器做法一样的
它需要进行Hash
不同的地方是把进程标识
也加在里头一块做Hash
Hash完的结果呢也可能会有冲突
那也需要解决冲突
那Hash完的结果呢
它是以页帧号来作为排序的
那我在这儿找到的结果是说
我需要到相应的页表项里去核对
Hash之前的结果和之后的
里头的进程ID和逻辑号是否一致
如果一致呢这就是我要找的那一项
我就可以得到相应的物理页号了
如果不一样
那这时候呢它就会产生冲突
那么对于冲突情况呢
我们以这个例子来说
一个逻辑地址加上它的进程ID
那我首先做Hash
Hash完的结果是在这儿
到相应的反置页表当中进行查找
看进程ID和逻辑页号
是不是跟Hash之前的一样
如果不一样那就是说明有冲突
这时候告诉你下一项在哪
这地方是有冲突
好 告诉你下一项
然后我再到下一项里头进行核对
这时候呢这两者跟那儿是一样的
好 那么这时候呢
我要找这个地方
它的序号就是我的页帧号，
好 页帧号和页内偏移合到一起
那就得到它的物理页号和页内偏移
那到目前为止呢我们介绍了三种做法
来缓解或者是解决页表所带来的麻烦
一种是快表 它是通过缓存的机制
来减少对物理内存 对页表的访问
第二种是多级页表
多级页表的做法呢
通过多级来减少页表的大小
反置页表是另一种减少页表大小的做法
这几种做法呢都可以有效的解决
或者是缓解我们引入页表所带来的麻烦
那在这些麻烦解决掉之后
我们现在用到计算机
都是采用这种页表的机制来进行转换的
那这是呢 我们说到的这个页存储机制