返回文章

WRITING

第一章 概述

第一章 概述

1.1 操作系统的核心职责

操作系统是管理计算机硬件与软件资源的系统软件,其核心职责可以概括为以下几个方面:

  1. 进程管理:创建、调度、终止进程和线程,实现 CPU 的多路复用,让多个程序"同时"运行。

  2. 内存管理:为每个进程提供独立的虚拟地址空间,管理物理内存的分配与回收,实现内存保护与共享。

  3. 文件系统与存储:将磁盘等块设备抽象为文件和目录,提供统一的读写接口,管理数据的持久化存储。

  4. 网络通信:实现 TCP/IP 协议栈,为应用程序提供跨主机的通信能力。

  5. 设备管理:通过驱动程序控制各类硬件设备,向上提供统一的设备访问接口。

Linux 作为一个宏内核(monolithic kernel)操作系统,将上述所有功能都实现在内核态,共享地址空间,通过函数调用直接交互,性能较高但耦合度也较高。

1.2 Linux 内核的整体架构

Linux 内核从下到上可以分为以下层次:

┌─────────────────────────────────────────────────┐
│                   用户态应用程序                    │
├─────────────────────────────────────────────────┤
│                  系统调用接口(SCI)                 │
├──────┬──────┬──────┬──────┬──────┬─────────────┤
│ 进程 │ 内存 │ 存储 │ 网络 │ 调度 │  其他子系统   │
│ 管理 │ 管理 │ 管理 │ 协议 │      │ (IPC/安全等) │
├──────┴──────┴──────┴──────┴──────┴─────────────┤
│              内核核心组件(锁、缓存、算法)            │
├─────────────────────────────────────────────────┤
│              架构相关代码(arch/x86 等)            │
├─────────────────────────────────────────────────┤
│                   硬件抽象层(HAL)                  │
├─────────────────────────────────────────────────┤
│                     物理硬件                         │
└─────────────────────────────────────────────────┘

本文聚焦五个子系统:内存管理、进程管理(计算)、调度、存储、网络,它们是一个通用操作系统最主要的组成部分。

1.3 源码阅读方法

Linux 内核源码规模很大,直接通读并不现实。更有效的阅读方法是:

  1. 从数据结构入手:每个子系统都有几个关键数据结构,先弄清它们的字段和相互关系,再看代码会容易很多。

  2. 跟踪系统调用路径:从用户态的系统调用出发,跟踪到内核的处理函数,可以串联起多个子系统的协作。

  3. 关注关键函数:每个子系统有几个核心函数(如内存的 handle_mm_fault、调度的 __schedule),深入理解它们比泛读大量代码更有效。

  4. 画图辅助理解:内核中的数据结构关系和调用流程复杂,画图(结构图、流程图、时序图)能显著帮助理解。

  5. 善用内核自带文档:源码树的 Documentation/ 目录是开发者维护的一手文档,按子系统组织(如 Documentation/scheduler/、Documentation/admin-guide/mm/、Documentation/networking/),讲清了很多机制的设计动机和参数含义,读代码前先读对应文档能少走弯路,本文也大量参考了这些文档。


文章目录

DISCUSSION

评论

0 条已通过评论

留下评论

评论提交后需要审核。邮箱仅用于联系,不会公开。