虚拟内存相关笔记
虚拟内存是计算机系统内存管理的一个功能,它允许程序认为它们有比实际物理内存更多的可用内存。它使用硬盘来模拟额外的RAM。当物理内存不足时,操作系统将利用磁盘空间作为虚拟内存来存储数据。这种机制提高了资源的利用率并允许更大、更复杂的应用程序的执行。
以下是虚拟内存的工作原理和组成:
-
分页与页表:
- 为了实现虚拟内存,操作系统将虚拟地址空间和物理地址空间分成固定大小的块,称为页。
- 每个虚拟页都有一个对应的物理页,但并不是所有虚拟页都一直保留在物理内存中。
- 页表是一个数据结构,用于跟踪虚拟页和物理页之间的关系。
-
页面置换:
- 当一个程序需要访问一个不在物理内存中的页时,会触发一个页面错误(page fault)。
- 操作系统会选择一个物理页,将其内容写回到磁盘(如果该页被修改过),并从磁盘读取所需的页到该物理页中。
- 页面置换算法(如最近最少使用LRU、先进先出FIFO等)用于确定应该替换哪个物理页。
-
交换空间或页面文件:
- 当物理内存不足时,操作系统使用磁盘上的一部分作为虚拟内存,称为交换空间(Linux)或页面文件(Windows)。
- 当一个页面从物理内存被移出时,它被存储在这个磁盘空间中。
-
优点:
- 内存抽象: 应用程序不必关心物理内存的实际数量和位置,而是工作在一个连续的、统一的地址空间中。
- 资源最大化: 虚拟内存允许多个进程共享有限的物理内存,而每个进程都认为它独占了所有的内存。
- 安全性: 通过虚拟内存,每个进程都运行在其自己的地址空间,这防止了一个进程意外(或恶意地)访问或修改另一个进程的数据。
-
缺点:
- 如果系统过度依赖虚拟内存(即频繁地进行页面置换),性能会受到严重影响,因为磁盘访问速度远慢于RAM。这种现象被称为"页面抖动"。
类比说明:
想象你是一位厨师,正在为一个大型晚宴做准备。你的厨房操作台是你的"物理内存",因为这是你直接使用食材和工具的地方。但是,你有太多的食材和工具,无法全部放在操作台上。这时,你的冰箱和储藏室就起到了"虚拟内存"的作用。
工作中: 当你制作一个菜肴时,你从冰箱或储藏室取出所需的食材和工具放到操作台上。同样地,当电脑运行一个程序时,它需要从硬盘(相当于你的冰箱/储藏室)中取出数据,放到物理内存(操作台)中。
空间不足: 如果操作台上的空间不足,你需要做出决策:将一些不急用的食材或工具放回冰箱或储藏室,为即将使用的食材腾出地方。同样,当电脑的物理内存不足时,它会将一些不常用的数据移至硬盘上的一个特定区域(虚拟内存),为即将使用的数据腾出空间。
取用速度: 从操作台拿东西总是比从冰箱或储藏室拿要快。同理,电脑从物理内存中取数据比从硬盘上的虚拟内存取数据要快得多。
过度依赖的问题: 如果你频繁地从冰箱和储藏室拿取东西,你的烹饪速度就会变慢。同样,如果电脑过于依赖虚拟内存,它的运行速度也会受到影响。
我们继续使用厨房的例子来解释分页和页表。
分页:
- 解释: 分页是将计算机的内存划分为许多固定大小的小块,这些小块就叫做"页"。
- 厨房比喻: 想象你的操作台上有一个特别的蛋糕模型,这个模型可以将一个大蛋糕切成等大的小块。在这里,大蛋糕代表电脑的整个内存或一个大型程序,而蛋糕模型将大蛋糕分成了许多小块,每一小块蛋糕就是一个"页"。
页表:
- 解释: 页表是一个目录或索引,它记录了每个"页"的位置,无论是在操作台上(物理内存)还是在冰箱/储藏室中(虚拟内存)。
- 厨房比喻: 想象在操作台旁边有一个食谱,这个食谱告诉你每一小块蛋糕现在放在哪里——是在操作台上,还是在冰箱里。如果你需要找到一个特定的蛋糕块,你只需要查看食谱,而不是去每个地方寻找。这个食谱就像是计算机的"页表",帮助电脑迅速找到每一个"页"的位置。
当程序在运行时,它可能需要某个特定的数据(也就是蛋糕的某一小块)。电脑首先会查看页表(食谱)以确定这个数据当前存储在哪里。如果它在操作台上(物理内存),那么电脑可以直接使用它;如果它在冰箱/储藏室(虚拟内存),那么电脑需要先将其移动到操作台上才能使用。
分页是计算机内存管理中的一种技术,用于将物理内存和虚拟内存分成固定大小的块。以下是分页的具体步骤和机制:
-
固定大小的块:
- 无论是物理内存(RAM)还是虚拟内存(通常在硬盘上),它们都被分为固定大小的块,这些块被称为"页"。常见的页大小有4KB, 8KB等,但这取决于操作系统和硬件架构。
-
虚拟地址与物理地址:
- 当程序运行时,它在一个叫做"虚拟地址空间"的地方生成地址。这些地址不直接对应物理内存的实际位置。
- 物理地址是数据在RAM中的实际位置。
- 分页的任务之一是将虚拟地址映射到物理地址。
-
页表的作用:
- 为了完成这种映射,操作系统维护了一个叫做"页表"的数据结构。页表为每一个虚拟页存储一个条目,指示这个虚拟页在物理内存中的位置。
- 当CPU需要访问一个虚拟地址时,它首先查找相关的页表,找到物理地址,然后访问那个物理位置。
-
页失效:
- 如果一个程序试图访问的虚拟页不在物理内存中(这意味着它可能在硬盘的虚拟内存部分),则会发生"页失效"。此时,操作系统必须从虚拟内存中取出所需的页,并将其加载到物理内存中。为了给新页腾出空间,操作系统可能需要选择一个当前在物理内存中的页,并将其移出。
尝试使用一个更简单的比喻来帮助理解页失效和页面置换算法。
想象一下,你有一个小书桌和一个大书架。你正在研究一本书,但书桌上只能放5本书。你的书桌代表物理内存,而大书架代表虚拟内存。
页失效的情境:
- 你正在阅读一个新主题,需要从书架上取一本书。
- 但是,你的书桌已经放满了5本书,没有空间放新书。
- 这种情况,就像页失效,你需要的"数据"(书)不在"物理内存"(书桌)上。
页面置换算法:
- 既然书桌上没有空间,你需要决定放回书架的哪一本书来为新书腾地方。
- FIFO(先进先出): 你放回最早放到书桌上的那本书,无论你多久没读它。它就像排队,第一个来的书将是第一个离开的。
- LRU(最近最少使用): 你思考一下,然后放回你很长时间都没有看过的那本书,因为你认为短期内不太可能再需要它。
所以,这些"页面置换算法"就是你用来决定哪本书放回书架的方法,以便为新书腾出空间。计算机在决定哪一页数据从物理内存中移出以容纳新数据时,也采用类似的策略。
-
页面置换算法:
- 为了决定哪一页应该从物理内存中移出,操作系统使用页面置换算法。常见的算法包括LRU(最近最少使用)、FIFO(先进先出)等。
-
分页的优点:
- 通过使用分页,操作系统可以使得每个进程都认为它在使用整个连续的地址空间,而实际上,它的数据可以散布在物理内存的各个地方。
- 分页还有助于保护进程之间的隔离,因为每个进程的地址空间是独立的。
相关文章:

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

【linux】定时任务讲解
文章目录 一. 在某时刻只执行一次:at1. 设置定时任务2. 查看和删除定时任务 二. 周期性执行任务:cron1. 启动crond进程2. 编辑定时任务3. 查看和删除4. 用户权限4.1. 黑名单4.2指定用户 三. /etc/crontab的管理 一. 在某时刻只执行一次:at 1…...

安卓10创建文件夹失败
最近在做拍照录像功能,已经有了文件读写权限,却发现在9.0手机上正常使用,但是在安卓12系统上根本没有创建文件夹。经过研究发现,创建名称为“DCIM”的文件夹可以,别的又都不行。而且是getExternalStorageDirectory和ge…...

文件操作(c/c++)
文件操作可以概括为几步: 打开文件,写入文件,读取文件,关闭文件 FILE FILE 是一个在C语言中用于文件操作的库函数,它提供了一系列函数来实现文件的创建、打开、读取、写入、关闭等操作。FILE 库函数可以帮助开发者处理…...

设计模式-适配器
文章目录 一、简介二、适配器模式基础1. 适配器模式定义与分类2. 适配器模式的作用与优势3.UML图 三、适配器模式实现方式1. 类适配器模式2. 对象适配器模式3.类适配器模式和对象适配器模式对比 四、适配器模式应用场景1. 继承与接口的适配2. 跨平台适配 五、适配器模式与其他设…...

C. Queries for the Array - 思维
分析: 分析出现矛盾的地方,也就是可能遇到0,并且已有字符串的长度小于等于1,另一种情况就是,遇到了1并且已有字符串不是排好序的,或者遇到了0已有字符串是排好序的,那么可以遍历字符串ÿ…...

音频——硬件拓扑
文章目录 硬件拓扑I2S 数据通路五线模式四线模式两线 TX两线 RX 典型应用硬件连接数据流 硬件拓扑 控制路径:UART/I2C/SPI数据路径:I2S 简略图如下 I2S 数据通路 五线模式 四线模式 两线 TX 两线 RX 典型应用 硬件连接 控制信号:SPI 用…...

Oracle表索引查看方法总结(查看oracle表索引)
Oracle表索引查看方法总结 Oracle是当前应用最广泛的关系数据库,也是多数大型企业使用的数据库。Oracle表索引在提高查询效率方面起着至关重要的作用,掌握该方法也是技术人员必备技能之一。本文总结了几种常见的查看Oracle表索引信息的方法,…...

react css 污染解决方法
上代码 .m-nav-bar {background: #171a21;.content {height: 104px;margin: 0px auto;} }import React from "react"; import styles from ./css.module.scssexport default class NavBar extends React.Component<any, any> {constructor (props: any) {supe…...

volatile 关键字 与 CPU cache line 的效率问题
分析&回答 Cache Line可以简单的理解为CPU Cache中的最小缓存单位。目前主流的CPU Cache的Cache Line大小都是64Bytes。假设我们有一个512字节的一级缓存,那么按照64B的缓存单位大小来算,这个一级缓存所能存放的缓存个数就是512/64 8个。具体参见下…...

又一关键系统上线,理想车云和自动驾驶系统登陆OceanBase
8 月 1 日,理想汽车公布 7 月交付数据,理想汽车 2023 年 7 月共交付新车 34,134 辆,同比增长 227.5%,并已连续两个月交付量突破三万。至此,理想汽车 2023 年累计交付量已经达到 173,251 辆,远超 2022 年全年…...

SIEM(安全信息和事件管理)解决方案
什么是SIEM 安全信息和事件管理(SIEM)是一种可帮助组织在安全威胁危害到业务运营之前检测、分析和响应安全威胁的解决方案,将安全信息管理 (SIM) 和安全事件管理 (SEM) 结合到一个安全管理系统中。SIEM 技术从广泛来源收集事件日志数据&…...

Go 自学:map关联数组
以下代码展示了如何建立一个map。 我们可以使用delete删除map中的元素。 我们还可以使用loop遍历map中的所有元素。 package mainimport ("fmt" )func main() {languages : make(map[string]string)languages["JS"] "Javascript"languages[&qu…...

c#多态(override)的使用
方法重写(override):多态,通过父类类型对象,调用子类当中对应方法的实现。 细节:子类当中的override方法会“抹杀”父类当中对应virtual方法 不使用多态时,父类调用子类方法时,会调用父类的方法…...

kafka 动态扩容现有 topic 的分区数和副本数
文章目录 [toc]创建一个演示 topic生产一些数据使用消费者组消费数据增加分区无新数据产生,有旧数据未消费有新数据产生,有旧数据未消费 增加副本创建 json 文件使用指定的 json 文件增加 topic 的副本数使用指定的 json 文件查看 topic 的副本数增加的进…...

【数据结构】Golang 实现单链表
概念 通过指针将一组零散的内存块串联在一起 , 把内存块称为链表的“结点”。 记录下个结点地址的指针叫作后继指针 next ,第一个结点叫作头结点,把最后一个结点叫作尾结点 。 代码实现 定义单链表 在 golang 中可以通过结构体定义单链表…...

云服务器利用Docker搭建sqli-labs靶场环境
一、安装宝塔面板 使用xshell、electerm、SecureCRT等远程终端连接登陆上云服务器,在Linux宝塔面板使用脚本安装 安装后,如下图:按照提示,在云服务器防火墙/安全组放行Linux宝塔面板的端口 在浏览器打开上述网址,登…...

jQuery成功之路——jQuery介绍和jQuery选择器概述
一、jQuery介绍 1.1 jQuery概述 jQuery的概述 jQuery是一个快速、简洁的JavaScript框架。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。JQuery封装了JavaScript常用的功能代码,提供了一套易于使…...

极限五分钟,在宝塔中用 Docker 部署升讯威在线客服系统
最近客服系统成功经受住了客户现场组织的压力测试,获得了客户的认可。 客户组织多名客服上线后,所有员工同一时间打开访客页面疯狂不停的给在线客服发消息,系统稳定无异常无掉线,客服回复消息正常。消息实时到达无任何延迟。 本文…...

Java--静态字段与静态方法
1、静态字段 如果将一个字段定义为static,每个类只有一个这样的字段。而对于非静态的实例字段,每个对象都有自己的一个副本。 例如: class Employee {private static int nextId 1;private int id;... }其中,每一个Employee对…...

多线程的五种“打开”方式
1 概念 1.1 线程是什么?? 线程(Thread)是计算机科学中的一个基本概念,它是进程(Process)中的一个执行单元,负责执行程序的指令序列。线程是操作系统能够进行调度和执行的最小单位。…...

信息熵 条件熵 交叉熵 联合熵 相对熵(KL散度) 互信息(信息增益)
粗略版快速总结 条件熵 H ( Q ∣ P ) 联合熵 H ( P , Q ) − H ( P ) 条件熵H(Q∣P)联合熵H(P,Q)−H(P) 条件熵H(Q∣P)联合熵H(P,Q)−H(P) 信息增益 I ( P , Q ) H ( P ) − H ( P ∣ Q ) H ( P ) H ( Q ) − H ( P , Q ) 信息增益 I(P,Q)H(P)−H(P∣Q)H(P)H(Q)-H(P,Q) 信息…...

Fiddler Response私人订制
在客户端接口的测试中,我们经常会需要模拟各种返回状态或者特定的返回值,常见的是用Fiddler模拟各种请求返回值场景,如重定向AutoResponder、请求拦截修改再下发等等。小编在近期的测试中遇到的一些特殊的请求返回模拟的测试场景,…...

【德哥说库系列】-ASM管理Oracle 19C单实例部署
📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…...

手写一个简单爬虫--手刃豆瓣top250排行榜
#拿到页面面源代码 request #通过re来提取想要的有效信息 re import requests import re url"https://movie.douban.com/top250"headers{"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/11…...

【word密码】如何限制word文件中部分内容?
Word文件中有一部分内容不想他人编辑,我们可以设置限制编辑,可以对一部分内容设置限制编辑,具体方法如下: 我们将需要将可以编辑的地方选中,然后打开限制编辑功能 然后勾选限制编辑设置界面中的【限制编辑】和【每个人…...

spring 自定义类型转换-ConverterRegistry
1背景介绍 一个应用工程里面,一遍会涉及到很多的模型转换,如DTO模型转DO模型,DO模型转DTO, 或者Request转DTO模型,总的来说,维护起来还是相对比较复杂。每涉及一个转换都需要重新写对应类的get或者set方法,…...

springboot实现发送短信验证码
目录 一、选择并注册短信服务提供商: 二、添加依赖: 三、配置短信服务信息: 四、编写发送短信验证码的方法: 五、调用发送短信验证码的方法: 一、选择并注册短信服务提供商: 1、选择一个可靠的短信服…...

2024王道408数据结构P144 T18
2024王道408数据结构P144 T18 思考过程 首先还是先看题目的意思,让我们在中序线索二叉树里查找指定结点在后序的前驱结点,这题有一点难至少对我来说…我讲的不清楚理解一下我做的也有点糊涂。在创建结构体时多两个变量ltag和rtag,当ltag0时…...

在windows下安装配置skywalking
1.下载地址 Downloads | Apache SkyWalkinghttp://skywalking.apache.org/downloads/ 2.文件目录说明 将文件解压后,可看到agent和bin目录: Agent:作为探针,安装在服务器端,进行数据采集和上报。 Config:…...