内存管理:页表

本文介绍了虚拟内存中的页表概念,包括虚拟页与物理页的区分、虚拟寻址方式、页表条目(PTE)的结构,以及缺页异常处理。页表用于跟踪虚拟页是否缓存在内存中,有效位和地址字段共同指示页的位置。当缺页发生时,内核选择牺牲页并可能将数据回写到磁盘,然后将所需页加载到内存。此外,通过在页表中设置访问控制位,虚拟内存可以实现对内存的保护,防止非法访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 页表

**虚拟内存:**虚拟内存被分割成大小固定的块,即虚拟页(Virtual Page),对应物理内存也被分割成物理页/页帧(Physical Page / Page Frame)。虚拟页有三种:未分配、已缓存、未缓存。

**虚拟寻址方式:**一个进程的所有数据存放在虚拟页中,提供的也是虚拟地址。虚拟页存放在磁盘中,缓存在内存中。页表存放所有虚拟页的信息,即虚拟页到底在内存中还是磁盘中。

🔹页表:

  • 页表就是一个页表条目(Page Table Entry,PTE)的数组。
  • 每个 PTE 至少由一个有效位(valid bit)和一个N位地址字段(PFN)组成。
  • 有效位表明该虚拟页是否被缓存到内存中。地址字段指向页的起始位置。
  • 如果有效位为1,地址字段指向该虚拟页对应的物理页在内存中的起始位置。如果有效位为0,地址字段为空时表明该虚拟页还没有被分配,不为空时指向该虚拟页在磁盘中的起始位置。

🔹缺页:

  • CPU 想要引用 VP3 中的一个字,地址翻译硬件从内存中读取 PTE3,从有效位推断出VP3没有被缓存,所以触发了一个缺页异常。
  • 缺页异常会调用内核中的缺页异常处理程序,该程序会选择一个牺牲页。如果这个牺牲页中的数据已经发生修改,然后内核就会将它复制回磁盘。
  • 接下来,内核从磁盘复制 VP 3 到内存中的 PP 3 ,更新 PTE 3 ,然后返回。
  • 当异常处理程序返回时,它会重新启动导致缺页的指令,该指令会把原来的虚拟地址重新发送到地址翻译硬件。

🔹虚拟内存可以保护内存:

计算机不应该允许一个用户进程修改它的只读代码、内核代码和数据、其他进程的私有内存、以及与其他进程共享的内存。要实现这些功能只需在PTE中添加访问控制位即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值