History · Ideas Over Dates
操作系统
发展史
下面按阶段写公开可核对的主线。精确到年的只写有共识的节点;其余写年代。思想线索比年表更重要:独占如何变成复用,内核边界如何争论,隔离粒度如何从进程走到容器。
从一次只跑一个作业,到多道程序填满 I/O 空隙,再到分时让多人同时盯着终端。
单体内核把多数服务放在内核态;微内核把服务外移。Linux 走的是可加载模块的单体内核,不是微内核。
进程地址空间 → 虚拟机整机抽象 → 容器共享内核、隔离用户态。粒度变细,开销和隔离强度一起变。
手工、批处理、多道程序
早期机器由操作员装带、扳开关,一次只服务一个作业。批处理把作业排队交给监督程序连续跑,减少人机来回。多道程序让内存里同时放多个作业:一个等 I/O 时,CPU 可切到另一个。这是「并发」进入工程实践的起点——宏观上多个作业推进,单处理机上仍是交替执行。
IBM 在 1960 年代中期推出 System/360 及配套的 OS/360 一类系统,把多道、假脱机(后来教材里的 SPOOLing)做成可销售的产品形态。
Unix 谱系
Unix 在 1969 年前后于 PDP-7 上起步,1970 年代初用 C 重写,使系统能较容易地迁到新机器。第七版(V7)出现在 1970 年代末,成为后来许多教学与商业 Unix 的共同祖先。
加州大学伯克利分校的 BSD 在 1970 年代末到 1980 年代加入虚拟内存、TCP/IP 等实现,并影响后来的 FreeBSD、NetBSD,以及苹果 Darwin / macOS 的一部分谱系。AT&T 一侧的 System V 则走向商业授权。
C 语言与 Unix 一起成熟:Ritchie 等把系统实现从汇编里解放出来,这是软件可移植性的一次关键转折。
个人电脑与图形界面
Doug Engelbart 于 1968 年 12 月做了后来被称为 “The Mother of All Demos” 的演示,展示鼠标、超文本与分屏协作——这是交互界面史,不是某个商业 OS 的发布会。
Xerox PARC 的 Alto 等机器在 1970 年代把位图界面、窗口做成可运行系统。苹果 Macintosh 于 1984 年把图形界面带进消费级个人电脑。微软 Windows 1.0 出现在 1985 年;Windows 3.0(1990)和 Windows 95(1995)让 PC 图形壳成为大众默认。Windows NT 于 1993 年发布,走的是另一条有硬件抽象与多用户内核的产品线,后来与消费 Windows 合流。
微机侧更早的软件层是 1970 年代的 CP/M,以及 1981 年 IBM PC 所配的 PC DOS / MS-DOS。它们是单用户、弱保护的命令环境,和分时 Unix 不是同一条设计问题。
MINIX、Linux 与开源内核
Andrew Tanenbaum 的 MINIX 在 1980 年代后期作为教材配套系统发布,强调可阅读、可在微机上跑。Linus Torvalds 在 1991 年公布 Linux 内核的早期版本:他当时在 MINIX 环境下工作,也受到 MINIX 的启发,但 Linux 是另起炉灶的实现,不是 MINIX 的派生或官方续作。
GNU 用户态工具与 Linux 内核组合,形成后来被称为 GNU/Linux 的发行版生态。自由软件与开源许可证让内核可以在全球范围内被修改和再分发。
移动:iOS 与 Android
苹果在 2007 年发布 iPhone,其操作系统后来称为 iOS,内核侧与 Darwin / XNU 相关,应用侧是沙箱化的移动栈。Google 联合开放手机联盟在 2008 年推出 Android:内核用 Linux,用户态与应用框架自建,发行权掌握在设备商与 Google 服务的多层关系里。
移动 OS 把「应用商店、权限、后台限制、功耗」做成一等约束,和服务器 Unix 的假设不同,但进程、虚存、文件系统这些 408 机制并没有被取消。
虚拟机、容器、云原生
整机虚拟化不是新想法:IBM 在 1960 年代已有 CP/CMS 一类虚拟机监控。x86 上的商品化虚拟化在 1990 年代末到 2000 年代展开(VMware 等),随后 Xen、KVM 等进入 Linux 生态。
容器把隔离从「整台虚拟硬件」收到「共享内核上的名字空间与 cgroup」。Docker 在 2010 年代前半让镜像分发成为常规工具;Kubernetes 把多机调度做成控制面。容器编排与声明式 API 是云原生常见技术;云原生还可包含微服务、服务网格、不可变基础设施、Serverless 等实践。它不是一种新的处理机调度算法。