免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2395 | 回复: 7
打印 上一主题 下一主题

[内存管理] [求证]《现代操作系统》一书中关于多级页表的是否有一处笔误 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-08 09:51 |只看该作者 |倒序浏览
小弟最近在看《现代操作系统》(第三版)的第三章<存储管理>时,看到P112页(或者第二版的P119页),分析二级页表时,感觉有些问题,不知道是不是作者笔误,还是我理解有误,现在特提出来,向各位大牛求证一下:

原文如下:
下面看一个示例,考虑32位虚拟地址0x00403004(十进制4 206 596)位于数据部分12 292字节处。它的虚拟地址对应PT1=1,PT2=2,Offset=4。MMU首先用PT1作为索引访问顶级页表得到表项1,它对应的地址范围是4M~8M。然后,它用PT2作为索引访问刚刚找到的二级页表并得到表项3,它对应的虚拟地址范围是在它的4M块内的12 288~16 383(即绝对地址4 206 592~4 210 687)。这个表项含有虚拟地址0x00403004所在页面的页框号。如果该页面不在内存中,页表项中的“在/不在”位将是0,引发一次缺页中断。如果该页面在内存中,从二级页表中得到的页框号将与偏移量(4)结合形成物理地址。该地址被放到总线上并送到内存中

上面这段话中,PT1=1,PT2=2,Offset=4

我自己分析:
虚拟地址0x00403004(十进制4206596),位于数据部分的12292字节处。
0x4206596 =:4*1024*1024 + 12292 = 4194304 + 12292 ,
所以,数据部分位于12292字节处。
地址0x4206596在PT1中是应该属于4M ~ 8M,因此在顶级页面中是1,所以PT1 = 1。
12292=1024*12+4 ,在PT2中是从4M开始的,所以在PT2的前三个是0K ~ 4K, 4K~8K,8K~12K,12K-16K,所以这个地址在二级页面中映射到第4表项,所以PT2 = 3,再加偏移量4,所以Offset = 4 。

由此分析可以得出:这里应该是PT2=3 ,他是在第4表项中有4个偏移量,书上写的是PT=2,是第3表项。这是怎么回事?

论坛徽章:
0
2 [报告]
发表于 2012-11-08 10:43 |只看该作者
自己顶一下,哪位大牛给小弟看看

论坛徽章:
0
3 [报告]
发表于 2012-11-08 15:38 |只看该作者
第一级页表大小是4M 第二级页表是4K 和你分析的一样,觉得书有问题
问一句,书上写的虚拟内存大小是16G吗

论坛徽章:
0
4 [报告]
发表于 2012-11-08 18:38 |只看该作者
回复 3# swsw23

书的分析的是32位的虚拟地址,也就是2^32=4G的虚拟地址

这个问题,怎么没有大牛来回答,难道真的是笔误,不会吧


   

论坛徽章:
0
5 [报告]
发表于 2012-11-09 12:39 |只看该作者
虚拟内存管理的不是 物理地址的几倍吗?

论坛徽章:
0
6 [报告]
发表于 2012-11-09 16:49 |只看该作者
回复 5# swsw23

你说的没错,但是书上分析的是32位系统,并没有说虚拟内存是多少,而Linux中虚拟内存的大小是你交换分区划分的大小,一般是实际物理内存的两倍,书中并没有提到实际物理内存是多少,所以,只能假定虚拟内存就是最大的物理内存4G,而且书上关于交换的那一节中,假设的64K的虚拟内存,32K的物理内存


   

论坛徽章:
0
7 [报告]
发表于 2012-11-10 11:38 |只看该作者
我看linux内核分析 分页管理和分段管理 32位的系统 虚拟内存最大好像是64G

论坛徽章:
0
8 [报告]
发表于 2012-11-10 21:45 |只看该作者
回复 7# swsw23

linux内核分析?是哪本书能不能具体说一下,我看一看
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP