【操作系统】基于一道操作系统题的二级页表地址转换原理,及转换过程整理

学习过程中做到一道题

在网络上看到有关书本比喻的解答(见链接网站第一条回复,链接:某计算机采用二级页表的分页存储管理方式,按字节编址,页面大小__牛客网),其回答不仅绕弯,还使简单问题复杂化。自己思考清晰后,决定基于这道题的数据,对二级页表逻辑地址到物理地址的转换过程做一次小结,如下:

先来看二级页表地址转换的原理

首先我们要知道,为什么会有地址转换?为什么要有二级页表?

表示逻辑地址的内存内容,如果连续地存储在物理内存中,太大了,比如linux X86平台的逻辑地址共有32位,也就是4GB空间,要在物理内存中找到一片连续的4GB空闲空间是困难的。因此人们想到把逻辑地址内存按一页一页拆开,一页一页分散地存放在物理内存中。
逻辑地址一大块内容,按照1024B大小的内容为一页划分,划分出2^{16}(64K)页。另拿一个页表来记录这逻辑地址中,划分出来的每一页,对应物理内存中的哪一页框,因为逻辑地址中划分出来了 2^{16} 页,所以这页表要记录 2^{16} 条,每一条2B,所以这个页表大小为:

2^{16}\cdot 2= 2^{17}

2^{17}B。这个页表也放在物理内存中。

现在,这个页表太大了,把它也按一页一页拆开,一页一页分散地存放在物理内存中。
把这个页表也按照1024B大小的内容为一页划分,划分出 2^{17}\div 2^{10}= 2^{7} 页,再拿另一个,叫做页目录表的表,来记录这页表中划分出的每一页,对应存放页表的物理内存中的哪一页框,因为页表中划分出来了 2^{7} 页,所以这页目录表中自然要记录 2^{7} 条,如果一条页目录表项为 n B,还能知道这页目录表大小为 (2^{7}\cdot n) B。这个页目录表也存放在物理内存中,页目录表的地址在C3寄存器中,固定的。本来挺简单的东西,经过这书本一比喻,反而不清晰了。

现在,逻辑地址内存划分为 2^{16} 页,每页 2^{10} 条地址,一共要可以表示 2^{16}\cdot 2^{10}= 2^{26} 条地址,所以逻辑地址有26位。
页目录表里有多少条记录?2^{7} 条,所以为了能表示页目录表中的每一条,页目录表要走7位。
页目录表里的每一条记录指向页表中的一页(即:一个页表页),页表的一个页表页中有几条记录? 2^{10}\div 2= 2^{9} 条,所以为了能表示一个页表页中的每一条,页表页要走9位。
最后10位就是页内偏移(或者页内位移,我一直认为是同一个意思,毕竟ctf的pwn题中经常用到地址偏移,那是后话了),这在地址转换中的最后会用到。

最后来看地址转换

因此,拿到一条26位的逻辑地址时:

先看首7位,锁定了页目录表中的哪一条,即锁定了页表中的哪一页;

再往后看9位,锁定了页表中的这一页(这一个页表页)中的哪一条记录,这记录就锁定了该逻辑地址在物理内存中对应的页框号,假设是m;

那么,m*页框大小(本题中,2^{10}B)+页内偏移=物理地址,这就是我们最终得到的物理地址了。 

以Intel x86平台32位逻辑地址为例

最后,看一个例子做总结(也是做到的题目啦),如下图:

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值