进入Mac OSX的第一步

先来理解一些概念

a microkernel (also known as μ-kernel) is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system (OS)。在20世纪80年代,传统的mono-kernels遇到了很多挑战(不断的有新的device driever被开发出来,而要将这些driver放到kernel中去是很麻烦的),为了适应这种新的情况,微内核的概念就被提了出来。第一个微内核就是Mach,但刚出来时,Mach的性能很糟糕,但内在的优越性还是吸引人们一直深入研究到90年代末。在这段时间里, CPU速度越来越快,比网速的增加速度要快很多,性能的劣势渐渐盖过了便捷开发的优势。人们试图改进性能,但是成本都是很高的,而且很多都是要把程序从用户态移到内核态。到2000年时,很多大范围的工作都停下来了(像卡耐基梅隆于1994年开发完Mach 3.0后就终止后续开发,犹他大学继续开发Mach4,但也于1996年最后一次release后没有后续更新)

NeXTSTEP 是由NeXT公司开发的一个基于Mach的操作系统,它开始运行于它们公司自己的workstation NeXTcube(使用摩托罗拉的处理器)上,后来还发布了几个版本。在1993年时NeXT与Sun合作,想要让精简NeXTSTEP object layers使其可以在Solaris操作系统(更准确的是Solaris on SPARC-based hardware)上运行,他们设计了OpenStep API。OpenStep API工作的主要任务就是去掉NeXTSTEP中NeXT特定的硬件部分和对Mach的依赖,这样就产生了一个更小的、只包括Display PostScript、Obj-C运行时和编译器和其他大部分Obj-C库的系统,而基础的操作系统和显示系统部分就不包含在内了。1994年夏天时发布了API的draft版本,而后发布了OpenStep兼容的新旗舰操作系统,并更名为OPENSTEP(后来该公司被Apple收购后,这组API被改名为CoCoa)。Early versions of NeXTSTEP used an "NX" prefix and contained only the Application Kit, relying on standard Unix libc types for low-level data structures. OPENSTEP remained NeXT's primary operating system product until they were purchased by Apple Computer in 1996. OPENSTEP was then combined with technologies from the existing Mac OS to produce Mac OS X.

来看看现在流行的OS的设计跟microkernel有没有啥关系:

Windows NT: 从学术定义的角度来说,不是microkernel的,因为它的OS components和drivers运行在同一个地址空间里;所有的OS component在一个共同的共享地址空间中;从而OS和driver之间没有任何保护;

之所以不用纯粹的microkernel,还是基于performance方面的考虑:独立的地址空间意味着频繁的context switch。

但它也具有microkernel的若干属性:1. OS  Personalities作为独立进程运行于用户空间;2. Kernel mode的组件之间不能互相访问数据结构;3. 使用formal接口进行参数传递、访问/修改 数据结构。

关于Windows NT的这方面介绍,可以参考 MS Windows NT Kernel-mode User and GDI White Paper

Mac OS X: 其内核的名字叫XNU,XNU是一个混合的内核,同时具有monolithic内核和microkernel的特性。XNU用与BSD同样的方式实现UNIX的系统调用,我随便打开一个terminal,然后输入 vi test, 然后在Activity Manager中看到vim这个进程总共发出了960次Unix系统调用,67次Mach系统调用,收到36条Mach消息;发出83条消息。XNU还是是使用Mach的,使用它的目的是管理CPU、Memory和为上层kernel(比如task 和 thread等)提供一些基本的抽象。BSD那部分的系统调用是可以直接调用Mach部分的, 而不是必须使用Mach message。Mach message在XNU中也是存在的,它用于delivery of events from the user,其他进程也可以使用Mach-Level IPC。

看起来Windows NT和Mac OS X都跟microkernel沾边,但都不是纯粹的microkernel系统。

原文地址:https://www.cnblogs.com/whyandinside/p/2922658.html