linux内存管理(页表的更新)

在内存使用过程中,页表的更新是操作系统动态管理内存的核心环节,其更新逻辑与进程的内存访问、物理内存分配 / 回收、IO 交互等行为紧密关联。以下从常见触发场景具体更新机制两方面详细说明:

一、页表更新的核心触发场景

页表的更新本质是 “虚拟页(VPN)与物理页框(PFN)的映射关系” 或 “页表项状态位” 的变更,主要由以下场景触发:

1. 进程创建 / 初始化时

当新进程被创建时,操作系统需为其初始化虚拟地址空间和页表:

  • 初始映射:对于进程的代码段、数据段等从可执行文件加载的区域,页表项会先被标记为 “无效”(有效位 = 0),并记录该页在磁盘文件中的位置(供后续页缺失时加载)。
  • 继承与复制:若通过fork()创建子进程,子进程会共享父进程的页表项(写时复制机制),此时页表项的权限位会被改为 “只读”,直到子进程或父进程尝试写入时才触发新的映射更新。
  • 栈 / 堆初始化:进程的栈和堆区域在创建时仅分配虚拟页(VPN 连续),对应的页表项初始为 “无效”,直到首次访问时触发页缺失再更新。
2. 页缺失(Page Fault)时

这是页表更新最频繁的场景。当进程访问某个虚拟页时,若页表项的有效位为 0(表示该页不在物理内存中),CPU 会触发页缺失异常,操作系统处理流程如下:

  1. 查找页位置:根据页表项记录的信息(如磁盘交换区地址或文件偏移量),找到该虚拟页在磁盘中的位置。
  2. 分配物理页框:从物理内存中分配一个空闲的物理页框(PFN)。
  3. 加载数据到物理页:通过 DMA 将磁盘中的页数据读取到新分配的物理页框中。
  4. 更新页表项
    • 将页表项的PFN字段设为新分配的物理页框号;
    • 有效位设为 1(表示该页已在物理内存中);
    • 重置修改位(初始为 0,若后续写入则置 1)和访问位(标记最近被访问)。
3. 内存回收(页面置换)时

当物理内存不足时,操作系统会通过页面置换算法(如 LRU)选择一个 “不常用” 的物理页框换出到磁盘,此时需更新对应页表项:

  1. 判断是否需要写回:若页表项的修改位为1(表示该页被修改过),则先将物理页框中的数据写回磁盘(交换区或文件)。
  2. 更新页表项
    • 有效位设为 0(表示该页已不在物理内存中);
    • 记录该页在磁盘中的新位置(如交换区的块号);
    • 保留VPN与页表项的索引关系(虚拟地址空间不变,仅映射关系失效)。
4. 写时复制(Copy-on-Write)时

当多个进程共享物理页(如父子进程共享初始化数据)时,页表项的权限位被设为 “只读”。若某进程尝试写入该页,会触发权限异常,操作系统处理如下:

  1. 分配新物理页框:为写入进程分配一个新的物理页框。
  2. 复制数据:将原共享物理页的数据复制到新物理页框中。
  3. 更新页表项
    • 将写入进程的页表项PFN改为新物理页框号;
    • 权限位改为 “可写”;
    • 其他共享进程的页表项保持不变(仍指向原物理页框,权限仍为只读)。
5. 进程释放内存时

当进程通过free()munmap()释放虚拟内存时,操作系统会更新对应页表项:

  • 若释放的虚拟页已映射到物理页框,且该物理页框无其他进程共享,则回收物理页框,并将页表项的有效位设为 0,PFN置空;
  • 若物理页框被共享(如动态链接库的代码页),则仅清除当前进程页表项的映射(有效位 = 0),不影响其他进程。
6. 权限变更时

操作系统可能根据需求调整虚拟页的访问权限(如从 “可写” 改为 “只读”),此时直接更新页表项的权限位

  • 例如,当内存中的代码页加载完成后,操作系统会将其权限改为 “只读 + 可执行”,防止意外修改;
  • 若进程尝试越权访问(如写只读页),会触发权限异常,操作系统可根据情况终止进程或动态调整权限(极少)。

二、页表更新的底层实现细节

  1. 硬件支持:现代 CPU 的内存管理单元(MMU)会直接访问页表,因此页表的更新必须在内核态完成(用户态无法直接修改页表,防止恶意篡改)。
  2. 多级页表的更新:对于多级页表(如 x86 的 4 级页表),更新时需先定位到对应的页目录项(PDE)、页表项(PTE),再修改目标字段(如 PFN、有效位)。若中间层级的页表项无效,还需先分配对应层级的页表并更新。
  3. TLB 同步:由于 CPU 会缓存最近的页表项到快表(TLB),页表更新后需刷新 TLB(如执行invlpg指令),否则 CPU 会使用旧的映射信息,导致地址转换错误。

总结

页表的更新是操作系统响应内存访问需求、动态管理物理资源的核心手段,其本质是通过修改页表项中的PFN(映射关系) 和状态位(有效、权限、修改等),实现虚拟地址空间与物理内存的动态绑定。不同场景下的更新逻辑虽有差异,但最终目的都是保证内存访问的正确性、高效性和安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值