Memory management 操作系统和内存管理(理论)
嘿,我有一个问题和一个答案,但我不能理解答案的第二部分! 这里有人能帮我吗 这是: 问题, 计算机有32位虚拟地址和4-K.B页。程序和数据在最低页面(0-4095)中匹配,堆栈在最高页面中匹配。如果使用传统(一级)分页,页面表中需要多少次尝试?两级分页需要多少页表条目,每个部分10位 答复 对于一级页面表,需要2^32/2^12或1M页面。因此 页表必须有1M个条目对于两级分页,主页表 有1K个条目,每个条目都指向第二页表格。只有两个 这些都是用过的。因此,总共只需要三个页表条目,一个在 顶级表格和每个较低级别表格中的一个。 我不能理解粗体字。例如,我无法理解1K是如何出现的 谢谢你抽出时间Memory management 操作系统和内存管理(理论),memory-management,operating-system,theory,Memory Management,Operating System,Theory,嘿,我有一个问题和一个答案,但我不能理解答案的第二部分! 这里有人能帮我吗 这是: 问题, 计算机有32位虚拟地址和4-K.B页。程序和数据在最低页面(0-4095)中匹配,堆栈在最高页面中匹配。如果使用传统(一级)分页,页面表中需要多少次尝试?两级分页需要多少页表条目,每个部分10位 答复 对于一级页面表,需要2^32/2^12或1M页面。因此 页表必须有1M个条目对于两级分页,主页表 有1K个条目,每个条目都指向第二页表格。只有两个 这些都是用过的。因此,总共只需要三个页表条目,一个在 顶级
干杯 我认为,问题第一部分的答案是错误的,因为您没有使用问题的上下文:
程序和数据在最低页面(0-4095)中匹配,堆栈在最高页面中匹配。因此,虽然页表条目的总数是1048576,但在这些条目中,您只使用了两个条目,这两个页面中的每一个都有一个条目(代码/数据页面的条目0点和堆栈页面的条目1048575点)
对于问题的第二部分,您得到了一个非常有用的提示:两级分页,每个部分有10位
。但首先,让我们回到上面,更简单的情况
在使用单页表的情况1中,虚拟地址:
most significant bits least significant bits
| 10 bits = PT index | 10 bits = PT index | 12 bits = page index |
具有32位(计算机具有32位虚拟地址)
它们的12个最低有效位表示页面中的位置(计算机有…4-K.B页面,也可以是适合最低页面(0-4095)
)
剩下的20个最高有效位显然选择了页面表中的一个条目。所选页面表条目包含页面的物理地址
因此,虚拟地址如下所示:
most significant bits least significant bits
| 20 bits = index into the page table | 12 bits = index into the page |
因此,CPU使用以下公式访问内存:
PhysicalAddress = PageTable[VirtualAddress / 4096] + VirtualAddress modulo 4096
现在,让我们回到案例2
您仍然有12个LSB位来选择页面中的一个字节
但有什么新鲜事吗?它是两级分页,每个部分有10位
这10位是页表索引的长度,现在有两个
在此基础上,我们得出了虚拟地址的以下细分:
most significant bits least significant bits
| 10 bits = PT index | 10 bits = PT index | 12 bits = page index |
地址转换公式自然是:
PhysAddr = PageTable[VirtAddr / (1024*4096)][(VirtAddr / 4096) modulo 1024] + VirtAddr modulo 4096
现在,我们仍然有同样的程序,占2页
指向代码/数据页的虚拟地址为(二进制):
指向堆栈页的虚拟地址是(也是二进制的):
由此可以看出,您在级别1使用了两个不同的页表条目(由索引0000000000和1111111选择),在级别2使用了两个类似的页表条目
因此,在案例2中,程序运行所需的总页数为2+2=4页表条目
请注意,如果您不记得:210=1024、212=4096、220=1048576。我认为,问题第一部分的答案是错误的,因为您没有使用问题的上下文:程序和数据在最低页面(0-4095)中匹配,堆栈在最高页面中匹配。因此,虽然页表条目的总数是1048576,但在这些条目中,您只使用了两个条目,这两个页面中的每一个都有一个条目(代码/数据页面的条目0点和堆栈页面的条目1048575点)
对于问题的第二部分,您得到了一个非常有用的提示:两级分页,每个部分有10位
。但首先,让我们回到上面,更简单的情况
在使用单页表的情况1中,虚拟地址:
most significant bits least significant bits
| 10 bits = PT index | 10 bits = PT index | 12 bits = page index |
具有32位(计算机具有32位虚拟地址)
它们的12个最低有效位表示页面中的位置(计算机有…4-K.B页面,也可以是适合最低页面(0-4095)
)
剩下的20个最高有效位显然选择了页面表中的一个条目。所选页面表条目包含页面的物理地址
因此,虚拟地址如下所示:
most significant bits least significant bits
| 20 bits = index into the page table | 12 bits = index into the page |
因此,CPU使用以下公式访问内存:
PhysicalAddress = PageTable[VirtualAddress / 4096] + VirtualAddress modulo 4096
现在,让我们回到案例2
您仍然有12个LSB位来选择页面中的一个字节
但有什么新鲜事吗?它是两级分页,每个部分有10位
这10位是页表索引的长度,现在有两个
在此基础上,我们得出了虚拟地址的以下细分:
most significant bits least significant bits
| 10 bits = PT index | 10 bits = PT index | 12 bits = page index |
地址转换公式自然是:
PhysAddr = PageTable[VirtAddr / (1024*4096)][(VirtAddr / 4096) modulo 1024] + VirtAddr modulo 4096
现在,我们仍然有同样的程序,占2页
指向代码/数据页的虚拟地址为(二进制):
指向堆栈页的虚拟地址是(也是二进制的):
由此可以看出,您在级别1使用了两个不同的页表条目(由索引0000000000和1111111选择),在级别2使用了两个类似的页表条目
因此,在案例2中,程序运行所需的总页数为2+2=4页表条目
如果你不记得的话,请注意:210=1024,212=4096,220=1048576。10位每部分=2^10条目数=1024条目数=1K条目数我得到了这部分。然后它说“每一个都指向第二个页面表格。只使用了其中的两个。因此总共只需要三个页面表格条目,一个在顶级表格中,一个在低级表格中。”为什么只使用其中的两个(这些是什么?条目?)我根本不明白。好吧,现在看来