操作系统学习笔记-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. 内存节省

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数学】通用三阶矩阵特征向量的快速求法 超简单!!!

目录 三个定理1、3个特征值(即根互不相等)例题实践2、2个特征值(即有一个双重根)3、1个特征值(即有一个三重根)定理证明 三个定理 本定理适用于 所有三阶矩阵 的特征向量求法! 1、3个特征值&…

16通道AD采集方案,基于复旦微ARM + FPGA国产SoC处理器平台

测试数据汇总 表 1 本文带来的是基于复旦微FMQL20S400M四核ARM Cortex-A7(PS端) + FPGA可编程逻辑资源(PL端)异构多核SoC处理器设计的全国产工业评估板的AD采集案例。本次案例演示的开发环境如下: Windows开发环境:Windows 7 64bit、Windows 10 64bit PL端开发环境:P…

文件系统和日志管理

文件系统和日志管理 文件系统:文件系统提供了一个接口,用户用来访问硬件设备(硬盘、光驱)------------- 在硬件设备上对文件的管理 1、文件存储在硬盘上(机械硬盘:一个扇区 2、文件中硬盘上的最小存储单位…

数据结构---排序总结

1.排序的时间复杂度(均为平均值) O(n^2) :冒泡排序,选择排序,插入排序。 O(n * log(n)):堆排序,快速排序,归并排序。 O(n^1.3):希尔排序 2.空间复杂度: O(n) …

数据结构:七种排序及总结

文章目录 排序一插入排序1直接插入排序2希尔排序二选择排序3直接选择排序4堆排序三 交换排序5冒泡排序6快速排序四 归并排序7归并排序源码 排序 我们数据结构常见的排序有四大种,四大种又分为七小种,如图所示 排序:所谓排序,就是…

【操作系统】基于环形队列的生产消费模型

目录 一、单生产单消费 1.环形队列的实现 (1) void P(sem_t &sem); (2) void V(sem_t &sem); (3) RingQueue() (4) ~RingQueue() (5) void Push(const T &in); (6) void Pop(T *out); 2.上层调用逻辑 二、多生产多消费 1.环形队列的实现 (1) RingQueue…

Linux下的WatchDog

看门狗🐕 看门狗简介 看门狗定时器(Watchdog Timer)是一种定时器,用于检测系统是否正常运行。如果系统在规定时间内没有向看门狗定时器发送复位信号,看门狗定时器就会产生复位信号,使系统复位。看门狗定时…

基于SpringBoot的速食零食商城+LW示例参考

1.项目介绍 功能模块:管理端(用户管理、账号管理、商品分类管理、商品信息管理、订单管理等),用户端(商品信息、登录注册、我的订单等)技术栈:SpringBoot,thymeleaf,MyB…

springboot020基于Java的免税商品优选购物商城设计与实现

🍅点赞收藏关注 → 文档最下方联系方式领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅 一 、设计说明 1…

认识物联网

新一代信息技术 物联网 物物相连的互联网,即物联网,又称传感器常见的传感器 • 温度传感器 • 压力传感器 • 声音传感器 • 02 • */08521 物联网概念 • 通过射频识别,红外传感器,全球定位系统GPS,激光扫描…

CODESYS可视化桌面屏保-动态气泡制作详细案例

#一个用于可视化(HMI)界面的动态屏保的详细制作案例程序# 前言: 在工控自动化设备上,为了防止由于人为误触发或操作引起的故障,通常在触摸屏(HMI)增加屏幕保护界面,然而随着PLC偏IT化的发展,在控制界面上的美观程度也逐渐向上位机或网页前端方面发展,本篇模仿Windows…

Java基础——反射

反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 翻译成人话就是:反射技术,指的是加载类的字节码到内存,并以…

Node.js——文件上传

文件上传 插件:formidable,地址:https://www.npmjs.com/package/formidable,参考里面with Express.js部分。 html部分截图参考: 用express-generator生成的示例代码: const formidable require(formi…

PCA9632笔记

个人学习笔记,有错漏。具体请以官方数据手册为准 I2C地址 PCA9632使用I2C通信,I2C设备地址固定 发出START后输出访问设备地址(8bit版本地址固定) 0x62(7位地址) 地址最后一位为1读 为0写 8位写地址 0xC4…

【算法】递归+回溯+剪枝:78.子集

目录 1、题目链接 2、题目 3、解法(回溯剪枝) 4、代码 1、题目链接 78.子集(LeetCode) 2、题目 3、解法(回溯剪枝) 思路: 枚举子集(答案)的第一个数选谁,第二个数选谁,第三个数选谁&#x…

HCIP(7)-边界网关协议BGP基本配置(对等体peer,宣告network,引入import)

边界网关协议(Border Gateway Protocol,BGP)是一种用来在路由选择域之间交换网络层可达性信息(Network Layer Reachability Information,NLRI)的路由选择协议。由于不同的管理机构分别控制着他们各自的路由…

基于python的机器学习(二)—— 使用Scikit-learn库

目录 一、样本及样本划分 1.1 划分样本的方法 1.1.1 train_test_split()函数 1.1.2 时间序列划分 1.1.3 交叉验证 二、导入或创建数据集 2.1 导入Sklearn自带的样本数据集 2.2 利用Sklearn生成随机的数据集 2.3 读入自己创建的数据集 2.3.1 用Python直接读取文本文件…

Webpack5常用配置

1、序言 Webpack属于构建工具,可以将开发者代码转化成浏览器能识别的代码,让开发者专注代码实现,不用过多关注浏览器兼容性问题。 Webpack常见功能: 模块打包:Webpack 可以将项目中的所有模块(包括 JavaScr…

DFA算法实现敏感词过滤

DFA算法实现敏感词过滤 需求:检测一段文本中是否含有敏感词。 比如检测一段文本中是否含有:“滚蛋”,“滚蛋吧你”,“有病”, 可使用的方法有: 遍历敏感词,判断文本中是否含有这个敏感词。 …

索引基础篇

前言 通过本篇博客的学习,我希望大家可以了解到 “索引” 是为了提高数据的查询效率。 索引的介绍 索引是为了提高查询数据效率的数据结构 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着…