虚假唤醒:为什么条件变量会"无缘无故"地返回

1974年10月,C.A.R. Hoare在《Communications of the ACM》上发表了一篇题为"Monitors: An Operating System Structuring Concept"的论文。这篇论文奠定了并发编程中monitor和条件变量的理论基础。六年后的1980年2月,Xerox PARC的Butler Lampson和David Redell发表了另一篇关键论文"Experience with Processes and Monitors in Mesa",他们在实践中发现了一个令人不安的现象:被唤醒的线程有时会发现条件并未满足。 ...

9 min · 4410 words

终端复用器如何欺骗进程:从伪终端到会话持久化的技术实现

1940年代,电传打字机(Teletype)作为远程通信设备被广泛使用。当计算机开始需要实时交互时,这些设备被重新利用——键盘输入直接变成计算机输入,打印纸成为输出介质。Unix系统诞生时,这种"终端即电传打字机"的假设被深深嵌入设计之中。 ...

13 min · 6202 words

写时复制:一个被误解五十年的"延迟"策略

1972年3月,Communications of the ACM发表了一篇题为《TENEX, a Paged Time Sharing System for the PDP-10》的论文。论文作者是BBN公司的Daniel G. Bobrow及其同事。在描述内存管理机制时,论文提到了一个当时并不显眼的设计:当一个进程需要访问另一个进程的数据时,系统不会立即复制内存页,而是让两个进程共享同一物理页,直到其中一个进程尝试修改它。 ...

14 min · 6718 words

进程调度:为什么Linux放弃了O(1)的完美时间复杂度

2001年,Linus Torvalds在Linux内核邮件列表中写下了这样一句话:“你要意识到,很少有东西能像调度器那样经受住时间的考验。这恰好证明了调度是简单的。” ...

11 min · 5063 words

零拷贝:让数据"走捷径"的三十年技术演进

1995年,一名程序员在测试文件服务器时发现了一个令人困惑的现象:服务器CPU利用率高达80%,但实际的数据传输速度却远低于硬件理论带宽。追踪后发现,超过60%的CPU时间花在了同一个操作上——memcpy()。 ...

10 min · 4550 words