栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

内存管理:页表

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

内存管理:页表

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中添加访问控制位即可。

例如:添加 SUP 位,如果标记为1,则进程必须在内核模式下才能访问该页。添加 READ 和 WRIT 位 实现对页面的读写控制。

如果一条指令违反了访问控制条件,CPU就会触发一般保护故障,然后传递给内核中的异常处理程序。Linux shell 一般将这种异常报告为 段错误(segmentation fault)。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/282375.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号