# 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*

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

## 如何阅读 <a href="#orgca7081c" id="orgca7081c"></a>

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

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

文中笔者没有对任何操作系统的理论性知识做任何探讨，这方面的资料汗牛充栋，如果读者想要了解可以自行找一些经典书籍进行阅读，例如[Operating System Concepts](https://www.os-book.com/OS10/) 与 [Operating System: Three Easy Pieces](https://pages.cs.wisc.edu/~remzi/OSTEP/) 都是很好的入门资料，笔者强烈推荐后者。

## 参考资料

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

* <https://www.kernel.org/doc/html/latest/index.html>\
  Linux官网资料永远应该是第一个查阅的地方。
* <https://lwn.net/>\
  该站点的很多文章包含了特定主题的详细讲解，质量都非常高。
* <http://www.wowotech.net/>\
  每篇文章都很硬核，而且是中文哦！

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

* 《Understanding the Linux Kernel》
* 《Professional Linux kernel architecture》
* 《Linux Kernel Development》
* 《Understanding the Linux Virtual Memory Manager》

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://s3.shizhz.me/master.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
