操作系统导论习题解答(20. Advanced Page Tables)

Paging: Smaller Tables

这章解决page带来的第二个问题:page table太大,会占用太多内存。

1. Simple Solution: Bigger Pages

一种非常简单的方法就是虚拟地址位数不变的情况下,增大page的大小,这样page的数量就会减少,相应的page table就会变小。但是这引入了一个问题,就是page太大的话,未使用的地址空间就会增多,简而言之就是地址空间浪费了,这就是内部碎片化(internal fragmentation)的原因。这没有很好的解决我们的问题。

2. Hybrid Approach: Paging and Segments

第二种想法就是结合segmentation和page以减小page table的开销。
举个例子。16KB地址空间和1KBpage大小:在这里插入图片描述page table如下在这里插入图片描述
根据上图有:(VPN = 0) --> (PFN = 10)
(VPN = 4) --> (PFN = 23)
(VPN = 14) --> (PFN = 28)
(VPN = 15) --> (PFN = 4)

其中阴影部分都是代表未使用(浪费)的空间!!!!!!

因此,为了减少浪费,我们不对整个地址空间使用page table,而是在每个逻辑段(code、heap、stack)中使用一个page table,所以应该有三个page table。

对于segmentation,有一对base/bounds register。在我们的这种混合方式中,base register指向对应逻辑段page table的物理地址的起始位置,bounds register指向末尾。

举个例子更容易理解。假定一个具有4KBpage的32位虚拟地址空间,并将一个地址空间分成四个段,我们仅仅使用三个段,code、heap和stack。

为了确定地址所指的逻辑段,我们使用前2位表示逻辑段,则32位虚拟地址如下:

在这里插入图片描述
当TLB Miss时,硬件使用前2位(SN)来确定选取哪个逻辑段及其基准和边界。
然后通过VPN选取对应的PFN,最后结合offset确定目的地址。
代码如下:在这里插入图片描述
通过这种混合方法,节省了大量内存并且逻辑段之间未分配的page不再占有page table中的空间(只是将其标记为无效)
但是这种方法仍然存在问题,segmentation不灵活,如果有一个很大但很稀疏的heap,会导致外部碎片再次出现。

3. Multi-level Page Tables

多级页表的基本思想很简单。首先,将页面表切成页面大小的单位;那么,如果整页的页表条目(PTE)无效,则根本不要分配该页表中的该页。若要跟踪页表的页是否有效(如果有效,则在内存中的位置),请使用称为页目录(page directory)的新结构。因此,页面目录可以用来告诉您页面表的页面在哪里,或者页面表的整个页面不包含有效页面。在这里插入图片描述
增加了page directory后,我们可以先查看page directory看请求的内存是否有效,如果有效再给其分配page table,这样减少了空间浪费。
但是这也引入了一些问题,首先是加载开销增加了。TLB Miss后,硬件需要首先进行page directory的地址转换,然后再进行page table的地址转换。第二个问题就是复杂性,地址转换两次(或更多)变得更复杂了。

A Detailed Multi-Level Example

话不多说,上例。
假设有一个16KB大小的虚拟地址空间,page大小为64字节。故虚拟地址空间14位,其中8位用于VPN(page table有28个entry),6位用于offset。如下所示:

在这里插入图片描述
由于有256(28)个entry,假设每个entry为4个字节,因此,page table的大小为256 X 4 = 1KB。
由于page大小为64字节,则1KB可以分为16个64字节的page,每个page可以容纳16个PTE(page table entry)。
我们首先需要对page directory进行索引,由于有16个page,故用4位进行page索引。用VPN的前四位,如下所示在这里插入图片描述
通过PDI(page directory index)查找对应的PDE。如果PDE(page directory entry)无效,那么我们知道该访问无效,因此引发异常;如果PDE有效,那么从PDE指向的page table的page中获得PTE,该PTE就是用VPN余下的位数确定。

如下所示在这里插入图片描述
虚拟地址0x3F80,对应二进制表示如下:在这里插入图片描述
我们结合下表看一下。第一步,PDI = 15(二进制1111),看左边的Page Directory, PFN从上至下序号依次为0到15,则PDI = 15选择PFN = 101,由于valid = 1有效,可以选取。则跳转到最右边的@PFN:101
第二步为PTI = 14(二进制1110),我们可以看到PFN = 101的page的第14个PFN = 55,由于valid = 1有效,可以选取。
最后通过将物理地址55(0x37)与offset = 0结合就得到了最后的实际物理地址。在这里插入图片描述

More Than Two Levels

其实page directory就和计算机磁盘目录类似。当上述情况(分两级)也无法满足的情况发生时,就可以给目录再创建一个目录,还不满足就一直套娃下去。

分析下图

在这里插入图片描述
PD Index 0是为了索引PD Index 1,PD index 1然后再索引Page Table Index。

The Translation Process: Remember the TLB

在这里插入图片描述
不论怎样,进行地址转换的时候,硬件首先都会检查TLB,如果TLB Miss,才会检查page table。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值