页表(Page Table)
概述: 实现虚拟内存的重要数据结构,作用是将虚拟地址映射到物理地址,从而允许操作系统和硬件进行有效的内存管理。虚拟内存技术允许程序使用比物理内存更大的地址空间
基本结构:
虚拟内存被划分为固定大小的页面(通常是4KB、8KB),物理内存被划分为固定大小的页框。然后页表保存着虚拟页面到物理页框的映射关系。
虚拟地址和物理地址都可以分成两部分:
- 页号:页面的编号
- 页内偏移:页面内的偏移量
页表的层级结构: 单一的页表结构可能非常大,查找效率较低。为了优化内存使用和查找速度,操作系统通常会使用多级页表结构:
页表项(Page Table Entry, PTE): 通常包含
- 物理页框号:该PTE映射到的物理内存页框地址
- 有效位:标记该PTE是否有效。若无效,表示该虚拟页面没有映射到物理内存,可能需要缺页中断(Page Fault)。
- 访问权限:如可读、可写、可执行等权限
- 脏位:标记该页面是否被修改过。若修改过且没有写回磁盘,则表示该页面为脏页面,需进行写回操作
- 引用位:在页交换算法中使用,表示该页面是否最近被访问过
- 缓存控制:指示该页面的缓存行为,如是否允许缓存
页表管理的关键操作:
- 页表的创建与销毁:每个进程通常都会有自己的页表,操作系统在进行进程创建时为其分配页表,在进程结束时销毁页表。
- 页表更新:当进程访问某个虚拟地址时,操作系统需要检查该地址是否有对应的PTE,如果没有,则发生缺页中断,操作系统需要更新页表
- 页表切换:每个进程都有独立的虚拟地址空间。因此,切换进程时需要切换页表。这通常是通过更新页表基址寄存器来完成。
- 页表缓存:为了加速地址转换,现代CPU通常会使用快表(TLB, Translation Lookaside Buffer),这是一个小型缓存,用于存储最近访问的PTE,每次进行地址转换时,CPU会先查询TLB,若为命中,则需要访问页表
页表的管理策略: