12.Virtual Memory
交换技术
分区
-
分区方式将主存分为两大区域
- 系统区: 固定的地址范围内, 存放操作系统
- 用户区: 存放所有用户程序
-
简单固定分区
-
用户区划分长度不等的固定长的分区
-
当一个任务调入主存时, 分配一个可用的, 能容纳它的, 最小的分区
-
优点: 简单
-
缺点: 浪费主存空间
-
-
可变长分区
-
用户区按每个任务所需要的内存大小进行分配
-
优点: 提高了主存的利用率
-
缺点: 时间越长, 存储器中的碎片就会越多
-
分页
-
目的: 减少碎片的产生
-
基本思想
- 把主存分成固定长且比较小的存储块, 称为页框, 每个任务也被划分成固定长的程序块, 称为页
- 将页装入页框中, 且无需采用连续的页框来存放一个任务中所有的页
-
逻辑地址: 指令中的地址
-
物理地址: 实际主存地址
虚拟存储器
-
问题
- 内存大小是有限的, 但对内存的需求不断增加
-
基本思想
- 请求分页: 仅将当前需要的页调入主存
- 通过硬件将逻辑地址转换为物理地址
- 未命中时在主存和硬盘之间交换信息
- 请求分页: 仅将当前需要的页调入主存
-
优点
- 在不扩大物理内存的前提下, 可以载入更多的任务
- 编写程序时不需要考虑可用物理内存的状态
- 程序员认为可以独享一个连续的, 很大的内存
- 可以在大于物理内存的逻辑地址空间中编程
流程
设计的一些问题
分页式虚拟存储器
-
主存储器和虚拟地址空间都被划分为大小相等的页面
- 虚拟页/逻辑页: 虚拟地址空间中的页面
- 物理页/页框: 主存空间中的页面
-
页表
- 包含了所有虚拟页的信息, 包括虚拟页的存放位置, 装入位, 修改位, 存取权限等
- 保存在主存中
- 虚拟地址
- 虚拟页号+页内偏移量
页表
问题
快表 TLB
-
页表的使用增加了主存的访问次数
-
为了减少访存次数, 把页表中最活跃的几个页表项复制到高速缓存中
-
后备转换缓冲器(简称"块表"): 将页表项放入高速缓存中
- 映射: 关联映射, 组关联映射
- 替换: 随机替换
-
主存中的页表相应地称之为"慢表"
CPU访存过程
-
缺页时, 页管理器优先替换主存中不存在于cache中的页
TLB、页表、Cache的缺失组合
分段式虚拟存储器
-
将程序和数据分成不同长度的段, 将所需的段加载到主存中
-
虚拟地址: 段号+段内偏移量
-
与分页式虚拟存储器相比
- 分页式虚拟存储器(页对程序员不可见)
- 优点: 实现简单, 开销少
- 缺点: 一个数据或一条指令可能会分跨在两个页面
- 分段式虚拟存储器(段对程序员可见)
- 优点: 段的分界与程序的自然分界相对应, 易于编译, 管理, 修改和保护
- 缺点: 段的长度不固定(引起碎片)
- 分页式虚拟存储器(页对程序员不可见)
段页式虚拟存储器
-
将程序和数据分段, 段内再进行分页
- 每个分段都有一个页表
-
虚拟地址
- 段号+页号+页内偏移量
-
优点
- 程序按段实现共享与保护
-
缺点
- 需要多次查表