第八章 虚拟内存

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

最大空间的进程:可获得最大的空闲页框
具有最大剩余执行窗口的进程:执行了最短时间的进程

虚拟内存分区

分页 分段 段页式

虚存的策略

读取策略 放置策略 置换策略

复习题 2、5
习题 1、4、11
1. 需要访问一个不在内存的地址,产生中断 2. OS将进程放置在阻塞态 3. OS将引发访问故障的进程块读入内存

OS产生一个磁盘I/O读请求
执行另一个进程 需要的块被读入内存时,产生I/O中断
OS将阻塞的进程置为就绪态

提高系统利用率

在内存中保留多个进程,系统并发度提高

任何特定的进程都仅仅装入它的某些块 任何时刻都至少有一个处于就绪态

给每个活动进程分配多少页框 计划置换页的集合是局限在哪些进程 计划置换的页集中,选择换出哪一个页 所有策略目标:移出最不可能访问的页

页框锁定

置换策略约束:内存中的某些页框可能是被锁定的 锁定页框中的页不可置换 大部分OS内核和重要的控制结构就保存在锁定页 框中,I/O缓冲区和其它对时间要求严格的区域


当置换页时,OS查找使用位置为0的页框
每遇到使用位为1的页,将其置为0

改进的时钟算法

使用位+修改位

最近未被访问,也未被修改(u=0;m=0)
最近被访问,但未被修改(u=1;m=0) 最近未被访问,但被修改(u=0;m=1) 最近被访问,被修改(u=1;m=1)

改进的时钟算法

全局置换策略

把内存中所有未被锁定的页作为候选页
简单,开销小

固定分配、局部置换

分配给内存中运行的进程的页框数固定 需要根据应用程序的类型和程序的请求总量事先确 定分配给该进程的总页框数

缺点:如总页面数分配得过少,则会产生很高的缺 页率,如过多,内存只能有很少的程序,处理器很 多空闲时间

访问页表项

在TLB中,或在内存中或磁盘中

访问的字

高速缓存中、内存中或磁盘中
如果在磁盘中

含有该字的页装入内存;所在的块状如高速缓存;该页对 应的页表项更新

内部碎片:页越小,内部碎片的总量越少
页表长度:页越多,页表越大


磁盘开销:页越大,磁盘I/O开销越小
缺页中断:页越多,缺页率越低 辅存设备的物理特性:内存越大,页也增大, 实现有效数据块传递

决定一个进程块驻留在实存中的什么地方

分页/段页式系统:离散放置 分段:最佳适配/首次适配/下次适配算法 非一致存储访问多处理器(分布式系统或集群)

性能依赖于数据驻留的位置与使用数据的处理器间
的距离

自动放置策略希望能把页分配到能够提供最佳性能
的内存

必须读取一个新页时,应该置换内存中的哪一页

虚拟内存分页

页表项需驻留位(P)来表示它所对应的页当前是否在内存中, 如在,还包括页框号 页表项中还需另一个控制位(M)


相应页的内容从上一次装入内存中到现在是否已改变

如未变,该页换出时,不需要用页框中的内容更新该页

实现保护和共享所需的其它控制位
页号
页帧
P
驻留位
M
页号
修改位
=0 未修改 =1 已修改过

发生一次缺页中断时,从产生缺页中断的进程的驻 留集中选择一页用于置换

不时地重新评估页框分配,增加或减少分配的页框, 以提高性能
wenku.baidu.com

用于确定何时将修改过的页写回磁盘

请求式清除

只有当一页被选择置换 时才被写回磁盘 发生缺页中断的进程在解除阻塞之前必须等待两次页传送,耗费CPU 时间

预约式清除

将被修改的多个页在需要用到它们所占据的页框之前成批的写回磁盘 写回辅存的页可能仍然留在内存,在下次移出内存之前又被修改,使 得上次的写回操作毫无意义

页缓冲技术

只清除可以用于置换的页,取消了清除和置换之间 的成对关系

页缓冲可以将被置换页放置在两个表中:修改表和 未修改表

修改表:页可以周期性地成批写出,移至未修改表

读取策略 放置策略 置换策略 驻留集管理 清除策略

加载控制

确定一个页何时读入内存

请求分页

只当访问到某页中的一个单元时才将该页取入内存

预先分页

读取的页并不是缺页中断请求的页
利用大多数辅存的特性,寻道时间和合理的延迟
一次读取许多连续的页比隔一段时间读取一页有效 进程第一次启动时,可以采用预先分页策略
未修改表:页或因为访问而回收,或因页框分配给另一 页而淘汰

系统并发度---驻留内存中的进程数目

驻留进程太少,所有进程同时处于阻塞状态的
概率较大

驻留进程太多,会频繁发生缺页中断,导致系
统抖动

系统并发度

系统并发度减小,一个或多个驻留进程必须被挂起

最低优先级进程 缺页中断进程:工作集还没有驻留,性能受影响最小 最后一个被激活的进程:此进程最有可能没驻留 驻留集最小的进程:将来再装入代价最小
1. 从指针当前位开始扫描,选择u=0,m=0 2. 否则,重新扫描,查找u=0;m=1,选择第一个置换,
对每个跳过的页框,u=1置0
3. 否则,指针回到最初位,此时所有u=0,重复第一步、
第二步。

页缓冲技术采用FIFO,简单且开销小
为提高性能,被置换的页被分配到两个表中

如未修改,分配到空闲页链表 如已修改,分配到修改页链表

虚拟内存所需因素

必须有对所采用的分页或分段方案的硬件支持 OS必须有管理页或段在内存和辅助存储器之间移动的软件

虚拟内存特征

离散地分配内存


进程分多次调入内存,每次只调入一部分
从逻辑上扩充内存容量
速度接近内存,成本接近外存

简单分页

每个进程都有自己的页表 页表项包含与内存中页框相对应的页框号

不灵活

可变分配、全局置换

易实现,一个进程的某一页置换了另一个进程的某 一页,则该进程分配增加一页,另一个则减少一页

内存中有许多分配到一定数目页框的进程,一个空 闲页框列表


难点:没有空闲页框时,如何选择置换页
解决:页缓冲

可变分配、局部置换

当新进程装入内存时,根据应用类型、程序要求或 其他原则分配一定数目的页框作为其驻留集

实存储器:执行进程的内存
虚拟内存:用户感觉的是更大的内存,实际分
配在磁盘上

支持更有效的多道程序设计
解除了用户与内存之间的紧密约束

系统抖动:一块正好在将要被用到之前换出,OS 不得不很快把它取回。处理器的大部分时间都用于 交换块,而不是执行指令。

避免抖动

局部性原理:一个进程中程序和数据引用的集簇倾向 短时间仅需要进程的一部分块 智能猜测将会访问哪一块

缺页率=4/12=33.3%

先进先出(FIFO)

把分配给进程的页框视为一个循环缓冲区,按循环方式移动页 只需一个指针,在页框中循环,实现简单 置换驻留内存时间最长的页

缺页率=6/12=50%

时钟(Clock)

需要给每一页框关联一个使用位,当某页装入内存时, 使用位为1

页被访问到时,使用位置1
页帧
引用字段 磁盘地址
记录访问次 数、时间间 隔等信息
=0 不在内存 =1 在内存

地址转换
页表起始地址
n>m

页表存在虚存中,至少一部分必须在内存中
1页=4KB=212B;4GB=232B=220页;1页表=220页表项=220*4B=210页; 一个根页表=210页表项=210*4B=212B,占据一页

如在,则含有段起始地址和长度

修改位 其它控制位
段号 段长
基址 驻留位 修改位 访问字段 存取权限 扩充位 外存地址

用户的地址空间划分成许多段,每个段依次划
分成许多固定大小的页,页的长度等于内存中 页框大小

分页对程序员是透明的,消除了外部碎片 分段对程序员是可见的,支持共享和保护


页面分配策略

固定分配

主存中为进程分配固定数目的页框 数目在最初加载时决定(进程创建时) 一旦发生页错误,进程的一页必须被它所需的页替换

可变分配

分配给进程的页框数,在其生命周期中不断变化 需要OS时刻评估进程行为,检测缺页率

置换范围

局部置换策略

仅仅在产生缺页的进程的驻留页集中选择

页框关联lock位实现

基本置换算法

最佳置换(OPT)

选择置换下次访问距当前时间最长的那些页 能导致最少的缺页中断,理想化 ,不可实现
页框初始化

初始化后缺页率:3/12=25%

基本置换算法

最近最少使用(LRU)

置换内存中上次使用距当前最远的页

难以实现,开销很大

添加时间戳 维护访问页的栈
一页

控制位:该域包含一些标记

链指针:如果某个项没有链项,则该域为空
页框号 每个物理内存页框一项

问题:虚存访问可引起两次物理内存访问,时间
加倍

一次取相应的页表项 一次取需要的数据

解决:使用一个特殊的高速缓存(TLB)保存页表

包含最近用过的页表项
转换检测缓冲区
页框号

虚拟地址转换成实地址
内存
内存或磁盘
页框号
页框

传统页表缺陷:页表的大小与虚拟地址空间的
大小成正比 解决方案:


虚拟地址的页号部分使用一个简单的散列函数映射 到散列表中,散列表中含有指向倒排表的指针,倒
排表含有页表项

散列表和倒排表各有一项对应于一个实存页 页表的大小都是固定的=页框数

页号:虚拟地址的页号部分 进程标志符:PID--页号+ID=特定进程的虚拟地址空间的

不是发生物理移动,仅是页表项移动

所谓驻留集,是指在某段时间间隔内,进程要访问 的页面集合,是一个二元函数w(t,△)

分配驻留集需考虑因素

分配给一个进程的内存越少,同时驻留内存的进程数越多, OS越可能找到一个就绪进程,减少CPU时间

一个进程在内存中的页数较少,缺页率则相对较高 特定进程分配的内存空间超过一定大小后,缺页率没有明 显变化

虚拟内存(virtual memory) 允许进程执行时只将
部分程序放入内存

进程中的所有内存访问都是逻辑地址,运行时转换 成物理地址

进程可以换入换出内存,不同时刻占据内存中的不同区


一个进程可以划分成许多块(页和段),执行过程 不需要连续地位于内存。

虚拟内存支持的程序的执行

OS仅读取包含程序开始出动一个或几个块 进程中任何时候都在内存的部分---常驻集

进程可以比内存的全部空间还大

将程序分块,实施覆盖策略分别加载 引入虚拟内存,由OS和硬件完成

内存管理单元(MMU,Memory Management Unit)

集成于CPU,或作为一个协处理器 功能:

分解逻辑地址 地址转换 发出缺页中断 设置和检查页表等

存储器分类
每个进程一个段表,每个段一个页表

逻辑地址
段号 段内页号 页内偏移量

段表
控制位 页表长度 页表起始地址

页表
控制位 页框号

防止越界和越权

操作系统内存管理设计:


是否使用虚存技术------硬件平台 是使用分页还是分段,或二者结合---硬件平台
虚存管理的算法---------软件支持



允许把内存视为由多个地址空间或段组成,段大小不等, 且是动态的 内存访问=段号+偏移量


虚拟分段优点:

简化对不断增长的数据结构的处理 允许程序独立地改变或重新编译 有助于进程间共享 有助于保护,程序员可以方便指定访问权限

分段组织

每个进程有一个唯一的段表 段表项中有一位表明该段是否在内存—驻留位
相关文档
最新文档