第14期 | 内核什么都不做,只当邮差?

操作系统 · · 九羲科技

一、Linux 线

Minix 的内核,是个甩手掌柜。

1987 年 Tanenbaum 写 Minix 时,做了一个和当时所有人相反的决定:内核里几乎什么都不放。调度、中断、传消息——三件事,剩下的全赶出去。文件系统、内存管理、进程管理、驱动,一个个都是独立的"服务器进程",互不共享内存,想办事只能写信。

内核只认三个动作:send(dest, &message)、receive(source, &message)、sendrec(src_dest, &message)。一封信发出去,收信的没在等,送信的就原地冻住——这叫 rendezvous,约好了在信箱口碰头,一个不到,另一个就等。用户进程能用的只有 sendrec:把请求发出去,冻住,等回信。所以你在 Minix 里调一个 open(),底层就是一封信:发给文件系统服务器,等它回"办好了"。所有常规的 POSIX 系统调用,都是这么发出去的。

妙处和代价是同一枚硬币的两面。妙处:文件系统崩了,重启文件系统进程就行,内核和其他人都不受影响——隔离是真的。代价:一次系统调用,在 Linux 里是一次 trap 进内核、办完就回;在 Minix 里是两次消息拷贝加两次上下文切换。当年这就是微内核最被诟病的地方:为了"各扫门前雪",每封信都要经邮差的手抄一遍。

"三十辐,共一毂,当其无,有车之用。"老子这句话像是给微内核写的判语:内核恰恰是"无"的那一面——它越是什么都不做,服务器们越是能死能活。Minix 把"做什么"全交给了服务器,内核只守"怎么传话"。这个故事二十年后还有续集,先按下不表。

美学时刻看埃舍尔。1948 年的石版画《Drawing Hands》(画手):两只手从纸面上升起来,互相把对方画出来——谁先拿起的笔,说不清。Minix 里也一样:内核生出服务器,服务器的信件定义了内核每天的工作;霍夫斯塔特在《GEB》里管这叫怪圈。问"内核和服务器谁更重要",就像问画里哪只手先动笔——问错了问题。

二、原生 AI OS 线

如果 AI 的操作系统先出现,内核也是个信使

如果 AI 的操作系统先出现,它大概率也是个微内核——不是学 Minix,是被逼的。

Agent 世界天然就是消息世界:每个 agent 有自己的状态、记忆、权限,谁也不许碰谁的内存,只能递信。今天的雏形已经在了:MemGPT(Packer et al., arXiv:2310.08560, 2023)把 OS 的内存分级搬进上下文管理,context 就是内存,中断就是控制流——层与层之间,靠的就是"递信"。

但信的内容变了。Minix 的信是定长字节消息;AI OS 的信是向量和张量——一段记忆、一个意图、一组 embedding。旧抽象与新硬件的张力在这里露了头:邮差还在按"字节"送信,信里装的已经是高维向量了。调度也不该再按时间片切指令流,而该按"谁手里攒够了一批向量、占满了一块算力阵列"来排。信还是那套信,路已经不是那条路了。

可能性往外推一格:以递信为中心的内核,让"杀掉一个坏掉的 agent、再重启一个"成为日常——xuanora 的研判层要的就是这个:误判的 agent 可以死,整机不死。离落地差几步:缺一套"信"的格式标准(向量包怎么封、权限怎么盖戳),缺一个管信的路由器(今天靠各家 agent 框架自己糊)。谁来做?xuanora 的编排层正好卡在这个位置上。

三、动手线:今晚亲手称一称"隔离的代价"

第 13 期那 60 行 Python 消息总线玩具还在吧?今晚给它加一杆秤。

写两段压测:A 直接调函数,B 走队列 sendrec 打个来回,各跑十万次,用 timeit 计时。你会亲眼看到一个数字:隔离的代价。Python 队列级别可能是几十倍,C 语言级别当年 Minix 付的是几倍——量级不同,性质一样:每封信都要经邮差的手。

然后做一张取舍表,贴到 xuanora 研判层的设计文档里:跨权限边界、可能崩的 agent,走消息(付得起代价,买的是"死一个不连累一片");高频内部调用,走直接调用(别为纯粹交税)。缺什么:半小时和一个晚上;谁来做:你亲手跑,xuanora 研发侧把表落地;要多久:今晚出数字,一周进选型。

发展性研究的那只眼也别闭上:Minix 守的是原理(微内核之纯),Linux 赢的是中间层(宏内核之快,工程化)。九羲干的正是中间层的活——把成熟原理(开源大模型)做成能跑的东西(大铁盒子、私有化)。动手线不谈原理,谈"称一称代价"这个动作:先实际,后原理。

觉 然 小 注

「应无所住而生其心。」Minix 的内核不住在文件系统里,也不住在内存管理里,它只住在"送信"这一件事上。心无所住,服务器死了可以再起,机器不死。住得越少,活得越长。

引 用 与 出 处

  1. MINIX 进程间通信:send / receive / sendrec 原语,https://minixnitc.github.io/ipc.html
  2. MINIX 消息传递:rendezvous 语义与系统调用的消息实现,https://condor.depaul.edu/glancast/443class/docs/lecFeb26.html
  3. M. C. Escher《Drawing Hands》石版画,1948,https://en.wikipedia.org/wiki/Drawing_Hands
  4. Packer et al., "MemGPT: Towards LLMs as Operating Systems", arXiv:2310.08560, 2023,https://arxiv.org/abs/2310.08560
  5. 老子《道德经》第十一章(引文为通行王弼注本文字),https://en.wikipedia.org/wiki/Tao_Te_Ching

· · ·

← 返回资讯中心