页表由多个页表项组成,即页表中每一行的就是一个页表项。
页表项中记录的信息:
页表项一般是由硬件设计的,因为地址转换时大多数是由硬件完成的。
引出页目录:
对于32位虚拟地址空间,假设页面大小为4K,页表项大小为4字节:
一个进程有 4G/4K = 2^20个页面
因为一个页面需要一个页表项来对应,所以,进程的页表项个数也为2^20个
不难得出该进程的页表占用了 2^20 * 4 / 4K = 1024个页面的大小
对于64位的虚拟地址空间来讲,页表规模更大,理论值32000TB
其实,页表页就是存放进程页表的页面,他属于进程的一部分,页表也是以页为基本存储单位的。
所以,为了内存的高效使用,一般都不会将这么大规模的页表页存放在连续的内存上,所以,我们引入了页表页的地址索引表,页目录。提供一个目录,这样就变成了一个二维的结构,甚至现在很多计算机有多维的页表结构,也叫多级页表。
当一个进程上CPU运行时,需要将页目录的起始地址存放在CR3寄存器中(x86体系结构)
还是32位的虚拟地址:
整个过程,通过地址拼接,就可以得到物理地址,2级页表,最大可以标识4G的虚拟地址空间。
Core I7的4级页表结构:
整个过程由MMU完成:
CPU取到虚拟地址-> MMU查页目录->MMU查页表->MMU得到页表项->MMU得到物理页面编号->MMU得到物理地址。
联系客服