操作系统学习笔记-3.2虚拟内存

文章目录

    • 虚拟内存
    • 请求分页管理方式
    • 页面置换算法
      • 最佳置换算法
        • 工作原理
        • OPT 算法的示例
        • 最佳置换算法的优点和缺点
      • 先进先出置换算法
      • 最近最久未使用
      • 时钟置换算法
      • 时钟置换算法的工作原理:
        • 算法的步骤:
      • 改进型时钟置换算法
      • 改进型时钟置换算法的特点:
      • 常见的改进型时钟置换算法:
        • **二位标志改进版**
    • 页面分配
      • 驻留集的定义:
      • 驻留集分配的基本概念:
      • 内存分配的抖动(颠簸)
      • 驻留集管理的关键问题:
    • 内存映射文件
      • 内存映射文件的工作原理
      • 内存映射文件的优点

虚拟内存

基于时间局限性和空间局限性,
多次性:无需在作业运行时一次性全部装入内存,而是允许被分成多次调入内存。
对换性:在作业运行时无需一直常驻内存,而是允许在作业运行过程中,将作业换入换出。
虚拟性:从逻辑上扩充了内存的容量,使用户看到的内存容量,远大于实际的容量。
在这里插入图片描述

请求分页管理方式

在这里插入图片描述

访问的页面不存在,就会产生缺页中断(内中断)。有空闲块,则放进去,并修改页表项。没有空闲块,则需要淘汰一个空闲块。

虚拟内存请求分页结合了虚拟内存的概念和请求分页的机制,具体工作过程如下:

  1. 地址映射:每个进程拥有独立的页表,页表存储了虚拟地址到物理地址的映射关系。每次内存访问,虚拟地址会被转换成物理地址。
  2. 缺页中断处理:当页面不在内存中时,缺页中断被触发。操作系统查找缺页所在的页面,并将其从磁盘加载到内存中。
  3. 页面替换:当内存不足时,操作系统需要选择一个页面换出,以腾出空间供新的页面使用。操作系统使用特定的替换算法(如LRU、FIFO等)来管理页面的替换。
  4. 继续执行:页面加载完成后,操作系统更新页表,重新执行引发缺页的指令,进程继续运行。

页面置换算法

最佳置换算法

最佳置换算法(Optimal Page Replacement Algorithm,简称OPT)是一种理想化的页面替换算法,在缺页时选择将“未来最长时间不再被访问”的页面进行替换,从而使得系统的缺页次数最小。

工作原理

在最佳置换算法中,当发生缺页并且内存已满时,系统选择一个页面将其替换出内存。具体来说,最佳置换算法会执行以下步骤:

  1. 查看未来的页面访问顺序:分析当前内存中各个页面的未来访问情况。
  2. 选择最长时间不再被访问的页面:找到内存中未来最久不再被访问的页面,将其替换出去。

最佳置换算法的特点在于:在所有页面替换算法中,它能保证最小的缺页次数,因此是理论上的最佳方案。最佳置换算法是一个理论算法,因为它需要“预知未来”来确定页面的访问顺序,而实际系统中无法实现。

OPT 算法的示例

假设有一个内存容量为 3 页框的系统,页面访问序列如下:

7, 0, 1, 2, 0, 3, 0, 4

按照最佳置换算法的流程:

  1. 访问 7:内存为空,将 7 加入内存。当前内存:[7]

  2. 访问 0:内存未满,将 0 加入内存。当前内存:[7, 0]

  3. 访问 1:内存未满,将 1 加入内存。当前内存:[7, 0, 1]

  4. 访问 2:内存已满,需要替换页面。查看未来访问情况:

    • 7 最早被替换(不再访问),0、1 会更早被访问。
    • 替换掉 7。当前内存:[2, 0, 1]
  5. 访问 0:0 已在内存中,不发生缺页。当前内存:[2, 0, 1]

  6. 访问 3:内存已满,需要替换页面。查看未来访问情况:

    • 2 最早被访问,因此选择替换掉 2。
    • 当前内存:[3, 0, 1]
  7. 访问 0:0 已在内存中,不发生缺页。当前内存:[3, 0, 1]

  8. 访问 4:内存已满,需要替换页面。查看未来访问情况:

    • 3 不再被访问,1 和 0 仍有访问。
    • 替换掉 3。当前内存:[4, 0, 1]

最终内存中存储的页面为 [4, 0, 1]。在该序列中,总共发生了 6 次缺页。

最佳置换算法的优点和缺点
  • 缺页率最低:最佳置换算法理论上可以达到最低的缺页率,因为它能够“预知未来”并选择最优的替换方案。
  • 不可实现性:最佳置换算法在实际系统中无法实现,因为实际系统无法提前知道程序的未来页面访问顺序。通常在操作系统中使用接近最佳置换算法的启发式算法(如 LRU)。

先进先出置换算法

先进来的先滚
但是会产生Belady异常,进程分配块数增大,缺页次数增加。

最近最久未使用

淘汰最近最久未使用的页面。性能很好,但是开销大

时钟置换算法

时钟置换算法(Clock Replacement Algorithm)是一种常用的页面置换算法,旨在模拟一种“环形缓冲区”机制来决定哪个页面需要被替换。它是一个类似于**最近最少使用(LRU)**算法的近似方法,但具有较低的开销。时钟算法是操作系统中页面管理的一种常用策略,尤其适用于硬件实现的页面替换。

时钟置换算法的工作原理:

时钟算法将页面管理看作一个圆形缓冲区,其中每个页面都标记一个位(称为“访问位”或“使用位”)。该位的作用是标记页面是否被访问过。时钟算法使用一个指针指向缓冲区中的当前页面,并按照时钟的方式循环访问这些页面。

算法的步骤:
  1. 初始化:

    • 每个页面都有一个访问位,初始值为0(未被访问)。
  2. 页面访问:

    • 当程序请求一个页面时,首先检查该页面是否已经存在于页面缓冲区中。
    • 如果页面已经在缓冲区中,则将该页面的访问位设置为1,表示该页面被访问过。
    • 如果页面不在缓冲区中,则需要进行页面置换。
  3. 页面置换:

    • 指针从当前页面开始顺时针逐个检查页面。
    • 如果访问位是1,则将其设置为0,表示该页面最近被访问过,但可以被替换;指针继续向下移动到下一个页面。
    • 如果访问位是0,表示该页面在一段时间内没有被访问过,可以被替换。将当前页面替换成新的页面,并将指针指向下一个页面。
    • 如果所有页面的访问位都是1,则开启第二轮查找,由于之前有清零操作,所以一定可以替换
  4. 循环继续:

    • 一旦一个页面被替换,指针继续顺时针移动,进行下一轮检查。

改进型时钟置换算法

改进型时钟置换算法(Enhanced Clock Replacement Algorithm)会结合更多的标志位或使用其他策略,来使得页面替换更加智能,接近于**最近最少使用(LRU)**或其他更先进的算法。

改进型时钟置换算法的特点:

  1. 多位标志: 在传统时钟算法中,每个页面仅有一个“访问位”,而在改进型算法中,通常会引入多个标志位,比如:

    • 访问位(Access bit): 标记页面是否被访问过。
    • 修改位(Modified bit)或脏位(Dirty bit): 标记页面是否被修改过,如果被修改过,必须写回磁盘。
    • 计数器: 用于记录页面被访问的次数,进一步模拟LRU。
  2. 页面访问频率: 通过引入访问频率或周期性更新计数器,使得替换算法可以更准确地选择最不常用的页面。

  3. 页面优先级: 在某些改进型时钟算法中,页面优先级可以与访问位结合,使得当多个页面都未被访问时,替换时能考虑页面的优先级。

常见的改进型时钟置换算法:

二位标志改进版

在传统时钟算法中,每个页面只有一个“访问位”,这意味着它只能记录页面是否被访问过。二位标志算法扩展了这一点,为每个页面增加两个标志位:

  • 访问位(A)
  • 修改位(M)

具体操作如下:

  • 每次访问页面时,如果页面存在,设置其访问位为1。如果页面在内存中且被修改过,设置修改位为1。
  • 如果需要替换页面,检查访问位和修改位:
    • 如果访问位为0,说明该页面在一段时间内未被访问,可以被替换。
    • 如果访问位为1,说明页面刚刚被访问过,可以将访问位重置为0,然后指针移动到下一个页面,继续检查。
    • 如果访问位和修改位均为1,说明该页面被频繁访问且已被修改,需要优先考虑替换,但可能需要先将修改内容写回磁盘。

这种算法通过考虑修改位的情况,使得修改过的页面不容易被替换,避免了频繁写入磁盘,提高了效率。

总的来说,改进型时钟置换算法通过引入更多的状态信息和策略,提升了页面替换的效率和准确性,但在实现上会有一定的开销。它适用于对性能要求较高且页面访问模式复杂的系统。

页面分配

驻留集分配(Resident Set Allocation)是操作系统中的一种内存管理策略,用于控制在物理内存中驻留的页面集合。它决定了哪些页面可以保留在物理内存中,以及什么时候将页面换出或换入磁盘,以便程序能够高效运行。

驻留集的定义:

驻留集(Resident Set)指的是程序在物理内存中保持活跃的页面集合。操作系统通过驻留集管理来确保程序能够高效执行,同时避免频繁的页面交换操作(页面置换),从而减小**页面失效(Page Fault)**的开销。

驻留集分配的基本概念:

在现代操作系统中,物理内存是有限的,因此不可能将所有程序的页面都保持在物理内存中。驻留集分配的目标是根据程序的需求动态调整驻留集的大小,使得程序可以尽量不发生页面失效,或者减少页面置换的频率。

  1. 工作集模型(Working Set Model)
    • 工作集模型提出了一个动态调整驻留集大小的概念。根据工作集模型,程序的驻留集大小应该根据其“工作集”的大小来调整。
    • 工作集指的是程序在某段时间内频繁访问的页面集合。操作系统会通过监测程序访问的页面集合,动态调整驻留集,以保证程序的效率。
    • 优点:根据程序实际的内存访问需求调整内存分配,有效减少页面失效率。
    • 缺点:需要复杂的内存管理算法,增加了系统的管理开销。
      内存分配的抖动(颠簸)现象是指在内存管理过程中,尤其是在动态内存分配和回收时,系统发生不规则、波动性高的内存分配和释放,导致内存使用效率不高或者内存管理的不稳定。这种现象常见于复杂系统中,当频繁地分配和释放内存时,可能会造成系统响应不稳定,甚至影响程序的执行性能。

内存分配的抖动(颠簸)

内存分配的抖动(颠簸)现象通常是由于频繁的内存分配和释放、内存碎片化、不高效的内存管理器等原因引起的。它可能导致系统性能下降、内存浪费以及程序不稳定等问题。解决这一问题可以通过使用内存池、优化内存分配算法、垃圾回收优化、延迟分配、批量分配等技术,从而提高内存管理的效率和稳定性,确保系统的高性能和稳定运行。

驻留集管理的关键问题:

驻留集的平衡
驻留集的大小不仅需要考虑程序的内存需求,还要综合考虑系统中的其他程序的内存需求,避免过多的驻留集占用过多的物理内存,导致系统内存不足。需要考虑工作集实际访问页面的集合

内存映射文件

**内存映射文件(Memory-Mapped Files)**是一种将文件的内容直接映射到进程的虚拟内存空间中的技术。通过这种方式,操作系统允许程序像操作内存一样操作文件。内存映射文件通常用于高效地处理大文件,避免频繁的磁盘I/O操作,同时也能够让多个进程共享文件内容,提高数据交换效率。

内存映射文件的工作原理

内存映射文件通过操作系统的内存管理机制将一个文件的内容加载到进程的虚拟地址空间。这样,程序可以通过指针直接访问文件中的数据,而不需要显式地读取和写入文件。

  1. 映射过程
    操作系统为文件分配一块虚拟内存空间,并将文件的内容加载到这块内存区域。这一过程通常通过操作系统提供的系统调用(如 mmap)来实现。映射的文件内容会在需要时由操作系统自动加载到物理内存中,使用时无需显式地读取磁盘。

  2. 页面化机制
    内存映射文件的一个关键特点是采用页面(page)管理机制。当程序访问映射的内存区域时,如果该页面还没有加载到内存,操作系统会通过页面调度机制将相应的数据从磁盘加载到内存中。这种按需加载的方式大大提高了程序的效率。

  3. 修改文件内容
    对映射区域的修改会直接影响文件内容,因为映射区域实际上就是文件在虚拟内存中的映射。修改内存中的数据就像修改文件内容一样。操作系统会根据映射模式和内存管理策略,决定是否在修改时直接同步到磁盘。

内存映射文件的优点

  1. 高效的磁盘I/O
    内存映射文件允许程序直接通过内存访问文件内容,避免了传统的文件读取和写入操作中频繁的磁盘I/O。这使得访问大型文件时更加高效,尤其是对于随机访问或按需加载的场景。

  2. 内存共享
    内存映射文件可以让多个进程共享相同的文件映射区域。多个进程可以直接访问同一块内存区域,从而避免了通过进程间通信(IPC)传递数据的开销,尤其在处理大型数据时非常高效。
    在这里插入图片描述

  3. 自动页面管理
    操作系统通过页面管理机制实现内存映射文件的按需加载,程序不需要自己管理文件的读取和写入,降低了内存和磁盘的管理复杂性。

  4. 数据一致性

  5. 内存节省

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

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

相关文章

vue3 封装aixos

1. Vue3 封装 aixos 并且 使用 aixos 请求数据 npm install axios # 或者 yarn add axios 2. Vue3 封装 aixos 并且 使用 aixos 请求数据 封装 axios可以帮助我们更好地管理 HTTP 请求,例如添加统一的基础URL、请求头、拦截器等功能。 下面是封装 axios的一个示…

量子计算机能解决哪些问题?

经典与量子难度对比 在深入示例之前,我们首先讨论一下如何研究和分类各种问题的难度。有些问题可以在经典计算机上轻松解决,我们不需要量子计算机来解决它们。另一方面,有些问题非常困难,需要量子计算机来解决。一个著名的例子是寻…

中电金信:院长寄语|关于源启AI+行动的思考

中国电子首席科学家 中电金信研究院院长 况文川 自2022年8月19日发布以来,源启已经走上了她第三年的征途。今天,源启已经成为公司战略的支点,中电金信正致力于用“源启底座”“源启咨询”“源启应用重构”三位一体的方式来赋能千行百业数智化…

海康私有化视频平台EasyCVR视频分析设备平台流媒体协议RTMP、HTTP-FLV、HLS的简单对比

在当今的数字化世界中,视频流协议的选择对于确保流畅、高效的视频传输至关重要。随着互联网技术的快速发展,直播和视频点播服务已经成为人们日常生活中不可或缺的一部分。无论是安防监控、在线教育、远程会议还是娱乐直播,用户对于视频流的实…

详解使用python读写csv,以及将csv数据写入数据库

csv文件 csv介绍 CSV,也即Comma-Separated Values,是一种用于存储表格数据的纯文本文件格式,其中每一行代表一条记录,记录中的各个字段由逗号分隔。 姓名,年龄,性别 张三,25,男 李四,28,男 王五,22,男 六六,29,女 子柒,28,女 对…

OpenMVS OpenMVG 笔记

OpenMVS & OpenMVG 笔记 OpenMVS 和 OpenMVG 都是计算机视觉中用于三维重建的开源库。两者都可以实现从图像集合中计算出相机位姿和三维点云,但它们的重点略有不同。 OpenMVG 主要关注于从输入图像集合中提取稠密的特征匹配,通过这些匹配计算相机的…

Golang--文件操作

1、文件 文件:文件用于保存数据,是数据源的一种 os包下的File结构体封装了对文件的操作(记得包os包) 2、File结构体--打开文件和关闭文件 2.1 打开文件 打开文件,用于读取(函数): 传…

dcdc3节锂电池串联9-12V升压32V 3A/5A 音响供电恒压芯片 SL4010

SL4010:高效能9-12V至32V升压解决方案,为高端音响系统注入澎湃动力 在追求极致音质与持久续航的音频世界里,SL4010 DC-DC升压转换器以其卓越的性能和可靠性,成为高端音响系统的理想供电伙伴。专为3节锂电池串联(9-12V…

onnx-web + yolov8n 在视频流里做推理

顺着我上一篇文章 使用onnxruntime-web 运行yolov8-nano推理 继续说,有朋友在问能不能接入 视频流动,实时去识别物品。 首先使用 getUserMedia 获取摄像头视频流 getUserMedia API 可以访问设备的摄像头和麦克风。你可以使用这个 API 获取视频流&#…

力扣题库——136.只出现一次的数字

代码实现&#xff1a; class Solution { public:int singleNumber(vector<int>& nums) {int result0;for(int num:nums){result^num;}return result;} }; 结果&#xff1a; 思路&#xff1a;这里让0和数组元素不断异或&#xff0c;因为0与一个数异或的结果是它本身…

EasyPOI使用详解

EasyPOI 简介 easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言(熟悉的表达式语法),完成以前复杂的写法 文档&#xff1a;http://easypoi.mydoc.io/#categor…

JAVA设计模式之【建造者模式】

1 定义 建造者模式&#xff08;Builder Pattern&#xff09;使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 2 类图 产品类&#xff08;Product&#xff09;&#xff1a;表示被创建的复杂…

智能化健身房管理:Spring Boot与Vue的创新解决方案

作者介绍&#xff1a;✌️大厂全栈码农|毕设实战开发&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 &#x1f345;获取源码联系方式请查看文末&#x1f345; 推荐订阅精彩专栏 &#x1f447;&#x1f3fb; 避免错过下次更新 Springboot项目精选实战案例 更多项目…

如何修改WordPress经典编辑器的默认高度?

boke112百科有一个使用WordPress搭建的小网站&#xff0c;文章内容就是几个字不到一行&#xff0c;但是每次使用经典编辑器编辑文章时&#xff0c;都觉得编辑器默认高度太高了&#xff0c;影响了我添加文章摘要和其他属性&#xff0c;有没有办法修改WordPress经典编辑器的默认高…

C#属性 Property

属性Property不是变量。 它们是由名为访问器方法来实现的一种方法。 实例属性表示的是实例的某个数据&#xff0c;通过这个数据反映实例当前的状态 静态属性表示的是类型的某个数据&#xff0c;通过这个数据反映类型当前的状态 意义&#xff1a; 防止恶意赋值(通过属性间接访问…

【力扣热题100】[Java版] 刷题笔记-121. 买卖股票的最佳时机

题目&#xff1a;121. 买卖股票的最佳时机 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。…

Wi-Fi7 puncturing技术增强与应用

原文关注公众号 - 无线技术栈,及时查看网络/Wi-Fi更多知识 “本文图片没有一一列出,感兴趣可以关注公众号 - 无线技术栈” “本文图片没有一一列出,感兴趣可以关注公众号 - 无线技术栈” Puncturing是一种有效的编码技术,广泛应用于无线通信中,用于在保持信号的可靠性的同…

C语言内存函数介绍和模拟实现:(memcpy,memmove,memcmp,memset)

memcpy介绍及模拟实现&#xff1a; memcpy介绍&#xff1a; void* 是指可以接受任何类型的指针。 memcpy是把从 source 指针开始之后的 num 个字节的内存拷贝到 destination 指针之后的空间。 遇到‘\0’不会停止&#xff0c;而且memcpy不可以拷贝重叠空间&#xff0c;就是说…

浏览器指纹修改指南2024 - 修改Geolocation API指纹(十一)

引言 在前几篇文章中&#xff0c;我们已经详细探讨了Geolocation API的定义、作用及其在浏览器指纹中的重要性&#xff0c;并深入分析了Chromium源码中Geolocation API的实现位置和修改方法。通过这些分析&#xff0c;我们为后续的修改工作奠定了坚实的基础。 在本篇文章中&a…

【微信小程序】基本语法

一、导入小程序 选择代码目录 项目配置文件 appid 当前小程序的 AppIDprojectname 当前小程序的项目名称 变更AppID&#xff08;视情况而定&#xff0c;如果没有开发权限时需要变更成个人的 AppID&#xff09; 二、模板语法 在页面中渲染数据时所用到的一系列语法叫做模板…