计算机操作系统汤小丹第四版P142,书上原话如下:
对于一个具有32位逻辑地址空间的分页系统,规定页面大小为4KB,则在每个进程页表中的页表项数可达1M, 又因为每个页表项占用一个字节,故每个进程仅仅其页表就要占用1MB的内存空间。
看到红字这里我百思不得其解,页表项怎么就一个字节了?一个页表项由页号和块号组成,就算页号隐含的话,块号也需要20位(1M)才能表示啊,最少也要3个字节,怎么一个字节就能表示了呢?
在网上查了好久,最终是CSDN论坛的一位大佬解答了我的疑惑,打开的页面太多,找不到原问题的链接了。。感谢这位大佬!
大佬的解答加上我自己的理解如下:
如果也有人的思路和我上面描述的一样的话,那么我们都犯了一个很严重的错误:弄混了物理地址和虚拟地址。
页号是虚拟地址,是虚页;而块号是物理地址,是实块,所谓虚拟地址是计算机的逻辑空间的地址
虚拟地址容量和物理地址容量一点关系都没有,即页号和块号的数量也是无关的
因为物理地址是由cpu地址总线的宽度决定的。
比如,16位的cpu的逻辑空间的地址是216 ,但因为其地址总线宽度为20,所以物理地址空间是220
32位的cpu的逻辑地址空间是232,但它的地址总线可以是36位,所以物理地址空间是236
回到这一句话“页表项占用一个字节”上来,4KB的页面大小,说明页内偏移地址是12位,相应的物理地址的块内偏移地址也是12位,页表项占用一个字节即8位,说明只有28个块(块号8位),也就说这个32位的cpu,其地址总线有20位(12+8)
再看144页,也有类似的表述,总结一下是这样说的:有一个64位的机器,页面大小4KB,页表项长度4B,这又是怎么得出来的呢?
页面大小4KB,即12位页内偏移地址,块内偏移地址也是12位,页表项长度4B说明块号有32位,即这个64位的机器的地址总线长度是44位。
综上所述,页表项的大小就是块号的位数,而这个数与逻辑空间大小无关,在无法得知地址总线位数的情况下,无法推知页表项大小;若是已知页表项大小及页面大小,倒是可以推出物理地址空间的大小和地址总线位数。
计算机操作系统汤小丹版P142 “一个具有32位逻辑地址空间的分页系统,每个页表项占用一个字节”的解释与思考
最新推荐文章于 2024-01-26 21:12:34 发布