【第6章 | 虚拟存储器】(操作系统 慕课版)

目录

一、虚拟存储器概述

1.1局部性原理

1.2定义与特征

1.3实现方法

二、请求分页存储管理方式

2.1请求分页存储管理

2.1.1请求分页中的硬件支持

2.1.2请求分页中的内存分配

2.1.3页面调入策略

2.2页面置换算法

2.2.1最佳页面置换算法OPT(Optimal)

2.2.2先进先出页面置换算法(FIFO,First In First Out)

2.2.3最近最久未使用页面置换算法(LRU, Least Recently Used) 

2.2.4最少使用页面置换算法LFU

2.2.5Clock页面置换算法(NRU,Not Recently Used)

2.2.6页面缓冲算法PBA(Page Buffering Algorithm)

知识回顾:

2.3“抖动”与工作集

三、请求分段存储管理方式

3.1 请求分段中的硬件支持

3.2分段的共享

四、虚拟存储器实现实例


一、虚拟存储器概述

前面所介绍的各种存储器管理方式,有一个共同特点作业全部装入内存后方能运行。

问题: 大作业装不下、少量作业得以运行

解决办法: 扩充内存、逻辑上扩充内存容量(虚拟存储器)

1.1局部性原理

1. 常规存储器管理方式的特征:

一次性:作业被一次性全部装入内存

驻留性:作业一直驻留在内存

一次性和驻留性使许多在程序运行中不用或暂不用的程序(数据)占据了大量的内存空间,使得一些需要运行的作业无法装入运行。

2. 微机操作系统的发展:

1.2定义与特征

1. 虚拟存储器定义:

原理:基于局部性原理,应用程序在运行之前,没有必要全部装入内存,仅须将那些当前要运行的部分页面或段先装入内存便可运行,其余部分暂留在盘上。

定义:虚拟存储器具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。

目标:其逻辑容量由内存容量和外存容量之和所决定,其运行速度接近于内存速度,而成本接近于外存。

2.虚拟存储器的特征:

(1) 多次性:作业中的程序和数据允许被分成多次调入内存运行

(2) 对换性:作业运行时无须常驻内存

(3) 虚拟性:逻辑扩充了内存容量,使用户看到的内存容量远大于实际内存容量

1.3实现方法

请求分页系统:

        硬件支持:页表、缺页中断、地址变换机构。

        软件支持:请求调页软件、页面置换软件。

请求分段系统:

        硬件支持:段表、缺段中断、地址变换机构。

        软件支持:请求调段软件、段置换软件。

段页式虚拟存储器:

        增加请求调页和页面置换。

        Intel 80386 及以后。

二、请求分页存储管理方式

2.1请求分页存储管理

2.1.1请求分页中的硬件支持

1. 请求页表机制:

(1)状态位P:指示该页是否在内存

(2)访问字段A:记录该页在一段时间内被访问的次数

(3)修改位M:也称脏位(dirty bit),标志该页是否被修改过

(4)外存地址:指示该页在外存中的地址(物理块号)

2. 缺页中断机构:

        在指令执行期间产生和处理中断信号。

        一条指令在执行期间,可能产生多次缺页中断。

3. 地址变换机构:与分页内存管理方式类似

补充知识点1:请求页表机制

补充知识点2:地址变换机构具体实现

2.1.2请求分页中的内存分配

2.1.3页面调入策略

1. 何时调入页面:

        预调页策略:预先调入一些页面到内存。

        请求调页策略:发现需要访问的页面不在内存时,调入内存。

2. 从何处调入页面:

(1)如系统拥有足够的对换区空间,全部从对换区调入所需页面

(2)如系统缺少足够的对换区空间,凡是不会被修改的文件,都直接从文件区调入;当换出这些页面时,由于未被修改而不必再将它们重写磁盘,以后再调入时,仍从文件区直接调入;修改部分,放入对换区

(3)UNIX方式:未运行过的页面,从文件区调入;曾经运行过但又被换出的页面,从对换区调入

3.页面调入方法:

(1)查找所需页在磁盘上的位置。

(2)查找一内存空闲块:

        如果有空闲块,就直接使用它;  

        如果没有空闲块,使用页面置换算法选择一个“牺牲”内存块;

        将“牺牲”块的内容写到磁盘上,更新页表和物理块表

(3)将所需页读入(新)空闲块,更新页表。

(4)重启用户进程。

4. 缺页率:

缺页中断处理时间的例子:

2.2页面置换算法

页面置换:找到内存中没有使用的一些页,换出

        算法:替换策略。

        性能 :找出一个导致最小缺页数的算法。

同一个页可能会被装入内存多次。

页面置换完善了逻辑内存和物理内存的划分——在一个较小的物理内存基础之上可以提供一个大的虚拟内存。

页面置换算法

最佳置换算法(OPT)  先进先出置换算法(FIFO)  最近最久未使用置换算法(LRU)

最少使用算法(LFU)  Clock置换算法                       页面缓冲算法

需要一个最小的缺页率。

通过运行一个内存访问的特殊序列(访问序列),计算这个序列的缺页次数。

2.2.1最佳页面置换算法OPT(Optimal)

最佳置换算法例子

2.2.2先进先出页面置换算法(FIFO,First In First Out)

先进先出置换算法例子:

2.2.3最近最久未使用页面置换算法(LRU, Least Recently Used) 

LRU算法的硬件支持:

1)寄存器:为内存中的每个页面设置一个移位寄存器。

        被访问的页面对应寄存器的Rn−1位置为1,定时右移。

        具有最小数值的寄存器所对应的页面为淘汰页。

(2)栈:保存当前使用的各个页面的页面号。

        被访问的页,移到栈顶。

        栈底是最近最久未使用页面的页面号。

2.2.4最少使用页面置换算法LFU

为内存中的每个页面设置一个移位寄存器,用来记录该页面的被访问频率

LFU 选择在最近时期使用最少的页面∑Ri作为淘汰页。

2.2.5Clock页面置换算法(NRU,Not Recently Used)

LRU的近似算法,又称最近未用(NRU)或二次机会页面置换算法

1. 简单的Clock算法

每个页都与一个访问位相关联,初始值位0。

当页被访问时置访问位为1。

置换时选择访问位为0的页 ;若为1,重新置为0。

 2.改进型Clock算法:

除须考虑页面的使用情况外,还须增加置换代价。

淘汰时,同时检查访问位A与修改位M

        第1类(A=0,M=0):表示该页最近既未被访问、又未被修改,是最佳淘汰页。

        第2类(A=0,M=1):表示该页最近未被访问,但已被修改,并不是很好的淘汰页。

        第3类(A=1,M=0):表示该页最近已被访问,但未被修改,该页有可能再被访问。

        第4类(A=1,M=1):表示该页最近已被访问且被修改,该页有可能再被访问。

置换时,循环依次查找第1类、第2类页面,找到为止

        第一轮扫描:扫描第一个(A=0, M=0)的帧用于替换,不改变访问位A。

        第二轮扫描:扫描第一个(A=0, M=1)的帧用于替换,将所有扫描过的页面访问位A都置0

        第三轮扫描:扫描第一个(A=0, M=0)的帧用于替换,不修改任何标志。

        第四轮扫描:扫描第一个(A=0, M=1)的帧用于替换。

2.2.6页面缓冲算法PBA(Page Buffering Algorithm)

1. 影响效率的因素:(1)页面置换算法 (2)写回磁盘的频率 (3)读入内存的频率

目的

        显著降低页面换进、换出的频率,减少了开销。

        可采用较简单的置换策略,如不需要硬件支持。

2. 具体做法:

设置两个链表: ①空闲页面链表:保存空闲物理块。 ②修改页面链表:保存已修改且需要被换出的页面等被换出的页面数目达到一定值时,再一起换出外存。

访问内存的有效时间EAT:

知识回顾:

2.3“抖动”与工作集

如果一个进程没有足够的页,那么缺页率将很高,这将导致:

        CPU利用率低下。

        操作系统认为需要增加多道程序设计的道数。

        系统中将加入一个新的进程。

抖动(Thrashing)  :一个进程的页面经常换入换出。

1. 处理机的利用率:

 2.产生“抖动”的原因:

根本原因:

        同时在系统中运行的进程太多;

        因此分配给每一个进程的物理块太少,不能满足进程运行的基本要求,致使进程在运行时,频繁缺页,必须请求系统将所缺页面调入内存。

抖动的发生与系统为进程分配物理块的多少有关。

3.缺页率与物理块数之间的关系:

进程发生缺页的时间间隔与所获得的物理块数有关。

根据程序运行的局部性原理,如果能够预知某段时间内程序要访问的页面,并将它们预先调入内存,将会大大降低缺页率。

4.工作集定义:

所谓工作集,指在某段时间间隔Δ里进程实际要访问页面的集合。

把某进程在时间t的工作集记为w(t, Δ),其中的变量Δ称为工作集的“窗口尺寸”。

         工作集w(t,Δ)是二元函数,即在不同时间t的工作集大小不同,所含的页面数也不同;工作集与窗口尺寸Δ有关,是Δ的非降函数,即:w(t,Δ)⊆w(t,Δ+1)

工作集举例:

5.抖动的预防方法:

(1)采取局部置换策略:只能在分配给自己的内存空间内进行置换;

(2)把工作集算法融入到处理机调度中;

(3)利用“L=S”准则调节缺页率:

        L是缺页之间的平均时间 。

        S是平均缺页服务时间,即用于置换一个页面的时间 。

        L>S,说明很少发生缺页 。

        L<S,说明频繁缺页。

        L=S,磁盘和处理机都可达到最大利用率 。

(4)选择暂停进程。

三、请求分段存储管理方式

3.1 请求分段中的硬件支持

1. 请求段表机制:

(1)存取方式:表示段存取属性为只执行、只读或允许读/写

(2)访问字段A:记录该段在一段时间内被访问的次数

(3)修改位M:标志该段调入内存后是否被修改过

(4)存在位P:指示该段是否在内存

(5)增补位:表示该段在运行过程中是否做过动态增长

(6)外存始址:指示该段在外存中的起始地址(盘块号)

2. 缺段中断机构:

指令执行期间产生和处理中断信号。

一条指令在执行期间,可能产生多次缺段中断

由于段不是定长的,对缺段中断的处理要比对缺页中断的处理复杂

3.地址变换机构:

若段不在内存中,则必须先将所缺的段调入内存,并修改段表,然后利用段表进行地址变换。

3.2分段的共享

1. 共享段表保存所有的共享段

        共享进程计数count、存取控制字段、段号

2. 共享段的分配:

对首次请求使用共享段的用户,分配内存,调入共享段,修改该进程段表相应项,再为共享段表增加一项,count=1。

对其他使用共享段的用户,修改该进程段表相应项,再为共享段表增加一项,count=count+1。

3.共享段的回收:

撤销在该进程段表中共享段所对应的表项,unt=count-1操并执行co作。

若为0,回收该共享段的内存,并取消共享段表中对应的表项。

若不为0,只取消调用者进程在共享段表中的有关记录。

4.分段保护:

(1)越界检查:

        由地址变换机构来完成; 比较段号与段表长度;段内地址与段表长度。

(2)存取控制检查以段为基本单位进行。

        通过“存取控制”字段决定段的访问方式; 基于硬件实现。

(3)环保护机构:

        低编号的环具有高优先权;

        一个程序可以访问驻留在相同环或较低特权环(外环)中的数据;

        一个程序可以调用驻留在相同环或较高特权环(内环)中的服务。

四、虚拟存储器实现实例

实例1:Windows XP系统

采用请求页面调度以及来实现虚拟存储器

使用簇在处理缺页中断时,不但会调入不在内存中的页(出错页),还会调入出错页周围的页。

创建进程时,系统会为其分配工作集的最小值和最大值:

        最小值:进程在内存中时所保证页面数的最小值。

        若内存足够,可分配更多的页面,直到达到最大值。

        通过维护空闲块链表(与一个阈值关联)来实现。

        采用局部置换方式。

置换算法与处理器类型有关:如80x86系统,采用改进型Clock算法。

实例2:Linux系统(以32位为例)

虚拟存储器是大小为4GB的线性虚拟空间。

4GB的地址空间分为两个部分:

        用户空间占据0~3GB(0xC0000000)

                由用户进程使用(MMU

                使用请求页式存储管理

        内核空间占据3GB~4GB

                由内核负责

                使用buddy和slab内存管理 (zoned buddy 分配器和slab分配器

  • 27
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值