Linux核心概念详解
  • 0. Linux核心概念详解
  • 1. 调试环境
  • 2. Linux 调度器
    • 2.1 任务
    • 2.2 核心概念
      • 2.2.1 核心概念 - 调度实体
      • 2.2.2 核心概念 - 调度类
      • 2.2.3 核心概念 - 调度策略
      • 2.2.4 核心概念 - 运行队列
      • 2.2.5 核心概念 - 优先级
    • 2.3 演进历史
      • 2.3.1 O(n)调度器 - 调度逻辑
      • 2.3.2 O(n)调度器 - 时间分配
      • 2.3.3 O(n)调度器 - 调度时机
      • 2.3.4 O(1)调度器 - 简介
      • 2.3.5 O(1)调度器 - 调度逻辑
      • 2.3.6 O(1)调度器 - 时间分配
      • 2.3.7 RSDL
      • 2.3.8 CFS
    • 2.4 DL调度器
      • 2.4.1 DL调度器 - 调度算法
      • 2.4.2 DL调度器 -核心代码
    • 2.5 RT调度器
    • 2.6 CFS
      • 2.6.1 公平性
      • 2.6.2 调度逻辑
      • 2.6.2.1 调度逻辑 - 数据结构
      • 2.6.2.2 调度逻辑 - vruntime
      • 2.6.2.3 调度逻辑 - 调度周期
      • 2.6.2.4 调度逻辑 - 调度节拍
      • 2.6.2.5 调度逻辑 - 任务抢占
      • 2.6.2.6 调度逻辑 - 调度时机
      • 2.6.3 组调度
      • 2.6.3.1 组调度 - 数据结构
      • 2.6.3.2 组调度 - 调度逻辑
      • 2.6.3.3 组调度 - 时间分配
      • 2.6.3.4 组调度 - 任务组权重
      • 2.6.4 带宽控制
      • 2.6.4.1 带宽控制 - 数据结构
      • 2.6.4.2 带宽控制 - 带宽时间
      • 2.6.4.3 带宽控制 - 挂起与解挂
      • 2.6.4.3 带宽控制 - 定时器
    • 2.7 负载追踪
      • 2.7.1 负载追踪 - 简介
      • 2.7.2 负载追踪 - 数据结构
      • 2.7.3 负载追踪 - 计算负载
      • 2.7.4 负载追踪 - 更新负载
    • 2.8 负载均衡
      • 2.8.1 简介
      • 2.8.2 CPU的拓扑结构
      • 2.8.3 数据结构
      • 2.8.4 算法思路
      • 2.8.5 触发时机
      • 2.8.6 总结
  • 3. LINUX 内存管理
    • 3.1 寻址模式
      • 3.1.1 地址
      • 3.1.2 地址转换
      • 3.1.3 Linux的地址空间
    • 3.2 物理内存
      • 3.2.1 数据结构
      • 3.2.2 初始化
      • 3.2.3 物理内存模型
      • 3.2.4 Buddy System(伙伴系统)
      • 3.2.5 SLAB/SLUB/SLOB
Powered by GitBook
On this page
  • 规划章节
  • 如何阅读
  • 参考资料

Was this helpful?

0. Linux核心概念详解

Next1. 调试环境

Last updated 3 years ago

Was this helpful?

操作系统是软件世界的根基,其屏蔽了硬件世界,并为应用程序创造了一个执行环境;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的源代码展开,但文中也只是提取了重要代码的核心部分,旨在对系统核心的概念和模型进行讲解。

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

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

参考资料

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

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

  • 《Understanding the Linux Kernel》

  • 《Professional Linux kernel architecture》

  • 《Linux Kernel Development》

  • 《Understanding the Linux Virtual Memory Manager》

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

Linux官网资料永远应该是第一个查阅的地方。

该站点的很多文章包含了特定主题的详细讲解,质量都非常高。

每篇文章都很硬核,而且是中文哦!

调试环境
Operating System Concepts
Operating System: Three Easy Pieces
https://www.kernel.org/doc/html/latest/index.html
https://lwn.net/
http://www.wowotech.net/