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



















