当前位置:新励学网 > 秒知问答 > PTE考试如何找到相对应的pte

PTE考试如何找到相对应的pte

发表时间:2024-08-21 15:40:59 来源:网友投稿

我们首先明确一下这个问题 也就是说你需要通过线性地址(因为开启了分页,这里也可以叫虚拟地址,我们下文都将这样称呼,假设需要找到虚拟地址vaddr)vaddr来找到对应它的PTE指针。

我们知道通过虚拟地址vaddr,我们经过页变化可以找到一个确定的物理地址phy_vaddr。现在我们想要找到的是指向这个phy_vaddr的pte指针,由于页表,页表项这些都是存在于内存中的,所以其对应的是实在的物理地址。于是我们现在的目的就是:通过一个虚拟地址得到物理地址。

嗯,听起来就让人很激动呀?

让我们先来回顾一下处理器处理 32 位地址的三个步骤: (1)首先处理高 10位 的 pde索引,从而处理器得到页表物理地址。 (2)其次处理中间 10 位 的 pte 索引,进而处理器得到普通物理页的物理地址 (3)最后是把低 12 位 作为普通物理页的页内偏移地址,此偏移地址加上物理页的物理地址,得到的地址之和便是最终的物理地址,处理器到此物理地址上进行读写操作。也就是说我们要创造的一个新的虚拟地址 new vaddr,它经过处理器以上三个步骤的拆分处理,最终会落到 vaddr 自身所在的 pte 的物理地址上。

第一步:高10位的构成

那么分析到这里,我们就需要知道一个知识点:在页目录表中,最后一个目录表项填的是页目录表自己的地址。

所以我们在构建新的虚拟地址的时候,在高10位,我们可以直接让其指向页目录表的最后一位,然后本该得到页表物理地址的我们得到的还是页目录表的物理地址。

即图中Dir我们让其指向Page Directory的最后一项,然后我们得到的还是一个指向Page Directory的指针,而并不是指向Page Table的指针。

由于页目录表也是4KB,所以为4*2^10 = 2^12 = 1024,由于其实下标为0,所以最后一个表项为1023,对应的16进制为0x3ff,将其左移到高10位后,变为0xffc00000

第二步:中间10位的构成

现在我们的指针是指向页目录表的,如果按照之前的规则的话,我们此时看图,应该是Table与上一个结果相加,得到Physical Address Space的地址,而我们最终想得到的是指向物理地址Phy.Addr的那个指针,也就是我们想知道的pte指针,那么这一步我们就应该找到Page Table的地址。

所以我们构造中间10位的时候,将原本的Dir作为偏移地址,这样通过其与第一步我们得到的页目录表的地址相加,就可以得到指向Page Table的指针,也就是我们要得到的页表的地址。

于是中间10位的构成为图中Dir的值

第三步:低12位的构成

我们现在已经有了指向Page Table的指针了,那我们如何找到指向物理地址Phy.Addr的那个指针呢?我们可以想一下,初始的时候我们是通过加上Table的值得到指向物理地址Phy.Addr的指针的,所以我们此时也是将其作为低12位。

但是这里又有一个问题了,其为10位,而我们需要的是12位,怎么办呢?我们通过将其左移2位,即可得到新的地址,即将其值乘以4即可。同样pde指针也是同理,大家自己可以思考一下哦??

免责声明:本站发布的教育资讯(图片、视频和文字)以本站原创、转载和分享为主,文章观点不代表本网站立场。

如果本文侵犯了您的权益,请联系底部站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!