HiHuo
首页
博客
手册
工具
首页
博客
手册
工具
  • 系统底层修炼

    • 操作系统核心知识学习指南
    • CPU调度与上下文切换
    • CFS调度器原理与源码
    • 内存管理与虚拟内存
    • PageCache与内存回收
    • 文件系统与IO优化
    • 零拷贝与Direct I/O
    • 网络子系统架构
    • TCP协议深度解析
    • TCP问题排查实战
    • 网络性能优化
    • epoll与IO多路复用
    • 进程与线程管理
    • Go Runtime调度器GMP模型
    • 系统性能分析方法论
    • DPDK与用户态网络栈
    • eBPF与内核可观测性
    • 综合实战案例

操作系统核心知识学习指南

学习目标

本学习手册旨在帮助读者深入理解操作系统核心机制,从基础概念到高级优化,最终达到架构师级别的系统理解能力。通过理论学习、源码分析、动手实验和实战案例,掌握:

  • Linux内核调度、内存管理、网络栈等核心机制
  • 系统性能分析与优化方法论
  • 高并发、高性能系统的设计与调优
  • 现代系统技术(eBPF、DPDK、用户态协议栈)

️ 知识地图

graph TD
    A[操作系统核心知识] --> B[CPU调度与进程管理]
    A --> C[内存管理]
    A --> D[文件系统与IO]
    A --> E[网络子系统]
    A --> F[系统性能分析]
    
    B --> B1[CFS调度器]
    B --> B2[上下文切换]
    B --> B3[进程生命周期]
    B --> B4[Go Runtime GMP]
    
    C --> C1[虚拟内存]
    C --> C2[PageCache]
    C --> C3[内存回收]
    C --> C4[NUMA优化]
    
    D --> D1[文件IO路径]
    D --> D2[零拷贝技术]
    D --> D3[DirectIO]
    D --> D4[epoll机制]
    
    E --> E1[TCP协议栈]
    E --> E2[网络性能优化]
    E --> E3[DPDK用户态栈]
    E --> E4[网络问题排查]
    
    F --> F1[性能分析方法论]
    F --> F2[eBPF可观测性]
    F --> F3[火焰图分析]
    F --> F4[综合实战案例]

学习路线

阶段一:基础核心(建议2-3周)

学习顺序:

  1. 01-CPU调度与上下文切换 - 理解CPU如何分配时间
  2. 03-内存管理与虚拟内存 - 掌握内存分配和映射机制
  3. 05-文件系统与IO优化 - 了解文件IO的完整路径
  4. 08-TCP协议深度解析 - 深入理解网络协议

学习目标:

  • 掌握基本的系统概念和命令
  • 理解进程、内存、文件、网络的基本机制
  • 能够使用基础工具进行系统观测

阶段二:深入机制(建议3-4周)

学习顺序:

  1. 02-CFS调度器原理与源码 - 深入Linux调度器实现
  2. 04-PageCache与内存回收 - 掌握内存缓存和回收策略
  3. 06-零拷贝与DirectIO - 学习高性能IO技术
  4. 07-网络子系统架构 - 理解网络包的完整路径
  5. 11-epoll与IO多路复用 - 掌握高并发IO模型
  6. 12-进程与线程管理 - 深入进程管理机制

学习目标:

  • 能够阅读和理解内核源码
  • 掌握高级系统调优技术
  • 理解高并发系统的底层原理

阶段三:实战优化(建议2-3周)

学习顺序:

  1. 09-TCP问题排查实战 - 解决实际网络问题
  2. 10-网络性能优化 - 网络性能调优实战
  3. 13-Go-Runtime调度器GMP - Go语言调度机制
  4. 14-系统性能分析方法论 - 建立性能分析体系
  5. 15-DPDK与用户态网络栈 - 极限性能网络方案
  6. 16-eBPF与内核可观测性 - 现代系统观测技术

学习目标:

  • 能够独立分析和解决系统性能问题
  • 掌握现代系统优化技术
  • 具备架构师级别的系统理解能力

阶段四:综合应用(建议1-2周)

学习内容:

  1. 17-综合实战案例 - 真实场景问题解决

学习目标:

  • 综合运用所学知识解决复杂问题
  • 建立完整的系统优化方法论

️ 实验环境搭建

系统要求

  • 操作系统: Ubuntu 20.04+ / CentOS 8+ / RHEL 8+
  • 内存: 至少 4GB RAM
  • 存储: 至少 20GB 可用空间
  • 网络: 能够访问互联网(用于下载工具和源码)

必需工具安装

# 基础工具
sudo apt update
sudo apt install -y build-essential git curl wget vim

# 系统观测工具
sudo apt install -y htop iotop nethogs sysstat perf-tools-unstable

# 网络工具
sudo apt install -y tcpdump wireshark iperf3

# 开发工具
sudo apt install -y gdb valgrind strace ltrace

# Go语言环境
wget https://golang.org/dl/go1.21.0.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc

# eBPF工具
sudo apt install -y bpfcc-tools

# 内核源码(可选)
sudo apt install -y linux-source

实验环境验证

# 检查工具安装
which htop iotop tcpdump iperf3 go perf

# 检查内核版本
uname -r

# 检查系统信息
lscpu
free -h
df -h

学习建议

学习方法

  1. 理论与实践结合

    • 每章先读理论部分,理解核心概念
    • 动手运行命令和实验,观察实际效果
    • 阅读源码,理解实现细节
  2. 循序渐进

    • 按建议顺序学习,不要跳跃
    • 确保前一章理解透彻再进入下一章
    • 遇到不懂的概念,及时查阅相关资料
  3. 动手实践

    • 每个实验都要亲自运行
    • 尝试修改参数,观察不同结果
    • 记录实验过程和发现
  4. 总结反思

    • 每章学完后做复习题
    • 总结关键概念和命令
    • 思考实际应用场景

常见问题

Q: 需要多深的C语言基础? A: 需要基本的C语言语法知识,能够理解结构体、指针、函数调用等。不需要精通,重点是理解概念。

Q: 实验环境必须是Linux吗? A: 是的,本手册基于Linux系统。Windows用户可以使用WSL2或虚拟机。

Q: 学习时间如何安排? A: 建议每天1-2小时,持续学习。理论部分可以快速浏览,实验部分要仔细操作。

Q: 遇到问题怎么办? A: 先查看常见问题部分,然后查阅相关文档。也可以参考扩展阅读中的资源。

前置知识

必需知识

  • Linux基础命令:ls, cd, grep, awk, sed等
  • C语言基础:变量、函数、结构体、指针
  • 计算机组成原理:CPU、内存、存储的基本概念
  • 网络基础:TCP/IP协议栈的基本概念

推荐知识

  • Go语言:有助于理解Go runtime相关内容
  • 汇编语言:有助于理解底层机制
  • 编译原理:有助于理解程序执行过程

扩展阅读

经典书籍

  • 《深入理解计算机系统》- Randal E. Bryant
  • 《Linux内核设计与实现》- Robert Love
  • 《Linux系统编程》- Robert Love
  • 《高性能MySQL》- Baron Schwartz
  • 《Redis设计与实现》- 黄健宏

在线资源

  • Linux内核源码
  • Go语言源码
  • eBPF官方文档
  • DPDK官方文档

技术社区

  • Linux内核邮件列表
  • Go语言中文网
  • 系统性能优化社区

学习记录

建议在学习过程中记录:

  • 学习进度:完成哪些章节,用时多少
  • 重要概念:每章的核心概念和关键命令
  • 实验心得:实验过程中的发现和问题
  • 实际应用:如何将学到的知识应用到实际工作中

学习成果

完成本手册学习后,你将能够:

  • 系统理解:深入理解操作系统核心机制
  • 问题诊断:快速定位和解决系统性能问题
  • 性能优化:设计和优化高性能系统
  • 架构设计:具备架构师级别的系统设计能力

开始你的操作系统学习之旅吧!

记住:学习是一个持续的过程,不要急于求成。每一点进步都是值得的!

Next
CPU调度与上下文切换