MacOSX 的 Mach kernel

大學的 OS 課中就學到 MacOSX 是用 Mach kernel 來吃 BSD 的,現在在複習 OS,便詳細的再看一次,還是深深覺得 MacOSX 真是厲害,難怪我只會想買含有 MacOSX 的電腦(嗯…奇怪的結論)。

Kernel
kernel 負責從 hardware 到 user 中間的所有事情,包括 file system、scheduling、memory…等,kernel 蓋住(layering)hardware,user interface 蓋住 kernel…。

Micro kernel
像是 Mach,只保留必要的 kernel 功能,像是 process 管理和 memory 管理,不是必須的功能就留給 system 或 user program 來實作。
例如程式要存取檔案,kernel 收到後,丟 message 給 file server(不在 kernel mode 了),file server 配置好正確參數後,再丟 message 回去給 kernel,kernel 跟程式講。透過 message passing 的方式轉送。
好處是容易 porting,容易更改,核心可以更小;當然效能會差一點。

Module
同樣的概念,我們可以把 kernel 中不必要的東西都丟出去,只在必要的時候在把它讀進來 kernel mode 來做,像是 device driver 就是最常用的例子,現代的 linux 和 windows kernel 都會大量採用 module 設計。
保留了 kernel 的重要功能,又可以額外動態加入功能,效能又不會太差。

MacOSX
透過 Mach microkernel 把 BSD kernel 包進來。其中:

  • Mach 負責:memory management, remote procedure call, IPC, thread scheduling
  • BSD 提供:BSD command line interface, networking, file systems, POSIX APIs
  • 提供 kernel extension 可以動態載入 kernel module。

application environments 與 common services 會直接與 Mach 或是 BSD kernel 互動;因此在 BSD 下開發所使用的 API 能大部份相容在 MacOSX 下(因為直接用 BSD 下實作的 POSIX)。例如,你可以用 BSD 的 system call 去做記憶體管理(會轉給 Mach 做),或是直接透過 Mach 操作(實際有沒有這個 API 我不知道,概念上是對的)。

所以 MacOSX 就是在創新過程上超級懶惰的作業系統,但是實際上很有用,真的有效。或是說,他是一個「撒尿牛丸」的經典例子。

2 years ago
MacOSX, OS, 心得,
blog comments powered by Disqus