当前位置: 首页 > news >正文

Linux——内存管理代码分析

虚空间管理

页框和页的关系

页框

将内存空间分为一个个大小相等的分区(比如:每个分区4KB),每个分区就是一个页框,也叫页帧,即物理页面,是linux划分内存空间的结果。
每个页框都有一个页框号,即内存块号、物理块号。

将用户进程的地址空间也分为与页框大小相等的一个个区域,称为页或页面,即虚拟页面,是linux划分地址空间的结果。
每个页面都有一个页号

页、页表项、页表、页目录项、页目录的关系参考:
计算机体系结构——虚拟内存技术

CSDN:基本分页存储管理的基本概念

线性区

当用户态进程动态请求内存时,linux并不会直接分配物理页框,而是先分配一段新的虚拟地址空间的使用权。

CSDN:进程地址空间 - VMA线性区

PCB中内存信息数据结构

主要的数据结构

mm_struct

mm是进程控制块中的一个成员,表示了该进程的内存信息。
每个进程都有自己的页目录、页表项等信息
在这里插入图片描述
在这里插入图片描述

*pgd: 一级页表的起始地址
*mmap:指向进程的第一个VMA
mm_rb:指向红黑树的根

vm_area_struct

线性区,表示用户虚空间中的一块连续区域,可以简称为vma。
数据结构成员包括权限信息等。
vm_rb->rb_left指针指向相邻的低地址VMA,vm_rb->rb_right指向相邻的高地址VMA1
在这里插入图片描述

page

页框描述符,描述了页框的类型(匿名页还是文件页)
在这里插入图片描述
mem_map:描述了所有页框,连续存放。

file

页高速缓存,以文件为管理单位:缓存的页框属于某个文件
硬盘数据页的高速缓存,放在页框中;

在这里插入图片描述
在这里插入图片描述

address_space

address_space:记录映射到本文件(某一区间)的所有线性区,这些线性区按其区间组织为一颗优先搜索树。
在这里插入图片描述
page_tree:文件的所有缓存页框的描述符构成一颗基树,该结构体表示基树的根节点,如果最低位为1,表示指向的是一个radix_tree_node对象

anon_vma

anon_vma数据结构,链接了page和anon_vma,实质上和anon_vma_chain共同链接了的page数据结构和VMA的vm_area_struct数据结构
在这里插入图片描述

anon_vma_chain

anon_vma_chain链接了anon_vma和vma
在这里插入图片描述

rb_node 和 rb_root

在这里插入图片描述

radix_tree_node

path:该节点的页节点数
count:表示有效页框描述符地址的数量
在这里插入图片描述

数据结构关系

数据结构关系图:
在这里插入图片描述

链表关系

所有的page构成一颗基树
在这里插入图片描述

页框描述符红黑树
通过page->index可以快速找到其他page地址
在这里插入图片描述

vma红黑树
所以进程的VMAs组成一个双向链表

反向映射

正向映射:页号 → 页框号,即通过虚拟页号查找物理页号
反向映射:页框号 → 进程号和页号的集合,即在已知物理页面(page frame)的情况下,找到映射该物理页面的虚拟页。

反向映射使用场景

反向映射通常在页框回收时需要此功能,例如

  1. 当内存空间不足时,有些页面长时间不适用,需要交换到磁盘
  2. 有些页面需要迁移

工作原理

当上述使用场景需要反向映射时,linux为了快速定位映射到该物理页的页表项,通过页框号查找页框描述符,通过页框描述符中的mapping确定是匿名页还是文件页,并根据mapping的值

t

父进程为自己的进程空间VMA分配物理页面的时,会产生匿名页面

匿名页和文件页

二者均是页框的类型。

匿名页

不属于文件的页高速缓存,没有关联到文件页,不是以文件形式存在,无法和磁盘文件交换
匿名页面是线性区的一种类型,映射到anon_vma对象(该对象关联了进程为对应线性区申请的一组匿名页框,并记录了使用这些页框的所有线性区)
mapping的最低位为1.

匿名页反向映射结构图2
在这里插入图片描述

文件页

映射文件的页,即某个文件的也高速缓存。程序可以通过read/write/mmap去操作,此时在内存中会申请page cache来缓存硬盘内容,因此该内容及存在于内存,也存在于外存中
属于某个address_space对象(该对象记录使用该文件页高速缓存的所有线性区)
mapping!=0,但mapping的最低位为0。

文件页反向映射结构图2
在这里插入图片描述

linux内存管理笔记(三十四)----匿名映射

参考文献


  1. 红黑树的应用:Linux内核虚拟内存的管理 ↩︎

  2. CSDN:linux内存管理笔记(三十八)----反向映射 ↩︎ ↩︎

相关文章:

Linux——内存管理代码分析

虚空间管理 页框和页的关系 页框 将内存空间分为一个个大小相等的分区(比如:每个分区4KB),每个分区就是一个页框,也叫页帧,即物理页面,是linux划分内存空间的结果。 每个页框都有一个页框号,即内存块号、物理块号。 页 将用户…...

手机自动化测试:4.通过appium inspector 获取相关app的信息,以某团为例,点击,搜索,获取数据等。

0.使用inspector时,一定要把不相关的如weditor啥的退出去,否则,净是事。 1.从0开始的数据获取 第一个位置,有时0.0.0.0,不可以的话,你就用这个。 第二个位置,抄上。 直接点击第三个启动。不要…...

个人项目———密码锁的实现

布局组件 布局效果 组件绑定 密码锁的实现代码 using TMPro; using UnityEngine; using UnityEngine.UI;public class PasswordPanel : MonoBehaviour {// public Button button;// 所有按键的父物体public Transform buttonPanel;// 输入字符串的文本框public TMP_Text input…...

关于Input【type=number】可以输入e问题及解决方案

一、为什么 因为在数学里e 代表无理数,e是自然对数的底数,同时它又是一个无限不循环小数,所以我们在输入 e 时,输入框会默认 e 是数字,从而没有对它进行限制。 二、解决方案 小提示:vue下监听事件需要加n…...

zabbix“专家坐诊”第241期问答

问题一 Q:华为交换机的100GE 1/0/1口的光模块收光值监测不到,有没有人碰到过这个问题呢?其他的端口都能监测到收光值,但是100GE 1/0/1口监测不到收光值。底层能查到,zabbix 6.0监控不到,以下是端口的报错信…...

了解Kubernetes-RKE2的PKI以及证书存放位置

一、什么是PKI? 简称:证书基础设施。 可以方便理解为当你的集群有Server,Client架构,那么为了安全加密之间的通信,则需要使用证书进行交互,那么利用PKI架构可以安全加密组件之间的通信。 二、Kubernetes的PKI架构什…...

利用大语言模型进行事实匹配

论文地址:Automated Claim Matching with Large Language Models: Empowering Fact-Checkers in the Fight Against Misinformation | Companion Proceedings of the ACM on Web Conference 2024 WWW 2024 Automated Claim Matching with Large Language Models: Empowering F…...

【Stable Diffusion】(基础篇一)—— Stable Diffusion的安装

本系列笔记主要参考B站nenly同学的视频教程,传送门:B站第一套系统的AI绘画课!零基础学会Stable Diffusion,这绝对是你看过的最容易上手的AI绘画教程 | SD WebUI 保姆级攻略_哔哩哔哩_bilibili **Stable Diffusion(简称…...

维纳运动的概念

维纳运动(Wiener Process),也称为标准布朗运动,是一种重要的随机过程,广泛应用于数学、物理学和金融学等领域。它是一个连续时间的随机过程,具有一些特殊的性质,使其成为描述随机动态系统的经典…...

毫秒级查询性能优化实践!Apache Doris 在极越汽车数字化运营和营销方向的解决方案

作者:韩同阳,极越汽车大数据架构师,Apache Doris Active Contributor 编辑整理:SelectDB 技术团队 导读:极越是高端智能汽车机器人品牌,基于领先的百度 AI 能力和吉利 SEA 浩瀚架构生态赋能,致…...

vllm 大模型量化微调推理使用: lora、gptq、awq

1)微调lora模型推理 docker run --gpus all -v /ai/Qwen1.5-7B-Chat:/qwen-7b -v /ai/lora:/lora -p 10860:10860 --...

WPS/Office(Word、Excel、PPT) 自动测评方法

在各高等、中等院校的计算机类课程中,计算机基本应用技能的上机操作考试,广受重视,大为盛行。其中,office(word、excel、ppt)上机考试最为普遍。于是,实现这类Office文档操作的自动阅卷评分,很有必要。本人最近项目上刚好遇到需要解决这种自动评分的问题,所以再次记录下解决的…...

ArrayList——简单洗牌算法

特殊语法介绍&#xff1a; List<List<E>> 该语法情况比较特殊&#xff0c;相当于一个“二维数组”存着一个个线性表的结构&#xff0c;如图&#xff1a; 该语法的灵活性强&#xff0c;可适用于多种类型和多种情况。接下来就使用该语法来实现一个简单的洗牌操作。…...

springboot vue 开源 会员收银系统 (6) 收银台的搭建

前言 完整版演示 前面我们对会员系统 分类和商品的开发 完成了收银所需的基础信息 下面我们开始完成收银台的开发 简单画了一个收银的流程图大家参考下 从这张图我们可以分析一下几点 可以选择会员或散客收银选择会员使用相应的会员价结算使用会员卡则在价格基础根据卡折扣…...

重排和重绘的区别,什么情况下会触发这两种情况

重排&#xff08;Reflow&#xff09;和重绘&#xff08;Repaint&#xff09;是Web前端开发中关于浏览器渲染机制的两个核心概念。它们之间的主要区别以及触发条件如下&#xff1a; 重排&#xff08;Reflow&#xff09; 定义&#xff1a; 重排也称为布局&#xff08;Layout&a…...

亮点回顾|智能汽车芯片创新技术应用与质量研讨会

5月29日&#xff0c;2024汽车软件与通信大会——智能汽车芯片创新技术应用与质量研讨会在江苏苏州狮山国际会议中心举行。本次会议由中国中检所属中国汽车工程研究院股份有限公司&#xff08;简称&#xff1a;中国汽研&#xff09;主办&#xff0c;旨在为智能汽车芯片的技术创新…...

特征工程,减小过拟合

目录 特征工程 减小过拟合 图像增强方法 特征工程是机器学习和数据分析中不可或缺的一环,其重要性不言而喻。以下是关于特征工程的详细回答: 一、定义 特征工程是将原始数据转化为更好的表达问题本质的特征的过程,旨在发现对因变量y有明显影响作用的特征(通常称自变量…...

STM32-16-ADC

STM32-01-认识单片机 STM32-02-基础知识 STM32-03-HAL库 STM32-04-时钟树 STM32-05-SYSTEM文件夹 STM32-06-GPIO STM32-07-外部中断 STM32-08-串口 STM32-09-IWDG和WWDG STM32-10-定时器 STM32-11-电容触摸按键 STM32-12-OLED模块 STM32-13-MPU STM32-14-FSMC_LCD STM32-15-DMA…...

单例模式(C语言)

C语言的设计模式&#xff08;单例模式&#xff09; 单例模式&#xff08;Singleton Pattern&#xff09;是一种设计模式&#xff0c;目的是确保一个类只有一个实例&#xff0c;并提供一个全局访问点。 #include "stdio.h" #include "stdlib.h"// 定义一个…...

js前端格式化日期函数

开发需求 在前端中我们通常使用new Date()函数获取到的日期时间是下面这种样子&#xff1a;Thu Jun 06 2024 17:29:11 GMT0800 (中国标准时间)&#xff0c;我们想要把它转换成常见的指定格式&#xff0c;比如 年-月-日 时:分:秒年/月/日 时:分:秒年-月-日年/月/日 所以就封装…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

Python 高效图像帧提取与视频编码:实战指南

Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...

C++--string的模拟实现

一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现&#xff0c;其目的是加强对string的底层了解&#xff0c;以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量&#xff0c;…...