一文看懂Linux内存管理:虚拟内存、用户空间、内核空间、用户态、内核态、IPC通信原理

news2025/7/15 14:21:30

目录

一、虚拟内存地址

1.为什么要有虚拟内存地址?

2.虚拟地址好处

二、用户空间和内核空间

1.概念

2.用户态和内核态

3.IPC通信原理


一、虚拟内存地址

1.为什么要有虚拟内存地址?

因为如果CPU直接访问物理内存,那如果两个进程写入一个物理地址,那值就会改变。对于一个操作系统而言,一个重要任务就是做地址隔离。操作系统为每个进程分配一套独立的虚拟地址,这样每个进程互不干涉。

应用程序中使用的地址是虚拟内存地址,实际存在于硬件里面的地址是物理内存地址。至于虚拟内存如何对应到物理内存,是由CPU芯片中的内存管理单元(MMU)实现。

内存映射主要有分段分页的形式, 分段时每一段大小不统一,导致内存碎片和内存交换效率低,因此,Linux系统主要采用分页,每页4KB,不会产生细小的内存碎片,内存交换写入硬盘的也只有一页或几页。但由于Intel处理器历史原因,分段不可避免,被用于访问控制和内存保护。

对于分页,简单分页产生的页表过大的问题,就有了多级页表,但这就会导致 CPU 在寻址的过程中需要有很多层表参与,加大了时间上的开销。于是 CPU 芯片中加入了 TLB,负责缓存最近常被访问的页表项,大大提高了地址的转换速度。

2.虚拟地址好处

虚拟地址好处:

  1. 避免用户直接访问物理地址,保护系统;
  2. 进程间安全;
  3. 内存分配和释放更方便:不连续几块儿物理内存可以映射到连续的一块虚拟内存;
  4. 各进程分配之和可以大于实际可用的物理内存。

二、用户空间和内核空间

1.概念

这里所说的用户空间和内核空间指的都是上面所说的虚拟地址空间,物理地址不用我们去考虑。

虚拟地址空间实现了进程的隔离。

以32位linux操作系统为例,每个进程被分配4GB的虚拟内存,因为一个指针长度是 4 字节,将虚拟地址空间的最高的1G字节(从虚拟地址 0xC0000000 到 0xFFFFFFFF )供内核使用,称为内核空间,而较低的 3G 字节(从虚拟地址 0x00000000 到0xBFFFFFFF),供各个进程使用,称为用户空间用户空间是独立的,而内核空间是共有的,进程切换时,用户空间切换,内核空间不变

2.用户态和内核态

当一个任务(进程)执行系统调用而进入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)此时处理器处于特权级最高的(0级)内核代码中执行。当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。即此时处理器在特权级最低的(3级)用户代码中运行。处理器在特权等级高的时候才能执行那些特权CPU指令。

3.IPC通信原理

比如有三个进程A、B、C。内核空间是共用的,用户空间是每个进程私有的:

如果你想不同进程传输数据,直接传是不行的,要通过内核空间,这就是IPC通信:

之后会出IPC通信“一文学会”系列文章。

参考优秀博客:

别再说你不懂Linux内存管理了,10张图给你安排的明明白白!_架构师小秘圈的博客-CSDN博客

如何理解虚拟地址空间? - 知乎 (zhihu.com)

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

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

相关文章

MSF客户端渗透

利用Acrobat Reader漏洞执行payload ● 构造PDF文件 exploit/windows/fileformat/adobe_utilprintf仅支持8.1.2软件版本和XP系统; ● 构造恶意网站 exploit/windows/browser/adobe_utilprintf#同理,浏览器上运行pDF● 之后可以通过Meterpreter进行下一…

克罗格 Kroger EDI需求分析及注意事项

项目背景 Kroger(美国克罗格公司)是具有百年历史的名店之一。它虽然历史悠久,但并没有被变化的世界所淘汰,相反,它围绕着市场消费需求的变化,不断地进行创新,创造了世界零售百年史上的若干个第…

Linux物理内存管理:page、zone、node

基本概念页:struct page ,如下图所示,x86架构下一般为4K为大小分区:struct zone ,如下图所示,x86架构下分为三个区 ZONE_DMA,ZONE_NORMAL,ZONE_HIGHMEM内存节点:struct node。对于一个简单的嵌入…

杭州社保解读截止2023

杭州社保新政规定的社保内容以及缴费比例是怎样的? 1、养老保险:单位,14%;个人,8%。 2、医疗保险:单位,9.9%;个人,2% 。 3、失业保险:单位,0.5%;个人,0.5%。 4、工伤…

PC浏览器无法浏览网页的解决教程

前言 在浏览Potplayer官网和Github官网时,无论是火狐浏览器还是Edge浏览器,都无法正常链接到网站。以下教程不纠结具体原理,只介绍具体步骤,以便以后自查。而且以下教程以Github官网为例。 具体步骤 打开Chinese Firewall Test…

excel统计函数:应用广泛的动态统计之王OFFSET 上篇

【前言】OFFSET函数是判断Excel函数使用者是否进阶的一个重要函数之一。在实际工作中,如果你需要对工作中的数据文件进行系统化、自动化的建模,那么势必会使用这个函数。【功能及语法】OFFSET函数的功能是,以指定的引用为参照系,通…

你一定要知道这6个,高质量图片素材库

其实图片素材网站已经分享过很多次了,除了大家非常熟悉的 Pixabay、Pexels之外,其实还有很多优质的图片素材网。今天再给大家推荐几个,对你有帮助记得点赞、收藏哦! 1、潮点视频 https://shipin520.com/shipin-tp/0-1329-0-0-0-…

轻松掌握Jenkins

Jenkins一、docker安装Jenkins1.linux2.web二、流水线1.gitlab连接jenkins1.jenkins服务器创建密钥2.将密钥添加到gitlab上3.创建gitlab访问令牌4.安装jenkins插件5.配置 GitLab 凭据2.创建流水线1.新增凭证配置 Username with password2.创建任务3.构建触发器4.构建5.配置gitl…

MySQL的卸载下载安装,都一条龙服务了,你还不快来???

目录 MySQL的卸载 第一步、停止 MySQL 服务 第二步、卸载有关 MySQL 的程序 第三步、删除相关 MySQL 相关文件 第四步、删除 MySQL 残留文件 MySQL的下载 MySQL的安装 由于我的 MySQL 之前安装的版本太低,导致在 DataGrip 里面用不了 check 约束,…

Android设计模式详解之桥接模式

前言 桥接模式也称为桥梁模式,是结构型设计模式之一; 定义:将抽象部分与实现部分分离,使它们都可以独立地进行变化; 使用场景: 如果一个系统需要在构建的抽象化角色和具体化角色之间增加更多的灵活性&a…

laravel5.5.50之权限(laravel-permissions)的使用

目录 一、安装laravel-permissions扩展 二、生成数据库迁移文件 三、执行数据迁移 四、php artisan migrate 生成的表 五、生成配置信息 六、在user模型下加载角色相关信息 七、测试角色、权限 一、安装laravel-permissions扩展 #不指定安装版本的命令 composer requir…

提升舆情监测软件技术方法解读,舆情监测技术逻辑?

舆情监测是指通过技术手段,对网络舆情进行监测、分析、挖掘和可视化展示的工作。舆情监测可以帮助企业、政府、组织等了解社会舆论,掌握社会动态,协助决策,提升社会影响力。TOOM舆情监测系统介绍提升舆情监测软件技术方法解读&…

Zabbix与乐维监控对比分析(七)——网络功能篇

前面我们详细介绍了Zabbix与乐维监控在架构与性能、Agent管理、自动发现、权限管理、对象管理、告警管理、可视化及图形图表方面的对比分析,接下来我们将对二者网络功能方面进行对比分析。 本篇是Zabbix与乐维监控对比专题系列文章的第七篇——网络功能篇&#xff…

gitlab+jenkins+docker持续集成环境搭建实战

介绍 什么是持续集成? 持续集成(CI)是在源代码变更后自动检测、拉取、构建和(在大多数情况下)进行单元测试的过程。持续集成是启动管道的环节(尽管某些预验证 —— 通常称为 上线前检查(pre-flight checks)…

2023 数据结构复习

函数编程题 7-1 交换二叉树中每个结点的左孩子和右孩子 #include<stdio.h> #include<stdlib.h> typedef struct Node {char data;struct Node *left, *right; } Node, *Tree;Tree create() {char ch;Tree tree NULL;if (scanf("%c", &ch)) {//当有…

P5015 [NOIP2018 普及组] 标题统计————C++

题目 [NOIP2018 普及组] 标题统计 题目描述 凯凯刚写了一篇美妙的作文&#xff0c;请问这篇作文的标题中有多少个字符&#xff1f; 注意&#xff1a;标题中可能包含大、小写英文字母、数字字符、空格和换行符。统计标题字 符数时&#xff0c;空格和换行符不计算在内。 输入…

JAVA开发与架构(携程架构实践)

发这篇博文主要是想学习一下携程的架构。携程出了一本《携程架构实践》&#xff0c;无奈现在还没开源。看京东价大概109元人民币。如果看到次博文的网友能发我一本《携程架构实践》pdf。不胜感谢。或者实体书籍也行。其实我不怎么需要实体书籍&#xff0c;因为技术的东西很快会…

特种变色树脂T-46 CC

Tulsimer T-46 CC ISO-9001/ISO-14001/OHSAS-18000 特级强酸性阳离子交换树脂--(自变色树脂) Tulsimer T-46 CC 是一款专门研制的、优质的、强酸型的聚苯乙烯架构的阳离子交 换树脂&#xff0c;具有核子级磺酸官能团&#xff0c; 并同时拥有绝佳的物理及化学稳定品质&#x…

three.js 之 入门篇1

目录three.js 之 入门篇1&#xff1a;使用parcel搭建 three.js 开发环境2&#xff1a;运行一个简单的场景和物体2.1 main.js2.2效果3&#xff1a;轨道控制器和控制物体 mesh3.1 main.js3.2效果4&#xff1a;添加坐标辅助器 AxesHelper4.14.2效果5&#xff1a;设置几何体移动5.1…

深度学习 Day24——使用Pytorch环境实现mnist手写数字识别

深度学习 Day24——使用Pytorch环境实现mnist手写数字识别 文章目录深度学习 Day24——使用Pytorch环境实现mnist手写数字识别一、前言二、我的环境三、Pytorch简介四、前期工作1、导入依赖项和设置GPU2、导入数据3、加载数据4、数据可视化五、构建简单的CNN网络六、训练模型1、…