Loading [MathJax]/jax/input/TeX/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >操作系统:第五章 虚拟存储管理

操作系统:第五章 虚拟存储管理

作者头像
Here_SDUT
发布于 2022-08-08 11:34:22
发布于 2022-08-08 11:34:22
1.7K0
举报

5.1 虚拟存储器概述

5.1.1 基本原理

1. 局部性原理

程序执行时会呈现出局部性规律,即在一较短的时间内,程序的执行仅局限于某个部分,相应地,所访问的存储空间也局限于某个区域。

  • 时间局限性:某条指令被执行,则不久之后可能再次执行,被访问的数据可能会再次被访问。这是由于程序中存在大量的循环操作。
  • 空间局部性:程序访问了某个存储单元,不久后其附近的单元也可能被访问,典型情况就是程序的顺序执行。

2. 虚拟存储器的基本工作情况

由局部性原理可知,程序运行前没有必要将其全部装入内存,仅须将少数的页面或段装入内存,其他可以暂时放在外存上。程序运行时,如果所需的数据已经调入内存,则继续执行;否则发出缺页(段)中断,OS将相应的段或页面调入内存。如果内存已满,则利用页(段)置换功能,将所需段或页置换到内存中。

5.1.2 虚拟存储器的定义和特征

1. 定义

具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。其逻辑容量由内存和外存容量决定,运行速度接近内存速度,成本接近外存。

2. 特征

  • 多次性:一个作业中的程序和数据运行被分成多次调入内存运行,最重要的特征,使虚拟存储器具有从逻辑上扩大内存的功能。
  • 对换性:一个作业的程序和数据无需在作业运行时常驻内存,允许运行过程中进行换进、换出。
  • 虚拟性:能从逻辑上扩大内存容量,使得用户看到的内存容量远大于实际的内存容量。

虚拟性以多次性和对换性为基础,只有系统运行作业多次调入内存,并能将暂时不用的程序和内存从内存调出,才能实现虚拟存储器而多次性和对换性又建立在离散分配的基础上,即要使用分段存储或者分页管理。

5.1.3 虚拟存储器的实现方法

系统提供必要的硬件支持和实现请求分页的软件(分段式为例)。 硬件支持: 请求分段的段表机制,缺页中断机构。 软件支持:实现请求调页的软件和实现段置换的软件。

5.2 请求分页存储管理方式

本质就是在页式存储管理的基础上,增加请求调页和页面置换的功能。

5.2.1 硬件支持

1. 请求页表机制

在基本页表基础上增加四个字段,如下:

  • 状态位(存在位)P:用于指示该页是否调入内存,供程序访问时参考。
  • 访问字段A:记录本页在一段时间内被访问的次数,或记录本页最近已经多久未被访问。
  • 修改位M:标识该页在调入内存后是否被修改过,用于判断调出时是否需要更新外存对应的页。
  • 外存地址:指出该页在外存上的地址,通常是物理块号。

2. 缺页中断机构

缺页中断也需要经历保护CPU环境、分析中断原因、转入缺页中断处理程序进行处理,中断处理完成后恢复CPU环境这几步骤。但是缺页中断和普通中断不同:

  • 在指令执行期间产生中断和处理中断信号。
  • 一条指令在执行期间可能产生多次缺页中断。

3. 地址变换机构

在分页系统地址变换机构的基础上,为了实现虚拟存储器,增加某些新的功能,具体变换过程如下:

5.3 页面置换算法

  • 局部页面置换算法 置换页面的选择范围仅限于当前进程占用的物理页面内 最优算法、先进先出算法、最近最久未使用算法 时钟算法、最不常用算法
  • 全局页面置换算法 置换页面的选择范围是所有可换出的物理页面 工作集算法、缺页率算法

5.3.1最优页面置换算法(OPT,optimal)

这是一种理想的算法,置换下来的页面是未来不会再被访问的页面。由于无法预知哪些页面不会被使用,所以该算法无法实现,可以用作评判置换算法优劣的标准

5.3.2 先进先出(FIFO)算法

选择在内存内驻留时间最长的页面进行置换,由于队列的性质就是先进先出,所以可以使用一个队列实现该算法。FIFO的优点是实现起来简单,缺点是与进程的运行规律不符合,可能会将经常被访问的进程置换出去,由于效率低,一般不会拿来使用,但是其实现简单的思想对后面的算法具有一定启发作用。

5.3.3最近最久未使用算法(LRU)

由于无法实现OPT中未来的最优, 退而求其次,用最近的过去当作最近的将来的近似。以最近的时间为评判标准,每个页面的访问字段中记录距离上次访问的时间t,每次置换时选取t值最大的置换出去。这种用过去近似未来的方法比FIFO更优,但页面的过去和未来没有明显的联系,所以在极端情况下,该算法还是会退化为FIFO的。

实现手段:

  • 寄存器实现 为内存中的每个页面配置一个移位寄存器,表示为R=Rn1Rn2Rn3R2R1R0。当某个页面被访问后,将该页面的Rn1改为1,此后定时器每隔一定的时间将1右移,如果将移位寄存器看成一个十进制数,那么数值最小的就是最久未被访问的。
  • 栈实现 用一个特殊的栈保证内存中的页面号,栈的大小就是分配给该进程的页面个数。进程访问某页面时:
    • 如果该页面不在栈中,若栈满,则弹出栈底,将页面压入栈顶;若栈未满,直接压入栈中即可。
    • 如果页面在栈中,则将该页面从栈中取出,放到栈顶。

5.3.4最少使用置换算法( LFU)

思想类似于LRU,但是以最近一段时间页面访问次数为评判依据,每次将最近访问次数最少的置换出去。实现方式也是利用一个寄存器,每次被访问则将最高位置1,每隔一定时间右移一位,则寄存器中1个数最少的就是最近时间内访问次数最少的。

5.3.5 Clock置换算法

1. 简单的Clock

LRU和LFU比FIFO的策略较科学,但是实现起来比FIFO复杂,那么有没有一种折中的算法?Clock算法就结合了两者的优点。 具体实现方式如下:

  • 为每页设置一个访问位,1表示访问过,0表示未被访问,所有页面用循环链表连接。
  • 当需要进行页面置换时,将指针顺时针遍历页面,如果访问位为1则将其变为0,直到遇到第一个访问位为0的页面,将其置换出去。

由于每次只能判断某个页面是否被访问过,,置换时将未使用过的页面置换出去,又把该算法称为最近未用算法(NRU)。

2. 改进的Clock算法

某个页面被换出后,如果该页面被修改过,则还需写入内存,如果未被修改过则无需写入内存。所以,在选择置换的页面时,同样是访问位为0的页面,置换出未被修改过的页面显然是更好的方法。

实现方法是,增加一个修改位M:

  • 第一轮先寻找访问位和修改位都为0的,找到则置换。
  • 第二轮找访问位为0,修改位为1的,同时将访问位为1的改为0
  • 如果还未找到,则重新寻找访问位和修改位为0的(因为部分页面的访问位在第三轮变为0了)
  • 还未找到则寻找访问位为0,修改位为1的,必然可以找到。

5.3.6 Belady现象

定义: 采用FIFO等算法时,可能出现分配的物理页面数增加,缺页次数反而升高的异常现象。 原因: FIFO算法的置换特征与进程访问内存的动态特征矛盾,被它置换出去的页面并不一定是进程近期不会访问的

没有Belady现象的算法: LRU算法

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-4-14 1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
冷月手撕408之操作系统(16)-虚拟内存管理
操作系统的虚拟内存管理,是内存管理中逻辑扩充内存的一个重点,必须掌握其原理和经典的页面置换算法。
学长冷月
2021/02/22
8120
冷月手撕408之操作系统(16)-虚拟内存管理
计算机系统基础:虚拟存储管理知识笔记
一个计算机任务只需要部分装入主存便可以启动运行,其余部分留在磁盘上,在需要的时候装入主存,这样可以提高主存空间的利用率。这样该系统所具有的主存容量会比实际主存容量大很多,这样的存储器称为虚拟存储器。
小明互联网技术分享社区
2023/11/29
5030
计算机系统基础:虚拟存储管理知识笔记
操作系统(五)虚拟存储器管理
一次性和驻留性严重地降低内存的利用率,显著地减少了系统吞吐量。 研究表明,程序在执行过程中呈现局部性原理。
看、未来
2020/08/25
2K0
分页式虚拟存储管理_c语言申请内存空间
C语言模拟实现虚拟存储管理(请求分页存储管理)使用FIFO算法 1)实验目的 2)实验内容 3)实验基本原理和解决方案 4)数据结构、模块划分 5)画出程序的基本结构框图和流程图(包括主程序流程图、模块详细设计流程图等),对程序的每一部分要有详细的设计分析说明,说明设计实现所用的原理。 6)源代码,要求格式规范,适当加注释,以有助于说明问题为宜,注释不少于三分之一。 7)运行的结果,要求有对结果的分析 8)参考资料 一、实验目的 存储管理的主要功能之一是合理的分配空间。请求分页存储管理是一种常用的虚拟存储管理技术。本实验的目的是:通过编程模拟实现请求分页存储管理中硬件地址转换过程、缺页中断处理过程,以及先进先出页面置换算法,加深对页式虚拟存储管理的理解,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换方法;通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。
全栈程序员站长
2022/11/09
1.6K0
分页式虚拟存储管理_c语言申请内存空间
操作系统实验五 虚拟存储器管理
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/126476.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/23
8750
操作系统实验五 虚拟存储器管理
面试计算机操作系统解析(一中)
猫咪-9527
2025/03/25
690
【愚公系列】软考中级-软件设计师 028-操作系统(存储管理-页式存储)
操作系统的存储管理是指操作系统如何管理计算机的存储器,包括主存储器(RAM)和辅助存储器(硬盘、光盘等)。
愚公搬代码
2024/02/09
2580
3.2.2 请求分页管理方式
请求分页系统建立在基本分页系统基础之上,为了支持虚拟存储器功能而增加了请求调页功能和页面置换功能。请求分页是目前最常用的一种实现虚拟存储器的方法。 在请求分页系统中,只要将当前需要的一部分页面装入内存,便可以启动作业运行。在作业执行过程中,当所要访问的页面不在内存时,再通过调页功能将其调入,同时还可以通过置换功能将暂时不用的页面换出到外存上,以便腾出内存空间。 为了实现请求分页,系统必须提供一定的硬件支持。除了需要一定容量的内存及外存的计算机系统,还需要有页表机制、缺页中断机构和地址变换机构。
week
2018/08/27
7070
操作系统 内存管理 虚拟存储技术与虚拟页式存储管理方案的实现
基本思想:利用大容量的外存来扩充内存,产生一个比有限的实际内存空间大得多的、逻辑的虚拟内存空间,简称虚存。
Meng小羽
2019/12/23
2.4K0
【操作系统】内存管理
这里有相对地址和绝对地址,相对地址就是别的球员相对于 1 号球员的位置,绝对地址是他们实际居住的房间号,相对地址就是内存中的逻辑地址,而绝对地址就是物理地址。
wsuo
2020/12/22
1.1K0
【操作系统】内存管理
漫谈虚拟内存
如上图,程序1、程序2、程序3装入到内存,而程序2运行完成被换出,内存空闲出20k,然后进来程序4,大小为25K,此时,只有两处空闲块,10K和20K,没有一处是符合条件的,应该怎么办?一个明显的办法就是将两块空闲区域进行合并,形成一个大小为30K的空闲块满足程序4。
木可大大
2018/04/03
5.3K6
漫谈虚拟内存
虚拟存储技术「建议收藏」
在程序运行中,在不同时刻把同一个存储区分配给不同程序段和数据段,实现存储区共享。适用于连续存储(单一连续区分配,分区)
全栈程序员站长
2022/11/09
8280
虚拟存储技术「建议收藏」
某操作系统采用页式虚拟存储管理_虚拟存储系统
b. 按照内存块大小,把作业的虚拟地址空间(相对地址空间)划分成页(划分过程对用户透明)
全栈程序员站长
2022/11/09
1.1K0
内存管理两部曲之虚拟内存管理
前文 内存管理两部曲之物理内存管理 提到:随着用户程序功能的增加,进程所需要的内存空间越来越大,进程空间很容易就突破了物理内存的实际大小,导致进程无法运行。
飞天小牛肉
2021/06/24
7000
计算机操作系统之存储管理
内存的回收与分配,地址变换(程序中的逻辑地址与内存中的物理地址之间的转换),内存扩充(借助虚拟技术或覆盖技术从逻辑上扩充内存容量),内存保护(保证进入内存的各道作业都在自己的存储空间运行,互不干扰)
intsmaze-刘洋
2018/08/29
5660
【操作系统不挂科】<内存管理-虚拟内存(17)>选择题&简答题&简答题(带答案与解析)
A.要求作业运行前,必须全部装入内存,且在运行中必须常驻内存 B.要求作业运行前,不必全部装入内存,且在运行中不必全部常驻内存 C.要求作业运行前,不必全部装入内存,但在运行中必须全部常驻内存 D.要求作业运行前,必须全部装入内存,且在运行中不必常驻内存
YY的秘密代码小屋
2024/12/01
2100
【操作系统不挂科】<内存管理-虚拟内存(17)>选择题&简答题&简答题(带答案与解析)
操作系统内存管理,你能回答这8个问题吗?
大家早上好,我是程序喵!今天为大家总结整理了关于操作系统内存管理的知识点,更文不易,请各位兄弟别忘分享或者点个在看,多谢
GorgonMeducer 傻孩子
2020/12/22
1.2K0
操作系统内存管理,你能回答这8个问题吗?
操作系统存储管理之虚拟存储与分页式虚拟存储系统
在实际运行过程,把有关作业的全部信息都装入主存储器后,作业执行时实际上不是同时使用全部信息的,有些部分运行一遍便再也不用,甚至有些部分在作业执行的整个过程中都不会被使用到(如错误处理部分)。进程在运行时不用的,或暂时不用的,或某种条件下才用的程序和数据,全部驻留于内存中是对宝贵的主存资源的一种浪费,大大降低了主存利用率。 于是,提出了这样的问题:作业提交时,先全部进入辅助存储器,作业投入运行时,能否不把作业的全部信息同时装入主存储器,而是将其中当前使用部分先装入主存储器,其余暂时不用的部分先存放在作为主存扩充的辅助存储器中,待用到这些信息时,再由系统自动把它们装入到主存储器中,这就是虚拟存储器的基本思路。
全栈程序员站长
2022/11/09
2.4K0
操作系统存储管理之虚拟存储与分页式虚拟存储系统
操作系统(第四版)期末复习总结(中)
很多小伙伴私信要word下载,我就整理出来了一份pdf,是和线上的完全一样,建议大家看线上的,因为pdf下载需要收费,但是下载有好处就是可以打印出来复习,各位伙伴自行选择吧。现在这里给出pdf完整下载: 操作系统(第四版)期末复习总结.pdf_操作系统复习-OS文档类资源-CSDN下载
全栈程序员站长
2022/11/03
1.1K0
存储器及其管理方式
“计算机存储器包括主存和辅存,本文中存储器管理的对象主要是主存,也称内存。它的主要功能包括分配和回收主存空间、提高主存利用率、扩充主存、对主存信息实现有效保护。”
搬砖俱乐部
2019/07/08
1.7K0
存储器及其管理方式
推荐阅读
相关推荐
冷月手撕408之操作系统(16)-虚拟内存管理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档