Kernel 漫谈

kernel分类

现在一个常见的分类就是monolithic kernel 和micro kernel
一般关于操作系统kernel类别的归属的介绍是
monolithic kernel:linux, windows
micro kernel: OSX
但是查了一些资料就发现可能不是这么简单,维基百科上说windows NT 的内核是Hybrid kernel,即monolithic 和 micro kernel的混合物。
这一篇文章则是介绍说OSX不是一个microkernel。
总而言之,关于操作系统内核分类这件事很复杂。

前些天看到一个回答,介绍了kernel的发展史,觉得写的蛮好的,翻译了来分享一下。
这是2013-2014年间的问题,虽然觉得回答的不错,但也不能完全赞同。

kernel发展(译文)

MacOS 的历史是有一点错综复杂的。在90年代后期我对这个非常感兴趣,那时候Mach是一种快速搭建unix系统的方式,所以它在世界各地销售的很好。

Mach:Mach是由CMU开发的一个kernel用以操作系统方面的研究,主要是分布式和并行计算方面的研究。Mach经常作为最早实现microkernel的例子被提到。并不是所有版本的Mach都是microkernel。macOS, IOS, tvOS 和 watchOS都是以Mach为内核。

Kernel的起源有一点复杂。

kernel开始于AT&T将它们的操作系统免费分发(distribute)给一些大学。Unix在伯克利得到了大面积的改善,成为了Unix 的BSD变体的基础并吸收了一些新东西如“Berkeley Fast File System”(也叫Unix File System,UFS),UFS中有一些新的特性如symlinks 和 socketAPI。于此同时,AT&T也在构建System V。

AT&T:American Telephone & Telegraph,美国电话电报公司。NBA马刺队的球馆就是AT&T Center。贝尔实验室也是这家公司的。具体情况请百度。

System V: 全称是Unix System V(发音是System Five),它是第一个商业版本的Unix 操作系统,1983年首次发布。有四个主要版本的System V被发布,编号为 1,2,3,4。System V Release 4(SVR4)是最成功的商业版本。截止到2012年,Unix市场被三个System V衍生版本(variants)瓜分, IBM的AIX, 惠普的HP-UX还有Oracle的Solaris

同时,研究还在继续,一些新的分支(folks)采用了BSD的工作作为基础。在CMU,BSD内核被作为基础来做一些新想法(idea)的原型,这些想法是:线程(threads),一个控制虚拟内存系统(virtual memory system)的API(通过可插拔的页面(though pluggable “papers” — user level mmap)),一个内核级的RPC系统(remote procedure call system)和最重要的一个想法,将一些内核级的操作(kernel level operation)移到用户空间(user space)。这个新的内核就是Mach内核。

注:

作者不确定mmap是否来自于Mach还是在什么时候被BSD采用的。但这些细节不重要了。

虽然Mach内核被描述为一个microkernel,但是直到version 2.5之前,他都只是一个提供线程,mmap消息传递的monilithickernel系统,所有的服务(services)都是在kernel模式下运行。

mmap: mmap是一个符合POSIX标准的Unix System Call,它可以将文件设备映射到内存中。

这时Rick Rashid(现在在微软)和Avie Tevanian(现在在苹果)提出了一个新的想法,可以加速Unix。想法是使用mmap系统调用将要从用户空间复制的数据传递到实现文件系统的“服务器(servers)”。这个想法本质上是一个尝试避免制作相同数据的副本的变体,但是它被作为microkernel的好处,即使该特征可以与microkernel隔离。

这个VM-backed faster Unix system的基准(benchmarks)使的NeXT 和 FSF的人们选择Mach作为他们的内核的基础。

NeXT:一家公司,维基百科链接,就是乔布斯被apple赶走之后自己又创办的那家公司

FSF: Free Software Foundation,自由软件基金会

接下来是Mach 2.5内核(基于BSD 4.2或4.3),GNU实际上不会开始工作多年。这是下一步操作系统使用的。

原文:Next went with the Mach 2.5 kernel (which was based on either BSD 4.2 or 4.3) and GNU would not actually start on the work for years. This is what the Nextstep operating systems were using.

不确定翻译的对不对

与此同时,CMU继续研究Mach,他们终于实现了在3.0版本的微内核上运行多个服务器的愿景。我不知道是否有人能够运行Mach 3.0,因为所有有趣的使用AT&T用户级服务器的代码,被他们认为是阻碍,所以它仍然是一个研究产品。

在这个时候,Jolitz团队对386架构做了4.3+ BSD的端口(a port of 4.3+ BSD to the 386 architecture),并发布了他们对DrDobbs的移植工作。 386BSD没有被积极维护,这时一个小组出现了,他们维护386BSD并使它向前发展,它们就是NetBSD团队。 NetBSD组内部的斗争导致了第一次分裂,FreeBSD是由此形成。 NetBSD当时想要专注于拥有一个跨平台的BSD,而FreeBSD希望专注于在x86平台上拥有一个非常出色的Unix。稍后,NetBSD由于一些其他争议再次分裂,这导致了OpenBSD的创建。

用于x86平台的BSD 4.3的一个分支与一个名为BSDi的公司一起商业化,原始Berkeley团队的成员在那里工作,并与大学的BSD团队保持良好的关系。

AT&T不高兴了,开始了AT&T vs BSDi诉讼,后来扩展到起诉大学。该诉讼是关于BSDi使用AT&T的专有代码,没有被伯克利重写。 相比于即将到来的Linux,这延迟了BSD。

虽然情况对于被告并不乐观,突然有人意识到SystemV已经根据BSD许可证纳入了大量的BSD代码,而AT&T没有履行他们在许可证中的义务。于是达成了一项解决方案,AT&T不必将其产品从市场上拉出,大学同意剥离基于AT&T代码的任何代码。

BSD 许可证:链接

这里的情况就是,BSDi用到了AT&T的代码,AT&T不爽了,然后告了BSDi,AT&T在用搭建System V又用到了BSD代码,然后它们两就各退了一步。

然后大学发布了BSD 4.4的两个版本,encumbered 版本和lite版本。encumbered版本可以启动并运行,但包含AT&T代码。 lite版本没有包含AT&T的任何代码,但无法运行。

然后在Lite版本上做了很多工作,在几个月之后做了一个引导系统出来。

同时,Mach 3.0微内核在没有user-land servers的情况下仍然不是非常有用。

user-land server: 不知道是什么东西

一个来自斯堪的纳维亚大学的学生(我相信,我可能有这个错误)是第一个创建一个完整的Mach 3.0系统,基于4.4 lite版本的完整的操作系统,我相信这被称为“Lites”。系统可以工作但是运行的很慢。

在1992-1996和现在BSD以及大多数其他Unix系统已经有一个mmap系统调用。“microkernel优势”从未真正实现。Next(注,个人觉得还是那家公司)还有一个monolithic kernel。 FSF仍然试图搭建Mach,并且不想触摸BSD代码或者为任何开源BSD的贡献努力,they kept charging away at a poorly specified kernel vision and they were drowning on RPC protocols for their own kernel.(注:不会翻译,就是损FSF)。microkernel在看起来很好,但结果是过度设计,只是使一切都更慢。

在这一点上,我们还有Linus vs Andy对microkernel和monolithic kernel的争论,世界开始意识到,不可能将所有这些额外的功能添加到microkernel,并且这个microkernel还比一个精心设计的monolithic kernel更好。

苹果还没有收购NextStep,但也开始将Mach作为未来操作系统的潜在内核。他们聘请开放软件基金会将Linux移植到Mach内核,这是在他们的Grenoble办公室完成的,我相信这被称为“mklinux”。

当苹果买了Next,他们手上的只是一个相对老的Unix基础,一个4.2或4.3基于Unix,现在,甚至没有免费的软件运行良好开箱在这些系统上。他们从FreeBSD雇用Jordan Hubbard升级他们的Unix堆栈。他的团队负责升级用户的领域,这并不奇怪,MacOS用户级升级到BSD的最新版本。

苹果在某一时刻将Mach从2.5切换到3.0,但决定不使用microkernel方法,而是将所有内容保留在过程中(in-process)。我从来没有能够确认苹果是否使用Lites,聘请了斯堪的纳维亚黑客,或者如果他们采用4.4 lite作为他们的操作系统。我怀疑他们做了,但我已经转移到Linux和停止跟踪BSD / Mach世界。

在90年代后期有一个传言,苹果的Avie试图雇用Linus(他在这一点上已经很有名)来为他的baby工作,但Linus选择继续在Linux上工作。

猜你喜欢

转载自blog.csdn.net/AlexZhang67/article/details/54864939