虚存

  • 多个虚拟页可以映射到同一个物理页框。
  • 简化链接:独立的内存空间允许每个进程的内存映像使用相同的基本格式而不管代码和数据的实际存放在内存的何处。
  • 简化加载:虚拟内存还使得容易向内存中加载可执行文件和共享对象文件。要把.text和.data段加载到一个进程空间中,加载器为代码和数据分配虚拟页,把他们标志成未缓存的,将页表目录指向目标文件中适当的位置。加载本质上只是建立页表和加载段的映射关系,真正执行CPU指令的时候会产生缺页中断,再从磁盘上调页。
  • 简化共享:比如动态链接的共享对象,不同进程间的虚拟地址可以映射到同一页框,可实现动态链接中的代码段共享。
  • 简化内存分配:页的颗粒比较小,连续的大块虚拟内存可以打散分配物理页框。

 

  • 虚拟内存作为内存保护的工具。比如页表项中可以设置一些控制位。
  • 多级页表。若一级页表未分配,二级页表不会存在,这是一种巨大的潜在节约中,只有一级页表才需要总是在内存中。
  • TLB的存在,加速了地址翻译,实际上带多级页表的地址翻译并不比单级页表慢很多。
  • 地址翻译:CPU给出虚拟地址,TLB或页目录,拿到物理地址,给物理地址给缓存,命中或者不命中。

 

 

  • Linux缺页异常处理:
  1. 虚拟地址A会在已分配的虚拟内存中查找是否合法,不合法就触发一个段错误。
  2. 对只读地址写会产生一个GPerror。
  3. 合法操作
  • 交换空间限制着当前运行着的进程能够分配的虚拟页面的总数。
  • 共享对象,多个进程共享同一块物理内存。私有对象,写时复制。有趣
  • 再看fork,fork被调用时,内核会为新进程创建各种数据结构,给这个新进程复制父进程的内存区域,当子进程写该区域会创建一个新页面。
  • 再看execve,关于内存,先删除已存在的用户区域,映射私有区域,映射共享区域,设置上下文等。

 

posted @ 2023-02-28 11:04  stu--wy  阅读(44)  评论(0)    收藏  举报