页表是如何工作的
页表的基本结构
页表是一个数据结构,包含虚拟页与物理页框之间的映射关系。每个进程都有自己的页表,确保进程间内存的隔离和保护。
页(Page)和 页框(Page Frame):
- 页:虚拟内存被划分为固定大小的块,称为页,通常为4KB。
- 页框:物理内存同样被划分为与页相同大小的块,称为页框。
TLB
快速表,存储了一些虚拟页号到物理页框号的映射
虚拟地址到物理地址
页目录索引(Page Direct0ry Index, PDI) : 10位
页表索引(Page Table Index, PTI):10位
页内偏移(0ffset);12位
每个进程都有自己的页表,这个虚拟地址对应的物理地址就记录在对应页号的对应偏移处。
假设有一个32位Wind0ws系统,进程尝试访问虚拟地址 0x1234ABCD:
虚拟地址拆分:
页目录索引 (PDI):72
页表索引 (PTI):根据地址拆分,例如842
页内偏移 (0ffset):0xBCD
虚拟页号:0x1234A
页目录查找:
读取CR3:假设CR3指向页目录基址 0x0012AB00。
计算页目录项地址:0×0012AB00+(72× 4)=0×0012AC20读取PDE:从 0x0012AC20 读取页目录项,获取页表的物理地址 0x0023CD00。
页表查找:
计算页表地址: 0x0023CD00 + (842 × 4) = 0x0023D00 + 0xD28 = 0x0023DA28
读取PTE:从 0x0023DA28 读取页表项(PTE),获取物理页框号 0x0045EF00。
生成物理地址:
物理地址 =0x0045EF00 +0xBCD = 0x0045F7CD
更新TLB:
将虚拟页号 0x1234A 和物理页框号 0x0045EF 缓存到TLB中。