操作系统复习3.2.1-虚拟内存

news2024/12/23 13:11:02

传统存储的问题

一次性:一次性装入作业才能运行
驻留性:不是所有部分都需要长时间存放在内存中

定义和特征

将要用的部分载入内存,不用的部分调出外存,逻辑上扩大内存
虚拟内存的最大容量为计算机的寻址范围决定
实际容量则为内外存之和和寻址范围其中的最小值

多次性:无需在作业时一次性装入,而是多次调入内存
对换性:作业运行时无需常驻内存,允许换入换出
虚拟性:逻辑上扩充内存容量

需要的信息不在内存时,调入内存
内存不够时,将暂时不用的调出内存

实现

请求分页管理方式

程序执行过程中,当访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序,空间不够时就换出暂时用不到的信息,操作系统提供请求调页和页面置换的功能

页表机制

在这里插入图片描述
基本分页存储的页表 是隐含页号 页表项为内存块号
请求分页存储的页表 是隐含页号 页表项为内存块号、状态号、访问字段、修改位、外存地址
因为基本分页只需要记录对应的页面的内存块号,用于获取对应内存地址
而请求分页就需要状态号来记录页面是否被调入内存,访问字段用来记录最近被访问几次或者上次被访问时间(局限性原理)、修改位来记录是否被修改过(检查是否要重写回到外存)、外存地址则方便重写

缺页中断

当要访问的页面不在内存时,产生缺页中断,由缺页中断处理程序处理中断
缺页进程阻塞,进入阻塞队列,调页完成再唤醒,放回就绪队列

如果内存中有空闲块,就为进程分配一个空闲块,将所缺页面装入该块,并修改页表中相应的页表项

若内存中没有空闲块,则有页面置换算法选择一个页面淘汰,若该页面在内存期间被修改过,则要将其写回外存,否则不用
流程为:当缺0号页,通过页面置换算法来替换2号页,而2号页被替换过,就将其数据写回对应的外存地址,并空出内存块,更新页表项

缺页中断属于内中断中的故障,故障是错误条件引起的,可能会被修复
内中断还有陷阱和终止,分别是有意为之的,如系统调用和导致终止程序的错误

地址变换机构

在这里插入图片描述
流程:请求调页,查询快表,未命中则查慢表来看所需表项是否在内存,在则写入快表,更新访问位和修改位
若不在内存则引发缺页中断,在外存中查询缺页,将缺页放回内存
若此时内存满了,需要换页出去,此时检查此页是否被修改,若修改,还需要额外将其重写回外存
页面调入内存后,修改慢表,表项也更新到快表

页面置换算法

页面换入换出开销大,好的置换算法追求更少的缺页率

最佳置换OPT

每次选择淘汰的页面都是永不使用或者最长时间内不再被访问的页面
这样保证了最低的缺页率,但无法实现

先进先出置换FIFO

每次选择淘汰的页面是最早进入内存的页面,但会产生Belady异常,即分配的内存块增多,但缺页次数不减反增,不符合局部性原理,算法性能差

最近最久未使用置换LRU

每次淘汰都选择最近最久未使用的页面,前面请求分页表内就有访问字段,可用于记录上一次被访问的时间t,需要淘汰时选择t值最小的即可
性能好,但需要专门的硬件支持,实现困难,开销大

时钟置换CLOCK

在这里插入图片描述
将内存中的页面通过链接指针链接成一个循环队列,当页面被访问时,访问位设为1,当需要换出时,若页面的访问位为0,则换出,若为1则置为0,不换出
当一轮全为1,无法换出任一页面时,进行第二轮

改进型的时钟置换

和前面一样,构造循坏队列
但增加侧重点:优先未访问未修改的帧,其次就是未访问但修改过的,再者访问但未修改的,最后访问且修改过的
在这里插入图片描述
第一轮先不修改标志位,查找未访问且未修改的帧
第二轮则是查找未访问但修改过的帧,且将扫描过的帧的访问位置为0,
第三轮和第四轮则是对应重复第一轮和第二轮的操作,只是都不用修改任何标志位
当需要第三轮和第四轮时,说明内存中的帧都是已经被访问过的,就看是否被修改过

页面分配策略

驻留集

在请求分页存储管理中,给进程分配的物理块的集合
由虚拟存储可知,驻留集大小一般小于进程大小,因此缺页发生率与驻留集的大小相关,驻留集太小会导致频繁发生缺页

页面分配、置换策略

固定分配

操作系统为每个进程分配一组固定数目的物理块,运行期间不改变,即驻留集大小不变

可变分配

先为其分配一定数目的物理块,运行时适当增加或减少,驻留集大小可变

局部置换

发生缺页时只选择自己的物理块进行置换

全局置换

缺页进程可使用空闲物理块,或者将别的进程持有的物理块置换到外存,再得到分配
系统会锁定一些页面,这些不能被换出内存

固定布局局部置换

得到的物理块数量一定,缺页时只能换出自己的页面,初始分配的数量可以根据进程优先级、大小而定

可变分配全局置换

系统维护空闲物理块队列,只要发生缺页,就可得到新物理块,只要当空闲物理块用完时,才会选择未锁定的页面进行换出

可变分配局部置换

发生缺页时只能换出自己的页面,当缺页率增多时,分配多点物理块,缺页率减少时,分配少点物理块

调页时机

预调页策略

由局部性策略,一次调入若干个相邻页面比一次调入一个页面更高效,主要用于进程首次调入

请求调页策略

进程运行时发生缺页才调页,一次调一页

调页来源

在这里插入图片描述
对换区:高速,在进程运行前,从文件区复制数据到对换区,持有进程相关数据
对换区空间不足时:文件区中读取不用被修改的文件,可能被修改的则写入对换区
UNIX:未使用裹得页面放在文件去,使用过的放入对换区

抖动现象

刚被调出的页面,又要被调入内存,频繁切换,因为物理块太少

工作集

驻留集:请求分页存储管理中进程得到分配的内存块的集合
工作集:在某段时间间隔内,进程实际访问页面的集合
在这里插入图片描述
通过记录工作集变化来确定进程需要多少个物理块最适合,也可用于换出页面的选择

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/603557.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【哈希值】概述和特点

哈希值概述和特点 哈希值概述 哈希值是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值 Object类中有一个方法可以获取对象的哈希值: public int hashCode():返回对象的哈希值 哈希值特点 同一个对象多次调用hashCode()方法返回的哈希值是相…

0x36transferData 数据传输

0x36transferData TransferData服务用于客户端将数据从客户端传输到服务器(下载)或从服务器传输到客户端(上传) 。 数据传输方向由前面的RequestDownload或RequestUpload服务定义。 如果客户端发起请求下载,则要下载的…

【01】STM32·HAL库开发-单片机简介 |用处、发展历程、发展趋势、CISC与RISC对比、冯诺依曼和哈佛结构对比

目录 1.单片机是什么(了解)2.单片机有什么用(了解)3.单片机发展历程(了解)4.单片机发展趋势(了解)5.CISC & RISC(了解)5.1CISC和RISC举例5.2冯诺依曼结构…

【C++】位图应用 | 布隆过滤器

文章目录 1. 位图应用题目一代码实现setrsettest具体代码 题目二位图优缺点总结 2. 布隆过滤器提出背景概念具体实现hash1 hash2 hash3N取值问题settsettset中在与不在那个准确?使用场景及特点具体代码 1. 位图应用 题目一 给40亿个不重复的无符号整数&#xff0c…

压缩感知重构之凸松弛法

算法的重构是压缩感知中重要的一步,是压缩感知的关键之处。因为重构算法关系着信号能否精确重建,国内外的研究学者致力于压缩感知的信号重建,并且取得了很大的进展,提出了很多的重构算法,每种算法都各有自己的优缺点&a…

Linux-地址空间

文章目录 问题引入操作系统宏观认识操作系统与进程程序地址空间进程地址空间问题解释 问题引入 在Linux操作系统中、vim编译器下,出现了变量同地址但不同值的现象。 下面以解释该现象产生的原因为主线,在过程中学习Linux操作系统的知识。 运行代码展示…

chatgpt赋能python:Python分词处理

Python分词处理 随着网络技术的飞速发展,搜索引擎已成为人们了解信息的主要渠道之一,而搜索引擎的核心是关键词匹配,因此分词技术在搜索引擎优化(SEO)中起着至关重要的作用。Python作为一种强大的编程语言&#xff0c…

【学习日记2023.6.3】之 工作台显示和报表导出

文章目录 12. 工作台显示和报表导出12.1 工作台12.1.1 需求分析和设计12.1.2 代码开发Controller层Service层接口Service层实现类Mapper层 12.1.3 功能测试12.1.4 提交代码 12.2 Apache POI12.2.1 介绍12.2.2 入门案例12.2.2.1 将数据写入Excel文件12.2.2.2 读取Excel文件中的数…

Linux4.7Nginx优化与防盗链

文章目录 计算机系统5G云计算第六章 LINUX Nginx优化与防盗链一、Nginx服务优化和深入优化1.隐藏版本号2.修改用户与组3.缓存时间4.日志切割5.连接超时6.更改进程数7.配置网页压缩8.配置防盗链9.fpm参数优化 计算机系统 5G云计算 第六章 LINUX Nginx优化与防盗链 一、Nginx服…

操作系统复习4.1.0-文件管理结构

定义 一组有意义的信息的集合 属性 文件名、标识符、类型、位置、大小、创建时间、上次修改时间、文件所有者信息、保护信息 操作系统向上提供的功能 创建文件、删除文件、读文件、写文件、打开文件、关闭文件 这6个都是系统调用 创建文件 创建文件时调用Create系统调用…

django中使用celery

Celery介绍: 核心及优点:1.基于分布式系统架构(负载均衡避免单点故障,高可用) 2.实现了异步任务的调度(快速) 只需要通过配置文件的修改就可以实现架构的切换所以灵活 django-celery-beat 用…

Oracle中的循环

目录 一、简单循环 1.1LOOP 循环语法: 1.2LOOP 循环示例 二、for循环 2.1for循环语法: 2.2for循环示例 三、while循环 3.1while循环语法 3.2while循环示例 四、GOTO 循环 4.1GOTO 循环语法 4.2GOTO 循环示例 在 Oracle 数据库中,…

储能之动力电池与储能电池区别?

储能之动力电池与储能电池区别 1、概念1.1 动力电池1.2 储能电池 2、应用场景3、动力电池与储能电池的对比3.1 性能要求3.2 循环次数3.3 电池类型方面3.4 成本结构不同 1、概念 1.1 动力电池 动力电池即为工具提供动力来源的电源,多指为电动汽车、电动列车、电动自…

Oracle中ORA-12560:协议适配器错误

平时在长时间未登录Oracle数据库,再次登录时会出现如下错误: 当Oracle登录时出现12560协议适配器错误时,可以通过以下步骤尝试启动相应的服务: 第一步: 打开本地【服务】,点击最顶层的名称输入【O】&…

java-字符流和字节流(三)

java-字符流和字节流(三) 一、IO特殊操作流 1.1 标准流 1.1.1 标准输入流 System类中有两个静态的成员变量 public static final InputStream in:标准输入流。通常该流对应于键盘输入或由主机环境或用户指定的另一个输入源public static final PrintStream out&am…

【StringBuilder类】添加和反转方法以及StringBuilder和String相互转换

StringBuilder类 如果对字符串进行拼接操作,每次拼接都会构建一个新的String对象,既耗时又浪费内存空间,而这种操作还不可避免。我们可以通过Java提供的StringBuilder类来解决这个问题。StringBuilder是一个可变的字符串类,我们可…

java-基础语法(一)

java-基础语法(一) 一、java变量 1.1、注释 单行注释 // // 这是单行注释文字多行注释 /* *//* 这是多行注释文字 这是多行注释文字 这是多行注释文字 */ 注意:多行注释不能嵌套使用。1.2 常量 常量:在程序运行过程中,其值不可以发生改变的…

Arthas-monitor/watch/trace 相关命令使用

tip:作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。 开头: 本章所有的命令都非常重要,都是使用率相当高的。 文章目录 moni…

python---列表

列表 1. 列表的介绍1.1 访问列表元素1.2 索引从0而不是1开始1.3 使用列表中的各个值1.4 修改、添加和删除元素1.4.1 修改列表元素 1.5 在列表中添加元素1.5.1 在列表末尾添加元素1.5.2 在列表中插入元素 1.6 从列表中删除元素1.6.1 使用方法pop()删除元素1.6.2 弹出列表中任何位…

【TreeSet集合】自然排序Comparator的使用

自然排序Comparator的使用 存储学生对象并遍历,创建TreeSet集合使用无参构造方法 要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序 创建学生类: package com.gather.set.treeset; public class Student…