一台诞生于近四十年前的 16 位 DEC PDP-11 小型机,在今天被挂上了公网提供网站访问,甚至还开着 Telnet 端口允许访客登录。

前微软资深工程师 David Plummer 在 2024 年底将这台机器从 PDP-11/73 逐步修复升级为 PDP-11/83,并上线了名为 pdp1173.com 的站点。点击该站点的状态接口,你会看到一个古老的纯文本监控切片:4 MB 物理内存,大约 21 个后台进程在运转,运行着带有网络支持的 2.11BSD Unix。

很多人以为这不过是极客在博物馆展品上跑玩具脚本博眼球。但翻开开源在 GitHub 仓库 davepl/pdpsrc 上的系统与定制内核代码,你会发现这是一场严密的软硬件工程走钢丝。

PDP-11/83 公网穿透拓扑与防护机制 公网用户访问 HTTP 请求并发涌入 Telnet 端口访客连接 页面失焦自动休眠 现代前端代理防护 全局 5 秒快照切片 阻断广播与高并发 静态资源边缘分发 PDP-11 真实宿主 Mentec M11 + Q22 总线 4 MB 物理寻址极限 2.11BSD 原生驱动承接

忒修斯之船:被爱尔兰芯片“换脑”的小型机

严格从血统来看,这台机器已经不是一台原汁原味的 DEC PDP-11/83。

拼装了位片与协处理器的替代主板,成为古董机运转的新心脏
拼装了位片与协处理器的替代主板,成为古董机运转的新心脏

原装 PDP-11/83 的精髓在于 18 MHz 的 DEC J-11 芯片组,通过专用的高速 PMI 内存总线与专用内存卡直接对话。但这台机器里,原厂的 M8190 CPU 与两块内存卡都被抽离,替换成了一块来自爱尔兰 Mentec 公司的 Mentec M11 单板处理器

1990 年代,DEC 将 PDP-11 架构授权给 Mentec。后者为了在维持 Q-bus 兼容的同时绕开停产的原装芯片,用两片 TI 8832 算术逻辑单元、TI 8818 微定序器,外加一颗用于加载可写微码与控制台诊断的 Intel i960 协处理器,拼出了一套微码化的兼容方案。

这意味着,驱动这台机器心脏跳动的,本质上是一套由位片芯片与 RISC 协处理器模拟出来的微码执行体。整个系统由两套 Q22 扩展机箱串级组成,依靠 DEC M9404 与 M9405 互连模块跨机箱拉通总线。受制于 DEC 当年的电气规范,这种 120 欧姆特征阻抗的电缆物理极限长度只有 4.88 米

除了处理器,它的外设也是横跨数代的拼装混搭:既有处理 MFM 硬盘与 RX50 软驱的 DEC 原装 RQDX3 控制卡,也有通过 Emulex UC07 桥接的 SCSI 硬盘与 TKZ50 磁带机,甚至还保留了古老的 RL02 可移动磁盘箱作为备用启动通道。

所谓古董计算机的存续,从来不是冷冰冰的博物馆封存,而是一场向实用主义低头的软硬件移花接木。

螺蛳壳里做道场:64 KB 虚存与 4 MB 物理极限

在硬件拼装完成之后,真正的难题落在了操作系统头上:如何在极度贫瘠的内存空间里,跑起一个现代互联网需要的网络环境?

极其狭窄的虚拟内存空间,被物理机制强行映射到底层大内存中(剖面示意)
极其狭窄的虚拟内存空间,被物理机制强行映射到底层大内存中(剖面示意)

DEC PDP-11 作为 16 位架构的先驱,其虚拟寻址空间被焊死在 64 KB。哪怕借助 Q22 总线的内存管理单元将物理寻址拓宽到 4 MB,单个进程一次能看到的地址空间依然只有 64 KB。

PDP-11 内存拓扑与寻址断层 64 KB 单进程逻辑虚存极限 依赖指令与数据空间分离及 Supervisor 模式 4 MB Q22 总线物理内存上限 承载 21 个系统进程、TCP/IP 栈与 HTTP 采样服务

机器上跑的系统是专为 16 位机器续命的 2.11BSD 内核(基于补丁号 495)。为了把完整的 BSD TCP/IP 协议栈塞进系统,工程师们当年动用了极其复杂的内存管理手法:

  • 将指令空间与数据空间强行拆分,榨取寻址上限;
  • 引入 supervisor 核心特权模式,让网络协议代码避开普通用户空间;
  • 对内核驱动做精细的页表映射与剪裁。

在此基础之上,这台机器用原生 C 语言编译了一个微型的 HTTP 守护进程,并在 pdp1173.com/cgi-bin/webtop 暴露了一个纯文本采样接口。整个内核在约 21 个后台进程之间轮转调度,既要维持 TCP 连接,又要读取 MSCP 协议驱动的磁盘阵列。

  • 结论.古董机器接入现代网络的意义,不在于提供多少并发能力,而在于它完整证明了以 Unix、C 语言和 TCP/IP 为代表的现代计算机软件栈,其底层设计在半个世纪前就已经具备了惊人的正交性与适应力。

脆弱的网卡,与防风暴的边缘护城河

即便软件内核撑住了,物理层面的脆弱性依旧像一把悬在头顶的剑。

热成像下满载发热的早期网络芯片,暗藏硬件死锁隐患
热成像下满载发热的早期网络芯片,暗藏硬件死锁隐患

该机采用的网络控制器是 DEC 早期研发的第一代 Q-bus 以太网卡 DEQNA(型号 M7504)。这块半双工、仅支持 10 Mbps 的老卡在网络史上声名狼藉。它的硬件设计存在严重的接收缓冲区溢出漏洞与总线死锁缺陷。其驱动程序 if_qe 源自 1990 年 4.3BSD 的遗存代码,为了保活,内核不仅写死了硬件看门狗定时器,还在配置中硬性禁用了以太网尾部封装(-trailers)

在今天充斥着 ARP 广播风暴、端口扫描器与复杂多播流量的公网环境中,如果让 DEQNA 直接面对原始流量,机器的总线可能在一秒钟内就会被锁死。

正因如此,项目在架构上做出了极其务实的克制设计:

  • 前端部署了现代代理服务器吸收并发流量;
  • 机器本身只产出每 5 秒全局缓存一次的系统状态切片;
  • 客户端只要切出网页或失去焦点,前端就立即停止向后端的定时轮询。

复古计算社群里总有人持纯粹主义观点,认为套了现代反代和缓存就等于作弊。但如果脱离了这条工程护城河,4 MB 物理内存和残缺的 DEQNA 控制器根本不可能在现代公网上存活超过一分钟。

  • 风险.受制于 DEQNA 硬件芯片的物理老化以及 Mentec M11 微码看门狗的中断容错极限,该节点的长期稳定性依然脆弱,广播噪声的渗入随时可能诱发总线挂起。

这台 PDP-11/83 的存在,恰恰点破了计算技术演进的本色:新系统从未真正摆脱过旧秩序的影子,而旧机器若要向现代投来一瞥,也必须依托现代工程妥协造就的防护伞。