0. Linux核心概念详解

操作系统是软件世界的根基,其屏蔽了硬件世界,并为应用程序创造了一个执行环境;Linux是当前最流行的服务器端操作系统,本文将尝试着深入 Linux 内核代码,详细探讨一些核心概念的实现方式,以及其构建出来的抽象模型。

规划章节

笔者初步规划的章节如下:

  1. 调试环境 - Done 本章介绍如何基于Docker构建内核的编译、运行、以及调试环境,并简要介绍如何基于GDB对内核代码进行调试。

  2. 调度器 - Done 本章简要介绍了调度器的发展历史,深入探讨了不同调度类m并详细分析了CFS的实现,除此之外,还讨论了Linux如何实现组调度、负载追踪与负载均衡等话题。

  3. 内存管理 - Ongoing 本章将详细介绍Linux的内存模型,以及内存管理的方方面面,包括内存分配与释放、Buddy System、SLAB/SLUB/SLOB、虚拟内存等方面。

  4. 同步机制 - TODO

  5. 中断与异常 - TODO

  6. 容器基础:Cgroups与Namespace - TODO

各个章节的内容会滚动发布,将来也可能规划更多内容。

如何阅读

Linux博大精深,整个内核代码非常庞大,一个人穷尽一生可能也无法精通内核的所有方面;虽然本文主要围绕着Linux的源代码展开,但文中也只是提取了重要代码的核心部分,旨在对系统核心的概念和模型进行讲解。

笔者强烈建议读者配合源代码阅读本文,本文使用的内核版本在第一章调试环境有详细介绍,如果在探讨某些话题时涉及到其它历史版本的话,对应的章节都会做特别的说明,读者可以自行下载。

文中笔者没有对任何操作系统的理论性知识做任何探讨,这方面的资料汗牛充栋,如果读者想要了解可以自行找一些经典书籍进行阅读,例如Operating System ConceptsOperating System: Three Easy Pieces 都是很好的入门资料,笔者强烈推荐后者。

参考资料

在整理本文的过程中,笔者参考了大量的其它资料来辅助阅读内核源码。可以说没有这些资料的帮助,笔者本人可能完全无法从代码层面上理解内核的实现原。零散的参考资料在对应的章节都有记录,这里对主要的资料来源做一个整理,以便读者参考:

除了以上的在线内容,笔者还着重参考了如下书籍:

  • 《Understanding the Linux Kernel》

  • 《Professional Linux kernel architecture》

  • 《Linux Kernel Development》

  • 《Understanding the Linux Virtual Memory Manager》

但需要注意的一点是这些书籍所基于的代码版本都是2.6的,读者可以着重参考书中对高层架构的讨论,具体的实现细节需要以最新的代码为准。

Last updated