https://zhuanlan.zhihu.com/p/96098896
目的:
为了更加有效地管理内存并且少出错,现代系统提供了一种对主存的抽象概念,叫做虚拟内存。
能力:
1、将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保留活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,高效使用了主存。
2、为每个进程提供了一致的地址空间,从而简化了内存管理
3、它保护了每个进程的地址空间不被其他进程破坏。
9.1物理和虚拟寻址
物理寻址:主存被组织成一个由M个连续字节大小的单元组成的数组。每字节都有一个唯一的物理地址。
虚拟寻址:CPU通过生成一个虚拟地址来访问主存,这个虚拟地址被送到内存之前先转换(地址翻译)成适当的物理地址,CPU芯片上叫做内存管理单元(MMU)的专用硬件,利用存放在主存中的查询表来动态翻译虚拟地址。查询表由操作系统管理。
9.2 地址空间
虚拟地址空间:{0,1,2……,N-1},CPU从一个有N=2^n个地址的地址空间生成虚拟地址,叫作n为地址空间。现代系统通常支持32位或者64位虚拟地址空间。
物理地址空间:{0,1,2……,M-1}对应于系统中物理内存的M个字节
主存中每字节都有一个选自虚拟地址空间的虚拟地址和一个选自物理地址空间的物理地址。
9.3虚拟内存作为缓存的工具
虚拟内存被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组。每字节都有有一个唯一的虚拟地址。
上下层传输单元(块):磁盘(较低层)上的数据被分割成块,这些块作为磁盘和主存之间的传输单元。VM系统通过将虚拟内存分割为称为虚拟页的大小固定的块,物理内存被分割为物理页。大小都为P字节。
虚拟页中情况分类:
1、未分配(到虚拟页)的:还未分配或者创建的页,没有数据相关联,不占用磁盘空间。
2、缓存(到物理页的)的:已缓存再物理内存中的已分配页。
3、已分配、未缓存的:未缓存再物理内存中的已分配页
9.3.1DRAM缓存的组织结构
DRAM和SRAM:
●DRAM表示虚拟内存系统的缓存,即磁盘和内存的缓存。不命中处罚更大(磁盘比DRAM慢10万倍),所以对DRAM缓存使用了更精密复杂的算法。
●SRAM缓存表示CPU与主存之间的L1L2L3高速缓存。
9.3.2页表
与操作系统软件、MMU中的地址翻译硬件联合提供:地址翻译硬件从虚拟页地址定位PTE,判断一个虚拟页是否缓存在DRAM中,如果是,确定在哪个地方。如果否,判断虚拟页在磁盘哪个位置,从磁盘复制到DRAM。
内容:页表是页表条目(PTE)的数组虚拟地址空间的每个页在页表中一个固定偏移量处都有一个PTE,每个PTE由一个有效位和一个n位地址字段组成。分为三种情况:
1、已缓存
有效位置1,地址为物理页在主存的起始位置
2、未分配
有效位置0,地址为空
3、已分配未缓存
有效位置0,地址为虚拟页在磁盘上的起始位置
9.3.3页命中
CPU想要读VP2虚拟内存中的字时:地址翻译硬件将虚拟地址作为索引来定位PTE ,并从内存中读取PTE,通过有效位和地址来判断
9.3.4 缺页
概念:DRAM缓存不命中的情况称为缺页
应对:
1、触发缺页异常,调用异常处理程序
2、异常处理程序选择一个牺牲页,将其替换
3、重启导致缺页的指令
9.3.5分配页面
分配(如malloc):在磁盘上创建空间并更新PTE,指向磁盘上新创建的页面。
虚拟内存的性能:不命中处罚很大和页面调度破坏程序性能的直觉是