操作系统基础:虚拟内存【上】

news2024/12/28 20:57:41

在这里插入图片描述

在这里插入图片描述

🌈个人主页:godspeed_lucip
🔥 系列专栏:OS从基础到进阶


  • 🐹1 虚拟内存的基本概念
    • 🦓1.1 总览
    • 🦓1.2 传统存储管理方式的缺点
    • 🦓1.3 局部性原理
    • 🦓1.4 虚拟内存
      • 🦝1.4.1 定义
      • 🦝1.4.2 特征
    • 🦓1.5 如何实现虚拟内存
      • 🦝1.5.1 需要解决的两个问题
      • 🦝1.5.2 常采用的技术
    • 🦓1.6 总结
  • 🐹2 请求分页管理方法
    • 🦌2.1 总览
    • 🦌2.2 页表机制
      • 🦝2.2.1 需考虑的问题
      • 🦝2.2.2 页表的基本结构
    • 🦌2.3 缺页中断机制
      • 🦝2.3.1 什么是缺页中断机制
      • 🦝2.3.2 过程
    • 🦌2.4 地址变换机制
      • 🦝2.4.1 过程
      • 🦝2.4.2 补充细节
    • 🦌2.5 总结
  • 🐹3 页面置换算法
    • 🐯3.1 总览
    • 🐯3.2 最佳置换算法(OPT)
      • 🐶3.2.1 算法思想
      • 🐶3.2.2 例子
      • 🐶3.2.3 缺点
    • 🐯3.3 先进先出置换算法(FIFO)
      • 🐶3.3.1 算法思想
      • 🐶3.3.2 例子
      • 🐶3.3.3 缺点
    • 🐯3.4 最近最久未使用置换算法(LRU)
      • 🐶3.4.1 算法思想
      • 🐶3.4.2 例子
      • 🐶3.4.3 缺点
    • 🐯3.5 时钟置换算法
      • 🐶3.5.1 算法思想
      • 🐶3.5.2 例子
    • 🐯3.6 改进型的时钟置换算法
      • 🐶3.6.1 算法思想
      • 🐶3.6.2 算法实现方法
      • 🐶3.6.3 例子
      • 🐶3.6.4 对算法的进一步理解
    • 🐯3.7 总结
  • 🕮 4 总结


🐹1 虚拟内存的基本概念

🦓1.1 总览

image1

🦓1.2 传统存储管理方式的缺点

image2

🦓1.3 局部性原理

image3

🦓1.4 虚拟内存

🦝1.4.1 定义

image4
image5

🦝1.4.2 特征

image6

🦓1.5 如何实现虚拟内存

🦝1.5.1 需要解决的两个问题

(1)
image7
此时操作系统需要提供请求调页(请求调段)功能
(2)
image8
此时操作系统需要提供页面置换(段置换功能)

🦝1.5.2 常采用的技术

image9

🦓1.6 总结

image10

🐹2 请求分页管理方法

🦌2.1 总览

image1

🦌2.2 页表机制

🦝2.2.1 需考虑的问题

为了实现虚拟内存的请求调页和页面置换功能,我们需要考虑以下问题
image2

🦝2.2.2 页表的基本结构

image3
访问字段:优先将访问次数较少的内存块调出内存
修改位:在将内存块调出内存时,对于已经修改过的内存块,需要将修改内容重新写入外存。
其他字段较为简单不再赘述

🦌2.3 缺页中断机制

🦝2.3.1 什么是缺页中断机制

image4

🦝2.3.2 过程

image5
image6

🦌2.4 地址变换机制

🦝2.4.1 过程

与普通页表的地址变化过程类似。注意此处是引入了快表的
image7
当发生缺页中断时,需要进行的护处理如下:
image8

🦝2.4.2 补充细节

与上图中标注的序号匹配。
image9

🦌2.5 总结

image10

🐹3 页面置换算法

🐯3.1 总览

image1

🐯3.2 最佳置换算法(OPT)

🐶3.2.1 算法思想

image2

🐶3.2.2 例子

image3
首先,页面会逐渐先将内存填满,如图所示
image4
接着,进程需要2号页面,但是内存中没有,于是发生缺页中断。剩余的页面号引用串为0304230321201701,而内存中已经存在的页面为701,于是操作系统依次对页面进行查找,确定701中最后一个在页面号引用串中出现的数字,容易得到为7,于是将7号页面换出,将2号页面换入。

🐶3.2.3 缺点

(1)是一种理想算法
image5
(2)注意
image6

🐯3.3 先进先出置换算法(FIFO)

🐶3.3.1 算法思想

image7

🐶3.3.2 例子

image8
首先,页面会逐渐将内存填满,如图
image9
接着,系统需要访问0号页面,但内存中没有,于是发生缺页异常。此时的页面队列为3 <- 2 <- 1,3是最先进去的,所以系统将3替换为0。

🐶3.3.3 缺点

image10

🐯3.4 最近最久未使用置换算法(LRU)

🐶3.4.1 算法思想

image11

🐶3.4.2 例子

image12
假如系统的内存块数量为4,且会访问的页面串为:
1,8,1,7,8,2,3
首先,页面会逐渐将内存块填满,如图:
image13
接着,系统访问7号页面,发现内存中没有,于是发生缺页异常,此时我们可以发现现有的页面1872中,它们的自上次被访问以来所经历的时间依次为3、2、1、0。所以系统将1号页面换出,换为3号页面。
我们在做题时,也可以逆序查找。比如此处内存中的页面为1872,而它们的逆序页面号为2、8、7、1,所以1是最久没有使用的,可以将其替换。

🐶3.4.3 缺点

它的效率最接近最佳替换算法,但是:
image14

🐯3.5 时钟置换算法

🐶3.5.1 算法思想

image15
访问位示意图:
image16

🐶3.5.2 例子

image17
因为进程有5个内存块,所以页面的循环队列的长度应该是5。初始时13425会依次填满内存块(这五个页面都被访问,于是它们的访问位都置为1),当访问到6号页面时,操作系统发现缺页,于是产生缺页异常,此时的循环队列为(1->3->4->2->5->1)。操作系统首先从队列的开头(1)寻找最近没有被访问的页面,直至查找到5,所有的页面都被访问过,于是按照时钟置换算法将所有页面的访问位都置为0,并再次开始寻找,此时第一个为0的页面是1,于是操作系统将1号页面换出,换入6号页面。

🐯3.6 改进型的时钟置换算法

🐶3.6.1 算法思想

image18

🐶3.6.2 算法实现方法

image19

🐶3.6.3 例子

image20
(1)只需一轮扫描:
image21

(2)需要两轮扫描:
image22

(3)需要三轮扫描
image23

(4)需要四轮扫描
image24

🐶3.6.4 对算法的进一步理解

image25

🐯3.7 总结

image26

🕮 4 总结

操作系统,如默默守护的守夜者,无声地管理硬件与软件的交流,为计算机创造和谐秩序。

它是无形的引导者,让复杂的任务变得井然有序,为用户提供无忧体验。

操作系统的巧妙设计,让计算机变得更加智能高效,让人与科技之间的交流更加顺畅。

在每一次启动中,它如信任的伙伴,带领我们进入数字世界的奇妙旅程。

渴望挑战操作系统的学习路径和掌握进阶技术?不妨点击下方链接,一同探讨更多操作系统的奇迹吧。我们推出了引领趋势的💻OS专栏:《OS从基础到进阶》 ,旨在深度探索OS的实际应用和创新。🌐🔍

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

spring boot 使用 Kafka

一、Kafka作为消息队列的好处 高吞吐量&#xff1a;Kafka能够处理大规模的数据流&#xff0c;并支持高吞吐量的消息传输。 持久性&#xff1a;Kafka将消息持久化到磁盘上&#xff0c;保证了消息不会因为系统故障而丢失。 分布式&#xff1a;Kafka是一个分布式系统&#xff0c…

Swift Vapor 教程(查询数据、插入数据)

上一篇简单写了 怎么创建 Swift Vapor 项目以及在开发过程中使用到的软件。 这一篇写一个怎么在创建的项目中创建一个简单的查询数据和插入数据。 注&#xff1a;数据库配置比较重要 先将本地的Docker启动起来&#xff0c;用Docker管理数据库 将项目自己创建的Todo相关的都删掉…

TQ15EG开发板教程:在VIVADO2023.1 以及VITIS环境下 检测DDR4

打开VIVADO2023.1 创建一个新的工程&#xff0c;设置工程名称和地址 选择RTL工程&#xff0c;勾选不添加文件 搜索15eg&#xff0c;选择xqzu15eg-ffrb1156-2-i 完成创建工程 添加设计模块 设置模块名称 在模块中添加mpsoc器件 双击器件进行配置 若有配置文件预设可以直接导入配…

ChatGPT的探索与实践-应用篇

这篇文章主要介绍在实际的开发过程当中&#xff0c;如何使用GPT帮助开发&#xff0c;优化流程&#xff0c;文末会介绍如何与618大促实际的业务相结合&#xff0c;来提升应用价值。全是干货&#xff0c;且本文所有代码和脚本都是利用GPT生成的&#xff0c;请放心食用。 场景一&…

Windows10 安装 OpenSSH 配置 SFTP服务器

1、下载 https://github.com/PowerShell/Win32-OpenSSH/releases 2、默认安装 3、创建用户 4、修改配置文件 C:\ProgramData\ssh\sshd_config# 最后一行后面加入 ForceCommand internal-sftp# 设置用户登录后默认目录 Match User sftpuser ChrootDirectory C:\SFTP# Disable…

(CVPR-2021)RepVGG:让 VGG 风格的 ConvNet 再次伟大

RepVGG&#xff1a;让 VGG 风格的 ConvNet 再次伟大 Title&#xff1a;RepVGG: Making VGG-style ConvNets Great Again paper是清华发表在CVPR 2021的工作 paper链接 Abstract 我们提出了一种简单但功能强大的卷积神经网络架构&#xff0c;它具有类似 VGG 的推理时间主体&…

自学网安-IIS服务器

部署环境&#xff1a;win2003 配置环境&#xff1a;winxp ip&#xff1a;10.1.1.2 win2003 ip&#xff1a;10.1.1.1 开始安装 双击“应用程序服务器” 双击“Internet 信息服务&#xff08;IIS&#xff09;” 勾选万维网服务&#xff0c;确定然后下一步 查看端口号;netstat …

vue2学习笔记(2/2)

vue2学习笔记&#xff08;1/2&#xff09; vue2学习笔记&#xff08;2/2&#xff09; 文章目录 1. 初始化脚手架2. 分析脚手架&render函数文件结构图示及说明main.jsindex.htmlApp.vueSchool.vueStudent.vue 关于不同版本的Vue修改默认配置vue.config.js配置文件 3. ref属…

【数据结构与算法】——单链表的原理及C语言实现

数据结构与算法——链表原理及C语言实现 链表的原理链表的基本属性设计创建一个空链表链表的遍历&#xff08;显示数据&#xff09;释放链表内存空间 链表的基本操作设计&#xff08;增删改查&#xff09;链表插入节点链表删除节点链表查找节点增删改查测试程序 链表的复杂操作…

当人工智能遇上教育,会擦出怎样的火花?

在这个时代&#xff0c;科技的风暴正以前所未有的速度席卷全球。其中&#xff0c;人工智能&#xff0c;这个被誉为21世纪的“科技之星”&#xff0c;正悄然改变着我们的生活。但是&#xff0c;当人工智能遇上传统教育领域时&#xff0c;你猜会发生什么&#xff1f; 有人说&…

element-ui button 组件源码分享

element-ui button 源码分享&#xff0c;基于对源码的理解&#xff0c;编写一个简单的 demo&#xff0c;主要分三个模块来分享&#xff1a; 一、button 组件的方法。 1.1 在方法这块&#xff0c;button 组件内部通过暴露 click 方法实现&#xff0c;具体如下&#xff1a; 二、…

勇敢的小刺猬

故事名称&#xff1a;《勇敢的小刺猬》 角色&#xff1a; 小明&#xff08;刺猬&#xff09;小鸟森林医生邪恶的狐狸 场景&#xff1a;森林 【场景1&#xff1a;森林里的小路上】 小明&#xff08;边走边哼着歌&#xff09;&#xff1a;今天的阳光真好&#xff0c;真是个适合帮…

盘点那些硬件+项目学习套件:STM32U5单片机开发板及入门常见问题解答

华清远见20岁了~过去3年里&#xff0c;华清远见研发中心针对个人开发板业务&#xff0c;打造了多款硬件项目学习套件&#xff0c;涉及STM32单片机、嵌入式、物联网、人工智能、鸿蒙、ESP32、阿里云IoT等多技术方向。 今天我们来盘点一下&#xff0c;比较受欢迎几款“硬件项目”…

ubuntu22.04安装部署02:禁用显卡更新

一、查看可用显卡驱动 ubuntu-drivers devices 二、查看显卡信息 # -i表示不区分大小写 lspci | grep -i nvidia nvidia-smi 三、查看已安装显卡驱动 cat /proc/driver/nvidia/version 四、锁定显卡升级 使用cuda自带额显卡驱动&#xff0c;居然无法&#xff0c;找到如何锁…

模拟请求ElasticSearch

Step1 安装chrome的这个插件 Step2 打开插件&#xff0c;GET的json填什么。 在IDEA的debug模式&#xff0c;走到Java代码的searchBuilder&#xff0c; 在这个searchBuilder变量里&#xff0c;对里面query变量点右侧 view按钮&#xff0c; IDEA里会显示出一个json&#xff…

ref和reactive

看尤雨溪说&#xff1a;为什么Vue3 中应该使用 Ref 而不是 Reactive&#xff1f;

Multisim14.0仿真(四十二)基于74LS183的8位表决器设计

一、74LS183简介&#xff1a; 74LS183是一种4位高速全加器&#xff0c;用于数字电路中的加法运算。74LS183输入端包括两个4位二进制数和一个进位信号&#xff0c;输出端包括1个4位二进制数和一个进位信号。 74LS138具有快速响应、低功耗灯特点&#xff0c;能实现高校的数字匀速…

接口和抽象类【Java面向对象知识回顾②】

Java中的抽象类和接口是两种常见的抽象概念&#xff0c;它们都能够帮助我们实现抽象化和多态性&#xff0c;但是它们在一些细节上有所不同 抽象类 抽象类是一种特殊的类&#xff0c;不能被实例化&#xff0c;只能被继承。抽象类具有类的所有特性&#xff0c;包括成员变量、成员…

链式二叉树(3)

目录 Main函数 ​ 二叉树第K层的节点个数 整体思路 分析理解 注意事项 二叉树查找值为x的节点 整体思路 分析理解 注意事项 Main函数 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h> #include<math.h&g…