Blog
Essays, opinions and notes.
# Linux kernel ×
- 2026-09-23 Linux内核分析之安全模块-04 56.1 Seccomp 原理 —— strict 模式与 filter 模式 seccomp 有两代: strict 模式 (一代,只有 read/write/exit/sigreturn 四个调用可用,违约 SIGKILL)与 filter 模式 (二代,用户态提交 cBPF 过滤器按调用号/参数裁决)。共同的不变式是 单向门 :一旦启用不能关闭(除非 …
- 2026-09-23 Linux内核分析之安全模块-03 55.1 Linux Capability 机制详解 Capability 把 root 的"全部权限"拆成编号的能力位(kernel cap t 是两个 64 位字的位图,52.3.1 节),分布在 cred 的五个集合中,exec 时按一组确定性规则计算新集合。本节解剖位表、五集合语义与 exec 计算式。 --- 55.1.1 能力位表与五集合 55.…
- 2026-09-23 Linux内核分析之安全模块-02 54.1 AppArmor 配置文件模型 AppArmor 的策略单元是 profile :绑定到可执行路径(或通过 change profile 显式进入),内部是一组"路径 glob + 权限字母"的允许规则,外加能力清单与网络/信号约束。两种模式(enforce/complain)决定违规的后果。本节解剖 profile 的语法与生命周期。 --- 5…
- 2026-09-23 Linux内核分析之安全模块-01 53.1 SELinux 策略模型 —— TE、RBAC、MCS SELinux 的策略模型由三层组成: 类型强制(TE) 是核心——"源类型对目标类型的类是否有权限"; RBAC (角色)约束"哪些角色能进哪些域"; MCS/M LS (多级/类别安全)做敏感性分级(容器用 MCS 隔离)。本节用一次实际判定解剖三层。 --- 53.1.1 安全上下文的四…
- 2026-09-23 Linux内核分析之虚拟化-02 51.1 virtio 规范与 virtqueue virtio 是"为虚拟化而生"的设备标准:客户机与宿主约定一套 共享内存的环形队列协议 (virtqueue),客户驱动填描述符、宿主后端消费,通知走最低成本的路径(共享内存标志或单次 MMIO)。它消灭了"模拟真实硬件"(模拟一个 e1000 意味着每包都走真实网卡的寄存器协议)的低效,是半虚拟化 I/…
- 2026-09-23 Linux内核分析之虚拟化-01 50.1 x86 VT-x / AMD-V 扩展 VT-x(Intel)与 AMD-V(SVM)是 x86 硬件虚拟化的两大扩展:新增一个"非根模式"(客户机运行态),敏感操作触发 VM-Exit 回根模式(宿主内核),VMCS/VMCB 保存双态上下文。两者语义同构而编码各异。本节解剖 VT-x 的模式模型、控制位体系与 AMD-SVM 的对照,以及 KV…
- 2026-09-23 Linux内核分析之网络协议栈-04 48.1 Netlink 协议族与消息格式 Netlink 是内核与用户态之间的"双工消息总线":一个 socket 族(AF NETLINK,按 NETLINK 子协议再分)、一套 TLV 消息格式(nlmsghdr + nlattr)、单播/多播两种投递。 ip/ss/conntrack 的一切配置查询、udev 设备事件(39.1.3 节)、路由变化通…
- 2026-09-23 Linux内核分析之网络协议栈-03 47.1 Netfilter 钩子与 hook 点 Netfilter 框架本体极小:五个钩子点 + 一个注册接口 + 一个执行器,其余一切(NAT、过滤、跟踪)都是钩子消费者。框架的工程精华在于 无规则时近乎零成本 (static branch 短路)与 同点多钩子的优先级协议 。本节解剖框架与裁决协议。 --- 47.1.1 五个钩子点:位置即语义 47…
- 2026-09-23 Linux内核分析之网络协议栈-02 46.1 IP 层 —— 路由与分片 IP 层的职责是"把包送到该去的地方":入口校验 → 路由决策(本地交付/转发/丢弃)→ 交付或转发,途中处理分片重组与 netfilter 穿越。它的两个核心产物—— skb dst (路由缓存条目)与邻居表——不仅是转发的依据,也是本机 TCP 发包的参数来源。本节解剖收包骨架、路由结构与分片机制。 --- 46.1…
- 2026-09-23 Linux内核分析之网络协议栈-01 45.1 socket 系统调用与 sock 结构 socket 系统调用的每一员都是"薄翻译":进程的 fd 背后是 struct socket (VFS 壳,sockfs 内部文件系统的 inode),壳内挂着 struct sock (协议本体,TCP/UDP/Unix 各有扩展)。两者之间由 proto ops 操作表连接——POSIX 语义到协议实…
- 2026-09-23 Linux内核分析之设备驱动-04 43.1 DMA 原理与 DMA 映射 DMA 的本质是"设备用 bus 地址访问内存",而内核必须负责三件事: 地址翻译 (虚拟→物理→bus,含 IOMMU 编址)、 缓存一致性 (CPU 缓存与设备视图的同步)、 访问授权 (IOMMU 页表给设备开权限)。本节建立翻译观与方向语义。 --- 43.1.1 三种地址与翻译链 为什么驱动必须经 API 而…
- 2026-09-23 Linux内核分析之设备驱动-03 42.1 硬件中断处理 —— 上半部 硬中断处理程序(上半部)运行在内核最严苛的上下文:抢占全关、不可睡眠、随时打断任何代码。它的职责因此被压缩为一件事—— 尽快告知内核"事件来了",把工作移交延迟层 。本节解剖注册接口与上下文约束。 --- 42.1.1 注册与返回值协议 dev id 是共享中断的身份证 :同一条线的每个注册者带自己的实例指针,触发时链上…
- 2026-09-23 Linux内核分析之设备驱动-02 41.1 块设备注册与 gendisk 块驱动的注册是"声明式"的:填一张 blk mq tag set (多少硬件队列、多深的池、什么回调),core 据此建全部队列与标签池;再 blk mq alloc disk 取 gendisk、 add disk 上线。本节解剖这张声明表。 --- 41.1.1 tag set:驱动的能力声明 cmd size 是…
- 2026-09-23 Linux内核分析之设备驱动-01 40.1 字符设备注册 —— register chrdev 字符设备注册 = 拿一块设备号区间 + 挂一个 cdev(携带 file operations)。老式一步接口与新式两级接口并存,cdev 本身是个 kobject——39 章的模型在此落地。 --- 40.1.1 设备号与两级注册 40.1.2 cdev:行为本体 owner 字段的生命周期 是…
- 2026-09-23 Linux内核分析之文件系统-05 38.1 OverlayFS 原理与层次结构 OverlayFS 的挂载参数只有三个: lowerdir= (可多个逗号分隔)、 upperdir= (恰好一个)、 workdir= (与 upper 同文件系统的工作目录)。合并视图的语义由这套参数严格推导: 多层只读底本 + 单层可写覆盖 + 事务辅助目录 。本节拆解层模型与合并规则。 --- 38.1.…
- 2026-09-23 Linux内核分析之文件系统-04 37.1 /proc 文件系统 —— 进程与内核信息 procfs 把"每进程的内核账本"( /proc/ / )与"系统杂项"( /proc/sys 、 /proc/meminfo …)暴露为文件。它的独特基础设施是 按需合成 :目录内容随进程生灭动态枚举,文件内容在 read 时由回调生成。本节拆解其节点模型与 proc ops。 --- 37.1.1 …
- 2026-09-23 Linux内核分析之文件系统-03 36.1 页缓存 (Page Cache) —— address space address space 把"文件的页缓存视图"形式化:以 XArray 保存"文件偏移 → folio"的映射,以三个标记位维护脏/回写状态,以 a ops 把"这页缺了谁去供货"多态到具体文件系统。read/write/mmap/共享内存全部经此一仓。本节拆解容器、索引与读路…
- 2026-09-23 Linux内核分析之文件系统-02 35.1 块设备层架构 —— request queue 与 bio 块层的三个核心对象分工清晰: gendisk 是设备在内核的身份卡、 request queue 是它的排队车间、 bio 是一张 I/O 工单。本节拆解三者与提交路径的检查序列。 --- 35.1.1 gendisk 与 request queue gendisk 是驱动向块层注册的设备…
- 2026-09-23 Linux内核分析之文件系统-01 34.1 Ext4 磁盘布局 —— 块组、inode 表与日志 ext4 的磁盘组织围绕"块组"展开:把整个设备切成若干自包含单元,每组内含自己的位图与 inode 表,使"一个文件的 inode 与数据邻近、并发分配互不干扰"。超级块与组描述符经 sparse super / flex bg 特性稀疏化与聚簇。本节解剖磁盘布局与挂载时的解析。 --- 34…
- 2026-09-23 Linux内核分析之进程间通信-06 32.1 eventfd —— 事件通知机制 eventfd 把"一个事件发生了"压缩成 8 个字节的计数器加一个等待队列——它是 epoll 生态里最小的积木:线程池唤醒、io uring 完成通知(37 章)、QEMU 主循环、DMA 完成回调(virtio,51 章)都以它为终结点。本节拆解计数语义、读写路径与内核侧 API。 --- 32.1.1 e…
- 2026-09-23 Linux内核分析之进程间通信-05 31.1 futex 原理 —— 快速用户空间互斥 futex 的全部设计围绕一个问题: 内核如何为"用户内存里的一个字"提供睡眠/唤醒服务,却不知道任何锁语义? 答案是三层抽象:用户内存字是锁状态、futex 键是队列身份、哈希桶是队列容器。本节拆解这三层与私有/共享键的语义。 --- 31.1.1 分界线:值在用户、队列在内核 "零竞争零系统调用" 的收…
- 2026-09-23 Linux内核分析之进程间通信-04 30.1 POSIX 共享内存 (shm open) POSIX 共享内存把 28.4 节的内核事实——"共享内存就是 tmpfs 文件"——直接暴露为文件系统对象: shm open("/data") 在 /dev/shm/ 下创建/打开一个真实文件,之后 ftruncate 定大小、 mmap 映射使用。生命周期由 引用计数 而非 IPC RMID 管理…
- 2026-09-23 Linux内核分析之进程间通信-03 29.1 POSIX 消息队列与 mqueue 文件系统 POSIX 消息队列把消息语义嫁接到 fd 世界: mq open 返回的 mqd 可被 poll/epoll/close 处理, mq notify 提供三件套中唯一的主动通知。实现上队列本体是 mqfs 内部文件系统的 inode,消息按优先级组织成红黑树,收发快路径以 pipelined 指针移…
- 2026-09-23 Linux内核分析之进程间通信-02 28.1 System V IPC 通用机制 —— ipc ids 与 kern ipc perm 信号量/消息队列/共享内存三个子系统共享一个对象管理层:每 IPC namespace 一份 ipc ids 3 ,每个 IPC 对象以 kern ipc perm 开头(权限/属主/键/序号)。这一层解决三件所有 SysV IPC 都需要的事: key→id…
- 2026-09-23 Linux内核分析之进程间通信-01 27.1 信号处理全链路 信号最具欺骗性的地方在于: kill() 返回时什么都没发生,handler 却"稍后"执行了。本节沿时间轴把这个"稍后"拆开——信号从挂起集到 handler 入口要经过 返回用户态边界 这道唯一的闸门,而系统调用重启语义是这道闸门上最精巧的协商机制。 --- 27.1.1 时间轴:为什么不立即投递 为什么必须等边界 :内核态代码…
- 2026-09-23 Linux内核分析之内存管理-07 25.1 缺页异常入口 —— x86 64 do page fault x86 把缺页叫 PF(向量 14),是内核能收到的信息最丰富的异常:CR2 给出故障地址,错误码给出故障性质,IDTENTRY 框架给出被中断上下文。入口代码的使命是把这三份信息翻译成"一个安全的问题"再交给通用层——每一步过滤都在防止恶意构造的异常打穿内核。本节沿 7.0 的实际入口…
- 2026-09-23 Linux内核分析之内存管理-06 24.1 LRU 链表与页面老化 回收的本质是预测:哪一页未来最不可能被访问?内核的回答是把所有可回收页组织成 按访问时间排序的链表 ,从最老端摘取。7.0 提供两套实现:传统 active/inactive 二链(64 位下仍可选用)与默认的 MGLRU (multi-gen LRU)——用"世代"把"多久没用"量化成序号,避免二链在巨型内存上的全表扫描。…
- 2026-09-23 Linux内核分析之内存管理-05 23.1 大页原理 —— 减少 TLB 失配 大页的收益常被粗略表述为"TLB 命中率高",本节用三组算式把收益拆开: TLB 覆盖倍增 (同样条目数覆盖 512 倍地址)、 页表遍历减负 (中间层级消失)、 缺页次数均摊 (一次供货覆盖 512 个 4KB 单元),并逐项指出对应的成本(分配原子性、分裂搬运、碎片放大、迁移负担)。理解收益边界才能回答"何时…
- 2026-09-23 Linux内核分析之内存管理-04 22.1 用户地址空间布局 —— mmap 与栈 每个进程一出生,内核就为它的用户半区规划了"城市规划图":哪里放代码与数据、哪里允许堆向上长、mmap 区从哪个边界向哪头分配、栈顶在哪。规划的核心参数是 mm- mmap base (mmap 区边界)与布局模式(top-down 或 legacy),两者由架构代码 arch pick mmap layou…
- 2026-09-23 Linux内核分析之内存管理-03 21.1 SLAB/SLUB/SLOB 三代分配器 内核对象分配器的第一版 SLAB 出现于 1996 年,其设计直接借鉴 Solaris 的 Jeff Bonwick 论文;随后 SLOB 与 SLUB 相继加入,三种实现长期以编译期互斥的方式并存,由同一套 kmem cache API 统一供给上层。演进到 7.0,主干只剩 SLUB——本树 mm/Kc…
- 2026-09-23 Linux内核分析之内存管理-02 20.1 内核虚拟地址空间划分 64 位虚拟地址是一把双刃剑:2^64 字节的空间远超任何物理设备的寻址需要,CPU 实际只实现 48 位(LA57 下 57 位), 未实现的高位必须符号扩展 ——由此产生 canonical hole(非规范洞):48 位实现下 bit 63:47 全 0 或全 1 的地址才合法,中间是 16384PB 的禁地。内核把自己…
- 2026-09-23 Linux内核分析之内存管理-01 19.1 多级页表结构 —— PGD 到 PTE 要管理页表,内核必须先回答一个抽象问题: 页表长什么样? 每个架构的答案不同——x86 64 四或五级、ARM64 三到五级可配、RISC-V 三到五级运行时冻结——但内核的核心子系统(内存管理、缺页处理、页表复制)不能为每个架构写一套。于是 Linux 用五级固定命名的层级抽象(pgd/p4d/pud/pm…
- 2026-09-23 Linux内核分析之内核同步-02 17.1 RCU 原理 —— 读侧无锁的优雅方案 RCU(Read-Copy-Update,读-拷贝-更新)是 Linux 内核中最独特的同步机制: 读者不加锁、不用原子操作、甚至(在强序架构上)不用内存屏障 ,只做两件事——取指针、解引用;写者则复制一份新数据、原子地替换指针、然后 等所有"可能还在读旧数据"的读者都离开后 才真正释放旧数据。这个"等"的窗…
- 2026-09-23 Linux内核分析之内核同步-01 16.1 自旋锁 —— spinlock t 与 ticket lock 自旋锁(spinlock)是内核中最基础的锁原语:当锁不可用时,获取者不让出 CPU,而是在原地"自旋"反复检测锁状态,直到持锁者释放。这种策略在临界区极短的场景下远优于睡眠——省去了两次上下文切换的代价,但代价是持锁期间必须禁止抢占,且等待者白白消耗 CPU。Linux 7.0.10…
- 2026-09-23 Linux内核分析之内核同步-00 15.1 原子操作 —— atomic t 与 atomic64 t 原子操作是内核并发设施的最低层:一条不可分割的"读-改-写"(RMW)指令完成的计数或位操作,不需要锁、不需要睡眠,是自旋锁(16.1 节)、refcount(8.1 节的 task struct.usage )、信号量与全部引用计数机制的地基。Linux 7.0.10 把原子 API 组…
- 2026-09-23 Linux内核分析之进程管理-06 14.1 进程终止 -- do exit() 与资源回收 进程终止是操作系统中最复杂的状态转换之一。一个进程在运行期间持有大量内核资源:内存地址空间、文件描述符、信号处理器、POSIX 定时器、命名空间引用、cgroup 归属等。 do exit() 函数必须按照严格的顺序逐一释放这些资源,确保不产生死锁、不遗漏资源、不破坏内核一致性。本节将结合 Linux…
- 2026-09-23 Linux内核分析之进程管理-05 13.1 上下文切换的触发条件 上下文切换并非凭空发生,它总是由特定的事件或条件触发。Linux 内核中触发调度(进而可能导致上下文切换)的入口最终都汇聚到 schedule() 函数( kernel/sched/core.c:6748 ),但到达这个入口的路径却多种多样。根据触发方式的不同,内核定义了四种调度模式: 这些模式不仅影响 schedule() …
- 2026-09-23 Linux内核分析之进程管理-04 12.1 cgroups 演进与 v2 设计哲学 cgroups (Control Groups) 是 Linux 内核中最重要的进程资源管理基础设施之一。它将系统中的进程组织成层次化的分组,并对每个分组施加资源限制、统计和隔离策略。本节深入分析 cgroups 从 v1 到 v2 的演进历程,剖析 v2 设计中的核心哲学,并结合 Linux 7.0.10 …
- 2026-09-23 Linux内核分析之进程管理-03 11.1 Linux 调度器演进史 Linux 调度器经历了三十多年的持续演进。从 Linus Torvalds 在 1991 年写下的第一版调度器,到如今 Linux 7.0 中基于 EEVDF 理论的现代调度器,每一次重大变革都源于对已有设计瓶颈的深刻反思。本节将追溯这条演进之路,理解每一次变革背后的动机与设计哲学。 --- 11.1.1 原始调度器:L…
- 2026-09-23 Linux内核分析之进程管理-02 10.1 fork() —— 写时复制的基础 fork() 是 UNIX 系统中最古老的系统调用之一。它的语义简洁而优雅:创建调用进程的精确副本。子进程获得父进程地址空间、文件描述符、信号处理器等所有资源的独立拷贝,但拥有自己的 PID。fork() 最令人着迷的特性是它 "返回两次" —— 在父进程中返回子进程的 PID,在子进程中返回 0。本节将深入分析…
- 2026-09-23 Linux内核分析之进程管理-01 9.1 命名空间概述与设计哲学 9.1.1 为什么需要命名空间 传统的 UNIX 系统设计中,许多核心系统资源是全局共享的。所有进程共享同一个进程 ID 空间:PID 1 永远是 init 进程;所有进程看到同一棵挂载树:mount 和 umount 操作对全局可见;所有进程共享同一个主机名:通过 uname() 系统调用获取;所有进程使用同一套网络栈:网卡…
- 2026-05-29 Linux内核分析之进程管理-00 8.1 task struct 核心字段详解 task struct 是 Linux 内核中最核心的数据结构,定义在 include/linux/sched.h 的第 820 至 1654 行。本节将逐组深入分析其全部关键字段,涵盖从线程信息到架构相关状态的全部内容。理解 task struct 是阅读 Linux 内核源码的基石——几乎所有内核子系统都通过…
- 2026-05-29 Linux内核分析之基础知识-06 7.1 系统调用原理与分类 7.1.1 什么是系统调用 系统调用是操作系统内核向用户态程序暴露的一组受控入口点(controlled entry points),是用户程序请求内核服务的标准接口。每一个系统调用都对应着内核中一个明确的功能函数,用户程序通过预定的调用约定触发这些函数,从而在内核特权级别下执行那些需要更高权限的操作。 从应用程序的视角来看,系统…
- 2026-05-28 Linux内核分析之总览 Linux 7.0 内核详解 目录 第一部分:基础知识 - 第1章:x86 64 体系结构概览 - 1.1 寄存器与数据类型 - 1.2 CPU 运行模式:实模式、保护模式与长模式 - 1.3 分段与分页机制 - 1.4 中断与异常 - 1.5 特权级与保护机制 - 1.6 Linux 内核安全加固机制全景 - 第2章:从加电到内核启动 —— 完整引导流程 …
- 2026-05-28 Linux内核分析之基础知识-05 6.1 RISC-V 架构概述:寄存器、特权级与 CSR 本节全面介绍 RISC-V 64 位架构的编程模型,包括寄存器组织、特权级别、控制状态寄存器、调用约定以及关键 ISA 扩展。这些知识是理解后续内核启动和运行机制的基石。 6.1.1 寄存器组织 通用寄存器(GPR) RISC-V 定义了 32 个 64 位通用寄存器 x0-x31,其中 x0 始终为…
- 2026-05-28 Linux内核分析之基础知识-04 5.1 ARM64 架构概述 —— 寄存器、异常级别与系统寄存器 本节全面介绍 ARM64(AArch64)执行状态的核心编程模型,这是理解 Linux ARM64 内核代码的基础。我们将依次讨论寄存器文件、异常级别模型、关键系统寄存器、过程调用约定,以及与 x86 64 的本质差异。 1. ARM64 寄存器文件 ARM64 的寄存器文件设计体现了"简洁即…
- 2026-05-28 Linux内核分析之基础知识-03 4.1 Kbuild 系统概述 什么是 Kbuild Kbuild 是 Linux 内核专用的构建系统,它构建在 GNU Make 之上,但绝非简单的 Makefile 集合。面对数万个源文件、数百个目录、数千个配置选项的复杂性,Kbuild 通过一套精心设计的递归构建机制,实现了高效、灵活、可扩展的编译流程。 Kbuild 的核心设计理念是: 每个目录自治…
- 2026-05-28 Linux内核分析之基础知识-02 3.1 start kernel() 总览 函数定位 start kernel() 定义在 init/main.c 的第 1006 行至第 1218 行,是内核通用初始化的总入口。当 x86 64 的体系结构引导代码在 head64.c 中完成长模式切换、早期页表建立、内核解压等工作后, x86 64 start reservations() 将控制权转交给…
- 2026-05-28 Linux内核分析之基础知识-01 2.1 启动流程概览 当用户按下计算机电源键的那一刻,一场从硬件固件到操作系统内核的接力赛便悄然拉开序幕。在 x86 64 平台上,Linux 7.0 内核的启动过程涉及多个执行阶段,跨越 16 位实模式、32 位保护模式与 64 位长模式,最终将控制权交由架构无关的通用初始化代码。本节将对这一完整链路进行全景式梳理。 2.1.1 完整启动序列 以下是 x8…
- 2026-05-28 Linux内核分析之基础知识-00 1.1 寄存器与数据类型 x86 64 架构在传统 x86 的基础上将通用寄存器从 32 位扩展到 64 位,并新增了八个通用寄存器(R8–R15)。本节系统性地介绍 Linux 7.0 内核在 x86 64 模式下所使用的各类寄存器,包括通用寄存器、指令指针、标志寄存器、段寄存器、控制寄存器、模型专用寄存器(MSR)、调试寄存器以及 SIMD 扩展寄存器,…
- 2026-01-22 Linux内核分析之安全模块-00 52.1 LSM 钩子机制与安全审计 LSM 的框架本体是"一张钩子头表 + 每模块一条注册链 + 一组调用点"。调用点遍布 VFS/进程/IPC/网络子系统,覆盖所有"对象访问"语义;每个钩子返回 0(放行)或负错误码(拒绝)。本节解剖钩子结构、调用点分布与审计出口。 --- 52.1.1 security hook list:钩子的注册形态 52.1.2…
- 2026-01-20 Linux内核分析之内存管理-00 Linux 6.12 内存管理概览
- 2026-01-15 Linux内核分析之虚拟化-00 49.1 KVM 模块加载与 /dev/kvm KVM 对用户态的全部接口浓缩为一个字符设备 /dev/kvm 与它派生出的两类 fd(VM fd、vCPU fd)。本章解剖这个"三层 fd"的创建链: /dev/kvm 的 misc 注册(40.3 节)、 KVM CREATE VM 建立的 struct kvm 、 KVM CREATE VCPU 建立的…
- 2026-01-08 Linux内核分析之前置知识-00 内核环境搭建
- 2025-03-14 Linux内核分析之进程间通信-00 26.1 管道原理与 pipe inode info 管道的全部状态浓缩在一个 pipe inode info 里:一个互斥锁、两套等待队列、一个环形缓冲索引、读写者计数。它的精妙在于 用最小状态承载完整的生产者-消费者语义 ——环形队列天然解决"谁先谁后",计数器天然解决"端的存在性", pipe buf operations 则让同一环可以装页缓存页、匿…
- 2025-03-14 Linux内核分析之网络协议栈-00 44.1 网络协议栈分层与 sk buff sk buff(skb)是网络栈的通用语:从驱动到 TCP,报文以 skb 传递,各层只做"加头/减头/改偏移", 数据本体几乎不拷贝 。这套设计的核心是三个决定:描述符与数据区分离、数据区内的四指针移动、协议头偏移的缓存。本节逐段解剖这个"网络栈的通用语",它是读一切网络代码的前提。 --- 44.1.1 skb…
- 2025-03-14 Linux内核分析之设备驱动-00 39.1 kobject、kset 与 ktype kobject 是设备模型的"对象基类"——它不描述任何设备,只提供 名字、树关系、引用计数、sysfs 投影与生命周期回调 五件通用物。device/driver/bus 全部把它当第一个字段嵌入。本节拆解这个基类与它的两个伙伴。 --- 39.1.1 kobject:五件通用物 五件通用物与 sysfs…
- 2025-03-14 Linux内核分析之文件系统-00 33.1 VFS 核心对象 —— superblock、inode、dentry、file VFS 的全部功能由四个对象承载,每个对象回答一个不同的问题:super block 回答"这是哪个文件系统",inode 回答"这个文件是什么",dentry 回答"这个文件叫什么",file 回答"谁正在怎么用它"。本节逐字段拆解四者与它们的操作表。 --- 33…