主要观点:作者重新学习旧操作系统课程后,决定阅读《Linux Kernel Development》,并在阅读过程中深入了解内核知识,包括内核开发与用户空间编程的差异、进程、调度、系统调用、内核数据结构、中断、同步、定时器、内存管理、虚拟文件系统、块 I/O 层、调试、可移植性等方面,强调内核开发虽有挑战但很有价值。
关键信息:
- 内核开发与用户空间编程差异大,如标准 C 库受限、内存保护不同、栈小等。
- 进程在 Linux 中本质相同,通过
task_struct
表示,子进程先运行可优化。 - 调度有不同类,CFS 追求公平,实时任务优先级高,内核可抢占。
- 系统调用是用户空间与内核空间边界,需验证参数。
- 内核有多种内置数据结构,如链表、树等。
- 中断及中断处理,中断服务例程处理硬件中断,工作分上下半部分。
- 内核同步有多种机制,如原子操作、锁等。
- 定时器和时间管理,硬件提供系统定时器,内核有多种定时器。
- 内存管理按页分配,有多种内存分配函数。
- 虚拟文件系统提供统一接口,隐藏底层文件系统差异。
- 块 I/O 层处理存储设备读写。
- 调试内核可用
printk()
等,有工具辅助解码地址。 - Linux 内核具有强可移植性,需注意跨架构问题。
重要细节: current
宏用于获取当前任务,不同架构实现不同。- 软中断、任务队列和工作队列用于处理中断后的延迟工作。
- 各种同步原语的特点和使用场景,如自旋锁、读写自旋锁等。
- 不同定时器的使用方式,如动态定时器、短延迟定时器等。
- 内核中物理内存按页管理,不同分配函数的用途。
- VFS 中各种对象的作用及缓存机制。
- 块 I/O 层的
bio
结构用于散射-聚集 I/O。 ksymoops
等工具用于解码内核地址。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。