虚拟内存相关笔记

在这里插入图片描述
虚拟内存是计算机系统内存管理的一个功能,它允许程序认为它们有比实际物理内存更多的可用内存。它使用硬盘来模拟额外的RAM。当物理内存不足时,操作系统将利用磁盘空间作为虚拟内存来存储数据。这种机制提高了资源的利用率并允许更大、更复杂的应用程序的执行。

以下是虚拟内存的工作原理和组成:

  1. 分页与页表:

    • 为了实现虚拟内存,操作系统将虚拟地址空间和物理地址空间分成固定大小的块,称为页。
    • 每个虚拟页都有一个对应的物理页,但并不是所有虚拟页都一直保留在物理内存中。
    • 页表是一个数据结构,用于跟踪虚拟页和物理页之间的关系。
  2. 页面置换:

    • 当一个程序需要访问一个不在物理内存中的页时,会触发一个页面错误(page fault)。
    • 操作系统会选择一个物理页,将其内容写回到磁盘(如果该页被修改过),并从磁盘读取所需的页到该物理页中。
    • 页面置换算法(如最近最少使用LRU、先进先出FIFO等)用于确定应该替换哪个物理页。
  3. 交换空间或页面文件:

    • 当物理内存不足时,操作系统使用磁盘上的一部分作为虚拟内存,称为交换空间(Linux)或页面文件(Windows)。
    • 当一个页面从物理内存被移出时,它被存储在这个磁盘空间中。
  4. 优点:

    • 内存抽象: 应用程序不必关心物理内存的实际数量和位置,而是工作在一个连续的、统一的地址空间中。
    • 资源最大化: 虚拟内存允许多个进程共享有限的物理内存,而每个进程都认为它独占了所有的内存。
    • 安全性: 通过虚拟内存,每个进程都运行在其自己的地址空间,这防止了一个进程意外(或恶意地)访问或修改另一个进程的数据。
  5. 缺点:

    • 如果系统过度依赖虚拟内存(即频繁地进行页面置换),性能会受到严重影响,因为磁盘访问速度远慢于RAM。这种现象被称为"页面抖动"。

类比说明:
想象你是一位厨师,正在为一个大型晚宴做准备。你的厨房操作台是你的"物理内存",因为这是你直接使用食材和工具的地方。但是,你有太多的食材和工具,无法全部放在操作台上。这时,你的冰箱和储藏室就起到了"虚拟内存"的作用。

  1. 工作中: 当你制作一个菜肴时,你从冰箱或储藏室取出所需的食材和工具放到操作台上。同样地,当电脑运行一个程序时,它需要从硬盘(相当于你的冰箱/储藏室)中取出数据,放到物理内存(操作台)中。

  2. 空间不足: 如果操作台上的空间不足,你需要做出决策:将一些不急用的食材或工具放回冰箱或储藏室,为即将使用的食材腾出地方。同样,当电脑的物理内存不足时,它会将一些不常用的数据移至硬盘上的一个特定区域(虚拟内存),为即将使用的数据腾出空间。

  3. 取用速度: 从操作台拿东西总是比从冰箱或储藏室拿要快。同理,电脑从物理内存中取数据比从硬盘上的虚拟内存取数据要快得多。

  4. 过度依赖的问题: 如果你频繁地从冰箱和储藏室拿取东西,你的烹饪速度就会变慢。同样,如果电脑过于依赖虚拟内存,它的运行速度也会受到影响。

我们继续使用厨房的例子来解释分页和页表。

  1. 分页

    • 解释: 分页是将计算机的内存划分为许多固定大小的小块,这些小块就叫做"页"。
    • 厨房比喻: 想象你的操作台上有一个特别的蛋糕模型,这个模型可以将一个大蛋糕切成等大的小块。在这里,大蛋糕代表电脑的整个内存或一个大型程序,而蛋糕模型将大蛋糕分成了许多小块,每一小块蛋糕就是一个"页"。
  2. 页表

    • 解释: 页表是一个目录或索引,它记录了每个"页"的位置,无论是在操作台上(物理内存)还是在冰箱/储藏室中(虚拟内存)。
    • 厨房比喻: 想象在操作台旁边有一个食谱,这个食谱告诉你每一小块蛋糕现在放在哪里——是在操作台上,还是在冰箱里。如果你需要找到一个特定的蛋糕块,你只需要查看食谱,而不是去每个地方寻找。这个食谱就像是计算机的"页表",帮助电脑迅速找到每一个"页"的位置。

当程序在运行时,它可能需要某个特定的数据(也就是蛋糕的某一小块)。电脑首先会查看页表(食谱)以确定这个数据当前存储在哪里。如果它在操作台上(物理内存),那么电脑可以直接使用它;如果它在冰箱/储藏室(虚拟内存),那么电脑需要先将其移动到操作台上才能使用。

分页是计算机内存管理中的一种技术,用于将物理内存和虚拟内存分成固定大小的块。以下是分页的具体步骤和机制:

  1. 固定大小的块

    • 无论是物理内存(RAM)还是虚拟内存(通常在硬盘上),它们都被分为固定大小的块,这些块被称为"页"。常见的页大小有4KB, 8KB等,但这取决于操作系统和硬件架构。
  2. 虚拟地址与物理地址

    • 当程序运行时,它在一个叫做"虚拟地址空间"的地方生成地址。这些地址不直接对应物理内存的实际位置。
    • 物理地址是数据在RAM中的实际位置。
    • 分页的任务之一是将虚拟地址映射到物理地址。
  3. 页表的作用

    • 为了完成这种映射,操作系统维护了一个叫做"页表"的数据结构。页表为每一个虚拟页存储一个条目,指示这个虚拟页在物理内存中的位置。
    • 当CPU需要访问一个虚拟地址时,它首先查找相关的页表,找到物理地址,然后访问那个物理位置。
  4. 页失效

    • 如果一个程序试图访问的虚拟页不在物理内存中(这意味着它可能在硬盘的虚拟内存部分),则会发生"页失效"。此时,操作系统必须从虚拟内存中取出所需的页,并将其加载到物理内存中。为了给新页腾出空间,操作系统可能需要选择一个当前在物理内存中的页,并将其移出。

尝试使用一个更简单的比喻来帮助理解页失效和页面置换算法。

想象一下,你有一个小书桌和一个大书架。你正在研究一本书,但书桌上只能放5本书。你的书桌代表物理内存,而大书架代表虚拟内存。

页失效的情境:

  1. 你正在阅读一个新主题,需要从书架上取一本书。
  2. 但是,你的书桌已经放满了5本书,没有空间放新书。
  3. 这种情况,就像页失效,你需要的"数据"(书)不在"物理内存"(书桌)上。

页面置换算法:

  1. 既然书桌上没有空间,你需要决定放回书架的哪一本书来为新书腾地方。
  2. FIFO(先进先出): 你放回最早放到书桌上的那本书,无论你多久没读它。它就像排队,第一个来的书将是第一个离开的。
  3. LRU(最近最少使用): 你思考一下,然后放回你很长时间都没有看过的那本书,因为你认为短期内不太可能再需要它。

所以,这些"页面置换算法"就是你用来决定哪本书放回书架的方法,以便为新书腾出空间。计算机在决定哪一页数据从物理内存中移出以容纳新数据时,也采用类似的策略。

  1. 页面置换算法

    • 为了决定哪一页应该从物理内存中移出,操作系统使用页面置换算法。常见的算法包括LRU(最近最少使用)、FIFO(先进先出)等。
  2. 分页的优点

    • 通过使用分页,操作系统可以使得每个进程都认为它在使用整个连续的地址空间,而实际上,它的数据可以散布在物理内存的各个地方。
    • 分页还有助于保护进程之间的隔离,因为每个进程的地址空间是独立的。

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

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

相关文章

BLDC无感方波控制

BLDC无感控制 反电动势过零检测反电动势检测方法比较器模式采样过零信号闭环的建立 BLDC 方波启动技术转子预定位电机的外同步加速电机运行状态的转换 程序部分 反电动势过零检测 它的主要核心就是通过检测定子绕组的反电动势过零点来判断转子当前的位置。 三相六状态 120通电…

IDEA 报 Cannot resolve symbol ‘HttpServletResponse‘ 解决

springboot2版本换成springboot3之后,代码这里突然报红了, 首先要淡定,把原先Import的引入删掉,重新引入试试呢,是不是很简单哈哈。 原来,springboot3的路径是: import jakarta.servlet.http…

4.2 实现基于栈的表达式求值计算器(难度4/10)

本作业主要考察:解释器模式的实现思想/栈结构在表达式求值方面的绝对优势 C数据结构与算法夯实基础作业列表 通过栈的应用,理解特定领域设计的关键作用,给大家眼前一亮的感觉。深刻理解计算机语言和人类语言完美结合的杰作。是作业中的上等…

Docker进阶:mysql 主从复制、redis集群3主3从【扩缩容案例】

Docker进阶:mysql 主从复制、redis集群3主3从【扩缩容案例】 一、Docker常规软件安装1.1 docker 安装 tomcat(默认最新版)1.2 docker 指定安装 tomcat8.01.3 docker 安装 mysql 5.7(数据卷配置)1.4 演示--删除mysql容器…

嵌入式学习之进程

1.进程间通信概述 UNIX系统IPC是各种进程通信方式的统称。 2.管道通信原理 特点: 1.它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。 2.它只能用于具有亲缘关系的进程之间通信(也是父子进程或者…

uniapp 微信小程序仿抖音评论区功能,支持展开收起

最近需要写一个评论区功能,所以打算仿照抖音做一个评论功能,支持展开和收起, 首先我们需要对功能做一个拆解,评论区功能,两个模块,一个是发表评论模块,一个是评论展示区。接下来对这两个模块进行…

一探究竟:为什么需要 JVM?它处在什么位置?

小熊学Java全能学习面试指南:https://www.javaxiaobear.cn/ JVM我们并不陌生,现在我们就正式进入 JVM 的学习,如果你是一名软件开发工程师,在日常工作中除了 Java 这个关键词外,还有一个名词也一定经常被提及&#xf…

开开心心带你学习MySQL数据库之第三篇上

学校的项目组有必要加入吗? 看你的初心. ~~如果初心是通过这个经历能够提高自己的技术水平 ~~是可以考虑的 ~~如果初心是通过这个经历提高自己找工作的概率 ~~这个是不靠谱的,啥用没有 ~~如果初心是通过这个体验更美好的大学生活 ~~靠谱的 秋招,应届生,找工作是非常容易的!!! …

Java切换到Kotlin,Crash率上升了?

前言 最近对一个Java写的老项目进行了部分重构,测试过程中波澜不惊,顺利上线后几天通过APM平台查看发现Crash率上升了,查看堆栈定位到NPE类型的Crash,大部分发生在Java调用Kotlin的函数里,本篇将会分析具体的场景以及…

【小作文】【信】

【邀请信】【22,1邀请教授参加比赛】 【投诉信】【12,2投诉产品质量问题】

【AWS实验】 配置中转网关及对等连接

文章目录 实验概览目标实验环境任务 1:查看网络拓扑并创建基准任务 2:创建中转网关任务 3:创建中转网关挂载任务 4:创建中转网关路由表任务 4.1:创建路由表关联任务 4.2:创建路由传播 任务 5:更…

SpringWeb(SpringMVC)

目录 SpringWeb介绍 搭建 SpringWeb SpringWeb介绍 Spring Web是一个基于 Servlet API 构建的原始 web 框架,用于构建基于MVC模式的Web应用程序。在 web 层框架历经 Strust1,WebWork,Strust2 等诸多产品的历代更选 之后,目前业界普…

fastadmin think-queue supervisor配置

起因是微信支付回调需要同时做发货处理,但是发货接口不能影响,需要队列进行异步处理1. 1.fastadmin 后台购买queue插件(基于think-queue消息队列) 2.代码 2.1 添加文件:application---->extra--->queue.php 内容:我这里用的数据库做…

Git的基本使用笔记——狂神说

版本控制 版本迭代, 版本控制( Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。 实现跨区域多人协同开发 追踪和记载一个或者多个文件的…

合宙Air724UG LuatOS-Air LVGL API控件--日历 (Calendar)

日历 (Calendar) LVGL 提供了一个用来选择和显示当前日期的日历控件。 示例代码 – 高亮显示的日期 highlightDate lvgl.calendar_date_t() – 日历点击的回调函数 – 将点击日期设置高亮 function event_handler(obj, event) if event lvgl.EVENT_VALUE_CHANGED then da…

(15)线程的实例认识:同步,异步,并发,并发回调,事件,异步线程,UI线程

参看:https://www.bilibili.com/video/BV1xA411671D/?spm_id_from333.880.my_history.page.click&vd_source2a0404a7c8f40ef37a32eed32030aa18 下面是net framework版本 一、文件构成 1、界面如下。 (1)同步与异步有什么区别? …

单片机TVS/ESD二极管防护

TVS 瞬态电压抑制二极管Transient Voltage Suppressor ESD 静电释放二极管 Electro-Static discharge 这两种本质上都是二极管。都是利用了二极管正向导通、反向截止的特性。二极管在反向截止截止条件下,如果电压继续增大,将会引发雪崩,使得…

聚合多个电商API接口平台

API接口测试(点击免费测试) 随着数字化商业时代的到来,API接口已成为电商资源连接利器,也是全球传统互联网企业转型的基础。 2021年 Google Cloud 研究显示,全球互联网企业近3/4的企业持续投入数字化转型&#xff0c…

JVM类的加载过程

加载过程 JVM的类的加载过程分为五个阶段:加载、验证、准备、解析、初始化。 加载   加载阶段就是将编译好的的class文件通过字节流的方式从硬盘或者通过网络加载到JVM虚拟机当中来。(我们平时在Idea中书写的代码就是放在磁盘中的,也可以通…

什么是RTC

参考: https://zhuanlan.zhihu.com/p/377100294 RTC(Real time communication)实时通信,是实时音视频的一个简称,我们常说的RTC技术一般指的是WebRTC技术,已经被 W3C 和 IETF 发布为正式标准。由于几乎所…