1. 什么是虚拟地址空间
- 如果没有虚拟地址空间,则程序都是直接访问和操作物理内存。可能会造成以下问题
- 用户程序可以访问任意物理内存,容易破坏操作系统。
- 多个进程之间使用物理内存可能会产生冲突。导致bug
- 如果使用了虚拟地址空间。
- 虚拟地址空间由操作系统管理
- 操作系统为每一个进程分配一个0~4G的虚拟内存地址空间(私有)。这样每一个进程只能访问自己的虚拟地址空间。而虚拟地址空间到物理地址空间的映射由操作系统来完成。即操作系统负责实际内存的分配。
2. 虚拟地址空间与物理地址空间映射解决了什么问题
- 方便编译器和操作系统安排程序的地址分布。
- 程序可以使用一些列相邻的虚拟地址来访问物理内存中不相邻的内存缓冲区。
- 方便进程之间相互隔离
- 不同进程使用的虚拟地址彼此隔离,一个进程的代码无法更改正在由另一个进程使用的物理内存
- 方法操作系统管理物理内存
- 程序可以使用一系列虚拟地址来访问大于可用的物理内存的内存缓冲区。利用程序的局部性原理,当物理内存的供应量变小时,内存管理器会将物理内存页(通常大小为4KB)保存到磁盘文件。数据或者代码页会根据需要在物理内存和磁盘之间移动。
3. 虚拟内存的技术实现
虚拟内存的实现需要建立在离散分配的内存管理方式的基础上。
3.1 请求分页存储管理
- 操作系统将内存划分成大小相等的物理块
- 要运行作业时,不需要将作业所需的全部地址空间同时装入内存。
- 所以需要引入请求调页功能和页面置换功能。
- 在作业开始运行前,仅装入当前要执行的部分段即可运行,假如在作业运行的过程中发现要访问的页面不在内存,则由处理器通知操作系统按照对应的页面置换算法将相应的页面调入到内存,同时操作系统也可以将暂时不用的页面置换到外村中。
3.2 请求分段存储管理
- 建立在分段存储管理之上,增加了请求调段功能和分段置换功能
- 在作业开始运行之前,仅装入当前要执行的部分段即可运行;
- 在执行过程中,可使用请求调入中断动态装入要访问但又不在内存的程序段;
- 但当内存空间已满,又需要装入新的段时,根据置换功能适当调出某个段,以便腾出空间而装入新的段。
3.3 请求段页式存储管理
|