简介
定义
- 虚拟存储器是对I/O设备与主存的抽象。
- 虚拟存储器是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互,它为每个进程提供了一个大的,一致的和私有的地址空间。
虚拟存储器的目标
- 高速缓存
- 存储器管理工具
- 存储器保护工具
理解虚拟存储器的原因
- 中心的
- 强大的
- 危险的
讲解思路
- 前一部分描述虚拟存储器是如何工作的
- 后一部分描述应用程序如何使用和管理虚拟存储器
物理和虚拟寻址
主存定义
- 计算机系统被组织成一个由M个连续的字节大小的单元组成的数组
物理寻址图
虚拟寻址图
地址翻译
- 将一个虚拟地址转换为物理地址的任务叫做地址翻译
MMU(存储器管理单元)
- 属于CPU中的一部分,该硬件利用存放在主存中的查询表来动态翻译虚拟地址,该表的内容是由操作系统管理
地址空间
定义
- 地址空间是一个非负整数地址的有序集合:{0,1,2,…},如果地址空间中的整数是连续的,那么我们说它是一个线性地址空间。
虚拟地址空间
- 在一个带虚拟存储器的地址空间中,CPU从一个有N=2n个地址空间中生成虚拟地址,这个地址空间称为虚拟地址空间:{0,1,2,…,N-1}
- 一个地址空间的大小是由表示最大地址所需要的位数来描述的。例如:一个包含了N=2n个地址的虚拟地址空间就叫做一个n位地址空间。
- 思考:32位或者64位虚拟地址空间的系统,其虚拟地址数分别是多少,最大可能的虚拟地址是多少?
物理地址空间
- 它与系统中物理存储的M个字节相对应:{0,1,2,…,M-1}
虚拟存储器的思想
- 主存中的每个字节都有一个选自虚拟地址空间的虚拟地址和一个选自物理地址空间的物理地址。
小结
- 地址空间的概念很重要,因为它清楚的区分了数据对象(字节)和它们的属性(地址)
作为缓存工具
虚拟页
- 定义:As with any other cache in the memory hierarchy, the data on disk (the lower level) is partitioned into blocks that serve as the transfer units between the disk and the main memory (the upper level). VM systems handle this by partitioning the virtual memory into fixed-size blocks called virtual pages (VPs). Each virtual page is P = 2p bytes in size.
物理页
- 定义:Similarly, physical memory is partitioned into physical pages (PPs), also P bytes in size. (Physical pages are also referred to as page frames.)
物理页的状态
- 未分配
- Pages that have not yet been allocated (or created) by the VM system. Unallocated blocks do not have any data associated with them,and thus do not occupy any space on disk.
- 已缓存
- Allocated pages that are currently cached in physical memory.
- 未缓存
- Allocated pages that are not cached in physical memory.
- 一个VM系统是如何使用主存作为缓存
页表
- 页表结构
页命中
- VM页命中
缺页
- VM缺页
分配
- 分配一个新的虚拟页面
作为存储器管理工具
简介
- 操作系统为系统中的每个进程都维护一个独立的页表
- 按需页面调度和独立的虚拟地址空间的结合,对系统中存储器的使用和管理造成了深远的影响。
- VM如何为进程提供独立的地址空间
简化链接
- 每个进程的存储器影像使用相同的基本格式,文本节,数据和bss节,栈
- 这样的一致性,极大的简化了链接器的设计和实现,允许链接器生成全链接的可执行文件。
简化加载
- 加载器从不实际从磁盘拷贝数据到存储器
- 在每个页被初次引用时,要么是CPU取指令时引用的,要么是一条正在执行的指令被引用一个存储器位置时引用的,虚拟存储器系统会按需要自动调入数据页。
简化共享
- 进程之间需要共享代码和数据,可以通过虚拟存储器实现
- 操作系统通过将不同进程中适当的虚拟页面映射到相同的物理页面,从而安排多个进程共享这部分代码的一个拷贝,而不是在每个进程中都包括单独的内核和C标准库的拷贝。
简化存储器的分配
作为存储器保护工具
- 为操作系统提供手段来控制对存储器系统的访问,不允许一个用户进程修改它的只读文本段。
- 每个PTE中已经添加了3个许可位,SUP位表示进程表示进程是否必须运行在内核模式下才能访问该页。
- READ和WRITE位控制对页面的读和写访问。
- 用虚拟存储器来提供页面级别的存储器保护