{"name":"内核","id":"操作系统-linux-内核","content":"# Linux 内核\n\n> 本文不以 Linux 为目的，而以 **\"操作系统这一类系统如何成立\"** 为核心对象。\n> Linux 只是一个**足够成熟、足够复杂、足够工程化的实现载体**。\n\n---\n\n## 一、操作系统的第一性原理\n\n### 1. 操作系统解决的根本问题\n\n从第一性原理出发，操作系统只解决三个问题：\n\n1. **有限硬件资源如何被安全、高效、公平地共享**\n2. **多个执行实体如何被统一组织、调度和切换**\n3. **隔离与复用如何同时成立**\n\n所有内核机制，本质上都是这三点的不同展开。\n\n---\n\n### 2. 操作系统的四类稳定抽象\n\n| 抽象类型 | 核心问题  | Linux 对应机制         |\n| ---- | ----- | ------------------ |\n| 执行抽象 | 谁在运行  | 进程 / 线程            |\n| 资源抽象 | 能用什么  | 内存、文件、设备           |\n| 控制抽象 | 何时运行  | 调度、中断、信号           |\n| 隔离抽象 | 彼此不影响 | namespace / cgroup |\n\n> **稳定知识 = 抽象本身\n> 不稳定知识 = 抽象在某个系统中的具体实现**\n\n---\n\n## 二、从上电到内核：系统如何\"被唤醒\"\n\n### 1. 启动链路的本质\n\n启动过程不是\"加载程序\"，而是一次 **控制权逐级移交**：\n\n```\n硬件 → 固件 → 引导器 → 内核 → 用户空间\n```\n\n每一跳都解决一个问题：\n\n| 阶段         | 解决的问题   |\n| ---------- | ------- |\n| BIOS/UEFI  | 硬件最小可用  |\n| Bootloader | 找到并加载内核 |\n| Kernel     | 建立抽象世界  |\n| init       | 管理用户态秩序 |\n\n---\n\n### 2. 保护模式与分页的哲学意义\n\n* **分段**：历史遗留的隔离尝试\n* **分页**：现代操作系统真正的内存抽象基础\n\n> 分页的本质不是\"地址转换\"，\n> 而是 **让所有进程\"以为自己拥有完整内存\"**\n\n---\n\n## 三、执行抽象：进程、线程与系统调用\n\n### 1. 进程的本质定义\n\n**进程 = 资源容器 + 执行上下文**\n\n* 资源：地址空间、文件、权限\n* 执行：寄存器状态、内核栈、调度实体\n\n线程只是：\n\n> **共享资源的多个执行上下文**\n\n---\n\n### 2. 系统调用的本质\n\n系统调用不是 API，而是：\n\n> **用户态 → 内核态的唯一合法越权通道**\n\n其核心目标：\n\n* 改变特权级\n* 保存 / 恢复上下文\n* 保证安全边界\n\n---\n\n## 四、调度：时间这种资源如何被分配\n\n### 1. 调度的第一性问题\n\n> CPU 时间是**不可并行**的稀缺资源\n\n调度器解决的是：\n\n* 公平 vs 实时\n* 吞吐 vs 延迟\n* 全局最优 vs 局部响应\n\n---\n\n### 2. Linux 的调度哲学\n\nLinux 将调度拆为两层：\n\n| 层次 | 含义     |\n| -- | ------ |\n| 策略 | 决定谁该优先 |\n| 机制 | 如何高效切换 |\n\nCFS 的核心思想是：\n\n> **用虚拟时间逼近理想公平**\n\n而非时间片轮转。\n\n---\n\n### 3. 抢占与协作的统一\n\nLinux 并非\"抢占式 or 协作式\"，而是：\n\n* **内核态谨慎抢占**\n* **用户态可控抢占**\n\n通过 `TIF_NEED_RESCHED` 延迟决策，保证系统稳定。\n\n---\n\n## 五、内存管理：制造\"无限内存\"的幻觉\n\n### 1. 虚拟内存的本质\n\n虚拟内存不是为了\"大\"，而是为了：\n\n* 隔离\n* 延迟分配\n* 地址稳定性\n\n> **虚拟地址空间是进程级抽象，不是硬件事实**\n\n---\n\n### 2. 三层内存模型\n\n```\n虚拟地址 → 物理页 → 实际内存\n```\n\n* 伙伴系统：解决大块连续分配\n* Slab/Slub：解决小对象高频分配\n* mmap：统一内存与文件\n\n---\n\n### 3. kmalloc vs vmalloc 的设计取舍\n\n* kmalloc：性能优先，物理连续\n* vmalloc：灵活优先，TLB 代价\n\n这是 **性能换抽象能力** 的典型权衡。\n\n---\n\n## 六、文件系统：\"一切皆文件\"的统一接口\n\n### 1. 文件的抽象本质\n\n文件不是磁盘数据，而是：\n\n> **顺序访问 + 持久化语义**\n\ninode 的存在意义：\n\n* 元数据与数据解耦\n* 支持链接与共享\n\n---\n\n### 2. VFS 的哲学高度\n\nVFS 的作用不是\"适配文件系统\"，而是：\n\n> **统一一切 IO 的访问模型**\n\n因此：\n\n* 设备是文件\n* 网络是文件\n* 管道是文件\n\n---\n\n## 七、IO 与设备：屏蔽硬件差异\n\n### 1. 字符设备 vs 块设备\n\n| 类型   | 特点       |\n| ---- | -------- |\n| 字符设备 | 流式、不可寻址  |\n| 块设备  | 随机访问、可缓存 |\n\nLinux 用统一的文件接口，隐藏驱动差异。\n\n---\n\n### 2. 缓存 IO 的本质\n\n缓存 IO 本质是：\n\n> **用内存换磁盘延迟**\n\n而 Direct IO 是：\n\n> **应用自行承担一致性与性能责任**\n\n---\n\n## 八、进程间通信：协作而非隔离\n\n### 1. IPC 的三种抽象模型\n\n| 模型   | 核心思想   |\n| ---- | ------ |\n| 消息   | 拷贝换安全  |\n| 共享内存 | 性能换复杂度 |\n| 信号量  | 协调而非传输 |\n\n---\n\n### 2. 信号的哲学意义\n\n信号不是 IPC，而是：\n\n> **异步控制流注入机制**\n\n类似于\"软中断\"。\n\n---\n\n## 九、网络系统：内核中的分布式系统\n\n### 1. Socket 的本质\n\nSocket 是：\n\n> **进程视角下的网络抽象**\n\n统一了：\n\n* 本地通信\n* 网络通信\n* 不同协议栈\n\n---\n\n### 2. NAPI 的设计思想\n\n> **中断 + 轮询的混合模型**\n\n这是高性能系统中典型的：\n\n* 峰值用中断\n* 稳态用轮询\n\n---\n\n### 3. Netfilter 的架构哲学\n\nNetfilter 不是防火墙，而是：\n\n> **内核数据路径上的可插脱控制点**\n\n---\n\n## 十、虚拟化与容器：隔离的两种路径\n\n### 1. 虚拟化的本质\n\n虚拟化解决的是：\n\n> **\"骗操作系统\"**\n\n通过硬件辅助，让 Guest OS 以为自己独占硬件。\n\n---\n\n### 2. 容器的本质\n\n容器解决的是：\n\n> **\"骗进程\"**\n\n通过 namespace + cgroup：\n\n* namespace：视图隔离\n* cgroup：资源限制\n\n---\n\n### 3. namespace 与 cgroup 的正交关系\n\n| 维度   | namespace | cgroup |\n| ---- | --------- | ------ |\n| 看见什么 | 是         | 否      |\n| 能用多少 | 否         | 是      |\n\n---\n\n## 十一、Linux 内核的整体架构总结\n\n可以将 Linux 内核理解为：\n\n> **一个围绕资源抽象、执行调度与隔离机制构建的通用系统内核**\n\n它的成功不在于：\n\n* API 多\n* 实现复杂\n\n而在于：\n\n* 抽象稳定\n* 机制可组合\n* 策略可演进\n\n---\n\n## 结语：从 Linux 到一切复杂系统\n\n当你真正理解这套体系后，你学到的已经不是 Linux，而是：\n\n* JVM\n* Kubernetes\n* 分布式调度系统\n* 云操作系统\n\n都会不断出现 **\"似曾相识的结构\"**。\n\n## 关联内容（自动生成）\n\n- [/操作系统/进程与线程.md](/操作系统/进程与线程.md) 详细阐述了进程与线程的概念，与本文中\"执行抽象\"和\"调度\"部分密切相关\n- [/操作系统/内存管理.md](/操作系统/内存管理.md) 深入探讨了内存管理机制，与本文\"虚拟内存\"部分形成互补\n- [/操作系统/文件管理.md](/操作系统/文件管理.md) 详细介绍了文件系统原理，与本文\"一切皆文件\"的统一接口思想相呼应\n- [/操作系统/虚拟化.md](/操作系统/虚拟化.md) 深入解析了虚拟化技术，与本文\"虚拟化与容器\"章节内容相关\n- [/操作系统/linux/Linux.md](/操作系统/linux/Linux.md) 作为Linux专题的总览，与本文内核部分形成整体与部分的关系\n- [/操作系统/容器化.md](/操作系统/容器化.md) 详细介绍了容器技术，与本文\"容器的本质\"章节内容相关\n- [/计算机系统/在系统上运行程序/异常控制流.md](/计算机系统/在系统上运行程序/异常控制流.md) 深入讲解了异常控制流机制，与本文\"中断\"和\"信号\"部分密切相关\n- [/计算机网络/Linux虚拟化.md](/计算机网络/Linux虚拟化.md) 介绍了Linux网络虚拟化技术，与本文\"网络系统\"章节中的网络虚拟化部分相关\n- [/软件工程/架构/系统设计/分布式/分布式系统.md](/软件工程/架构/系统设计/分布式/分布式系统.md) 探讨了分布式系统设计，与本文末尾提到的分布式调度系统概念相关\n- [/编程语言/JAVA/JVM/JVM.md](/编程语言/JAVA/JVM/JVM.md) 详细介绍了JVM架构，与本文结尾提到的JVM结构相似性概念相关","metadata":"tags: ['操作系统']","hasMoreCommit":true,"totalCommits":20,"commitList":[{"date":"2026-02-12T14:07:03+08:00","author":"MY","message":"doc: 整理标签","hash":"290b3e8ad18f48832ac282290238d020fc030a88"},{"date":"2025-12-21T20:57:47+08:00","author":"MY","message":"feat(doc): 删除多个文档资产文件","hash":"38b0d9ebf57a58b9f9604bf0f74b6385a97f5db0"},{"date":"2023-05-25T16:41:11+08:00","author":"MY","message":"✏计算机网络","hash":"9fa90391b4921ad8f18525bfe368c17388ae7582"},{"date":"2022-11-10T16:39:04+08:00","author":"cjiping","message":"✏️内核","hash":"37a92c2bb1168b9bc34838659f739b3e205ccbaf"},{"date":"2022-11-09T15:38:30+08:00","author":"cjiping","message":"✏️内核","hash":"67a44648dc552314e8871485ab264af424bbcf67"},{"date":"2022-11-08T19:20:23+08:00","author":"cjiping","message":"✏️内核","hash":"d714ee00ec5b2ce561b4e25d8fd9259fc362e0e6"},{"date":"2022-11-07T18:04:12+08:00","author":"cjiping","message":"✏️内核","hash":"73f94161d9596c4ede2fd75e689ea5cd13121131"},{"date":"2022-11-04T16:44:08+08:00","author":"cjiping","message":"✏️内核","hash":"94237ec80abfc072b5c6aefe1ee73ba8e968dbe5"},{"date":"2022-11-03T19:14:56+08:00","author":"cjiping","message":"✏️内核","hash":"771755be7351fc117a0a6cb58cf1758f9e49e5af"},{"date":"2022-11-02T17:37:11+08:00","author":"cjiping","message":"✏️内核","hash":"9b3840305445965e682ea501caef7ffad9167b23"}],"createTime":"2022-10-13T17:49:19+08:00"}