🐧 Linux是怎样工作的 · 目录

🐧 Linux是怎样工作的

照着《Linux是怎样工作的》([日]武内觉 著,曹栩 译,人民邮电出版社 · 图灵程序设计丛书,2022-03,281 页)做的自学笔记 —— 前面几本回答了程序怎么跑、计算机怎么造、服务器怎么摆;这一本钻进操作系统这一层:程序在跑的时候,底下是谁在替它管 CPU、管内存、管文件、管硬盘。全书 8 章 89 篇:第 1 章先把 CPU/内存/外部存储器/输入输出四样东西和操作系统的三件事(分配、隔离、抽象)摆清楚;第 2 章讲用户模式能做的事——系统调用那道门有多贵、包装函数与 C 标准库替你挡了什么;第 3 章讲进程怎么被复制出来、怎么换掉内容、怎么结束;第 4 章 20 篇把调度器拆开:时间片、上下文切换、五种状态、吞吐量与延迟的取舍、多核为什么不能线性加速;第 5 章 17 篇讲内存:虚拟内存、页表、缺页、写时复制、Swap、多级页表、大页;第 6 章讲存储层次:缓存、TLB、页面缓存、脏页回写;第 7 章讲文件系统:元数据、日志、写时复制、一致性、各种设备与虚拟文件系统;第 8 章讲外部存储器:HDD 的寻道与旋转、顺序与随机、I/O 调度、预读、SSD 的写放大。这本是实验课:书里 198 张图解,实验程序用 C 与 Python 编写,各篇「动手 Demo」都是在沙箱里真跑过的 Python 脚本(读 /proc、量系统调用耗时、对比顺序与随机、观察内存统计),需要真 Linux 环境的实验用【📋 实操路径】单列。教材成书于 2022 年,凡与现状不同处各篇用【⚠️ 2026 现状】单列。大白话、不跳步骤、必带生活比喻、常见误区、可折叠自测题。
前置课程:程序是怎样跑起来的(程序怎么跑)、计算机是怎样跑起来的(硬件怎么搭)、服务器工作原理(服务器怎么摆)。

内容来自我的 Obsidian 自学笔记 · 全 8 章 89 篇完结 ✅

第一章 计算机系统的概要

第二章 用户模式实现的功能

第三章 进程管理

第四章 进程调度器

4.1

关于实验程序的设计

真系统上看到的全是噪声,只留三要素:剩余…

⭐⭐阅读全文 →
4.2

实验程序的实现

三十行调度器:每拍推 IO、从就绪队列挑…

⭐⭐阅读全文 →
4.3

实验

单进程一边算一边等,利用率只有一半多;加…

⭐⭐阅读全文 →
4.4

思考

三条结论:CPU 会空转、多道能填、但填…

⭐⭐阅读全文 →
4.5

上下文切换

明账(保存恢复寄存器、换栈、换页表)与暗…

⭐⭐⭐阅读全文 →
4.6

进程的状态

五字母画像:R 在跑或想跑、S 在等、D…

⭐⭐阅读全文 →
4.7

状态转换

合法转换只有五条;最有用的是【阻塞→运行…

⭐⭐阅读全文 →
4.8

空闲状态

没活可跑时 CPU 在跑空闲进程等中断…

⭐⭐阅读全文 →
4.9

各种各样的状态转换

停止/恢复/白醒一场/不可中断睡眠;白醒…

⭐⭐阅读全文 →
4.10

吞吐量与延迟

时间片只改一个数,两个指标反着走:2 时…

⭐⭐⭐阅读全文 →
4.11

现实中的系统

CFS 不预设时间片只记账,永远挑累计最…

⭐⭐阅读全文 →
4.12

存在多个逻辑 CPU 时的调度

互不相干的活儿 1→2→4→8 核是 8…

⭐⭐阅读全文 →
4.13

实验方法

time 给三行时间、perf stat…

⭐⭐阅读全文 →
4.14

实验结果

四个各 5 拍的活儿:20/10/5 拍…

⭐⭐阅读全文 →
4.15

吞吐量与延迟

四十个小活儿加核总耗时腰斩再腰斩;一个不…

⭐⭐阅读全文 →
4.16

思考

从加速比反推串行比例;4/8/16/32…

⭐⭐阅读全文 →
4.17

运行时间和执行时间

墙上时钟与 CPU 时间是两回事:纯计算…

⭐⭐阅读全文 →
4.18

进程睡眠

同样是等 1 秒:sleep 占 CPU…

⭐⭐阅读全文 →
4.19

现实中的进程

ps aux 读五件事:谁起的、什么状态…

⭐⭐阅读全文 →
4.20

变更优先级

两个跑不完的活儿在 100 拍里分 CP…

⭐⭐阅读全文 →

第五章 内存管理

5.1

内存相关的统计信息

MemFree 小是正常的(缓存占着)…

⭐⭐阅读全文 →
5.2

内存不足

三步顺序:回收缓存、换出到磁盘、OOM…

⭐⭐阅读全文 →
5.3

简单的内存分配

外部碎片:总空闲 8 单位却凑不出连续…

⭐⭐阅读全文 →
5.4

虚拟内存

虚拟页连号、物理页乱序;翻译时低 12…

⭐⭐⭐阅读全文 →
5.5

页表

48 位切 36+12,单级要 512…

⭐⭐⭐阅读全文 →
5.6

实验

五个 16 字节对象地址横跨几 MB;m…

⭐⭐阅读全文 →
5.7

为进程分配内存

要 256 MB 地址 0.045 毫秒…

⭐⭐⭐阅读全文 →
5.8

实验

碰 128 MB 第一遍 48.9 毫秒…

⭐⭐⭐阅读全文 →
5.9

利用上层进行内存分配

同样 6.1 MB,逐个要 20 万次…

⭐⭐⭐阅读全文 →
5.10

解决问题

一百万次请求:直接问系统 100 万次…

⭐⭐⭐阅读全文 →
5.11

虚拟内存的应用

共享内存、只读保护、文件映射、写时复制…

⭐⭐⭐阅读全文 →
5.12

文件映射

mmap 省掉系统调用与一次拷贝,随机读…

⭐⭐⭐阅读全文 →
5.13

请求分页

两个问题分开看:数据在不在物理内存(页缓…

⭐⭐⭐阅读全文 →
5.14

写时复制

fork 只复制页表、物理页共享;100…

⭐⭐⭐阅读全文 →
5.15

Swap

帧 1 缺 807 次、帧 8 缺 8…

⭐⭐⭐阅读全文 →
5.16

多级页表

36 位页号 ÷ 9 位每级 = 4 级…

⭐⭐⭐阅读全文 →
5.17

标准大页

大页不省内存省 TLB:随机访问 1 G…

⭐⭐⭐阅读全文 →

第六章 存储层次

第七章 文件系统

第八章 外部存储器