虚拟存储器
目录
8.存储器映射
1.为什么引入虚存的概念?
- 一个系统中的进程与其他进程共享CPU和主存资源,存储器更加难以管理。
- 虚拟存储器是硬件异常、硬件地址翻译、主存、磁盘文件、内核软件的完美交互
- 为每个进程提供一个大、一致的私有地址空间。
能力:
- 高效使用主存:将主存看成存储在磁盘上的地址空间的高速缓存,主存中只保持活动区域,根据需要在主存&&磁盘间来回传送数据。
- 简化存储器管理:为每个进程提供一致的私有地址空间。
- 保护每个进程的地址空间不被其他进程破坏。
2.物理和虚拟寻址
物理寻址:主存被组织成一个M个连续的,字节大小的单元,组成的数组。每个字节一个物理地址。CPU生成一个物理地址->送到存储器。
虚拟寻址:CPU生成一个虚拟地址(VA)->转换为适当的物理地址->送到存储器。
地址翻译:
- CPU硬件和操作系统的密切配合
- CPU芯片上的存储管理单元的专用硬件,利用主存中的查询表动态翻译虚拟地址(表的内容操作系统管理)
3.地址空间
- 一个非负整数地址的有序集合(如果是连续:线性地址空间)
- n位地址空间:
- 物理地址空间:M不要求是2的幂次
- 主存中的每个字节都有一个选自虚拟地址空间的地址,和一个选自物理地址空间的地址。
4.虚拟存储器作为缓存的工具
- 磁盘上的数据被分割成块,作为磁盘和主存之间的传输单元。
- 分割成块:虚拟存储器->虚拟页,物理存储器->物理页(页帧)都是
字节
- 虚拟页面的集合分为(不相交子集):
①未分配的:VM系统还未分配(或创建)的页,没有任何数据关联,不占磁盘空间
②缓存的:当前缓存在物理存储器的已分配页
③未缓存的:没有缓存在物理存储器的已分配页
①DRAM缓存的组织结构:
- 虚拟存储器系统的缓存,在主存中缓存虚拟页
- DRAM缓存的不命中比SRAM缓存的不命中昂贵,由磁盘服务
- 虚拟页比较大(4KB~2MB)
- DRAM缓存全相联,替换算法更复杂
- 使用写回
直写式 WT,Write Through 与 回写式 WB,Write Back 指的是缓冲内存的工作方式 直写式缓存方式是 当 CPU 要将数据写入内存时除了更新缓冲内存上的数据外也将数据写在 DRAM中以维持主存与缓冲内存的一致性 当要写入内存的数据一多 速度自然就慢了下来
回写式的缓存方式是 每当 CPU 要将数据写入内存时 只会先更新缓冲内存上的数据 随后再让缓冲内存在总线不塞车的时候才把数据写回 DRAM 所以速度自然快得多
②页表
- 虚拟页在DRAM中吗?在哪个物理页?
- PTE页表项:虚拟地址空间中每个页都在页表中对应一个条目:1有效位+n地址段(假设)
下图:VP0、VP5未分配,VP3、VP6分配未被缓存,其他被缓存
③页命中
如上图,假如读VP2中的虚拟存储器中一个字节,通过虚拟地址->找到页表项PTE2->有效位=1->物理地址get√
④缺页
引用VP3中一个字->找到PTE3->有效位=0->触发一个缺页异常
->调用内核缺页处理程序->选择牺牲页VP4:
- VP4已被修改:内核将VP4拷贝回磁盘
- VP4未被修改:不拷贝
->内核从磁盘拷贝VP3到PTE3,返回->重新启动导致缺页的指令->页命中
⑤交换/页面调度
- 在磁盘和存储器中传送页的活动
- 从磁盘换入DRAM,从DRAM换出磁盘
- 按需页面调度:一直等待,当有不命中时才换入页面
⑥分配页面
操作系统分配一个新的虚拟存储器页时,例如,调用malloc->在磁盘上创建空间->更新PTE5,指向磁盘上的页面
⑦局部性
- 保证了在任意时刻,程序往往在一个较小的活动页面集合工作(工作集、常驻集)。
- 工作集的大小大于物理存储器的大小:颠簸,页面不断换进换出
unix的getrusage检测缺页数量
5.虚拟存储器作为存储管理的工具
操作系统为每个进程提供一个独立的页表:多个虚拟页面可以映射到同一个物理页面
简化链接:
- 独立的私有地址空间,每个进程的存储器映像使用相同的基本格式。总是0x80480000/0x400000开始。
- 链接器可生成全链接的可执行文件,独立于物理存储器中代码和数据的最终位置的。
简化加载:
- 容易向存储器中加载可执行目标文件,和共享对象文件
- Linux加载器,分配虚拟页的一个连续的片chunk),从0x08048000/0x400000开始虚拟页标记为无效,页表条目指向目标文件中适当位置。
- 加载器不实际从磁盘拷贝数据到存储器,引用时按需调入。
简化共享
- 独立地址空间,为操作系统提供管理用户进程,和操作系统自身间共享的一致机制。
- 私有数据、代码、堆、栈,操作系统新建页表,映射到不同物理页面。
- 共享的(内核代码,库程序),操作系统将不同进程中适当的虚拟页面映射到相同的物理页面。
简化存储器分配
- 虚拟存储器向用户进程,提供了一个简单的分配额外存储器的机制。
- 如malloc,操作系统分配k个连续的虚存页面,映射到物理存储器中任意位置的k个物理页面。
6.虚拟存储器作为存储器保护的工具
7.地址翻译
8.存储器映射