《Linux内核设计与实现》- 第3版 - Robert Love

基本信息

  • 作者: Robert Love
  • 译者: 刘辉、徐英、李斌
  • 原版: 第3版(2010年)
  • 页数: 353页
  • 文件大小: 37.60MB
  • 处理日期: 2026-09-02
  • 处理状态: done_toc_only(扫描版PDF,OCR时间过长跳过)
  • 云盘路径: /books/linux/Linux内核设计与实现(第三版中文高清带目录).pdf

书籍概要

本书是Linux内核领域的经典入门教材,系统讲解Linux内核的设计原理与实现机制。Robert Love是Linux内核开发者、开源倡导者,曾任Novell开源技术副总裁。本书以Linux 2.6内核为基础,从开发者视角深入剖析内核的核心子系统。

核心特点:

  • 理论与实践结合:既有概念讲解,又有内核源码剖析
  • 模块化组织:每个子系统独立成章,便于按需阅读
  • 面向应用开发者:不仅讲”怎么做”,还讲”为什么这样做”

目录结构

第1章 Linux内核简介
  1.1 Unix的历史
  1.2 追寻Linus足迹:Linux简介
  1.3 操作系统和内核简介
  1.4 Linux内核和传统Unix内核的比较
  1.5 Linux内核版本
  1.6 Linux内核开发者社区
  1.7 小结

第2章 从内核出发
  2.1 获取内核源码
    2.1.1 使用Git
    2.1.1 安装内核源代码
    2.1.3 使用补丁
  2.2 内核源码树
  2.3 编译内核
    2.3.1 配置内核
    2.3.2 减少编译的垃圾信息
    2.3.3 衍生多个编译作业
    2.3.4 安装新内核
  2.4 内核开发的特点
    2.4.1 无libc库抑或无标准头文件
    2.4.2 GNUC
    2.4.3 没有内存保护机制
    2.4.4 不要轻易在内核中使用浮点数
    2.4.5 容积小而固定的栈
    2.4.6 同步和并发
    2.4.7 可移植性的重要性
  2.5 小结

第3章 进程管理
  3.1 进程
  3.2 进程描述符及任务结构
    3.2.1 分配进程描述符
    3.2.2 进程描述符的存放
    3.2.3 进程状态
    3.2.4 设置当前进程状态
    3.2.5 进程上下文
    3.2.6 进程家族树
  3.3 进程创建
    3.3.1 写时拷贝
    3.3.2 fork()
    3.3.3 vfork()
  3.4 线程在Linux中的实现
    3.4.1 创建线程
    3.4.2 内核线程
  3.5 进程终结
    3.5.1 删除进程描述符
    3.5.2 孤儿进程造成的进退维谷
  3.6 小结

第4章 进程调度
  4.1 多任务
  4.2 Linux的进程调度
  4.3 策略

核心主题

一、Linux内核概述(第1章)

  • Unix历史:从Multics到Unix的演变,理解现代操作系统的根基
  • Linux简介:Linus Torvalds 1991年发布Linux内核的故事
  • 内核 vs 操作系统:内核是OS的核心,管理硬件资源;OS还包括Shell、工具链等
  • Linux内核版本:2.6.x稳定版、2.6.3x维护版、mainline开发版的区别

二、内核开发基础(第2章)

  • 源码获取:git clone、下载tarball、使用补丁
  • 编译内核:
    • make menuconfig / make xconfig 配置选项
    • make -jN 并行编译加速
    • 模块编译与安装:make modules、make modules_install
  • 内核开发约束:
    • 无标准C库:不能使用malloc/free等glibc函数
    • 无浮点数支持:内核代码避免使用浮点运算
    • 小栈空间:内核栈通常只有几KB,避免大局部变量
    • 同步复杂:多CPU并发下的锁机制是关键难点

三、进程管理(第3章)

  • 进程描述符(task_struct):内核中描述进程的核心数据结构,包含状态、寄存器、内存管理信息等
  • 进程状态:
    • TASK_RUNNING:运行或就绪
    • TASK_INTERRUPTIBLE:可中断等待
    • TASK_UNINTERRUPTIBLE:不可中断等待
    • TASK_ZOMBIE:僵尸进程
    • TASK_STOPPED:停止状态
  • 进程创建:
    • fork():子进程复制父进程的地址空间(写时拷贝优化)
    • vfork():子进程共享父进程地址空间,父进程阻塞直到子进程exec或exit
  • 线程实现:Linux采用”轻量级进程”LWP模型,线程本质是共享资源的进程
  • 内核线程:服务于内核自身的线程,如kthread、kswapd等

四、进程调度(第4章)

  • 调度器目标:最大化CPU利用率、保证公平性、满足实时需求
  • 调度策略:
    • SCHED_OTHER:普通分时调度(CFS)
    • SCHED_FIFO:实时先进先出
    • SCHED_RR:实时轮转
  • CFS(完全公平调度器):Linux 2.6.23引入,基于红黑树实现,每个进程获得公平的CPU时间份额

关键概念

概念说明
task_struct进程描述符,内核中进程的唯一标识
fork/vfork进程创建系统调用,vfork用于exec场景优化
CFS完全公平调度器,现代Linux默认调度算法
内核线程由内核创建、服务于内核的线程
写时拷贝延迟内存复制技术,fork时不立即复制地址空间

与其他书籍关联


行动建议

  1. 初学者路径:先读第1-2章建立整体认知,再选第3-4章深入进程管理
  2. 实践建议:配合真实Linux环境,用ps、top、strace等工具观察书中概念
  3. 源码对照:结合Linux源码树,阅读kernel/fork.c、kernel/sched/等关键文件
  4. 注意版本:本书基于2.6内核,与现代5.x/6.x内核有差异,需自行对照最新代码

处理说明:本书为扫描版PDF(353页),pdf-inspector检测无内嵌文本。因OCR处理时间过长(约60分钟),本次仅提取目录并生成概要笔记。后续如有需要可使用OCR模式重新处理。