当前位置:文档之家› 第9章 虚存

第9章 虚存

第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 例: 页面置换

相关主题
文本预览
相关文档 最新文档