第36期 | 三十二扇门,十六扇空着

操作系统 · · 九羲科技

一、三十二扇门,十六扇空着:1991 年的装门清单

1991 年 9 月,Linux 0.01 把自己装进了 32 扇中断门里。开门的不只有硬件敲过来的声音,还有留给未来的刻意空白。

Linux 0.01 的 kernel/traps.c 里,trap_init() 照着 80386 手册的异常表,一个萝卜一个坑装到 16 号:0 是除零,1 是调试,2 是 NMI;3、4、5(int3、overflow、bounds)被设成 system gate,源码注释一句:/* int3-5 can be called from all */。调试用的门,用户态也能敲。

再往后,15 号和 17 到 31 号,一共十六扇,全部指向同一个函数:reserved。kernel/asm.s 里 _reserved 的代码很短:pushl $_do_reserved; jmp no_error_code。它不做什么事,只把控制权交给 C 里的 do_reserved,而后者直接死机时报出一行:reserved (15,17-31) error。内核在自己的死亡留言里,把空门编号一字不差地报出来。

三十二扇门,一半是空的。这不是偷懒,是骨架。386 当年只定义了 0 到 16 号异常,Linus 就只装到 16;剩下的先留白,给还没出生的硬件和还没想到的事故。

init/main.c 的启动顺序也很诚实:87 行 trap_init(),88 行 sched_init()。挂完硬件的门,调度器立刻亲手挂上自己的两扇:0x20 是时钟中断,0x80 是系统调用。sched_init() 里那几行,outb_p(0x36,0x43) 把 8253 定时器设成模式 3,set_intr_gate(0x20,&timer_interrupt) 把心跳接上,outb(inb_p(0x21)&~0x01,0x21) 打开 IRQ0 的屏蔽位,set_system_gate(0x80,&system_call) 把 int 0x80 的 DPL 设成 3。心跳和正门,是操作系统自己装的,不是 CPU 带来的。

维纳在《Cybernetics》里讲过反馈回路:感知—比较—执行。中断是这套回路的硬件形态。门阵就是比较环节:事件来了,按编号把你分到对应 handler。这是个线性世界里的绝好办法:一个事件,一个号码,一条路。

二、不装门铃,改装信箱:AI 原生 OS 的事件

如果 AI 的操作系统先出现,它不会给每个突发配一个固定号码。它面向的不是顺序流,而是向量和批量。今晚的算力主体是矩阵乘、attention、稀疏激活;它们不常被"打断",更常"完成":这批算完了,结果来了。

所以 AI OS 的中断会退位,取而代之的是完成队列与订阅。agent 按语义订阅事件:预测误差超阈值、新感知到达、工具返回异常。编号退场,模式上场。中断门阵是线性计算的装饰,AI 系统需要的是流与绑定的基础设施。

范式之眼就在这里:旧抽象为顺序指令流设计,门号是给 CPU 的;新主体是向量阵列,合适的是 completion 与 backpressure。io_uring 已经走了半步:把 I/O 从"打断—处理"变成"提交—等完成"。AI OS 只会走得更彻底:硬件暴露完成语义,内核做语义路由,用户态写事件处理器。

可能性:让操作系统从"敲门—开门"变成"投递—领取"。边界往外推一格,不再把设备事件硬塞进 256 个固定的坑。

落地还差几步:需要统一的事件总线语义,需要 GPU 与 NIC 暴露更细的完成通知,需要一个跨栈的订阅协议。缺什么?标准和最小实现样本。谁来做?一个把完成队列用到位的小系统,先跑起来几周数据。再用四周把延迟和抖动的分布搞清楚。三个月,能看见形状。

三、数一数你机器上的门:一个能立刻跑的观察

不用编译内核,也能摸到 1991 年那扇门的心跳。

在手边任何一台 Linux 机器上,执行:

head -3 /proc/interrupts; grep LOC /proc/interrupts

你会看到 LOC 那一行在涨。那是每颗 CPU 的本地定时中断,三十五年前的 0x20 还在跳。再跑:

dmesg | head -20 | grep -i irq

看设备如何领门号。今天的内核已经把编号这件事交给了 ACPI 和 MSI,但"事件—处理"的形状还在。

如果你懂汇编,翻开 0.01 的 kernel/sched.c,找 sched_init() 的四行:设定时器、开 IRQ0、挂 0x20、挂 0x80。那是一个操作系统对自己说:我先有心跳,我再开门。

给读者一个小任务:盯住 LOC 的数字几秒钟,感受一次心跳增量。把这个瞬间当作"看见一个 1991 年的决定还在运行"。实践才能体验体悟。

觉 然 小 注

「应无所住而生其心。」三十二扇门里,十六扇空着,就是"无住"。不执着于当下已知的全部事件,给未来留门,系统才有弹性。

引 用 与 出 处

  1. Linux 0.01 源码包(kernel.org historic;kernel/traps.c、kernel/sched.c、kernel/asm.s、init/main.c 为一手核对),https://mirrors.edge.kernel.org/pub/linux/kernel/Historic/linux-0.01.tar.gz
  2. Wiener, N., Cybernetics: Or Control and Communication in the Animal and the Machine, MIT Press, 1948(反馈回路思想化用)
  3. 孙过庭《书谱》,垂拱三年(687)墨迹本(公有领域;引文"同自然之妙有,非力运之能成"据撰稿核实记录 shupu-quotes-verified.md)

· · ·

← 返回资讯中心