0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux内核三大核心模块深度解析:调度、内存与I/O

工程师高培 来源:中际赛威刘老师 作者:中际赛威刘老师 2026-03-12 09:00 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Linux内核作为操作系统的核心,其进程调度、内存管理和文件I/O三大模块共同决定了系统的性能与稳定性。无论是多核服务器的高并发处理,还是嵌入式设备的资源受限场景,深入理解这些底层机制都是进行性能调优与系统开发的基石。

一、进程调度:从CFS到EEVDF的演进

进程调度负责决定哪个任务获得CPU执行权。在Linux中,进程是资源的容器,而线程才是实际的调度单元,两者均通过kernel_clone系统调用创建。写时拷贝技术使得fork操作几乎不消耗额外内存,子进程与父进程共享物理页,仅在写入时复制,大幅提升创建效率。类似地,文件描述符表、文件系统上下文和信号处理也采用广义的写时拷贝机制。

调度器通过多个调度类管理不同优先级的任务:截止期限调度类(DL)满足硬实时要求,实时调度类(RT)提供确定性响应,公平调度类(CFS/EEVDF)处理普通进程,而可编程EXT调度类允许通过eBPF定制策略。每个CPU维护独立的运行队列(runqueue),调度器遍历各调度类选择最合适的任务。

多核系统中,负载均衡至关重要。wake_affine机制尝试将唤醒任务放回原CPU以利用缓存,定期负载均衡则迁移任务以平衡负载。在NUMA架构下,调度器优先考虑本地内存访问,超线程(SMT)场景则需平衡物理核心上的逻辑线程。实时Linux内核(PREEMPT_RT)通过减少不可抢占区间,将最坏延迟降至微秒级。perf sched、trace-cmd等工具可深入分析调度行为。

二、内存管理:从硬件分页到智能回收

内存管理子系统负责虚拟地址到物理地址的映射、分配与回收。硬件分页机制通过页表控制访问权限,内核将物理内存划分为DMA、NORMAL等区域(zone),每个区域由buddy系统以2的幂次管理连续物理页。struct page及其封装struct folio简化了复合页的处理。

针对不同需求,内核提供多种分配器:连续内存分配器(CMA)为DMA等设备预留连续内存;slab分配器缓存频繁分配的小对象;kmalloc用于小于一页的分配,vmalloc分配虚拟连续但物理不连续的大内存。用户进程通过malloc/mmap申请内存,内核以虚拟内存区域(VMA)管理地址空间,首次访问触发缺页异常分配物理页。

页缓存(page cache)加速文件I/O,匿名页(如堆、栈)在内存紧张时可通过交换分区(swap)换出。内核维护活跃/非活跃LRU链表,最近访问的页位于活跃链表,不常访问的逐渐移至非活跃链表并被回收。多代LRU(MGLRU)进一步优化回收效率,减少扫描开销。透明大页(THP)和HugeTLB减少TLB缺失,提升性能。内存cgroup限制进程组内存使用量,OOM killer在耗尽时选择合适进程终止。

wKgZPGmyEDyAB26oAADe_Iw5_O444.jpeg

三、文件I/O:从阻塞模型到高性能异步

文件I/O子系统连接存储与应用程序,其性能直接影响系统吞吐。传统阻塞I/O简单但低效,非阻塞I/O配合多路复用(select/poll/epoll)成为高并发基石。信号驱动I/O(SIGIO)和异步I/O(AIO)进一步解耦,io_uring通过共享环形缓冲区将性能推向极致。C10K问题曾推动事件驱动模型发展,如今已迈向C10M级别。

文件系统在内存中以超级块(superblock)、索引节点(inode)和目录项(dentry)表示。硬链接共享同一inode,符号链接则存储目标路径。日志(journaling)保证崩溃后文件系统一致性。页缓存通过address_space关联文件与页,iomap替代传统buffer_head,与大型页(large folios)无缝协作。文件读写流程经过VFS层调用具体文件系统操作,最终通过块层访问设备。

I/O调度器(如mq-deadline、bfq)合并请求以优化机械硬盘寻道或SSD并发。I/O cgroup(blkio)限制进程组带宽。iostat、blktrace、bcc/eBPF等工具可深入追踪I/O延迟。

结语

调度、内存和I/O三者环环相扣:调度决策影响内存访问局部性,内存回收可能触发I/O,I/O完成唤醒等待进程。唯有从原理层面理解这些机制及其相互作用,才能在复杂场景下做出精准优化。工程师高培针对宋宝华老师课纲分析认为,只有学透Linux内核三大核心模块,才能真正掌握系统级开发与调优能力。无论是开发高性能应用还是诊断系统瓶颈,这三大模块都是技术人员的必修课。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11806

    浏览量

    219508
  • 内存
    +关注

    关注

    9

    文章

    3229

    浏览量

    76495
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    SGM4593:低电压16位I²C和SMBus低功耗I/O扩展器的深度解析

    SGM4593:低电压16位I²C和SMBus低功耗I/O扩展器的深度解析 在硬件设计中,当设备需要额外的
    的头像 发表于 03-17 09:10 381次阅读

    SGM4591:低电压16位I²C和SMBus低功耗I/O扩展器的深度解析

    SGM4591:低电压16位I²C和SMBus低功耗I/O扩展器的深度解析 在电子设备的设计中,常常会遇到需要额外
    的头像 发表于 03-16 17:20 400次阅读

    Linux内核驱动开发的技术核心精要

    嵌入式Linux驱动开发是连接硬件与操作系统的关键环节。随着内核演进(如Linux 6.13)和硬件复杂度提升,开发者需掌握并发控制、中断分层、内存管理、设备树、调试工具等
    发表于 03-10 13:56

    Linux内核伙伴系统内存申请函数详解:从原理到实战

    Linux 内核中,内存管理是整个系统稳定运行的基石,而伙伴系统(Buddy System) 作为内核物理内存分配的
    的头像 发表于 02-10 16:58 3717次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>内核</b>伙伴系统<b class='flag-5'>内存</b>申请函数详解:从原理到实战

    MAX6947:10端口恒流LED驱动与I/O扩展器的深度解析

    MAX6946/MAX6947:10端口恒流LED驱动与I/O扩展器的深度解析 在电子设计领域,LED驱动和I/
    的头像 发表于 02-02 15:50 317次阅读

    【「Linux 设备驱动开发(第 2 版)」阅读体验】+读深入理解Linux内核内存分配

    每个内存地址是虚拟的,不是直接指向RAM中的任何地址。当用户访问内存中的存储单元时,都会进行地址转换以匹配相应的物理内存。书籍的第10章讨论了五个主题,对Linux
    发表于 01-16 20:05

    PCA9539:16位I²C与SMBus低功耗I/O扩展器深度解析

    PCA9539:16位I²C与SMBus低功耗I/O扩展器深度解析 作为一名电子工程师,在设计项目中我们经常会遇到需要扩展
    的头像 发表于 12-29 09:55 461次阅读

    PCA9554:8位I²C和SMBus I/O扩展器的深度解析

    PCA9554:8位I²C和SMBus I/O扩展器的深度解析 在电子设计领域,I/
    的头像 发表于 12-27 13:45 1067次阅读

    PCA9554A:远程 8 位 $I^{2}C$ 和 SMBus I/O 扩展器的深度解析

    PCA9554A:远程 8 位 $I^{2}C$ 和 SMBus I/O 扩展器的深度解析 在电子工程师的日常设计工作中,
    的头像 发表于 12-27 11:00 1078次阅读

    PCA9534:8位I²C和SMBus低功耗I/O扩展器的深度解析

    PCA9534:8位I²C和SMBus低功耗I/O扩展器的深度解析 在当今的电子设计领域,I/
    的头像 发表于 12-27 10:55 1010次阅读

    TCA6408A:低电压8位I²C和SMBus I/O扩展器的深度解析

    TCA6408A:低电压8位I²C和SMBus I/O扩展器的深度解析 在电子设计领域,I/
    的头像 发表于 12-25 10:25 791次阅读

    TCA6424A:低电压24位I²C和SMBus I/O扩展器的深度解析

    TCA6424A:低电压24位I²C和SMBus I/O扩展器的深度解析 在电子设计领域,I/
    的头像 发表于 12-24 15:30 475次阅读

    深入Linux内核:进程调度核心逻辑与实现细节

    ,背后都离不开内核调度算法的精准操控。今天,我们就从优先级、调度算法、时间片分配到底层实现,全方位拆解Linux内核进程
    的头像 发表于 12-24 07:05 4556次阅读
    深入<b class='flag-5'>Linux</b><b class='flag-5'>内核</b>:进程<b class='flag-5'>调度</b>的<b class='flag-5'>核心</b>逻辑与实现细节

    Linux内核模块的加载机制

    Linux内核模块的加载过程主要包含了ELF解析、动态链接、安全验证和资源管理技术。其核心步骤包括:权限检查→ELF解析→符号重定位→依赖
    发表于 11-25 06:59

    浅谈光学I/O模块的热挑战

    服务器和机架式网络基础设施系统内的光学 I/O 模块通常接受主动冷却系统的直接冷却,特别是来自机架式设备前面板的强制风冷。机架式设备的散热设计需要平衡 I/
    的头像 发表于 11-03 09:32 927次阅读
    浅谈光学<b class='flag-5'>I</b>/<b class='flag-5'>O</b><b class='flag-5'>模块</b>的热挑战