用户虚拟地址空间管理-mm_struct

news2024/11/18 0:17:06

一、进程虚拟地址空间管理概览

 

 二、mm_struct结构体的主要成员

atomic_t mm_users;共享同一个用户虚拟地址空间的进程的数量,也就是线程组包含的进程的数量
atomic_t mm_count;内存描述符的引用计数
struct vm_area_struct *mmap;虚拟内存区域链表
struct rb_root mm_rb;虚拟内存区域红黑树
unsigned long (*get_unmapped_area) (struct file *filp, unsigned long addr, unsigned long len,unsigned long pgoff, unsigned long flags);在内存映射区域找到一个没有映射的区域
pgd_t * pgd;指向页全局目录,即第一级页表
unsigned long mmap_base;内存映射区域的起始地址
unsigned long task_size;用户虚拟地址空间的长度
unsigned long start_code, end_code;代码段的起始地址和结束地址
unsigned long start_data, end_data;数据段的起始地址和结束地址
unsigned long start_brk, brk;堆的起始地址和结束地址
unsigned long start_stack;栈的起始地址
unsigned long arg_start, arg_end;参数字符串的起始地址和结束地址
unsigned long env_start, env_end;环境变量的起始地址和结束地址
mm_context_t context;处理器架构特定的内存管理上下文

三、mm和active_mm

在进程的task_struct结构体中包含两个指向mm_struct结构的指针:

struct task_struct
{
    // ...
   struct mm_struct *mm;//内核线程没有用户虚拟地址空间,所以内核线程这个值为空
   struct mm_struct *active_mm;//进程的active_mm和mm总是指向同一个内存描述符。内核线程的active_mm在没有运行时是空指针,在运行时指向从上一个进程借用的内存描述符
    // ...
};

如果进程不属于线程组,进程描述符的成员mm和active_mm都指向同一个内存描述符,内存描述符的成员mm_users是1、成员mm_count是1。


如果两个进程属于同一个线程组,每个进程的进程描述符的成员mm和active_mm都指向同一个内存描述符,内存描述符的成员mm_users是2、成员mm_count是1。

内核线程的mm始终为空。当内核线程没有运行时,active_mm为空,当内核线程运行时,借用上一个进程的内存描述符,在被借用进程的用户虚拟地址空间的上方运行,进程描述符的成员active_mm指向借用的内存描述符,假设被借用的内存描述符所属的进程不属于线程组,那么内存描述符的成员mm_users不变,仍然是1,成员mm_count加1变成2。

 

ref:

Linux的进程地址空间[三] - 知乎

进程—内存描述符(mm_struct)_宇哲_安菲尔德的博客-CSDN博客_mm_struct

mm_struct(内存描述符) - CodeAntenna

mm_struct(内存描述符)_zcl9796的博客-CSDN博客_mm_struct

Linux 内核 | 内存管理——Slab 分配器 - 一丁点儿

《linux内核深度解析-基于ARM64架构的Linux 4.x内核》

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

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

相关文章

【java】课程设计--抽卡模拟器

文章目录工期安排自己实现菜单逻辑抽卡算法0.书写要求1.用户需求2.设计思想3.各个功能和算法描述4.系统调试中问题5.总结新知识怎么打开任务管理器改进(进一步的设想)交给她们实现1.注册登录2.读文件-显示查找内容暂时成功案例工期安排 1 自定义增加和删…

数据权限就该这么设计

在项目实际开发中我们不光要控制一个用户能访问哪些资源,还需要控制用户只能访问资源中的某部分数据。 控制一个用户能访问哪些资源我们有很成熟的权限管理模型即RBAC,但是控制用户只能访问某部分资源(即我们常说的数据权限)使用…

[附源码]Python计算机毕业设计红旗家具城管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

✿✿✿JavaScript --- 事件

目录 1.事件相关概念 2. js中注册监听(事件绑定)的方式 (1)在定义标签时,添加事件名称属性。属性值是js代码(js代码会被自动封装到一个function函数的方法体中) (2)通过js获取元素对象,再添加事件。 补…

ADI Blackfin DSP处理器-BF533的开发详解54:CVBS输出-DSP和CH7024的应用详解(含源码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 CVBS OUT 视频输出 硬件实现原理 CVBS_OUT 子卡板连接在 ADSP-EDU-BF53x 开发板的扩展端口 PORT3 和 PORT4 上,板卡插入时&#xff0…

window10 下Tomcat安装步骤

目录先安装JDK根据JDK选择tomcat版本下载安装设置系统变量运行测试先安装JDK 略过 根据JDK选择tomcat版本 打开CMD窗口,运行java -version查看本机JDK版本 C:\Users\admin>java -version java version "11.0.17" 2022-10-18 LTS Java(TM) SE Runtime E…

python函数讲解进阶

关于python函数的基本知识可以点击“python函数讲解” 目录 一.函数多返回值 思考 二.函数参数种类 1.位置参数 2.关键字参数 3.缺省参数 4.不定长参数 位置传递 关键字传递 总结 三.匿名函数 函数作为参数传递 lambda匿名函数 一.函数多返回值 思考 运行之后&…

Python抓取电商平台数据 / 采集商品评论 / 可视化展示 词云图...

前言 大家早好、午好、晚好吖 ❤ ~ 我给大家准备了一些资料,包括: 2022最新Python视频教程、Python电子书10个G (涵盖基础、爬虫、数据分析、web开发、机器学习、人工智能、面试题)、Python学习路线图等等 直接在文末名片自取即可&#x…

[附源码]Node.js计算机毕业设计公交电子站牌管理系统软件Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

多模态在医疗中的应用

多模态是把要检索的模态融合起来,做整体的检索,查询和检索的必须至少有一个模态是相同的,也就是要查询和检索的模态都已经在融合模态里了。 跨模态是检索结果和查询的模态是不同,如图像检索文本,视频和音频。跨模态检索…

2022-12-17 TCP/IP 协议栈_2

TCP/IP 协议栈_2前言一、TCP/IP协议栈四层协议系统二、封装和分用总结前言 既然要学习计算机网络编程, 就不得不提计网祖师爷 W Richard Stevens, 天妒英才, 先生于1999年就早早陨落. 不知多少人凭着先生所著 “TCP/IP详解” 以及 “UNIX网络编程” 吃的盆满钵满. 而至今可说还…

深入浅出 - Rust 所有权与内存管理机制

一、从变量说起 fn main() {// 基本数据类型let a 5;let b a;// 指针let ptr_a &a;let ptr_b &b;println!("a value {}", a);println!("b value {}", b);println!("ptr_a value {:p}", ptr_a);println!("ptr_b value {:p}…

未来笔试重点(1)

一起成为更优秀的人 1.数组笔试重点考察 1.1整型数组与sizeof 1.2字符数组与sizeof 1.3sizeof与字符串 1.4strlen与字符串 2.指针笔试重点考察 2.1指针与sizeof 2.2指针与strlen sizeof与整型数组 int a[] { 1,2,3,4 };printf("%d\n", sizeof(a));printf(…

NMS与Soft NMS算法解析以及numpy实现

1. NMS算法 1.1 什么是NMS算法 NMS全称为Non Maximum Suppression,中文意思是非极大值抑制,字面意思就是不是极大值的元素被抑制掉,其实就是筛选出局部最大值得到最优解。NMS算法被广泛运用于目标检测算法处理网络输出的边界框。 1.2 为什…

浅谈Linux内核页面换入换出

【推荐阅读】 浅谈linux 内核网络 sk_buff 之克隆与复制 深入linux内核架构--进程&线程 了解Docker 依赖的linux内核技术 怎么在Windows下使用Makefile文件 浅析linux内核网络协议栈--linux bridge 0x00内存页面分类与换入换出规则 内存页面分为用户页面和内核页面。…

GDT践行(第一期):起床---运动--阅读

这里记录每周GDT践行记录.【2022】年第【51】周的第【6】天 封面图 第三部分:起床---运动--阅读 ❝ 小贴士: 在学校,出租房,宾馆,工位很多因素导致 学习区,运动区 卧室 都是同一个地方 环境导致你彻底彻底糊…

[附源码]Python计算机毕业设计Django课程在线测评系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

JVM部分知识点

目录 JVM主要组成部分及其作用? JAVA程序运行机制详情 JVM运行时的数据区 堆和栈的区别? Java垃圾回收机制 Java中有哪些引用类型? 如何判断对象是否可以被回收? JVM中的永久代会发生垃圾回收吗? JVM有哪些垃圾…

我国航空煤油行业发展趋势:燃油附加费复收 或将缓解企业经营压力

根据观研报告网发布的《中国航空煤油市场现状深度研究与投资前景分析报告(2022-2029年)》显示,航空煤油是石油产品之一,别名无臭煤油,主要由不同馏分的烃类化合物组成。航空煤油密度适宜,热值高&#xff0c…

【C语言】浮点型的存储方式

目录 一、浮点型和整型存储方式一样吗? 二、浮点型的存储规则 2.1 S,M,E求法 2.2 如何存放S,M,E 2.2.1 IEEE 754规定 2.2.2 特别的规定 2.2.3 验证 2.3 取出规则 2.3…