csapp第九章笔记-虚拟内存
物理与虚拟寻址
计算机系统的主存被组织成M个连续的字节大小的单元组成的数组。每个字节都有唯一确定的物理地址。
-
物理寻址
CPU通过物理地址访问内存,也就是访问主存中的物理地址,访问到实际的物理单元

-
虚拟寻址
CPU通过生成虚拟地址(Virtual Address/VA)来访问主存,CPU上有专门的内存管理单元来进行地址翻译,通过地址转换,将程序的虚拟地址转化为物理地址

地址空间
- 虚拟地址空间
虚拟地址空间{0,1,2,.....,N-1},其中N=2^n,则称为n位虚拟空间,虚拟空间是对与程序而言的,操作系统会为每个程序分配虚拟内存,一般而言虚拟内存是大于物理内存的,例如64位操作系统的虚拟内存空间就是 0-2^64-1 这些虚拟地址。 - 物理地址空间
同理物理地址空间{0,1,2,.....,M-1},其中M=2^m,则称为m位物理空间,物理空间对应的是主存上的实际物理单元,例如主存为64KB,假设按字节编址(最小的物理单元为1B),则物理空间为 0-2^16-1 这些物理地址,可以看到物理地址一般小于逻辑地址。
虚拟内存作为缓存的工具
与存储器层次结构种其他缓存一样,磁盘上的数据被分割成块,这些块作为主存和磁盘之间的传输单元。VM系统将虚拟内存分割为虚拟页(Virtual Page/VP),物理内存被分割位物理页(Physical Page/PP),每个页的大小P=2^p字节。
VM通过页表(Page Table) 来判断一个虚拟页是否被缓存在DRAM中,每个页表都是由页表条目(Page Table Entry)组成的数组。每个PTE由一个有效位和一个n位地址字段组成,有效位=1意味着当前虚拟页被缓存在了DRAM中,此时地址字段就是DRAM中相应的物理页的起始位置。

假设虚拟地址为n位,每页大小P=2p,则需要的PTE数量:2(n-p)
现在考虑缓存的命中与否:
-
页命中:若有效位为1,则说明VP被缓存在DRAM中,故可直接通过地址字段找到相应物理地址
-
缺页: DRAM缓存不命中称为缺页(Page Fault),一旦发生缺页程序就会选择一个牺牲页将需要的VP拷贝到原牺牲页的位置上
交换(Swapping)/页面调度(Paging):在磁盘和内存之间传送页。
虚拟内存作为内存管理的工具

-
简化链接:独立的地址空间允许每个进程的内存印射使用相同的基本格式,而不用在意代码和数据实际上存在在内存何处
-
简化加载: VM使得容易向内存中加载可执行文件和共享对象文件
内存印射:将一组连续的虚拟页印射到人一个文件中的任何位置
-
简化共享:独立地址空间为操作系统提供了一个管理用户进程和操作系统自身之间共享的一致机制
-
简化内存分配: VM向用户进程提供了一个简单的分配额外内存的机制。
虚拟内存作为内存保护的工具

SUP:进程是否必须运行在内核模式下
READ:对页面读权限
WRITE:对页面写权限
地址翻译

虚拟页偏移量共p位,虚拟页数(n-p)位,虚拟地址n位,需要的PTE数量为2^(n-p),虚拟地址共n位。通过虚拟页偏移量和虚拟页数找到相应地址。
- 页命中

- 处理器生成虚拟地址给MMU
- MMU生成PTE地址并请求从高速缓存中得到它
- 高速缓存返回PTE给MMU(检查是否在高速缓存中,即标志位是否为1)
- MMU通过PTE构造物理地址,并传给高速缓存
- 高速缓存返回所需的数据字
页面命中完全由硬件控制,而缺页要求硬件和操作系统内核协助完成
- 缺页

- 同上
- 同上
- 同上(此时检查到标志位位0,即不再物理内存中)
- MMU触发一次异常,传递CPU中的控制到操作系统内核中的缺页异常处理程序
- 缺页处理程序指定牺牲页,如果这个页面已经被修改就把它换出到磁盘中
- 缺页处理程序页面调入新的页面,并更新相应PTE
- 缺页处理程序返回原来进程,再次执行导致缺页的命令。CPU将该虚拟地址重新发给MMU,此时MMU会检测到标志位为1,执行上述4以后操作。
使用TLB(翻译后备缓冲器)加速地址翻译
多级页表
- 节省空间,若一级页表中的一个PTE为空,则相应的二级页表根本不存在,这代表着巨大的潜在节约,因为对于一个典型的程序,4GB的虚拟地址空间的大部分都是未分配的。
- 只有一级页表才需要在主存中,虚拟内存系统可以在需要时创建、页面调入或调出二级页表,这减少了主存的压力。


浙公网安备 33010602011771号