WRITING
第一章 概述
第一章 概述
1.1 操作系统的核心职责
操作系统是管理计算机硬件与软件资源的系统软件,其核心职责可以概括为以下几个方面:
进程管理:创建、调度、终止进程和线程,实现 CPU 的多路复用,让多个程序"同时"运行。
内存管理:为每个进程提供独立的虚拟地址空间,管理物理内存的分配与回收,实现内存保护与共享。
文件系统与存储:将磁盘等块设备抽象为文件和目录,提供统一的读写接口,管理数据的持久化存储。
网络通信:实现 TCP/IP 协议栈,为应用程序提供跨主机的通信能力。
设备管理:通过驱动程序控制各类硬件设备,向上提供统一的设备访问接口。
Linux 作为一个宏内核(monolithic kernel)操作系统,将上述所有功能都实现在内核态,共享地址空间,通过函数调用直接交互,性能较高但耦合度也较高。
1.2 Linux 内核的整体架构
Linux 内核从下到上可以分为以下层次:
┌─────────────────────────────────────────────────┐
│ 用户态应用程序 │
├─────────────────────────────────────────────────┤
│ 系统调用接口(SCI) │
├──────┬──────┬──────┬──────┬──────┬─────────────┤
│ 进程 │ 内存 │ 存储 │ 网络 │ 调度 │ 其他子系统 │
│ 管理 │ 管理 │ 管理 │ 协议 │ │ (IPC/安全等) │
├──────┴──────┴──────┴──────┴──────┴─────────────┤
│ 内核核心组件(锁、缓存、算法) │
├─────────────────────────────────────────────────┤
│ 架构相关代码(arch/x86 等) │
├─────────────────────────────────────────────────┤
│ 硬件抽象层(HAL) │
├─────────────────────────────────────────────────┤
│ 物理硬件 │
└─────────────────────────────────────────────────┘
本文聚焦五个子系统:内存管理、进程管理(计算)、调度、存储、网络,它们是一个通用操作系统最主要的组成部分。
1.3 源码阅读方法
Linux 内核源码规模很大,直接通读并不现实。更有效的阅读方法是:
从数据结构入手:每个子系统都有几个关键数据结构,先弄清它们的字段和相互关系,再看代码会容易很多。
跟踪系统调用路径:从用户态的系统调用出发,跟踪到内核的处理函数,可以串联起多个子系统的协作。
关注关键函数:每个子系统有几个核心函数(如内存的
handle_mm_fault、调度的__schedule),深入理解它们比泛读大量代码更有效。画图辅助理解:内核中的数据结构关系和调用流程复杂,画图(结构图、流程图、时序图)能显著帮助理解。
善用内核自带文档:源码树的
Documentation/目录是开发者维护的一手文档,按子系统组织(如Documentation/scheduler/、Documentation/admin-guide/mm/、Documentation/networking/),讲清了很多机制的设计动机和参数含义,读代码前先读对应文档能少走弯路,本文也大量参考了这些文档。
DISCUSSION
评论