我目前正在进行一些关于虚拟内存概念的练习。但是,我不确定我是否理解正确,或者问题是否如此微不足道,以至于我只是担心太多:
系统正在处理20位宽的虚拟地址。 页面大小为4096字节,使用单级分页 a)虚拟地址空间的大小是多少?
b)可寻址物理内存的大小是多少?
我会说两个问题的答案是一样的,它是2^20
字节。我无法处理比虚拟地址空间更多的物理内存。
答案 0 :(得分:2)
一般来说(作为类问题的答案),你是对的(*)。您的可寻址物理内存与虚拟内容的大小相同。
首先是V2P翻译的重点。另外,请注意:如果您的虚拟地址更多,那么在您的程序中,您可能已经分配了永远不会到达RAM 的空间,因此这将是无用的,更不用说灾难性的了。另一方面,如果您可以映射更多地址而不是虚拟内存,那么物理空间会浪费,所以也没有意义
最后,要完全确定,您实际上可以自己进行翻译并计算:
从这20位中,你需要 12 来映射同一页面内的地址(2^12 = 4096
,这是你页面的大小),你可以使用 8 剩下的位用于枚举/映射 Page Table 中的PTE。因此,您可以拥有2^8 = 256
个PTE,并且每个条目"都有"一页4096字节,总共有(2^8) * (2^12)
= 2 ^ 20字节,与你计算的相同。
编辑:我所描述的翻译流程仅适用于问题中提到的一级页面表格。今天规范的两级分页在步骤之间需要另一个。
(*):请参阅 user3344003 的答案和评论,但这提供了一些有关为什么并非总是如此的更多信息
答案 1 :(得分:1)
实际上,某些系统允许比虚拟地址空间更大的物理地址空间。 32位英特尔就是一个例子。
进程只能访问由地址中的位限制的内存范围,但系统可以通过使用字节页来访问相同位数的更大范围的内存。