Linux内核完全注释

原始文件: /books/linux/Linux内核完全注释/Linux内核完全注释.pdf 作者: 赵炯 页数: 652页 文件大小: 5.15MB 处理日期: 2026-09-02 处理方法: pdf-inspector文本提取

书籍概要

《Linux内核完全注释》是赵炯博士撰写的经典Linux内核入门教材,以Linux 0.11版本(实际为0.95版)的完整源代码为基础,对每一行代码进行了详细注释和说明。本书最大的特色是不选择性地讲解,而是完整地解剖了整个内核,让读者能够从零开始理解一个操作系统的完整运作机制。

核心主题

1. Linux内核发展历程

  • 1991年10月5日Linus发布Linux 0.01版
  • 从0.01→0.02→0.03→…→0.11→0.95→1.0的发展脉络
  • 选择0.11/0.95版作为学习对象的原因:代码量小(约2万行)、功能完整、易于理解

2. Linux内核架构

  • 内核模式: 用户模式 vs 内核模式
  • 系统体系结构: 单体内核设计
  • 中断机制: 软中断、硬中断、系统调用
  • 进程管理: 进程调度、进程控制块(task_struct)
  • 内存管理: 分页机制、物理内存分配
  • 文件系统: MINIX文件系统实现

3. 内核源代码组织结构

linux/
├── boot/       # 引导程序
├── fs/         # 文件系统
├── include/    # 头文件
│   ├── asm/    # 体系结构相关
│   ├── linux/  # Linux特有头文件
│   └── sys/    # 系统头文件
├── init/       # 初始化程序
├── kernel/     # 内核核心代码
│   ├── blk_drv/    # 块设备驱动
│   ├── chr_drv/    # 字符设备驱动
│   └── math/       # 数学协处理器
├── lib/        # 库函数
└── tools/      # 构建工具

关键章节内容

第3章 引导启动程序(BOOT)

  • BOOTSECT.S: 引导扇区,512字节,从磁盘加载SETUP
  • SETUP.S: 硬件检测,设置系统参数
  • HEAD.S: 保护模式切换,初始化全局描述符表(GDT)

第4章 初始化程序(INIT)

  • MAIN.C: 系统初始化,创建init进程
  • 环境变量设置
  • 根文件系统挂载

第5章 内核代码(KERNEL)

  • ASM.S: 系统调用入口
  • TRAPS.C: 异常处理(页错误、除法错误等)
  • SCHED.C: 进程调度算法(时间片轮转)
  • SIGNAL.C: 信号处理
  • FORK.C: 进程创建
  • SYS.C: 系统调用实现

第6章 块设备驱动程序

  • HD.C: 硬盘驱动(IDE接口)
  • FLOPPY.C: 软盘驱动
  • RAMDISK.C: 内存盘驱动
  • LL_RW_BLK.C: 块设备层核心

第7章 字符设备驱动程序

  • KEYBOARD.S: 键盘驱动
  • CONSOLE.C: 控制台驱动(支持多虚拟终端)
  • SERIAL.C: 串行口驱动

第9章 文件系统(FS)

  • BUFFER.C: 缓冲区管理
  • INODE.C: i节点管理
  • NAMEI.C: 路径名解析
  • READ_WRITE.C: 文件读写
  • EXEC.C: 程序执行(a.out格式)

第10章 内存管理(MM)

  • MEMORY.C: 物理内存管理
  • PAGE.S: 页表管理(汇编实现)

重要概念

进程控制块(task_struct)

struct task_struct {
    long state;          // 进程状态
    long counter;        // 时间片
    long priority;       // 优先级
    long stack;          // 内核栈指针
    unsigned long pid;   // 进程ID
    // ... 更多字段
};

进程状态

  • TASK_RUNNING: 运行状态
  • TASK_INTERRUPTIBLE: 可中断等待
  • TASK_UNINTERRUPTIBLE: 不可中断等待
  • TASK_ZOMBIE: 僵尸进程

系统调用表

Linux 0.11支持22个系统调用,包括fork、exec、exit、wait、open、close、read、write等。

中断处理

  • NR_syscalls: 系统调用数量
  • system_call: 系统调用入口
  • 中断描述符表(IDT)管理

实践环境

编译环境

  • 使用BOCHS模拟器运行Linux 0.11
  • 需要gcc、gas、GNU binutils等工具链
  • 创建磁盘镜像文件

实验方法

  1. 修改内核源代码
  2. 重新编译生成新内核
  3. 在BOCHS中运行测试
  4. 通过打印信息观察内核行为

学习价值

  1. 代码量适中: 约2万行代码,适合深入学习
  2. 完整性: 覆盖进程、内存、文件系统、设备驱动等核心子系统
  3. 注释详尽: 每个文件、每个函数都有中文注释
  4. 实用性强: 可直接编译运行,便于实验验证

与其他资料关联

备注

本书是Linux内核学习的经典入门读物,特别适合想要从零理解操作系统内部工作机制的读者。虽然基于早期内核版本,但核心概念与现代Linux内核一脉相承。建议配合实际编译运行实验进行学习。