确定给定地址的页码和偏移量
Posted
技术标签:
【中文标题】确定给定地址的页码和偏移量【英文标题】:Determining page numbers and offsets for given addresses 【发布时间】:2013-07-12 21:00:53 【问题描述】:考虑一个具有 32 位逻辑地址和 4KB 页面大小的计算机系统。系统支持高达 512MB 的物理内存。
传统的单级页表中有多少条目?
Conventional single-level page table: 2^32 / 2^12 (4000) = 2^20 = 1,048,576
为什么我必须divide 2^32 / 2^12
才能得到答案?
倒排页表有多少个条目?
倒排页表需要与页框一样多的条目 在内存中。
Inverted page table: 2^29 (512mb)/ 2^12 (4000) = 2^17 = 131,072
为什么我必须divide 512mb / page size
才能获得倒排页表条目?
以下地址的页码和偏移量是多少 参考:a) 30000, b) 256, c) 0xbcf034
a) 30000(十六进制):x7530 页号:x7 = 7 偏移量:x530 = 1328
b) 256 in hex x100 页号:x0 = 0 偏移量:x100 = 256
c) 0xbcf034 页面#:xbcf = 3023 偏移量:x034 = 22
如何根据十六进制地址计算出这些页码和偏移量?
我知道答案,但我想了解为什么和如何。谁能详细解释一下:)
【问题讨论】:
在倒排页表中,所有的帧都被映射而不是页。因此,倒排页表中的条目由总帧数组成,这就是你正在计算的。 PS:4K 不是 4000 :-) 【参考方案1】:2^12 => 4096 2^32/2^12 => 2^32/4096 => 有多少 4K 页 => 我们需要多少页表条目。
物理页表的类似计算,即倒排页表需要多少页表条目。
根据上述提示,试一试问题,让我们知道您的想法。一旦您在操作系统课程中学习了更多内容,您就会发现每种页表设计都各有利弊。
【讨论】:
为什么需要知道倒排页表的物理页表项? PS - 谢谢 为此,您需要学习一些关于倒排页表的理论......一个快速的答案是倒排页表的大小与系统中的物理页数成正比。正常(或逻辑)页表的大小适用于进程的整个虚拟地址空间,即进程中虚拟页数的大小。即倒置页表:一个物理页一个条目;逻辑或虚拟页表:一个虚拟页的一个条目。希望对您有所帮助。【参考方案2】:给定页面大小和地址引用: 计算页码和偏移量的最佳方法, 假设页面大小为 1KB,地址引用为 256。
Page number = (address reference / page size) = 256/1024 = 0
Offset = (address reference % page size) = (256 % 2014) = 256
对其余地址引用应用相同的过程。
【讨论】:
【参考方案3】:为什么我必须除以 2^32 / 2^12 才能得到答案?
2^32 ==> 总虚拟内存大小
4KB=2^12 ==>单页大小
2^32 / 2^12 =2^20 ==> 虚拟内存总页数
所以页表将有 2^20 = 1M 个条目
倒排页表中有多少条目?
2^29=512MB ==> 总物理内存
2^12 = 页面大小 = 帧大小
2^29 / 2^12 =2^17 ==> 物理内存中的总帧数
所以倒排页表将有 2^17 = 128K 个条目
这个图。可能会清除您剩余的疑虑:
【讨论】:
怎么样:一个两级分层页表有多少个条目?【参考方案4】:因为页面大小 = 帧大小 = 2^12 倒排页表中的条目数 = 帧数 所以我们正在计算帧数
【讨论】:
以上是关于确定给定地址的页码和偏移量的主要内容,如果未能解决你的问题,请参考以下文章
为啥 16 位地址和 12 位偏移量会导致 4KB 页面大小?
如何在 Codeigniter 分页中使用页码而不是偏移量?