<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>操作系统深度专题：从内核原理到 Linux 系统编程 on PlumePHP</title><link>https://plumephp.com/posts/os/</link><description>Recent content in 操作系统深度专题：从内核原理到 Linux 系统编程 on PlumePHP</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Thu, 10 Sep 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://plumephp.com/posts/os/index.xml" rel="self" type="application/rss+xml"/><item><title>CPU 调度算法：从 FCFS 到 CFS 完全公平调度器</title><link>https://plumephp.com/os-cpu-scheduling/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/os-cpu-scheduling/</guid><description>&lt;p&gt;CPU 调度是操作系统最核心的职责之一。它决定了哪个进程在何时使用 CPU，直接影响系统的响应速度、吞吐量和用户体验。本文从经典算法讲起，逐步深入到 Linux CFS 的设计与实现，并覆盖多处理器负载均衡、实时调度和前沿趋势。&lt;/p&gt;</description></item><item><title>Linux IO 栈深度解析：从 VFS 到块设备</title><link>https://plumephp.com/os-io-stack/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/os-io-stack/</guid><description>&lt;p&gt;存储 IO 是操作系统中最复杂也最影响性能的子系统之一。一次看似简单的文件读写，实际上会穿越用户空间、虚拟文件系统、页缓存、块层、设备驱动直至物理硬件多个层级。理解 Linux IO 栈的完整路径，是诊断性能瓶颈、优化数据库响应、以及合理选型存储方案的前提。本文将从上到下拆解整个 IO 栈，对比不同 IO 模式的适用场景，并深入 Page Cache、块层调度、NVMe 多队列以及 io_uring 等核心机制。&lt;/p&gt;</description></item><item><title>Linux 信号机制：从 kill -9 到可靠信号</title><link>https://plumephp.com/os-linux-signals/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/os-linux-signals/</guid><description>&lt;h2 id="1-信号基础"&gt;1. 信号基础&lt;/h2&gt;
&lt;p&gt;Linux 信号（signal）是操作系统向进程发送的软件中断通知机制。当特定事件发生时——用户按下 Ctrl-C、子进程退出、进程访问无效内存、管道写入端关闭——内核向目标进程的进程控制块（PCB）中记录一个待处理的信号。与硬件中断不同，信号完全在软件层面传递，但同样具有异步特性：进程无法精确预知信号何时到达。&lt;/p&gt;</description></item><item><title>Linux 内存子系统：OOM、Swap 与 cgroup 内存限制</title><link>https://plumephp.com/os-linux-memory/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/os-linux-memory/</guid><description>&lt;p&gt;Linux 内存管理子系统是内核中最复杂的模块之一。它不仅要为进程分配物理页帧，还要在内存不足时做出艰难的权衡决策。本文从 overcommit 策略、OOM Killer、交换机制、cgroup 控制、内存水位以及诊断工具六个维度，系统地梳理 Linux 内存子系统的核心原理。&lt;/p&gt;</description></item><item><title>Linux 内核编译与模块开发入门</title><link>https://plumephp.com/os-kernel-module/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/os-kernel-module/</guid><description>&lt;p&gt;Linux 内核模块（Kernel Module）是可动态加载到内核空间的代码单元，它是驱动开发、文件系统扩展、网络协议栈增量的核心手段。与微内核架构不同，Linux 采用宏内核设计，所有内核代码共享同一地址空间，模块的运行效率极高，但也意味着一个不合格的模块可能导致整个系统崩溃。本文从环境搭建到字符设备驱动，再到调试技巧，系统性地介绍内核模块开发的全流程。&lt;/p&gt;</description></item><item><title>Linux 网络编程基础：Socket API 与 TCP 连接生命周期</title><link>https://plumephp.com/os-linux-network/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/os-linux-network/</guid><description>&lt;p&gt;在 Linux 系统中，网络通信的基石是 Berkeley Socket API。无论你是在编写 Web 服务器、微服务网关，还是分布式系统的 RPC 框架，最终都会落到 &lt;code&gt;socket()&lt;/code&gt;、&lt;code&gt;connect()&lt;/code&gt;、&lt;code&gt;send()&lt;/code&gt;、&lt;code&gt;recv()&lt;/code&gt; 这些系统调用上。本文从 Socket 类型讲起，深入 TCP 连接的生命周期，覆盖关键 Socket 选项、I/O 模型以及生产环境编程中的最佳实践，帮助你构建健壮的网络应用。&lt;/p&gt;</description></item><item><title>Linux 进程管理：fork、exec、wait 与进程间通信</title><link>https://plumephp.com/os-linux-process/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/os-linux-process/</guid><description>&lt;blockquote&gt;
&lt;p&gt;进程是操作系统资源分配的基本单位。在 Linux 中，理解 &lt;code&gt;fork()&lt;/code&gt;、&lt;code&gt;exec()&lt;/code&gt; 和 &lt;code&gt;wait()&lt;/code&gt; 这组&amp;quot;三位一体&amp;quot;的系统调用，是掌握 Unix 编程范式的关键。&lt;/p&gt;</description></item><item><title>中断与异常处理：从硬件中断到软中断</title><link>https://plumephp.com/os-interrupts/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/os-interrupts/</guid><description>&lt;p&gt;中断（Interrupt）是操作系统最核心的机制之一。无论是键盘输入、磁盘 I/O 完成，还是定时器到期，系统都依赖中断来打破 CPU 的顺序执行流，让内核能够及时响应外部事件。理解中断的完整链路——从硬件信号到内核处理，再到 Linux 的下半部机制——是掌握操作系统底层原理的关键一步。&lt;/p&gt;</description></item><item><title>内存分配与回收：从 malloc 到 slab 分配器</title><link>https://plumephp.com/os-memory-allocation/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/os-memory-allocation/</guid><description>&lt;h2 id="引言堆内存的演进之路"&gt;引言：堆内存的演进之路&lt;/h2&gt;
&lt;p&gt;在 Linux 系统中，当程序请求一块内存时，操作系统并不会直接暴露物理页。相反，一个复杂的分配器层次逐步将大块虚拟地址空间切割成程序所需的小块。从用户态的 &lt;code&gt;malloc()&lt;/code&gt; 到底层的 &lt;code&gt;brk()&lt;/code&gt;/&lt;code&gt;mmap()&lt;/code&gt;，再到内核的 slab/slub 分配器，每一层都在性能、碎片率与并发能力之间做出权衡。本文将从系统调用出发，逐层剖析现代内存分配的核心机制。&lt;/p&gt;</description></item><item><title>同步原语：信号量、互斥锁、条件变量与读写锁</title><link>https://plumephp.com/os-synchronization/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/os-synchronization/</guid><description>&lt;p&gt;在多核处理器成为主流的当下，并发编程已是必备技能。然而，并发带来的竞态条件（Race Condition）和数据不一致问题要求我们借助同步原语来协调多个执行单元对共享资源的访问。本文从底层实现出发，逐一剖析 Linux 中最常用的同步机制：互斥锁、信号量、条件变量、读写锁、自旋锁和 RCU，并给出选型决策树。&lt;/p&gt;</description></item><item><title>多处理器与缓存一致性：MESI 协议与内存屏障</title><link>https://plumephp.com/os-multiprocessor-cache/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/os-multiprocessor-cache/</guid><description>&lt;h2 id="smp-与-numa两种多处理器架构"&gt;SMP 与 NUMA：两种多处理器架构&lt;/h2&gt;
&lt;p&gt;多核处理器从架构上可以分为 SMP（Symmetric Multi-Processing，对称多处理）和 NUMA（Non-Uniform Memory Access，非统一内存访问）两大类。&lt;/p&gt;</description></item><item><title>操作系统概述：内核态与用户态、系统调用原理</title><link>https://plumephp.com/os-overview/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/os-overview/</guid><description>&lt;p&gt;操作系统是计算机系统中最核心的系统软件，它管理硬件资源、提供抽象接口、保障程序安全隔离。深入理解操作系统的基础原理，是每一位系统工程师的必修课。本文将围绕内核态与用户态的隔离机制、系统调用的实现原理展开系统性的介绍。&lt;/p&gt;</description></item><item><title>文件系统原理：inode、目录结构与 VFS 抽象层</title><link>https://plumephp.com/os-filesystem/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/os-filesystem/</guid><description>&lt;p&gt;文件系统是操作系统中最关键的子系统之一。它将裸设备的物理存储块（block）抽象为逻辑上的目录和文件，让用户和应用程序可以方便地组织、读取和写入数据。理解文件系统的底层原理，对于排查磁盘空间泄漏、IO 性能瓶颈和数据一致性问题都至关重要。本文将从 inode 结构、目录解析、VFS 抽象层、ext4 深度实现以及 Copy-on-Write 等现代文件系统展开讨论。&lt;/p&gt;</description></item><item><title>死锁：条件、检测、预防与银行家算法</title><link>https://plumephp.com/os-deadlock/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/os-deadlock/</guid><description>&lt;p&gt;死锁（Deadlock）是并发系统中一类经典而且代价高昂的故障：多个进程或线程因相互等待对方持有的资源，而全部陷入永久阻塞。与竞态条件不同，死锁不会破坏数据完整性，但它会让系统&amp;quot;冻结&amp;quot;在某一点，服务完全丧失可用性。本文从 Coffman 四条件出发，遍历经典案例、处理策略、银行家算法，并延伸到 Linux lockdep 等工程实践，帮助你建立对死锁的系统认知。&lt;/p&gt;</description></item><item><title>现代高性能 IO：epoll、io_uring 与异步 IO</title><link>https://plumephp.com/os-high-performance-io/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/os-high-performance-io/</guid><description>&lt;h2 id="the-c10k-problem为什么-pollselect-不具扩展性"&gt;The C10K Problem：为什么 poll/select 不具扩展性&lt;/h2&gt;
&lt;p&gt;在 1999 年，开发者 Dan Kegel 提出了著名的 &lt;strong&gt;C10K Problem&lt;/strong&gt;：如何让一台单机同时处理 10,000 个并发连接？这个问题在当时看似遥不可及，但它深刻揭示了一个核心矛盾 —— 传统的 IO 多路复用机制在连接数增长时，性能急剧恶化。&lt;/p&gt;</description></item><item><title>系统性能诊断与调优：strace、perf、bpftrace</title><link>https://plumephp.com/os-performance-tools/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/os-performance-tools/</guid><description>&lt;p&gt;性能问题往往没有统一的标准答案，但 Linux 提供了一套完整的工具链，可以从不同层面揭示系统的运行状况。本文系统介绍从系统调用跟踪到内核动态追踪的常用工具，帮助开发者在面对高 CPU、高延迟或资源瓶颈时快速定位根因。&lt;/p&gt;</description></item><item><title>虚拟内存与分页机制：从 MMU 到 TLB</title><link>https://plumephp.com/os-virtual-memory/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/os-virtual-memory/</guid><description>&lt;p&gt;虚拟内存是操作系统中最精妙的设计之一。它让程序可以方便地使用连续地址空间进行编码，而无需关心复杂多变的物理内存布局。同时，它也为操作系统调度、进程隔离和内存安全提供了底层支撑。从最早的段页式管理，到现代 x86-64 的多级页表，虚拟内存始终是操作系统与硬件交互最核心的环节之一。&lt;/p&gt;
&lt;p&gt;本文将从虚拟内存出现的初衷出发，逐步解剖地址翻译机制、页表结构、MMU 与 TLB 的工作原理，最后聚焦于 Linux 下的缺页处理、用户态接口与大页优化等进阶议题。&lt;/p&gt;</description></item><item><title>进程与线程：从 PCB 到内核调度实体</title><link>https://plumephp.com/os-process-thread/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/os-process-thread/</guid><description>&lt;p&gt;操作系统中最核心的抽象莫过于进程（Process）。它不仅是资源分配的基本单位，也是程序运行的载体。而线程（Thread）作为更轻量的执行单元，让并发程序设计更加高效。本文从内核视角出发，深入剖析进程控制块、线程模型、Linux 实现机制以及用户态协程的本质。&lt;/p&gt;</description></item></channel></rss>