操作系统 - 内存管理

news2024/12/22 14:39:22

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。
🍎个人主页:小嗷犬的个人主页
🍊个人网站:小嗷犬的技术小站
🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。


本文目录

  • 核心概念
  • 虚拟地址与物理地址
    • 物理地址与虚拟地址
    • 使用虚拟地址访问物理内存
    • 分段与分页机制
  • 基于分页的虚拟内存
    • AArch64 架构下的 4 级页表
    • TLB(Translation Lookaside Buffer, 转址旁路缓存)
    • 换页与缺页异常
    • 页面替换策略
    • 工作集模型


核心概念

虚拟内存(virtual memory):应用程序面向虚拟内存编写,而不是物理地址,CPU 负责将虚拟地址翻译成物理地址。

虚拟内存设计的三个目标:

  1. 高效性:不能明显降低应用程序性能,不能过多占用物理内存
  2. 安全性:保证应用程序隔离
  3. 透明性:开发者无需考虑虚拟内存实现细节

虚拟地址与物理地址

物理地址与虚拟地址

  • 物理地址:物理内存的真实地址,CPU 通过总线发送物理地址请求读写内存。
  • 虚拟地址:以应用程序自身的数据和代码为参照形成的地址,应用程序使用虚拟地址访问内存中的数据和代码。
  • 地址翻译:CPU 将虚拟地址转换为物理地址的过程。

CPU 地址翻译

使用虚拟地址访问物理内存

  • MMU:内存管理单元(Memory Management Unit),属于 CPU 中的重要部件,负责将虚拟地址转换为物理地址。
  • TLB:转址旁路缓存(Translation Lookaside Buffer),属于 MMU 的部件,用于缓存经常访问的页表项。

分段与分页机制

  • 分段机制:操作系统以段(一段连续的物理区域)管理/分配物理内存
  • 相关概念:段表、段号、段内地址、段表基址寄存器

分段机制带来外部碎片,x86-64架构后普遍采用分页机制管理虚拟内存。

分段机制

  • 分页机制:将虚拟地址空间和物理内存划分为连续、等长的虚拟页,并在页表中存储虚拟页到物理页的映射关系
  • 相关概念:虚拟页号、页内偏移量、页表基地址寄存器

分页机制下,虚拟地址空间中的任意虚拟页可被映射到任意物理页,可有效避免外部碎片。

分页机制

基于分页的虚拟内存

AArch64 架构下的 4 级页表

AArch64 的常见设置:虚拟地址低 48 位参与地址翻译,页表级数为 4 级,虚拟页大小为 4KB,页表项 8 字节。

  • 63-48 位全部置 1 或 0,应用程序置 0。
  • 47-39 位,0 级页表索引(9 位)
  • 38-30 位,1 级页表索引(9 位)
  • 29-21 位,2 级页表索引(9 位)
  • 20-12 位,3 级页表索引(9 位)
  • 11-0 位,页内偏移量
  • 使用寄存器 TTBR0_EL1 或 TTBR1_EL1

AArch64 架构下的 4 级页表

TLB(Translation Lookaside Buffer, 转址旁路缓存)

TLB 中缓存了虚拟页号到物理页号的映射关系(可以看成键值对哈希表)。

TLB 结构

  • TLB 命中:查询的页表项在 TLB 中

CPU 核心中的 TLB 缓存项通常很少,若TLB已满,则根据硬件预定的策略替换某一页。
某些体系结构(MIPS, SPARC)允许软件在地址翻译过程中对 TLB 进行管理。

  • TLB 刷新:当进行页表切换时(应用程序切换),TLB 需要主动更新

AArch64 体系结构中,系统调用不需要刷新TLB,因为采用了两个基地址寄存器 TTBR0_EL1, TTBR1_EL1。
X86-64 体系中,只有一个页表基地址 CR3,操作系统将自己映射到应用程序页表中的高地址部分。
ASID(X86 称为 PCID,Process Context IDentifier):OS 为不同的应用程序分配不同的 ASID 作为应用程序的身份标签(TTBR0_EL1 的高 16 位),切换页表的时候不再需要清空 TLB。

换页与缺页异常

  • 换页:物理内存不够时,OS 将若干物理页的内容写入到硬盘中,同时将应用程序的页表进行修改(记录到硬盘上的位置)。
  • 缺页异常:当访问的页表项对应的物理内存不存在时(在硬盘上),触发缺页异常。
  • 页面预取:发生换入操作时,预测哪些页会被访问,并将它们写入内存。
  • 缺页异常的判定:应用程序的虚拟地址空间被分成多个 VMA(Virtual Memory Area),当缺页异常发生时,OS 通过判定页 P 是否属于某个虚拟内存区域来区分该页的状态。

换页机制

页面替换策略

MIN/OPT 策略:优先选择未来不会再访问的页

物理页访问顺序323143542343
物理内存中
存放的物理页
3
-
-
3
2
-
3
2
-
3
2
1
3
2
4
3
2
4
5
2
4
5
2
4
5
2
4
3
2
4
3
2
4
3
2
4
缺页异常(共 6 次)

FIFO 策略:优先选择最先换入的页进行换出

物理页访问顺序323143542343
(该行为队列头部)
存储物理页号
的 FIFO 队列
3
-
-
3
2
-
3
2
-
3
2
1
2
1
4
1
4
3
4
3
5
4
3
5
3
5
2
3
5
2
5
2
4
2
4
3
缺页异常(共 9 次)

Second Chance 策略:对 FIFO 的改进

OS 维护一个先进先出队列记录换入物理内存的物理页,并为每个物理页号维护一个访问标志,如果访问的页号已经在队列中,则置访问标志位。
寻找换出页时,优先查找位于队头的页号,如果其标志位没有标记,换出该页,否则将该标志清零,并将该页号挪到队尾。

物理页访问顺序323143542343
(该行为队列头部)
存储物理页号
的 FIFO 队列
3
-
-
3
2
-
3*
2
-
3*
2
1
1
3
4
1
3*
4
3*
4
5
3*
4*
5
3
4
2
3*
4
2
3*
4*
2
3*
4*
2
缺页异常(共 6 次)

LRU 策略:优先选择最久未被访问的页

OS 维护一个链表,最久未访问的页放在链表头,最近访问的页在链表尾,每次访问 OS 将刚访问的内存页调整到链表尾,每次选择换出链表首端的页。

物理页访问顺序323143542343
(该行为链表首端)
越不常访问的页号
离首端越近
3
-
-
3
2
-
2
3
-
2
3
1
3
1
4
1
4
3
4
3
5
3
5
4
5
4
2
4
2
3
2
2
4
2
4
3
缺页异常(共 7 次)

MRU 策略:优先选择最近访问的内存页

时钟算法策略(与 Second Chance 类似):将换入物理内存的页号排成一个时钟,针臂指向新换入内存的页号的最后一个,每个页设置一个访问标志位。

  1. 换页时,若当前页号的访问位没有设置,则替换该页。
  2. 如果已经被置上,则将该访问位清空,针臂下移。

工作集模型

  • 颠簸现象:页面在内存和外存间反复调换
  • 工作集:一个程序在 [ t − x , t ] [t-x,t] [tx,t] 时间内的内存页的集合
  • 工作集时钟算法:每间隔一段时间启动一个跟踪函数,检查每个页面(上次访问时间、访问位),访问位为 1,则将当前系统时间赋予该内存页的上次使用时间,访问位为 0,计算该页面的年龄若超过 x x x 则不再属于工作集。检查完一个页的状态后,工作集追踪函数将访问位设置为 0。

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

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

相关文章

INDEMIND相机ROS bag包数据的回放

实验需要IMU相机,跑算法是在ROS下跑,在 ROS 系统中,可以使用 bag 文件来保存和恢复系统的运行状态,比如相机话题的 bag 包,然后回放用来进行联合外参标定,也可以使用EVO工具显示算法轨迹,这里记…

合宙Air724UG Cat.1模块硬件设计指南--GPIO控制

GPIO控制 简介 GPIO(General-purpose input/output),通用型之输入输出的简称,可实现某时刻电平状态的输出与输入,即可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。 特性 共支持28个GPIO&a…

A Neural Conversational Model 读后感

目录 摘要 1、介绍 2、相关工作 3、模型 4、数据(后面都是具体的东西,不赘述) 5、总结 使用微软翻译得到的中文原文: 摘要 会话建模是自然语言理解和机器智能中的一项重要任务。尽管存在以前的方法,但它们通常仅…

MySQL数据库:数据库的约束以及数据的聚合、联合查询

目录 一.关系模型的简要概述 二.数据库的约束 2.1约束类型 2.2NULL约束 2.3 UNIQUE:唯一约束 2.4 默认约束 2.5 PRIMARY KEY:主键约束 2.6 FOREIGN KEY:外键约束 2.7 CHECK约束 三.高效率查询 3.1高效率查询的分类 3.2聚合查询 …

Nginx热升级到1.23.4过程指导手册

一、问题描述 因环境内部安全扫描发现CVE-2021-23017、CVE-2022-41741、CVE-2022-41742、CVE-2019-20372漏洞,经分析后,需要将nginx升级到1.23.4版本; 现场环境:centos7.4 1708、nginx 1.20.1 资料:软件下载、360安全…

spring框架-循环依赖问题(二)

文章目录 什么是循环依赖解决循环依赖的办法知识扩展 什么是循环依赖 两个或多个类之间存在彼此依赖的情况,形成一个循环依赖链 代码: 单例bean的循环依赖: 先了解Bean的生命周期:1.实例化 2.初始化、3.使用 4.销毁 详细了解Bean生命周期…

数据库高级

数据库高级🦅 文章目录 数据库高级🦅范式🦍什么是范式🐊第一范式——1NF🦖第二范式——2NF🐟第三范式——3NF🐉总结🐙 五大约束🐏主键约束🐡外键约束&#x1…

第五章 ResNeXt网络详解

系列文章目录 第一章 AlexNet网络详解 第二章 VGG网络详解 第三章 GoogLeNet网络详解 第四章 ResNet网络详解 第五章 ResNeXt网络详解 第六章 MobileNetv1网络详解 第七章 MobileNetv2网络详解 第八章 MobileNetv3网络详解 第九章 ShuffleNetv1网络详解 第十章…

网络套接字函数 | socket、bind、listen、accept、connect

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

CSS3-补充-结构伪类选择器

结构伪类选择器 作用:在HTML中定位元素 优势:减少对于HTML中类的依赖,有利于保持代码整洁 场景:常用于查找某父级选择器中的子元素 选择器: 选择器 …

SAC算法小结

算法SAC 基于动态规划的贝尔曼方城如下所示: 则,基于最大熵的软贝尔曼方程可以描述为如下的形式: 可以这么理解soft贝尔曼方程,就是在原有的贝尔曼方程的基础上添加了一个熵项。 另外一个角度理解soft-贝尔曼方程: …

Vue-组件自定义事件(绑定和解绑)

组件自定义事件(绑定) 像click,change这些都是js的内置事件,我们可以直接使用,本次我们学习自己根据需求打造全新的事件,但是js内置的是给html元素用的,本次的自定义事件是给组件用的 注意:组件上也可以绑定原生DOM事件&#xf…

(十一)CSharp-LINQ(1)

一、LINQ 数据库可以通过 SQL 进行访问,但在程序中,数据要被保存在差异很大的类对象或结构中。由于没有通用的查询语言来从数据结构中获取数据。所以可以使用 LINQ 可以很轻松地查询对象集合。 LINQ 高级特性: LINQ 代表语言集成查询。LIN…

【机器学习】信息熵和信息度量

一、说明 信息熵是概率论在信息论的应用,它简洁完整,比统计方法更具有计算优势。在机器学习中经常用到信息熵概念,比如决策树、逻辑回归、EM算法等。本文初略介绍一个皮毛,更多细节等展开继续讨论。 二、关于信息熵的概念 2.1 …

尚硅谷课程vue学习(一)

目录 data两种写法el两种写法由vue管理的函数,一定不要写箭头函数,不然this指向windows实例了MVVM模型defineProperty属性数据代理v-on: v-bind:键盘事件keyup keydowncomputed计算属性监视属性watch监视属性和计算属性区别绑定class和style属性条件渲染…

cocosCreator 3.3~6 安卓热更新官方详细示例

官方的热更新虽给出了示例和源码,但是一些细节的地方和步骤还是没说清楚,导致新手包括我死活是运行不起来,热更新失败!很打击人啊。这里有必要给出新手的热更新步骤,前提是你安装了Node.js和python环境,我装…

chatgpt赋能python:更新Python所有库,避免安全漏洞和兼容性问题!

更新 Python 所有库,避免安全漏洞和兼容性问题! Python 是当今最受欢迎的编程语言之一,拥有强大而多功能的 API 和丰富的第三方库来支持开发,如 numpy、pandas、tensorflow 等等。但是,这些库不断地更新与改进&#x…

端午作业1

只要文件存在,就会有唯一对应的inode号,且相应的会存在一个struct inode结构体。在应用层通过open()打开一个设备文件,会对应产生一个inode号,通过inode号可以找到文件的inode结构体 根据inode结构体中文件…

【Dart语言解密】想要深入了解Dart语法和类型变量吗?

快来读读这篇文章吧!本文从Dart信息表示的角度出发,详细讲解了Dart的基础语法和类型变量。通过本文的学习,你将会对Dart语言有更深入的认识和理解,更好地掌握Dart的开发技巧和实践应用。快来一起解密Dart语言吧! 1 Da…

数据透视表 - 学习笔记

教程资源:数据透视表_哔哩哔哩_bilibili 目录 一、内容概括 数据操作: 案例: 二、数据操作 (一)数据清洗 (二)创建数据透视表 1、数据格式 2、显示方式 3、分组 4、修改数据源 5、…