SICI · 天机门 · 第十章

输入输出系统:计算机与世界的接口 · 筑基四层

CPU 4 GHz,磁盘 8 ms——相差三千万倍。I/O 系统的全部意义,就是在一条时间不对等的桥上,让两端都能说话。

门楣刻字:「所有声音都该被 CPU 亲耳听到」
序章

天堑之桥

CPU 与外设速度差四百万倍?

桥从浓雾中伸出来——悬在两座悬崖之间的独木。左边一颗白色晶体以每秒四十亿次脉动,那是 CPU。右边散落着七块铭牌:键盘、鼠标、磁盘、SSD、网卡、USB、GPU,各自在自己的节奏里呼吸。

虚拟之境,虚拟内存映射
诺依曼老祖 诺依曼老祖

「你以为发个命令就过去了?这条桥上,时间不是同一条河。」

中断之乱 中断之乱

「猜猜,CPU 4 GHz 和磁盘 8 ms 之间差多少倍?猜错了,我记一笔。」

IO 速度天堑预测挑战器

先下注猜倍率 → 再拖拽七块设备铭牌到速度谱上 → 切换对数标度

4GHz CPU 和 8ms 磁盘差多少倍?
速度谱标度:
第一幕 · 自信

编址殿 · 两道门牌

内存映射 I/O vs 端口映射 I/O

桥的另一端是一座石殿,殿墙上开着两排门洞。左排刻着"内存域"——门牌号从 0x00000000 到 0xFFFFFFFF,整整齐齐。右排空着,门楣刻着"I/O 域——独立编址,专用指令"。

诺依曼老祖 诺依曼老祖

「把设备铭牌挂上去。它需要一个地址,CPU 才找得到它。」

中断之乱 中断之乱

「不就是个地址嘛。你以为内存地址和 I/O 地址是一回事?」

双域门牌分配 + 总线信号示波器

拖拽设备寄存器到内存域 / I/O 域,用示波器对比两种访问周期

内存域(内存映射 I/O)

I/O 域(端口映射 I/O)

总线信号示波器

选择已挂载设备查看总线信号
第一幕 · 崩塌

轮询谷 · 空转的代价

让 CPU 主动等外设,是一条死路

石阶尽头是一条幽谷。谷中一台 CPU 晶体悬浮在半空,连着远处的外设。老祖说"不停地问",晶体开始闪烁:未就绪、未就绪、未就绪……四十万里路,每一里都在问同一句话。

中断之乱 中断之乱

「CPU 不停地问就行了呗。多简单。」

诺依曼老祖 诺依曼老祖

「看看功率表。看看晶体表面。」

轮询循环代码拼装 + CPU 利用率仪表盘

拼出轮询循环 → 运行 → 观测 CPU 利用率与焦痕

轮询循环(拖拽行排序):
CPU 利用率
第一幕 · 重获希望

中断碑 · 第一声呼唤

外设主动呼叫,CPU 不再空等

焦黑的 CPU 还在冒烟。谷壁深处那声电铃越来越清晰。老祖带你走到一面石碑前——256 个格子,每个格子写着一个地址。"这叫中断向量表。外设准备好了,拉一下 IRQ 线——像拽铃铛。"

诺依曼老祖 诺依曼老祖

「CPU 听见铃声,放下手里的活,按这张表找到该去哪儿。但得先把手头的活记下来——不然回来就忘了。」

中断处理五步流水线动画器

填中断向量表 → 单步/自动执行五步流程 → 对比轮询效率

中断向量表(为三台设备填 ISR 地址)
第一幕 · 紧张

优先级塔 · 谁先被听见

优先级是秩序的基石

碑面的噪音越来越大。键盘、磁盘、定时器、网卡——四个铃声同时响起,叠成一片刺耳的蜂鸣。一座七层石塔从地面升起,每一层对应一个优先级,越往上越急。

诺依曼老祖 诺依曼老祖

「有的声音等得起,有的等不起——定时器晚了,整个系统的时钟就乱了。给它们排个序。」

中断之乱 中断之乱

「给所有中断同等待遇就行了。平等多好。」

优先级塔拖拽 + 中断嵌套追踪器 + 屏蔽字

拖设备到塔层 → 触发嵌套中断 → 观察 ISR 栈

ISR 嵌套栈

中断屏蔽字

第二幕 · 理解

总线关 · 三脉归一

数据脉、地址脉、控制脉——同步与异步

塔的影子带你来到一座关隘——所有设备到 CPU 的路都汇到这里。三股力量在流动:数据、地址、控制信号。关隘上方悬着两块令牌:一块刻"同步",一块刻"异步"。

诺依曼老祖 诺依曼老祖

「这就是总线。三条脉——CPU 和所有外设共享这一条路。」

总线三脉归一三旋钮实验台

选总线类型 → 切同步/异步 → 调频率/握手延迟 → 看示波器

总线类型
同步/异步
频率/延迟 200MHz

总线信号示波器

带宽: — | 延迟: —
第二幕 · 再崩塌

风暴眼 · 优先级反转

高优先级被低优先级卡死,系统停摆

风暴从总线缝隙里渗出来。数百个中断信号同时涌入,在总线上挤成一团。CPU 晶体上的焦痕在风暴中开始发红。"低优先级拿着总线的锁。高优先级要总线。它在等。但中等优先级来了——它抢 CPU 时间。三个任务,一条死链。系统——停了。"

中断之乱 中断之乱

「高优先级永远不会被低优先级阻塞?你押上这条信念——我现在当面砸碎它。」

中断风暴 + 优先级反转时间线 + Pathfinder 案例

观测中断风暴 → 推演三任务死链 → 重演火星探路者号

优先级反转推演

第二幕 · 曙光

DMA渊 · 借道者

CPU 不必亲力亲为

暗道通向一处深渊。深渊底部有一个独立的晶体——不是 CPU,比 CPU 小,但它的手直接伸向了内存和外设。"DMA 控制器,它只做一件事——搬数据。CPU 给它一个地址、一个长度、一个方向,它就去搬。"

诺依曼老祖 诺依曼老祖

「它要搬数据,就得用总线。CPU 也在用总线。谁让谁?这叫总线仲裁。」

DMA 参数配置 + 三种传输模式 + 四种总线仲裁

配置 DMA 四参数 → 切换三种模式 → 比较四种仲裁方案

源地址
目的地址
传输长度
方向

四种总线仲裁方案

第三幕 · 顿悟

通道阁 · 卸下重担

CPU 是元帅,从不上阵

阁楼里没有 CPU 的位置。一排小型处理器——通道——各自运行着长长的指令序列。另一侧,一条串行链路上挂着一串设备,热插即用。"USB,现代 I/O 的标准接口。CPU 只管发'枚举设备',剩下的事 USB 控制器自己办。"

诺依曼老祖 诺依曼老祖

「CPU 给通道发一条命令——不是'搬这一个字节',而是'执行这整段程序'。然后 CPU 就走了。」

通道程序 + 四种 I/O 控制方式对比 + USB 探索

拼通道程序序列 → 对比四种方式 CPU 占用率 → 探索 USB

通道程序(拖拽排序):

四种 I/O 控制方式 CPU 占用率

USB 协议探索

第三幕 · 最高潮

Boss 战 · 中断之乱

三问定生死 — 轮询之殇 / 死锁之链 / 通联之道

风暴凝聚成一个人形——无数中断信号纠缠的红色涡旋,涡旋中心有两只眼睛。它手里握着一本账。"你在桥上走了十级台阶。每一级,你都在低估我。"

中断之乱 中断之乱

「三问。答对,我散。答错,从 S3 重走。但你的断痕——不会消失。」

渊账累计 0 笔 · 三问全对后清零

第三幕 · 收束

通联之道 · I/O 墙

RAID 解决可靠性,PCIe/NVMe 解决带宽

风暴散尽。远方天际线上,一条比独木桥宽百倍的路正在延伸。路边立着两块碑:一块刻"RAID"——多块磁盘拼成阵列,为速度、为可靠;一块刻"PCIe/NVMe"——串行通道取代并行总线,固态存储摆脱机械枷锁。

诺依曼老祖 诺依曼老祖

「你走过了轮询、中断、DMA、通道。但 I/O 的故事远没结束。CPU 越快、外设越杂,I/O 墙只会更高。」

通联之道 · 12 知识图谱节点点亮

点击节点点亮知识链 → 探索 RAID / PCIe / NVMe