第9章虚拟存储器
背景背景、、概念
请求分页
页面置换
页框的分配
颠簸/抖动
其他其他考虑考虑
n g S y s t e m s , B J U T
9.1 背景
进程执行的基本要求 正在执行指令必须在内存 进程的全部逻辑空间装入内存 动态分区, 分页, 分段
逻辑地址空间大小< 内存空间大小 覆盖覆盖、、动态加载
当前需要的指令和数据在内存
程序员的责任
n g S y s t e m s , B J U T
特点
在一段时间内, 通常只执行一部分代码 若干子程序, 循环
有些代码很少有些代码很少、、甚至根本没有执行 用户申请分配的数据空间, 如数组等数据结构, 实际执行时只使用了一部分
在一段时间内, 对数据结构的访问集中在有限的范围内
n g S y s t e m s , B J U T
结论
程序在执行时呈现局部性规律
在一段时间内, 程序的执行仅限于某个部分, 所访问的存储空间也局限于某个区域
––––局部性原理
进程的整个逻辑空间不必全部装入内存
n g S y s t e m s , B J U T
如果进程部分在内存就可以执行……
进程逻辑地址空间可以超过内存物理空间 程序设计更方便 内存可以同时容纳更多进程
提高CPU 利用率
提高系统吞吐量 进程装入和交换所需要的I/O 减少
n g S y s t e m s , B J U T 虚拟存储器的概念(1)
在一个新进程投入运行之前,
OS 只把开始时需要的几页/段装入内存 进程启动运行
其余部分留在磁盘上 进程运行时,
如果欲取的指令或要访问的数据已在内存, 则继续执行
如果不在内存(缺页/缺段), OS 负责把所需的页/段调入内存, 然后进程继续执行–请求调入 如果内存已满, OS 选择内存中暂时不用的页/段, 调出到磁盘上; 腾出内存空间后, 再调入需要的
n g S y s t e m s , B J U T 虚拟存储器的概念(2)
虚拟存储器 允许仅把进程的一部分装入内存就可运行进程 具有请求调入和置换功能 从逻辑上扩充内存容量 用户看到的: 容量巨大的存储器—“虚拟” 使用户逻辑存储器与物理存储器分离
虚拟存储器的容量是不是无限大? 指令中地址域的长度 辅存的容量 虚拟存储技术与交换技术的区别 交换: 以进程为单位 虚拟存储: 以页/段为单位
n g S y s t e m s , B J U T 虚拟存储空间> 物理存储空间
n g S y s t e m s , B J U T 虚拟存储器的特征
离散性 内存的分配方式—离散
多次性
进程执行时不必全部装入内存
进程被分成多次调入内存 对换性
在进程执行过程中, 暂时不需要的代码和数据被换出, 换入需要的部分
进程的换入换出 虚拟性 从逻辑上扩充内存容量 用户看到的
n g S y s t e m s , B J U T 虚拟存储器的实现方式
实现方式
请求分页系统/ 页式虚拟存储系统
分页+ 请求调页+ 页面置换
请求分段系统/ 段式虚拟存储系统
分段+ 请求调段+ 分段置换
段长度可变, 置换算法复杂
段页式虚拟存储系统
段页式+ 请求调页+ 页面置换
硬件支持 请求分页(分段)的页表(段表)机制 缺页(缺段)中断机构 地址变换机构
n g S y s t e m s , B J U T 9.2 请求分页
以分页为基础 仅当需要一页时, 才把该页调入内存
调页程序/ 页面调度程序(pager)
只调入需要的页, 进程装入需要I/O 量减少
进程需要的内存空间减少
内存可以容纳更多用户进程
首先要解决的问题
如何知道一个页面是否在内存? 如果访问的页在内存, 如何确定物理地址? 如果访问的页不在内存, 如何调入?
n g S y s t e m s , B J U T
请求分页系统中的页表页表
每个进程有自己的页表 每个页表项(page table entry)包括
页框号: 如果该页在内存, 保存在哪个页框里 存在位(P, present) / 有效-无效位 该页是否在主存
修改位(M, modify) / 脏位(dirty bit) 该页此次装入内存后是否被修改过 存取权限位
页级的保护和共享
该页在辅存的地址
n g S y s t e m s , B J U T 地址变换—如果访问的页在内存
n g S y s t e m s , B J U T
缺页、缺页中断
缺页(page fault) / 页故障/ 页错误 进程执行时, 要访问页不在内存
缺页中断(page fault trap)
OS 响应缺页中断, 把所需页面调入内存
n g S y s t e m s , B J U T 处理缺页的步骤(课本274页 ~
)
n g S y s t e m s , B J U T
缺页中断与普通中断的区别 在指令执行期间产生中断信号, 并被处理 普通中断: CPU 在执行完一条指令时检查是否有中断请求
一条指令执行期间, 可能产生多次缺页中断 引起缺页中断的指令被重新执行
n g S y s t e m s , B J U T 9.4 页面置换
缺页 缺页中断 OS 调入所需页面到空闲页框
如果系统中已经没有空闲页框
……
n g S y s t e m s , B J U T
页面置换
页面置换(page replacement)
找出在内存中但不使用的页, 换出到辅存 空闲页框 把需要的页面换入内存 修改位(modify bit) / 脏位(dirty bit)
如果页没有被修改过, 不需要写到辅存 页面置换算法
任务––找出“牺牲品”
决定哪个页面是当前不使用的
目标: 缺页率最低
必须熟练掌握的算法
FIFO, OPT, LRU
n g S y s t e m s , B J U T 包含页面置换的缺页处理基本流程1.
查找所需页面在磁盘上的位置2.
找到一个空闲页框 如果没有,①应用页面置换算法选择一选择一个个“牺牲”页框②如果“牺牲”页框中的页被修改过, 把它写回磁盘③更新页表和页框表3.
将所需页面读入空闲页框, 更新页表和页框表4.重启进程(导致缺页的指令)
n g S y s t e m s , B J U T 例: 页面置换