操作系统

I/O 管理:缓冲、中断、DMA 与设备驱动

I/O 管理:缓冲、中断、DMA 与设备驱动 CPU 一秒能执行几十亿条指令,而一块磁盘读一次数据要几毫秒、一个网卡收一个包要等网络往返——在 CPU 眼里,外设慢得像在用一辈子做一件事。更麻烦的是,设备五花八门:磁盘、网卡、键盘、显卡、U...

2026-06-23 20 分钟 操作系统, 操作系统教程, I/O管理, DMA
操作系统

磁盘调度与缓存:外存访问优化

磁盘调度与缓存:外存访问优化 做后端的人迟早会遇到这样一个场景:监控上 CPU 利用率不高、内存也够,可接口就是慢,一翻火焰图,时间全耗在磁盘 I/O 上。你换了块更贵的 SSD,确实快了点,但高并发一上来又卡。问题的根子,往往不在&quo...

2026-06-23 20 分钟 操作系统, 操作系统教程, 磁盘调度, 缓存
操作系统

文件系统实现:inode、位图与目录项

文件系统实现:inode、位图与目录项 你大概率遇到过这样一个诡异现象:服务器 df -h 显示磁盘明明还剩好几十 GB,可程序写文件却报 No space left on device。第一次碰到的人往往一脸懵——空间不是还有吗?等到敲下...

2026-06-23 21 分钟 操作系统, 操作系统教程, inode, 目录项
操作系统

文件系统基础:文件、目录与元数据

文件系统基础:文件、目录与元数据 你写一行 open("/var/log/app.log"),理所当然地以为系统会"找到那个文件"。但磁盘其实是个非常笨的设备——它只认编号的块(block):你给它一...

2026-06-23 22 分钟 操作系统, 操作系统教程, 文件系统, 元数据
操作系统

抖动与工作集:虚拟内存的性能问题

抖动与工作集:虚拟内存的性能问题 前面两篇我们看到,虚拟内存靠局部性让程序用上超过物理内存的空间,页面置换算法则在内存满时聪明地决定换谁出去。一切看起来都很优雅。但这份优雅有一个前提条件,而当这个前提被打破时,系统会掉进一个所有 SRE 都...

2026-06-23 18 分钟 操作系统, 操作系统教程, 抖动, 工作集
操作系统

页面置换算法:OPT、FIFO、LRU 与 Clock

页面置换算法:OPT、FIFO、LRU 与 Clock 上一篇讲缺页处理时,我们在流程图里埋了一个关键岔路:当缺页发生、而物理内存已经装满、没有空闲页框时,操作系统必须踢掉一个已经在内存里的页,腾出位置给新页。 问题来了——踢谁? 这看起来...

2026-06-23 19 分钟 操作系统, 操作系统教程, 页面置换, LRU
操作系统

虚拟内存:为什么能“看到”比物理内存更大的空间

虚拟内存:为什么能“看到”比物理内存更大的空间 在 64 位机器上随便写个程序,它的地址空间理论上有 16EB(百亿亿字节)那么大;就算是一台只有 16GB 内存的机器,你也可以让一个进程 malloc 出几十 GB 的空间而不立刻崩溃。更...

2026-06-23 19 分钟 操作系统, 操作系统教程, 地址空间, 虚拟内存
操作系统

段页式管理:结合分页与分段的思路

段页式管理:结合分页与分段的思路 前面两篇我们看到了一个尴尬的局面:分页擅长物理管理、消灭了外部碎片,却丢掉了程序的逻辑结构和段级保护;分段保住了逻辑结构和精细保护,却因为"可变长度 + 要求连续"把外部碎片又请了回来。...

2026-06-23 17 分钟 操作系统, 操作系统教程, 段页式, 地址转换
操作系统

分段机制:逻辑结构与内存保护

分段机制:逻辑结构与内存保护 分页机制很优雅,它把地址空间切成大小相同、完全同质的页,一举消灭了外部碎片。但如果你换到程序员的视角看自己的程序,会发现它压根不是一堆毫无区别的页——它天然是有结构的:这一块是代码、那一块是全局数据、那边是运行...

2026-06-23 18 分钟 操作系统, 操作系统教程, 分段, 内存保护
操作系统

分页机制:页、页表与地址转换

分页机制:页、页表与地址转换 在讲连续分配的时候,我们已经看到一个很现实的问题:内存明明还有不少空闲,却因为这些空闲被切得七零八落,导致一个稍大一点的程序反而装不进去。这就是外部碎片。为了解决它,系统尝试过各种适应算法、也尝试过紧凑(com...

2026-06-23 12 分钟 操作系统, 操作系统教程, 分页, 页表