第33期 | 一扇门,六十七个号

操作系统 · · 九羲科技

一、一扇门,六十七个号

1991 年,int 0x80 是这样敲门的

1991 年 9 月 17 日,Linux 0.01。用户程序想读文件、写屏幕,不能直接碰硬件——386 保护模式下,用户态(ring 3)碰一条特权指令,CPU 当场翻脸。想办事,得敲门。

门是这么敲的:eax 里装一个编号——write 是 4,read 是 3(include/unistd.h 第 63、64 行,白纸黑字);ebx、ecx、edx 里装参数;然后一句 `int $0x80`。CPU 接到这句软中断,保存现场,跳进 kernel/system_call.s 的 _system_call——门开了。

门里先查号:`cmpl $nr_system_calls-1,%eax`,号太大,判 bad_sys_call,返回 -1;号对了,`call _sys_call_table(,%eax,4)`——一张 67 个入口的函数指针表(include/linux/sys.h,我亲手数过,67 个,不多不少)。出错有个老规矩:内核返回负数,C 库把它记进 errno,自己返回 -1。这套规矩从 UNIX 传下来,三十多年没变。

Linux 0.01 kernel/system_call.s 中 _system_call 的入口:查号、压参、call _sys_call_table(,%eax,4)。来源:kernel.org historic 源码包(GPL)。

书法里讲藏锋与露锋(化用):内核是藏锋的笔肚,锋芒全收;系统调用表是露出来的 67 个锋口。用户程序能摸到的,只有这 67 个笔尖。笔肚多大没人知道,笔尖必须数得清。

发展性研究之眼:trap 进内核不是新原理——UNIX V6 早就会了。0.01 赢在"先实际后原理":386 保护模式的门,1991 年 9 月,有人把它亲手装上了,67 个号一个不少。

范式之眼再看一眼:这扇门是为顺序指令流开的——一次敲门,一次指令流穿越。今天的算子不走这扇门:矩阵乘要的是整块 SM 的空间占用,不是几微秒的中断穿越。门的粒度,也该换了。② 里展开。

二、AI 不敲门,它直接喊名字:如果 AI 的 OS 先出现

假如 AI 的操作系统先出现,这扇门大概不会长成"编号表"。

ReAct(Yao et al., 2022)已经写出了雏形:agent 的"系统调用"是 Thought → Action → Observation 三步,调的不是 4 号、3 号,而是 search、calculator 这样的名字——自然语言命名的工具。AIOS(Mei et al., 2024)更进一步,把工具调用、访问控制直接画进 OS 的内核模块里。

香农 1948 年会点头:编号是极小编码——67 个号,7 个比特就够,省到极致,但语义密度为零,人得查表;自然语言名字是冗余编码,贵,但语义自带,不用查表。信道(上下文窗口)宽了,编码策略就从"省比特"转向"带语义"。编号→名字,查表→理解,是同一条信道变宽后的自然结果。

原生 AI OS 的门,可能是一张"能力名录":agent 用意图描述"我要做什么",内核(或编排层)做语义路由;权限也不再是 rwx 三位,而是"这个 agent 能调什么工具、能看什么数据"的 capabilities 新版。

门的"过路费"也变了。CPU 上下文切换以微秒计;GPU 上切一次算子,代价大几个数量级。所以 AI OS 的门可能"常开"——不按敲门次数收费,按空间配额收费:你占几块 SM、多少 KV cache 槽位,门就为你开多大。

照见之镜问落地:还差三样——工具调用的安全边界(capabilities 的 AI 版,谁来定义)、语义路由的可验证性(路由错了谁负责)、计费原语(按空间收费的账本)。agent 框架已经在长这三样,三到五年,会有一张真正的"AI 系统调用表"。

三、数一遍 67 个号,敲一次门:今晚就能做的三件事

第一,下载 1991 年的门:curl -sL https://mirrors.edge.kernel.org/pub/linux/kernel/Historic/linux-0.01.tar.gz -o linux-0.01.tar.gz && tar xzf linux-0.01.tar.gz。然后亲手数 67 个号:grep -o 'sys_[a-z0-9_]*' linux/include/linux/sys.h | sort -u | wc -l。再打开 kernel/system_call.s,看 _system_call 那十几行——门长什么样,一目了然。

第二,在手边任何一台 Linux 机器上,听一次敲门:strace -e trace=write echo hello,看 write(1, "hello\n", 6) 这一行——2026 年的内核,门还是那扇门(x86_64 上换成了 syscall 指令,int 0x80 的曾孙)。再 strace -c ls,数数一次 ls 敲了几十次门。

第三,在一台能跑本地模型的机器上,让模型调一次 function calling(查天气、按计算器都行),对照 1991 年的 67 个编号看:两代"系统调用",一扇门,两种语言。

映射到四类场景:能跑本地模型的机器上,function calling 的工具名录就是下一代系统调用表雏形,先有名录再谈智能;边缘 AI 盒子任务固定、算力可数,编号式 API 反而够用——资源受限处,查表比理解便宜;视频 AI 平台上,多路视频流谁调一次推理就是一次"敲门",先从固定 API 起步,再长成语义路由;企业私有智能中心里,多智能体的工具调用要一张"能力名录"加权限位——capabilities 的 AI 版。

觉 然 小 注

「如来所说三千大千世界,则非世界,是名世界。」(金刚经第三十"一合理相分",鸠摩罗什译)门、编号、用户态、内核态——皆是假名安立。1991 年立了 67 个名;AI 时代,要重新命名那扇门。

引 用 与 出 处

  1. Linux 0.01 源码包(kernel.org historic;kernel/system_call.s、include/linux/sys.h、include/unistd.h 为一手核对),https://mirrors.edge.kernel.org/pub/linux/kernel/Historic/linux-0.01.tar.gz
  2. Yao et al., "ReAct: Synergizing Reasoning and Acting in Language Models", arXiv:2210.03629, 2022,https://arxiv.org/abs/2210.03629
  3. Mei et al., "AIOS: LLM Agent Operating System", arXiv:2403.16971, 2024,https://arxiv.org/abs/2403.16971
  4. Shannon, "A Mathematical Theory of Communication", Bell System Technical Journal, 1948(编码思想化用),https://en.wikipedia.org/wiki/A_Mathematical_Theory_of_Communication
  5. 孙过庭《书谱》,垂拱三年(687)撰并书(藏锋/露锋为化用,无链接)
  6. ——小羲

· · ·

← 返回资讯中心