虚拟存储器

参考《深入理解计算机系统》第九章

1. 物理与虚拟寻址

1.1 物理寻址系统

物理寻址系统.png

1.2 虚拟寻址系统

image.png

MMU:存储器管理单元,CPU的组成部分

2. 地址空间

地址空间:非负整数地址的有序集合;
虚拟地址空间:在一个带虚拟储存器的系统中,CPU从一个有N(N=2^n)个地址的地址空间中生成虚拟地址,这个地址空间称为虚拟地址空间;
地址空间大小由表示最大地址位数来描述,典型的有32位于64位虚拟地址空间
物理地址空间:与系统中物理存储器的M个字节对应(如上图,M不要求2的次幂)

3. 虚拟存储器作为缓存的工作

虚拟存储器(VM)被组织为一个由存放在磁盘上N个连续的字节大小的单元组成的数组。每个字节都有一个唯一的虚拟地址
虚拟存储器分割为称为虚拟页(VP)的大小固定块;物理存储器分割为称为物理页(PP)的大小固定块。虚拟页的大小都为P=n^2;

image.png

3.1 页表

image.png

页表将虚拟页映射到物理页。每次地址翻译硬件将一个虚拟地址转换成物理地址时都会读取页表。
操作系统负责维护页表内容以及在磁盘与DRAM之间来回传送页。
页表就是一个页表条目(PTE)的数组

3.2 页命中

CPU读出虚拟地址,通过页边查询,虚拟地址所在页通过页表中的有效位判断其存在于物理地址中。


image.png

3.3 缺页

DRAM缓存不命中称为缺页。
缺页异常会调用内核中的缺页异常处理程序 :通过调度算法找到一个牺牲页 -> 如果牺牲页被修改 -> 将该牺牲页写回磁盘 -> 内核将所缺页从磁盘(虚拟空间)写到内存(物理空间) -> 更新页表 -> 中断返回


image.png

相关名词:
页面调度,页面调入(换入),页面调出(还出),按需页面调度

3.4 分配页面

增加虚拟存储器之后,如果缺页率较多,将会影响程序的工作效率;
但是由于程序的局部性原理,效率问题得到一定缓解;
根据程序的局部性原则,程序往往在一个较小的活动页面集合上工作,这个集合叫做工作集
只要程序有较好的时间局部性,虚拟内存将会工作的很好;但是不排序意外,这时候将会出现页面频繁的换入换出;这种状态叫做颠簸

可以利用getrusage函数检测缺页数量

4. 虚拟存储器作为存储器管理的工具

实际上操作系统为每个进程提供了一个独立的页表,因而也就是一个独立的虚拟地址空间;
多个虚拟页面可以映射到同一个共享的物理页面上;

image.png

按需页面调度独立的虚拟地址空间结合,对系统中存储器的使用和管理造成了深远影响。特别的,VM简化了链接和加载,代码和数据共享以及应用程序的存储器分配。
(具体怎么优化见参考书籍[博客]内存管理:02虚拟存储器

5. 虚拟存储器作为存储器保护工具

你可能感兴趣的:(虚拟存储器)