Kubernetes 微内核的分布式操作系统( 二 )


用户态应用程序通过 IPC 访问这些服务,从而访问操作系统的全部功能,如此一来,需要陷入内核的系统调用数量将大大减少,系统的模块化更加清晰 。同时系统更加健壮,只有内核中的少量系统调用才有权限访问硬件的全部能力,如设备驱动的问题只会影响对应服务,而不是影响整个系统 。和 micro kernel 相对,UNIX 的设计被称为 monolithic kernel 。
UNIX 开放后,AT&T 继续着版本迭代,而各大学基于 AT&T 的 UNIX 开发了很多新的操作系统内核,其中较为知名的有:

  1. BSD,monolithic,由伯克利的传奇人物 Bill Joy 于1974年发布(据说 Bill Joy 花三天便完成了 BSD 内核的第一个版本开发,Bill Joy 的作品还包含第一个 TCP/IP 协议栈、vi、Solaris、SPARK 芯片等等) 。该内核对业界影响非常之大,后来发展为 FreeBSD、OpenBSD、NetBSD 等分支 。现代操作系统如 Solaris、MacOS X、Windows NT 对其多有借鉴 。
  2. Mach,微内核,由卡内基梅隆大学于1984年发布,主要作者是 CMU 的两位研究生 Avie Tevanian 和 Rick Rashid 。该内核对业界影响也很大,GNU Hurd、MacOS X 对其多有借鉴,但该项目本身以失败告终 。
  3. MINIX,微内核,由阿姆斯特丹自由大学(Vrije Universiteit Amsterdam)的 Andrew Tanenbaum 教授于1987年发布 。无数计算机系学生通过 MINIX 及其配套教材掌握了操作系统的设计原理,Linux 的初始版本就是基于 MINIX 复刻的 。MINIX 虽然著名,但主要用于教学,从未在工业界获得一席之地 。
1.3 微内核的沉寂
从上世纪90年代至本世纪10年代,UNIX 和 VMS 的后裔们展开了一场混战,从结果来看,微内核的概念虽然美好,但现实非常残酷:
  1. MINIX 仅限于教学,而基于 MINIX 设计的 Linux 是 monolithic 系统,反而大获成功 。Mach 对业界影响深远,但本身并未得到大规模应用,其继承者 GNU Hurd 一直在开发中,从未能应用 。
  2. Windows 的 NTOS 内核是 David Cutler 基于他原来在 DEC 独立设计的系统 VMS 设计的(VMS 和 UNIX 无关) 。NTOS 借鉴了微内核的思想和 BSD 的一些代码,但最终 David Cutler 决定将所有服务(如 GUI)都放到内核态而非用户态,因此 Windows NT 在软件架构上和微内核一致,而实际运行和 monolithic 内核一致,被称为 hybrid kernel 。
  3. MacOS X 基于 NextStep OS 设计,NextStep 是 Avie Tevanian 设计的,Avie Tevanian 是 Mach 的主要设计者,博士毕业后,盖茨和乔布斯都邀请过他,他去了 Next,他在 CMU 的好友 Rick Rashid 则去微软作为 David Cutler 的首席助手,据说 Avie Tevanian 在 Next 每天用计算器算自己没去微软而损失的股票增值 。跟乔布斯回到苹果后,Avie 基于 NextStep 和 BSD 的代码设计了 OS X,巧的是,OS X 也采用了 hybrid kernel 的架构,最终大获成功,还能在 PowerPC 和 x86 两种指令架构间无缝切换 。
在几位操作系统技术巨擎中,除 Linus Torvalds 外,无论是 David Cutler 和 Andrew Tanenbaum,还是 Avie Tevanian 和 Rick Rashid,都是微内核架构的领袖级人物,但最终他们都没有将微内核彻底落地,这是有原因的 。
微内核操作系统访问系统服务的效率比 monolithic 操作系统要低得多,举例而言,在 Linux 中,系统调用(比如 open)只要陷入内核一次,也就是先切换 CPU 到高权限模式,再切回低权限模式 。如果在一个微内核操作系统中,用户调用 open 就需要先拼装一条 IPC 请求消息,发送给对应的文件系统服务进程,随后从文件系统服务进程获取IPC响应消息并解包,拿到调用结果,这样一来,消息带来的数据拷贝和进程上下文切换都会带来很多开销 。消息需要拷贝是因为用户态进程间不能相互访问内存地址,而内核的代码可以访问任何用户态进程的任何内存地址 。正是因为性能原因,OS X 和 Windows 都选择了 hybrid kernel 的架构,NTOS 甚至在内核中集成了 GUI 子系统,以带来更好的用户体验 。
简单来说,在电脑性能不佳的情况下,我们会发现 Windows 的鼠标箭头更加“跟手”,即使系统接近死机,Windows 系统的鼠标箭头仍然可以活动 。Windows XP 能在 Windows 98 这样「珠玉在前」的上代产品后获得更大的成功,和 NTOS 对性能的密切关注是分不开的,相比之下,苹果固然在1980年代中期就有初代 Machintosh 这样的壮举,但因为乔布斯无法说服销售团队换一根更强的内存条,因此初代 Mac 的性能较差,运行程序非常之慢,未能获得应得的蓝海成功 。
二、Kubernetes 和微内核性能问题对单机操作系统来说可能是至关重要的,但对分布式操作系统并非如此,分布式操作系统作为「幕后功臣」,不需要直接面对用户,而单机性能上的小小损失可以用更多机器来弥补,在这个前提下,更好的架构往往更加重要 。


推荐阅读