虚拟存储器
虚拟存储器
问题1: 主存(由DRAM构成)存储容量受限,但我不想让计算机收到物理内存大小的制约
问题2: 现代操作系统都支持多道程序运行,如何让多个程序有效而安全地共享主存
操作系统的出现
- 第一台计算机诞生时,采用手工操作的方式,一个用户独占全机
- 批处理系统:加载在计算机上的一个系统软件,在它的控制下,计算机能够自动地、成批地处理一个或多个用户的作业(包括程序、数据和命令)
- 操作系统:一种控制应用程序运行和在计算机用户与计算机硬件之间提供接口的程序
- 目标:
- 使计算机使用起来更方便
- 允许计算机系统的资源以有效的方式使用
- 目标:
存储器管理
早期计算机的主存中仅包含系统软件和一个用户程序—单道程序设计
现在计算机的主存中包含操作系统和若干个用户程序
- 当所有任务都需要等待I/O时,为了避免处理器处于空闲状态,需要尽可能让更多的任务进入主存
- 多道程序设计:让处理器一次处理多个任务,提高处理器的利用率
存储器管理:在多道程序系统中,主存需要进一步划分给多个任务,划分的任务由操作系统动态执行(本门课不区分“进程”和“任务”这个更抽象的概念)
增大主存容量
- 使用交换技术
- 当主存中没有处于就绪的任务时,操作系统调入其他任务来执行
- 分区(partitioning)和分页(paging)
- 虚拟存储器
- 请求分页:将不活跃的页面放在外存,仅将需要的页面调入主存
- 虚拟地址
分区方式
- 系统区:固定地址 存放OS
- 用户区:存放用户程序
简单固定分区
- 用户区划分成长度不等的定长分区
- 任务调入主存时分配可用的、能容纳的最小空间
- 优点:简单
- 缺点:浪费空间
可变长分区
- 用户区按每个任务所需的内存大小进行分配
- 优点:提高主存利用率
- 缺点:时间越长,碎片越多
分页方式
目的:减少碎片的产生
- 页框(page frame):主存划分成固定长且比较小的存储块
- 页(page):任务划分成固定长的程序块
- 将页装入页框中
- 同一任务所需的页无需放入连续的页框
- 逻辑地址:指令中的地址
- 物理地址:主存中的地址
虚拟存储器
- 基本思想:请求分页,仅将当前需要的页面调入主存
- 通过硬件转换逻辑地址为物理地址
- miss时在主存和硬盘间交换信息
- 优点:对物理内存的封装
- 不受容量限制,可载入更多任务
- 无需考虑物理内存的状态,页实际存放的位置
设计
- 页大小:4KB 8KB
- 映射:全相联映射
- 写策略:写回(主存比硬盘快100000多倍)
- 类型
- 分页式虚拟存储器
- 分段式虚拟存储器
- 段页式虚拟存储器
分页式虚拟存储器
- 主存和虚拟地址空间都被划分为大小相等的页面
- 虚拟页 / 逻辑页:虚拟地址空间中的页面
- 物理页 / 页框:主存空间中的页面
- 页表:虚拟页与物理页的映射
- 页表包含了所有虚拟页的信息:存放位置(页框号)、valid bit、dirty bit、存取权限
- 保存在主存中
- 虚拟地址:页号+偏移量
- 实际地址:页表映射的页框号+偏移量
- 页框号位数:主存位数-页面大小位数
- 优点:实现简单、开销小
- 缺点:数据/x指令可能跨页
快表 TLB
页表在主存中,每次访问主存都需要查页表,Cache不就失效了吗?
- 页表的使用增加了主存的访问次数
- 为了减少访存次数,把页表中最活跃的几个页表项复制到高速缓存中
- 后备转换缓冲器(简称“快表”):将页表项放入高速缓存中
- 映射:关联映射,组关联映射
- 替换:随机替换
- 主存中的页表相应地称之为“慢表”
分段式虚拟存储器
- 将程序与数据分成不同大小的段,将所需的段加载到主存
- 虚拟地址:段号+段内偏移量
- 优点:与程序自然分界对应,便于维护
- 缺点:段长度不固定
段页式虚拟存储器
- 将数据分段,段内再分页
- 虚拟地址:段号+页号+页内偏移量
- 优点:按段实现共享、保护
- 缺点:需要多次查表
CPU访问过程
This post is licensed under CC BY 4.0 by the author.






