一次快速进入 Linux 内核的旅程 | 博客

主要观点:作者重新学习旧操作系统课程后,决定阅读《Linux Kernel Development》,并在阅读过程中深入了解内核知识,包括内核开发与用户空间编程的差异、进程、调度、系统调用、内核数据结构、中断、同步、定时器、内存管理、虚拟文件系统、块 I/O 层、调试、可移植性等方面,强调内核开发虽有挑战但很有价值。
关键信息:

  • 内核开发与用户空间编程差异大,如标准 C 库受限、内存保护不同、栈小等。
  • 进程在 Linux 中本质相同,通过task_struct表示,子进程先运行可优化。
  • 调度有不同类,CFS 追求公平,实时任务优先级高,内核可抢占。
  • 系统调用是用户空间与内核空间边界,需验证参数。
  • 内核有多种内置数据结构,如链表、树等。
  • 中断及中断处理,中断服务例程处理硬件中断,工作分上下半部分。
  • 内核同步有多种机制,如原子操作、锁等。
  • 定时器和时间管理,硬件提供系统定时器,内核有多种定时器。
  • 内存管理按页分配,有多种内存分配函数。
  • 虚拟文件系统提供统一接口,隐藏底层文件系统差异。
  • 块 I/O 层处理存储设备读写。
  • 调试内核可用printk()等,有工具辅助解码地址。
  • Linux 内核具有强可移植性,需注意跨架构问题。
    重要细节:
  • current宏用于获取当前任务,不同架构实现不同。
  • 软中断、任务队列和工作队列用于处理中断后的延迟工作。
  • 各种同步原语的特点和使用场景,如自旋锁、读写自旋锁等。
  • 不同定时器的使用方式,如动态定时器、短延迟定时器等。
  • 内核中物理内存按页管理,不同分配函数的用途。
  • VFS 中各种对象的作用及缓存机制。
  • 块 I/O 层的bio结构用于散射-聚集 I/O。
  • ksymoops等工具用于解码内核地址。
阅读 8
0 条评论