第十二讲 虚拟存储器
操作系统的出现
- 第一台计算机诞生时,采用手工操作的方式
- 用户独占全机:不会出现因资源已被其他用户占用而等待的现象,但资源的利用率低
- CPU 等待手工操作:CPU的利用不充分
- 批处理系统:加载在计算机上的一个系统软件,在它的控制下,计算机能够自动地、成批地处理一个或多个用户的任务(包括程序、数据和命令)
- 联机批处理系统,脱机批处理系统
- 操作系统:一种控制应用程序运行和在计算机用户与计算机硬件之间提供接口的程序
- 目标: 使计算机使用起来更方便
- 允许计算机系统的资源以有效的方式使用
存储管理
- 早期计算机的主存中仅包含系统软件和一个用户程序
- 单道程序设计
- 现在计算机的主存中包含操作系统和若干个用户程序
- 当所有任务都需要等待I/O时,为了避免处理器处于空闲状态,需要尽可能让更多的任务进入主存
- 多道程序设计: 让处理器处理多个任务,提高处理器的利用率
- 存储器管理
- 在多道程序系统中,主存需要进一步划分给多个任务,划分的任务由操作系统动态执行
- 这里不考虑“进程”这一概念
如何将更多的任务装入主存
- 增大主存容量
- 使用交换(exchange)技术
- 当主存中没有处于就绪的任务时,操作系统调入其他任务来执行
- 分区(partitioning)和分页(paging)
- 虚拟存储器
- 请求分页:每次访问仅将当前需要的页面调入主存,而其他不活跃的页面放在外存磁盘上
- 虚拟地址
分区方式
将主存分为用户区和系统区
简单固定分区
- 用户区划分成长度不等的固定长的分区
- 当一个任务调入主存时,分配一个可用的、能容纳它的、最小的分区
- 优点:简单
- 缺点: 浪费主存空间
可变长分区
- 用户区按每个任务所需要的内存大小进行分配
- 优点:提高了主存的利用率
- 缺点:时间越长,存储器中的碎片就会越多
分页方式
基本思想
- 把主存分成固定长且比较小的存储块,称为页框(page frame),每个任务也被划分成固定长的程序块,称为页(page)
- 将页装入页框中,且无需采用连续的页框来存放一个任务中所有的页
- 逻辑地址:指令中的地址
- 物理地址:实际主存地址
虚拟存储器
问题: 内存大小有限, 但对内存的需求不断增加
基本思想
- 请求分页:仅将当前需要的的页面调入主存
- 通过硬件将逻辑地址转换为物理地址
- 未命中时在主存和硬盘之间交换信息
优点
- 在不扩大物理内存的前提下,可以载入更多的任务
- 在编写程序时不需要考虑可用物理内存的状态, 程序员认为可以独享一个连续的、很大的内存
- 可以在大于物理内存的逻辑地址空间中编程
分页式虚拟存储器
- 主存储器和虚拟地址空间都被划分为大小相等的页面
- 虚拟页(逻辑页):虚拟地址空间中的页面
- 物理页(页框):主存空间中的页面
- 页表
- 保存在主存中
- 虚拟地址= 虚拟页号+页内偏移量
- 根据页表的记录, 将虚拟页号转换为物理页号, 从而将虚拟地址转换为物理地址
- 快表(和Cache类似)
- 为了减少访存次数,把页表中最活跃的几个页表项复制到高速缓存中
CPU的访存过程
分段式虚拟存储器
- 将程序和数据分成不同长度的段,将所需的段加载到主存中
- 虚拟地址:段号+ 段内偏移量
和分页式虚拟存储器的比较
- 分页式虚拟存储器
- 优点: 实现简单、开销少
- 缺点: 一个数据或一条指令可能会分跨在两个页面
- 分段式虚拟存储器
- 优点: 段的分界与程序的自然分界相对应,易于编译、管理、修改和保护
- 缺点: 段的长度不固定
段页式虚拟存储器
- 将程序和数据分段,段内再进行分页, 一次从硬盘加载一页到主存
- 每个分段都有一个页表
- 虚拟地址: 段号+ 页号+ 页内偏移量
- 优点: 程序按段实现共享与保护
- 缺点: 需要多次查表