2012-04-06 75 views
0

据我所知,(英特尔)虚拟地址转换过程为:如何翻译虚拟地址?

1.传入虚拟地址被分为页表号,页号,和偏移量。

2. CPU中的进程desriptor基址寄存器(PDBR)告诉目录开始的位置。

3.页表号被乘以4以用作目录的偏移量,并且查找目录条目。

4.该目录条目包含页表的地址,以及有效性和保护信息。如果此信息表明页表不在内存中或者保护不正常,则转换停止并引发异常。

5.将页码乘以4以用作页表中的偏移量,并查找页表项。

6.页表项包含页面地址,有效性和保护信息。如果此信息表明页面不在内存中或者保护不正常,则翻译将停止并引发异常。

7.偏移量用作页面的索引。

8.数据在最终到达的地址。

这都有道理高达第6步在那里我感到困惑,因为 表项格式仅指定,这意味着它只能访问最多1兆字节物理页帧地址20位,或者它左移12位(乘以4096:页面大小)才能访问4千兆字节

回答

0

这是32位翻译过程。每个页表项是32位,但低12位用于标志。高20位是页面地址。

+0

是的,但这并不意味着页面必须在1兆边界(2^20)内? – 2012-04-06 04:44:43

+0

没有。所有页面从4K边界开始,所以没有理由存储低12位。 – stark 2012-04-06 04:54:29

+0

所以20位确实被左移了12位 – 2012-04-06 04:56:57