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

【Linux】Linux内存管理与线程控制核心解析

前言:欢迎各位光临本博客,这里小编带你直接手撕**,文章并不复杂,愿诸君**耐其心性,忘却杂尘,道有所长!!!!

在这里插入图片描述


IF’Maxue:个人主页

 🔥 个人专栏:
《C语言》
《C++深度学习》
《Linux》
《数据结构》
《数学建模》

⛺️生活是默默的坚持,毅力是永久的享受。不破不立!

文章目录

  • Linux内存管理与线程控制核心解析
    • 1. 多级页表与TLB优化
    • 2. 缺页异常(Page Fault)
    • 3. new和malloc的底层逻辑
    • 4. 内存越界与缺页的区分
      • 关键问题:越界一定会崩溃吗?
    • 5. 线程的核心优点
      • 适用场景
    • 6. 进程切换与线程切换的区别
    • 7. 线程的缺点
  • 线程的缺点
    • 性能损失
    • 健壮性降低
    • 缺乏访问控制
    • 编程难度提高
    • 8. 线程异常的影响
    • 9. Linux进程VS线程

Linux内存管理与线程控制核心解析

本文围绕Linux系统的内存管理(页表、缺页异常)和线程控制展开,结合代码实例与图解,通俗讲解核心概念与实操要点。

1. 多级页表与TLB优化

单机页表对连续内存要求极高,多级页表虽解决了这一问题,还减少了存储空间,但查询效率会下降——这就是它的“双刃剑”特性。

image.png

为提升查询效率,MMU(内存管理单元)引入了TLB(快表/后备缓冲器),它相当于页表查询的“缓存”,能快速匹配虚拟地址与物理地址,减少多级页表的查询开销。

image.png

image.png

2. 缺页异常(Page Fault)

当TLB和页表中都找不到虚拟地址对应的物理页时,就会触发缺页异常,操作系统会从用户态切换到内核态,由PageFaultHandler(缺页中断处理程序)处理。

image.png

缺页异常的不同处理场景:

image.png

3. new和malloc的底层逻辑

C++的new和C的malloc,底层都依赖gcc封装的brk系统调用。

image.png

它们的核心操作是“修改虚拟地址空间的地址范围”,而非直接分配物理内存:

  • 即使申请了内存但不使用,物理内存也不会被实际占用;
  • 写时拷贝(Copy-On-Write)机制会作用于页框,只有当数据被修改时,才会分配真正的物理内存。

4. 内存越界与缺页的区分

关键问题:越界一定会崩溃吗?

答案是不一定。如果越界的内存区域未被操作系统监控(比如在进程虚拟地址空间的合法范围内乱访问),操作系统不会察觉,进程可能继续运行但隐含风险,这种情况需要手动debug排查。

image.png

image.png

5. 线程的核心优点

  • 创建代价远低于进程;
  • 占用资源更少(共享进程大部分资源);
  • 能充分利用多处理器的并行能力。

image.png

适用场景

  • 计算密集型应用:如GPU游戏(依赖多核心并行运算);
  • I/O密集型应用:如多聊天对象的通讯软件(等待I/O时可切换线程)。

6. 进程切换与线程切换的区别

线程切换代价远低于进程切换,核心原因的是:

image.png

  • 线程切换无需切换页表:同一进程的线程共享页表,无需修改CR3寄存器;
  • 进程切换会导致TLB和Cache失效:切换后需要重新加载页表和缓存,耗时更长。

操作系统通过current指针指向当前运行的进程/线程:

image.png

image.png

7. 线程的缺点

线程的缺点

性能损失

  • 计算密集型线程(很少被外部事件阻塞的类型)往往无法和其他线程共享同一个处理器。
  • 若计算密集型线程数量多于可用处理器数量,会增加额外的同步和调度开销,导致性能损失,而可用资源并未增加。

健壮性降低

  • 编写多线程程序需要更全面深入的考虑。
  • 在多线程程序里,因时间分配的细微偏差或共享了不该共享的变量,造成不良影响的可能性很大,线程之间缺乏保护。

缺乏访问控制

  • 进程是访问控制的基本粒度,在一个线程中调用某些OS函数会对整个进程造成影响。

编程难度提高

  • 编写与调试多线程程序比单线程程序困难得多。

8. 线程异常的影响

线程是进程的“分支”,一旦某个线程出现异常(如段错误),整个进程会随之崩溃,所有线程都会终止。

image.png

9. Linux进程VS线程

Linux中没有“真正意义上的线程”,线程是通过轻量级进程(LWP)模拟实现的。

线程的核心特征(独立调度的基础):

  • 拥有自己的上下文数据;
  • 拥有独立的栈结构;
  • 是动态执行的概念。

image.png

http://www.dtcms.com/a/597268.html

相关文章:

  • dns服务器
  • bash 启动程序的流程
  • 专题:2025中国医疗器械出海现状与趋势创新发展研究报告|附160+份报告PDF、数据、可视化模板汇总下载
  • 工程建设最好的网站石家庄建设网站哪家好
  • c#笔记之面向对象
  • wordpress 移动到回收站发生错误广告公司网络推广计划
  • 汽车乘员热舒适测评的预测模型
  • [6]. SpringAI Alibaba 向量化和向量数据库
  • java学习--包
  • 乐鑫EchoEar开发套件详解:ESP32-S3+端侧AI+全双工语音实战
  • 国外的外贸网站wordpress 页面下文章列表
  • 站长工具服务器查询常州市建设工程管理中心网站
  • 《实施意见》绘就场景应用蓝图,政务服务如何找准自身“坐标”
  • Go 优雅关闭实践指南:从原理到框架落地
  • 使用gRPC实现分片服务的心跳机制
  • 陕西建设厅执业注册中心网站重庆网站建设沛宣
  • 济南 外贸网站建设大连鼎信网站建设公司地址
  • 自动化渗透工具分类及主流工具详解(2025年最新)
  • Qt QPushButton 样式完全指南:从基础到高级实现
  • 在Unity3d中使用Netly开启TCP服务
  • 男男床做视频网站上海家装设计网站
  • 如何清空网站空间上海工程建设招投标网站
  • Docker-玩转 Docker 镜像:从拉取、构建到发布
  • 技师院校人工智能技术应用专业实训室建设方案
  • HarmonyOS Tabs标签页组件深度解析:超越基础的高级技巧与实践
  • 无锡网站建设推荐wordpress 的分类目录
  • elasticSearch之java客户端详细使用:文档搜索API
  • 网页美工设计网站运维工程师可以自学吗
  • 手机网站制作注意事项卖产品的网站怎么做
  • Vue3 + Pinia 移动端Web应用:页面缓存策略解决方案