一级页表与二级页表
虚拟地址与真实物理地址的对应关系。虚拟地址如同指针一样,一层一层地最终指向真实地址。
首先介绍虚拟地址的结构:页目录,页表。
拿32位的虚拟地址举例0x00000000
高10位代表的是页目录的偏移,中间10位代表页表的偏移,最后12位为真实物理地址的低12位。
进程未执行时,页表的始址和页表长度放在进程控制块(PCB)中,当进程被调度时,操作系统内核会把它们放到页表寄存器中。
即页目录的物理地址存放在cr3寄存器中,而页目录的物理地址+页目录的偏移=得到页表项的地址(4个字节),再加上中间10位(二进制)的偏移,得到真实物理地址的前20位,此刻与后12位的物理地址相加即为真实物理地址。
页目录存放着页表的起始物理地址。
页表存放真实物理地址的前20位
如若将虚拟地址与物理地址线性对应,则第二个页表项与第一个页表项相差值为4096(即4K),为什么?首先把4096按16进制换算即为0x1000。也就是从第12位(从0算)开始累加1,而页表项的结构如下图
31~12才是真正的物理地址,也就是20位,而后12位的用处:P,1表示页存在于内存中,0则相反。rw,可读可写(1),不可读不可写(0),pwt,1则表示该页为高速缓存。
1k个页目录平均存放1k个页表,一个页表有1k个页目录项(2^10),大小为4k.