操作系统 第五章 虚拟存储器知识点总结

综述
虚拟存储器作为现代操作系统中存储器管理的一项重要技术,实现了内存扩充的功能
内存扩充不是从物理上实际的扩充内存容量,而是逻辑上实现了对内存容量的扩充,用户感觉到内存容量比实际内存容量大得多。
可以实现小的物理内存运行更大的程序,运行更多的用户程序
虚拟存储器满足了用户的需要,改善了系统的性能
重点与难点
重点
理解虚拟存储器的基本概念
掌握页面置换算法
掌握请求分页系统的基本原理
难点
请求分页系统的地址转换以及页面置换算法
5.1 虚拟存储器的基本概念
在这里插入图片描述虚拟存储器的基本概念
虚拟存储器的引入
虚拟存储器的实现方法
虚拟存储器的特征

虚拟存储器的引入
管理存储管理方式的共同点:
要求一个作业全部装入内存后方能运行
那可能会出现的问题:
作业太大,要求的空间超出了内存总容量
有大量作业要求运行,但内存不能容下所有作业
解决方法:
物理增加内存容量
从逻辑上扩充内存容量:覆盖,对换,虚拟存储器
常规(传统)存储器管理方式的特征
一次性:要求作业全部装入内存才能运行
驻留性:程序装入内存后便一直驻留内存,直至运行结束
许多不用或暂时不用的程序占用了大量内存空间,而其他程序却无法装入!是否必要?
局部性原理
1968年,Denning.P指出
程序执行时,除了少部分的转移和过程调用指令外,在大多数情况下仍是顺序执行的
过程调用将会使程序的执行轨迹由一部分区域转至另一部分区域,但经研究看出,过程调用的深度在大多数情况下都不超过5
程序中存在许多循环结构,这些虽然只由少数指令构成,但是它们将多次执行
程序中还包括许多对数据结构的处理,如对数组进行操作,它们往往都局限于很小的范围内
局限性还表现在下述两个方面
时间局限性
如果程序中的某条指令一旦执行,则不久以后该指令可能再次执行
如果某个数据被访问过,则不久以后改数据可能再次被访问
典型原因:是在程序中存在着大量的循环操作
空间局限性
一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问,即程序在一段时间内所访问的地址,可能集中在一定的范围之内,其典型情况便是程序的顺序执行
局部性原理
综上,程序在执行时将呈现出局部性规律,即在一较短时间内,程序的执行仅限于某个部分;相应地,它所访问的存储空间也局限于某个区域。
基于局部性原理,一个作业在运行之前,没有必要全部装入内存,而仅将那些当前要运行的那部分页面或段,先装入内存便可启动运行,其余部分暂时留在磁盘上。
在这里插入图片描述
虚拟存储器的定义
虚拟存储器的基本思想是:程序、数据、堆栈的大小可以超过内存的大小,操作系统把程序当前使用的部分保留在内存,而把其它部分保存在磁盘上,并在需要时在内存和磁盘之间动态交换
虚拟存储器是指具有请求调入功能和置换功能, 能从逻辑上对内存容量加以扩充的一种存储器系统。
虚拟存储器的容量与主存的实际大小没有直接的关系,而是由内存容量和外存容量之和所决定,其运行速度接近于内存速度,而其成本却又接近于外存。
虚拟存储器支持多道程序设计技术
注意:一个虚拟存储器的最大容量是由计算机的地址结构确定的。如:若CPU的有效地址长度为32位,则程序可以寻址范围是0~(232)-1 ,即虚存容量为4GB。
虚拟存储器的实现方法
虚拟存储器的实现都是建立在离散分配的存储管理方式基础上的
实现方式主要有
请求分页系统
请求分段系统
请求分页系统
在分页系统的基础上增加了请求调页和页面置换功能
硬件支持
请求分页的页表机制,它是在纯分页的页表机制上增加若干项而形成的,作为请求分页的数据结构;
缺页中断机构,即每当用户程序要访问的页面尚未调入内存时 便产生一缺页中断,以请求OS将所缺的页调入内存;
地址变换机构, 它同样是在纯分页地址变换机构的基础上发展形成的
实现请求分页的软件
用于实现请求调页的软件和实现页面置换的软件
请求分段系统
在分段系统的基础上增加了请求调段和分段置换功能
为了实现请求分段,系统同样需要必要的硬件支持:
请求分段的段表机制,这是在纯分段的段表机制基础上,增加若干项而形成的;
缺段中断机构,每当用户程序所要访问的段尚未调入内存时,产生一缺段中断,请求OS将所缺的段调入内存;
地址变换机构
与请求调页类似,实现请求调段和置换功能也需要得到OS的支持。
虚拟存储器的特征
虚拟存储器最基本的特征是离散型,在此基础上又形成了多次性以及对唤性的特征,其所变现出来的最重要的特征是虚拟性
多次性:一个作业被分成多次调入内存运行
对换性:允许在作业的运行过程中进行换进、换出
虚拟性:能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量
虚拟性是以多次性和对换性为基础的,仅当系统允许多次将作业调入内存,并能将暂时不运行的程序和数据换出到磁盘上时才能实现虚拟存储器;多次性和对换性又必须建立在离散分配的基础上。
以CPU时间和外存空间换取昂贵内存空间,这是操作系统中的资源转换技术
5.2 请求分页存储管理方式
请求分页系统是建立在基本分页基础上的,增加了请求调页功能和页面置换功能。换入和换出的基本单位都是长度固定的页面,因而在实现上比请求分段系统简单
原理:地址空间的划分与页式存储管理相同;装入页时,装入作业的一部分(即运行所需的)页即可运行。
请求分页中的硬件支持
内存分配策略和分配算法
调页策略

页表机制
在请求分页系统中所需要的主要数据结构是页表。基本作用仍是将用户地址空间中的逻辑地址变换为内存空间中的物理地址。由于只将程序的一部分装入内存,还有一部分在外存中,因此须在页表中增加若干项,供程序或数据在换进、换出时参考。
请求分页系统中每个页表项如下所示:
各字段说明如下:
状态位P:指示该页是在内存还是在外存
访问位A:用于记录本页在一段时间内被访问的次数或记录本页在最近多长时间未被访问
修改位M:表示该页在内存中是否被修改过
外存地址:该页在外存上的地址,通常是物理块号在这里插入图片描述
缺页中断机构
在请求分页系统中,每当所要访问的页面不在内存时,便产生一缺页中断。相应的中断处理程序把控制转向缺页中断子程序,执行此子程序,即把所缺页面装入主存,然后处理机重新执行缺页时打断的指令。这时,就将顺利形成物理地址。
缺页中断与一般中断的区别
在指令执行期间产生和处理中断信号
一条指令在执行期间可能产生多次缺页中断,例如:(下页图)
所以,系统中的硬件机构应能保存多次中断时的状态,并保证最后能返回继续执行
在这里插入图片描述
地址变换机构
请求分页系统中的地址变换机构,是在分页系统地址变换机构的基础上,再为实现虚拟存储器而增加了某些功能后形成的。
在地址变换时,如果在快表中找到了要访问的页,则修改页表项中的访问位和修改位,并形成物理地址;
否则应再到内存中去查找页表,再从找到的页表项中的状态位P了解该页是否调入内存,其结果可能是:
该页已经调入内存,这时应将此页的页表项写入快表,当快表已满时,应先调出按某种算法所确定的页的页表项,然后再写入该页的页表项
该页尚未调入内存,这时便应产生缺页中断,请求OS从外存中把该页调入内存
在这里插入图片描述
内存分配策略和分配算法
在请求分页系统中,为进程分配内存时,将涉及以下三个问题:
最小物理块数的确定
物理块的分配策略
物理块分配算法

最小物理块数的确定
指保证进程正常运行所需的最小物理块数。当系统分配的物理块数少于此值时,进程将无法运行
进程应获得的最小物理块数与计算机的硬件结构有关,取决于指令的格式、功能和寻址方式
不同的作业要求不同
物理块的分配策略
问题:分配块数难确定,太少,缺页频繁,吞吐量降低;太多,内存驻留进程数减少,CPU或其它资源可能空闲
在请求分页系统中,可采取两种内存分配策略,即固定和可变分配策略。在进行置换时,也可采取两种策略,即全局置换和局部置换。于是可组合出以下三种适用的策略
固定分配局部置换:为每个进程分配固定数目的物理块,在整个运行中都不改变。如出现缺页,则从该进程在内存中的页面选出一页置换
可变分配全局置换:为每个分配一定数目的物理块,而OS自留一空闲块队列,若发现缺页,则从空闲块队列中分配一空闲块与该进程,并调入缺页装入其中。当空闲块队列用完时,OS才从内存中选择任一进程的页置换
可变分配局部置换:分配一定数目的物理块,若发现缺页,则从该进程的页面中置换一页,根据该进程缺页率高低,则可增加或减少物理块
物理块分配算法
在采用固定分配策略的时候,将系统中可供分配的所有物理块分配给各个进程,可以采用以下几种算法:
平均分配算法:将系统中所有可供分配的物理块,平均分配给各个进程,看似公平,但是没有考虑到各个进程本身的大小
按比例分配算法:根据进程的大小按比例分配给各个进程
考虑优先权的分配算法:将系统提供的物理块一部分根据进程大小先按比例分配给各个进程,
另一部分再根据各进程的优先权适当增加物理块数。即:按比例分配 + 优先权策略,考虑到了重要的、紧迫的用户程序在这里插入图片描述
调页策略
调页策略决定什么时候将一个页面由外存调入内存,从何处将页面调入内存,以及怎么调入内存,即:
调入页面的时机—when
确定从何处调入页面—where
页面调入过程–how

调入页面的时机
可采取如下两种策略:
预调页策略
将那些预计在不久便被访问的页预先调入内存。这种调入策略提高了调页的效率,减少了I/O次数。但由于这是一种基于局部性原理的预测,若预调入的页面在以后很少被访问,则造成浪费。
故这种方式常用于程序的首次调入。
请求调页策略
当进程在运行中需要访问某部分程序和数据时,若发现其所在的页面不在内存,便提出请求,由OS将其所需页面调入内存
目前的虚拟存储中大多采用此种策略

确定从何处调入页面
在请求分页系统中,通常将外存分成了文件区和对换区,文件区按离散分配方式存放文件,对换区按连续分配方式存放对换页。 这样,每当发生缺页请求时,系统应从何处将缺页调入内存,可分成如下三种情况:
UNIX方式:凡是未运行过的页面均从文件区调页,运行过的页面和换出的页面均从对换区调页
系统缺少足够的对换区空间:
凡是不会被修改的文件,每次都直接从文件区调页,换出的时候不必换出,对可能会修改的文件,换出的时候换至对换区,以后再从对换区调入。
系统拥有足够的对换区空间:运行前可以将与进程相关的文件从文件区复制到对换区,以后缺页的时候,全部从对换区调页。

在这里插入图片描述
页面调入过程
每当程序所要访问的页面未在内存时,便向CPU发出一缺页中断,中断处理程序首先保留CPU环境,分析中断原因后,转入缺页中断处理程序。该程序通过查找页表,得到该页在外存的物理块地址
若此时内存能容纳新页,则启动磁盘I/O将所缺之页调入内存,然后修改页表
若内存已满,则须先按照某种置换算法从内存中选出一页准备换出:
页未被修改过,可不必将该页写回磁盘
页已被修改过, 则必须将它写回磁盘,然后再把所缺的页调入内存, 并修改页表中的相应表项,置其状态位为“1”,并将此页表项写入快表中。
在缺页调入内存后,利用修改后的页表,去形成所要访问数据的物理地址,再去访问内存数据
5.3 页面置换算法
当出现要访问的页面不在内存,内存空间又不足的情况下,系统需淘汰一页。用来选取淘汰哪一页的规则,叫页面置换算法(也称页面淘汰算法)
页面置换算法的优劣直接影响到系统的效率(如“抖动”)
正确的置换出发点:
未来永远不再使用的页面
未来长期不会使用的页面
过去短期内较少使用的页面
目前常用的置换算法如下:
最佳(Optimal)置换算法和先进先出(FIFO)置换算法
最近最久未使用(LRU)置换算法
进程多,分配物理块少,导致进程大部分时间进行换入换出,不做任何有效工作,
导致处理机利用率下降并趋于“0”的情况,称为“抖动”状态。
最佳(Optimal)置换算法
最佳置换算法是由Belady于1966年提出
基本思想:其所选择的被淘汰页面,将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面
优点:采用最佳置换算法,通常使得页面调入调出的次数达到最小,可保证获得最低的缺页率
缺点:该算法是一种理论上的算法,无法实现,因为页面访问的未来顺序很难精确预测,不过可用该算法评价其它算法的优劣
最佳置换算法示例
假定系统为某进程分配了3个物理块,进程运行时的页面走向为:7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1,开始时3个物理块均为空,计算采用最佳置换算法时页面的置换率和缺页率?
在这里插入图片描述
先进先出(FIFO)页面置换算法
基本思想:选择最早调入内存的页面淘汰,即选择在内存中驻留时间最久的页面予以淘汰。
出发点:最早调入内存的页面不再被访问的可能性会大一些。
实现:简单,只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老页面
问题:该算法对具有线性顺序访问的程序比较合适,而对其他情况效率不高。因为经常被访问的页面,往往在内存中停留最久,结果这些常用的页面却因变老而被淘汰。
结论:该算法缺页率偏高,性能较低
先进先出页面置换算法示例
假定系统为某进程分配了3个物理块,进程运行时的页面走向为:7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1,开始时3个物理块均为空,计算采用先进先出页面置换算法时页面的置换率和缺页率?在这里插入图片描述最近最久未使用(LRU)置换算法
LRU(Least Recently Used)置换算法的基本思想:每次选择内存中离当前时刻最久未使用过的页面淘汰
出发点:如果某页被访问了,则它可能马上还要被访问,反之如果该页很长时间未被访问,则它在最近一段时间内也不会被访问
根据:局部性原理
实现:比较困难,需要硬件支持。
LRU置换算法示例
假定系统为某进程分配了3个物理块,进程运行时的页面走向为:7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1,开始时3个物理块均为空,计算采用LRU置换算法时页面的置换率和缺页率?
在这里插入图片描述
LRU置换算法的硬件支持
把LRU算法作为页面置换算法是比较好的,它对于各种类型的程序都能适用,但实现起来有相当大的难度,因为它要求系统具有较多的支持硬件。所要解决的问题有:
一个进程在内存中的各个页面各有多少时间未被进程访问;
如何快速地知道哪一页是最近最久未使用的页面
为此,须利用以下两类硬件之一的支持:
移位寄存器:定时右移
栈:当进程访问某页时,将其移出压入“栈顶”,“栈底”换出
寄存器
为了记录某进程在内存中各页的使用情况,须为每个在内存中的页面配置一个移位寄存器,可表示为:
R=Rn-1Rn-2Rn-3 … R2R1R0
每当进程访问某页面时,将该页面对应寄存器的最高位Rn-1置1,定时信号每隔一定时间将寄存器右移一位并将最高位补0,于是寄存器数值最小的页面是最久未使用的页面在这里插入图片描述
某进程具有8个页面时的LRU访问情况
在这里插入图片描述

利用一个特殊的栈保存当前使用的各个页面的页面号,每当进程访问某页面时,把该页面的页号从栈中移出,再压入栈顶,于是栈底的页面就是最久未使用的页面在这里插入图片描述5.5 请求分段存储管理方式
请求分段中的硬件支持
在这里插入图片描述
段表机制
存取方式:用于标识本分段存取属性是只执行、只读还是允许读/写。
访问字段A:用于记录该段在一段时间内被访问的次数,或记录该段在最近多长时间未被访问。
修改位M:表示该段在调入内存后是否被修改过。
存在位P:用于指示该段是否已调入内存。
增补位:本段在运行过程中是否做过动态增长。
外存始址:本段在外存上的起始地址,即盘块号。
缺段中断机构
从中可以看出,对缺段中断的处理要比对缺页中断的处理复杂,因为段是不定长的。在这里插入图片描述
地址变换机构
请求分段系统中的地址变换机构,是在分段系统地址变换机构的基础上形成的。
因为被访问的段并非全在内存,因而在地址变换时,若发现所要访问的段不在内存时,必须先将所缺的段调入内存,并修改了段表之后,才能再利用段表进行地址变换。
为此,在地址变换机制中又增加了某些功能,如缺段中断的请求及其处理等。在这里插入图片描述
小结
虚拟存储器的基本概念
请求分页系统的基本原理及地址转换
页面置换算法
请求分段系统的基本原理及地址转换

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习记录wanxiaowan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值