2012-09-18 39 views
0

嘿,我有一个问题和答案,但我不能理解答案的第二部分! 可以在这里的任何1请帮助我?操作系统和内存管理(理论)

这里是:

问题;

计算机有32位虚拟地址和4 K.B页面。程序和数据一起放入最低页面(0-4095)堆栈适合最高页面。如果使用传统(单层)分页,页表中需要多少条目?两级分页需要多少页表条目,每部分有10位?

答案;

对于一个级页表中,有2^32/2^12或需要1M页面。因此 页表必须有1M条目。 对于两级分页,主页面表 有1K个条目,每个条目指向第二个页表。只有两个 这些被使用。因此,总共只需要三个页表项,一个在顶层表中,另一个在每个较低层表中。

我无法理解的加粗。例如我不能理解这个1K是怎么出现的。

感谢您的时间,

干杯!

+0

10位中的每个部分= 2^10个条目= 1024个条目= 1K条目 –

+0

确定我有这部分。那么它就会说“每个表都指向第二个页表,其中只有两个被使用。因此总共只需要三个页表条目,一个在顶层表中,另一个在每个低层表中。 “为什么只有其中两个使用(这些什么?条目?)我不能理解这一点。 –

+0

好吧,现在看来我理解页面号和页面上的条目之间的相关性。任何人 ? –

回答

5

我想,因为你使用的不是问题的情况下回答问题的第一部分是错误的:The program and data toget­her fit in the lowest page (0-4095) The stack fits in the highest page。因此,虽然页表项的总数为1048576,但在那些只使用2个项目的页面中,对于这2个页面中的每一个(代码/数据页面的条目0点,条目1048575指向堆栈页面)。

对于你给出一个非常有用的提示问题的第二部分:two-level paging, with 10 bits in each part。但首先,让我们回到上面,简单的情况......

在案例1中的一个页表,虚拟地址:

  1. 有32位(列为A computer has 32-bit virtual addresses
  2. 其至少12显著位指示在页面中的位置(列为A computer has ... 4-K.B pages,也为fit in the lowest page (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位来选择页面中的一个字节。

但是有什么新东西?这是two-level paging, with 10 bits in each part

这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页。

在代码/数据页指向的位置的虚拟地址(二进制):

0000000000|0000000000|xxxxxxxxxxxx 

,并在堆叠页指向虚拟地址(二进制以及):

1111111111|1111111111|xxxxxxxxxxxx 

由此您可以看到,您正在使用2级不同的页面表条目(由索引0000000000和1111111111选择)以及类似2级的2个不同页表条目。

因此,在案例2中总共需要2 + 2 = 4页表格条目才能运行该程序。

P.S.如果你不记得:2 = 1024,2 = 4096,2 = 1048576