【CSAPP】虚拟内存 | 地址空间 | 页表内存保护 | 页错误引发异常逐出 (evicted)
  Uv06OPPpGpf0 2023年11月02日 76 0


 

【CSAPP】虚拟内存 | 地址空间 | 页表内存保护 | 页错误引发异常逐出 (evicted)_操作系统

 💭 写在前面:本文将学习《深入理解计算机系统》虚拟内存部分,CSAPP 是计算机科学经典教材《Computer Systems: A Programmer's Perspective》的缩写,该教材由Randal E. Bryant和David R. O'Hallaron 合著。

📜 本章目录:

0x00 回顾:进程的概念(Processes)

0x01 私有地址空间的错觉

0x02 地址空间(Address Spaces)

0x03 虚拟机作为内存管理的工具

0x04 启用数据结构:页表

0x05 虚拟内存和硬盘

0x06 页表的内存保护


0x00 回顾:进程的概念(Processes)

"Definition: A process is an instance of a running program"

📚 定义:进程是正在运行的程序的实例。

可以这么说:当可执行文件被加载到内存中时,该程序就成为了一个进程。

  • 进程可谓是计算机科学中最成功的想法之一。
  • 不同于 "程序" 或 "处理器"。
  • 进程具有程序执行的上下文(状态)的能力。

进程为每个程序提供了两个关键抽象:

逻辑控制流 (Logical control flow):

  • 每个进程 "似乎" 都有自己的 CPU。
  • 由称为上下文切换 (virtual memory) 的内核机制提供。

私有地址空间 (Private address space)

  • 每个进程 "似乎" 都独占内存 (memory)。
  • 由称为虚拟内存 (virtual memory) 的内核机制提供。

【CSAPP】虚拟内存 | 地址空间 | 页表内存保护 | 页错误引发异常逐出 (evicted)_原力计划_02

0x01 私有地址空间的错觉

【CSAPP】虚拟内存 | 地址空间 | 页表内存保护 | 页错误引发异常逐出 (evicted)_开发语言_03

使用物理地址的系统:用于 "简单 "系统,如汽车、电梯等的嵌入式微控制器。

 

【CSAPP】虚拟内存 | 地址空间 | 页表内存保护 | 页错误引发异常逐出 (evicted)_操作系统_04

使用虚拟地址的系统:在所有现代服务器、笔记本电脑和智能手机中使用,计算算机科学中的一个伟大想法。

【CSAPP】虚拟内存 | 地址空间 | 页表内存保护 | 页错误引发异常逐出 (evicted)_虚拟地址_05

0x02 地址空间(Address Spaces)

线性地址空间:连续的非负整数地址的有序集合:

【CSAPP】虚拟内存 | 地址空间 | 页表内存保护 | 页错误引发异常逐出 (evicted)_操作系统_06

虚拟地址空间:

【CSAPP】虚拟内存 | 地址空间 | 页表内存保护 | 页错误引发异常逐出 (evicted)_开发语言_07

 个虚拟地址的集合:

【CSAPP】虚拟内存 | 地址空间 | 页表内存保护 | 页错误引发异常逐出 (evicted)_原力计划_08

物理地址空间:

【CSAPP】虚拟内存 | 地址空间 | 页表内存保护 | 页错误引发异常逐出 (evicted)_虚拟地址_09

 个物理地址的集合:

【CSAPP】虚拟内存 | 地址空间 | 页表内存保护 | 页错误引发异常逐出 (evicted)_原力计划_10

0x03 虚拟机作为内存管理的工具

关键思想是让每个进程都有自己的虚拟地址空间,每个进程都可以把内存看作是一个简单的线性阵列,地址转换在物理内存中映射这些地址。

【CSAPP】虚拟内存 | 地址空间 | 页表内存保护 | 页错误引发异常逐出 (evicted)_CSAPP_11

页是地址管理的基本单位(通常为4KB):每个虚拟页将被映射到一个物理页。

允许进程之间共享代码和数据:通过将虚拟页映射到同一物理页。

【CSAPP】虚拟内存 | 地址空间 | 页表内存保护 | 页错误引发异常逐出 (evicted)_CSAPP_12

0x04 启用数据结构:页表

页表 (page table),是一个页表项(PTE)阵列,将虚拟页映射到物理页。

  • 物理内存(DRAM)中的每进程内核数据结构
  • 特殊寄存器(PTBR)告诉CPU页表的地址

 

【CSAPP】虚拟内存 | 地址空间 | 页表内存保护 | 页错误引发异常逐出 (evicted)_CSAPP_13

0x05 虚拟内存和硬盘

并非所有的虚拟页都能被映射到物理页上,因此,我们实际上将所有的虚拟页都存储在硬盘中(其大小相对较大)。而部分虚拟页被加载到物理内存中,这类似于 "缓存 "的概念

【CSAPP】虚拟内存 | 地址空间 | 页表内存保护 | 页错误引发异常逐出 (evicted)_原力计划_14

页命中 (page hit):对物理内存中的虚拟地址的访问。

【CSAPP】虚拟内存 | 地址空间 | 页表内存保护 | 页错误引发异常逐出 (evicted)_CSAPP_15

页错误 (page fault)

如果访问到了一个不在物理内存中的虚拟地址,就会发生页错误 (page fault),扑了个空。

【CSAPP】虚拟内存 | 地址空间 | 页表内存保护 | 页错误引发异常逐出 (evicted)_原力计划_16

页错误的处理:页面错误导致 CPU 异常

页错误在 CPU 中引起异常,页错误处理程序会选择一个 "受害者" 将其 逐出 (evicted) 。

下图例子中,VP4 被逐出:

【CSAPP】虚拟内存 | 地址空间 | 页表内存保护 | 页错误引发异常逐出 (evicted)_原力计划_17

错误指令重新启动:页面命中 (page hit) !

【CSAPP】虚拟内存 | 地址空间 | 页表内存保护 | 页错误引发异常逐出 (evicted)_虚拟地址_18

0x06 页表的内存保护

用权限位扩展PTE,"SUP " 位表示监督者(内核)模式。

你的硬件在每次访问时都会检查这些位。

【CSAPP】虚拟内存 | 地址空间 | 页表内存保护 | 页错误引发异常逐出 (evicted)_虚拟地址_19

 

【CSAPP】虚拟内存 | 地址空间 | 页表内存保护 | 页错误引发异常逐出 (evicted)_开发语言_20


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
Uv06OPPpGpf0