OS_X_体系结构

OS X 是蘋果公司 Mac OS 作業系統替代品的產物。 在多次失敗的嘗試之後，蘋果於 1994 年啟動了 Pink 項目（後來和 IBM 進行了合作），這就是 Taligent 和 Copland ，兩年後這一項目取消。
通過收購獲得了 NeXT 和其 NeXTSTEP 作業系統之後，蘋果公司開始著手開發他們最新的作業系統 (Mac OS X) 
OS X 首次出現是 1999 年的 OS X Server 1.0，第一個正式的 OS X 桌面版本發布於 2001 年 3 月 24 日。
從 10.5 版本開始，OS X 通過了 Open group Unix O3 單一 Unix 規範認證。

2016 年 6 月，蘋果公司宣布 OS X 更名為 macOS，以便與蘋果其他作業系統如 iOS、watchOS 和 tvOS 保持統一的命名風格。

Mac OS X 包含兩個主要的部分：以 FreeBSD 原始碼和 Mach 微核心為基礎的 XNU 混合內核，並在 XNU 上構建的 Darwin 核心系統；及一個由蘋果開發，稱為 Aqua 的閉源、獨占版權的圖形用戶界面。
細分的看，Mac OS X 系統可以分成五層結構，每一層有其代表性的技術。

## 開發

### NeXTSTEP

NeXTSTEP 使用基於卡內基梅隆大學開發的 Mach 2.5 微內核 BSD 4.3 子系統開發的混合內核。 NeXTSTEP 還推出了基於 DPS 的窗口系統，通過在顯示器和印表機上使用同一種語言以達到更好的所見即所得效果。 NeXT 還包含他們從 StepStone 的收購的物件導向的 Objective-C 的語言和一系列旨在加快軟體開發的框架（工具包）。

NeXTSTEP 最初設計運行在跑摩托羅拉 68K 處理器上，但後來被移植到英特爾的 x86，惠普的 PA-RISC 和昇陽電腦的 SPARC 處理器。後來，開發工具和框架以 OpenStep 形式發布，作為一個開發平台，它可以其他作業系統上運行。

### Rhapsody

1997 年 2 月 4 日，蘋果公司收購了 NeXT，並著手開發 Rhapsody 作業系統。Rhapsody 基於 NeXTSTEP 構建，並將核心系統移植到了 PowerPC 架構上並添加了一個重新設計的用戶接口。允許舊 Mac OS 的程序運行在獨立的 JAVA 平台上的模擬層稱為 Blue Box，而 Objective-C 開發工具和框架被稱為 Yellow Box，Yellow Box 將為 Windows 獨立提供。

Rhapsody 項目的最終結果，以 OS X Server 1.0 的形式於 1999 年發布。

### Mac OS X

在 1998 年的蘋果全球開發者大會 (WWDC) 上，由於 Macintosh 平台軟體開發者對 Rhapsody 上的 Yellow Box 和 Blue Box 存在諸多不滿，蘋果公司作出回應，稱 Mac OS X 將提供一個不同於 Rhapsody 中現存的、全新的 API。

來自 Macintosh Toolbox 的關鍵 API 使得 OS X 可以直接運行在 BSD 層上而不需要 Macintosh 模擬層，這個接口被稱為 Carbon，是 Mac OS X 中五大主要 API 之一，Carbon 去除了約 2000 個有問題的 API（系統中 API 總數約 8000 個）並將之替換為現代作業系統兼容的系統調用。

與此同時，蘋果宣布將 Mach 部分內核版本號升級到 3，BSD 部分的內核將被 FreeBSD, NetBSD 和 OpenBSD 項目所替代. 他們還發布了名為 I/O Kit 的新驅動層，用於替代 NeXTSTEP 中的 Driver Kit，針對 Driver Kit 缺少電源管理和熱交換特性、自動配置功能匱乏等問題作出了改進。

在 1999 年的 WWDC 上，蘋果公司發布了 Quartz，一個基於 可攜式文檔格式 的窗口系統以避免產生（先前 NeXTSTEP 中 DPS 系統中遇到過的）和 Adobe 的版權糾紛和相關費用。

蘋果還宣布，Yellow Box 被更名為 Cocoa 並撤回了 Yellow Box 將在 Windows 系統上提供的承諾。此次 WWDC 蘋果還首次演示了將 Mac OS X 運行在 HFS+ 格式的驅動器上 。

第一個面向消費者的 Mac OS X 版本是 2000 年 9 月 13 日發布的公開預覽版。

## 結構

### 內核和設備服務層

內核和設備服務層包括 XNU 內核、設備驅動和其他底層組件。
XNU 是由蘋果電腦發展的作業系統內核，被使用於 Mac OS X 中。它是 Darwin 作業系統的一部分，跟隨著 Darwin 一同作為自由及開放原始碼軟體被發布。其中，XNU 是 X is Not Unix 的縮寫。
XNU 包括 Mach 和 BSD （libSystem）兩個部分，最初版本的 XNU 是 Mach 2.5 版本和 BSD 4.3 的混合，隨著 OS X 的發布，Mach 版本升級到 3，BSD 部分被 FreeBSD 替代。

* Mach：

Mach 是一個由卡內基梅隆大學開發的計算機作業系統微內核，是最早實現微核心作業系統的例子之一，也是許多其它相似的項目的標準。
同 UNIX 一樣，Mach 系統也包含了一組豐富的實用工具，並保留了 Unix 中驅動程序的概念用以硬體交互。
在 OS X 中，Mach 內核為系統提供了 64 位內核和主要驅動支持。

* BSD：

伯克利軟體套件（英語：Berkeley Software Distribution，縮寫為 BSD），也被稱為伯克利 Unix（Berkeley Unix），是一個作業系統的名稱，現在 BSD 也被用於稱呼其衍生的各種套件。
BSD 開創了現代計算機的潮流，由於 BSD 設計出眾，代碼編寫清晰，包括它的文檔，BSD 是最早添加庫以支持 IP 協議棧和伯克利套接字的 Unix 系統，套接字系統的發明使得計算機系統的網絡通信和本地讀寫一樣方便，BSD 。時至今日，BSD 仍在學術機構，乃至許多商業或自由產品的高科技實驗中，繼續被用作試驗平台，甚至在嵌入式設備中。
最初的 OS X 的內核 XNU 所使用的是 4.3BSD ，該版本發布於 1986 年 6 月。時至今日，OS X 中的許多命令行工具還是來源於 BSD。在 OS X 中，文件系統、網絡棧、IPC、通知機制的支持也來自 BSD。

### 核心系統層（Core OS）

核心系統層的技術和框架是硬體 / 網絡相關的底層服務，這些服務是和內核特性直接相關的。包括以下組件和框架（不完全列舉）：

* 安全措施：（為上層提供支持）包括 Gatekeeper、APP 沙盒化、代碼簽名等。
* Core OS 框架：包括磁碟管理、硬體加速、OpenCL、系統配置等。
* Hypervisor：虛擬化支持。

### 核心服務層（Core service）

核心服務層和用戶界面的應用程式沒有直接聯繫，但是它們建立在內核和核心系統層上，為 APP 提供諸如數據處理、字符串控制、封裝網絡庫等核心支持。包括以下組件和框架（不完全列舉）：

* iCloud 存儲服務和 CloudKit
* 社交網絡帳號：包括保存在 OS X 內的社交帳戶的管理。
* 文件管理
* 本地化設置：語言、貨幣、日期和時間的格式化、編碼、字體排版和渲染。
* 安全認證：包括本地帳戶、信任的證書、安全傳輸、密鑰串訪問等。
* Time Machine 支持：OS X 的系統備份功能。
* Bonjour：區域網下的設備發現服務，是印表機服務和區域網檔案分享服務的基礎。
* XML 和 SQLite 支持：系統和 APP 的配置文件使用 XML 格式進行存儲，數據使用 SQLite 格式進行保存。
* Webkit: 允許 APP 進行網頁渲染，具有 Web Core 和 JavaScript Core 兩個部分。
* 快速預覽：包括在 spotlight 中預覽和空格鍵預覽。
* Store Kit: 為 Mac Appstore 和 iTunes 提供支持，處理相關請求。
* Core Services Umbrella Framework：包括管理文件打開方式、MIME 支持、文件元數據管理、SearchKit 搜索支持、詞典服務等。
  * Carbon: Carbon 也是 OS X 上的原生 API，也是 Core Services Umbrella Framework 的子集，和 Cocoa 不同的是，Carbon 是面向過程（Procedural）的程式語言 API，也更加接近系統底層，可以使用包括 C 和 C++ 在內的多種程式語言進行開發，類似 Windows 的 win32 API。Carbon API 提供了良好的向下兼容性，為開發者快速將舊 MacOS 上的程序移植到 OS X 提供了便利，但是 Carbon 本身已經處於被蘋果不建議使用的狀態，也沒有 64 位支持，在 OS X 10.8 後蘋果沒有對 Carbon 提供後續更新。

### 媒體層

媒體層負責音頻、圖像等多媒體文件的處理，2D 和 3D 圖像的渲染，各種動畫支持。

* OpenGL ：OpenGL 是一個定義了一個跨程式語言、跨平台的應用程式接口（API）的規範，它用於生成二維、三維圖像。OpenGL 本身與語言和平台無關，它將具體實現交給窗口系統，OS X 也提供了 OpenGL 的實現。
* Metal ：Metal 是一種面向底層的硬體加速 API，Metal 在單一 API 下提供了類似 OpenGL 和 OpenCL 的功能，旨在為提供和 Windows 上 Direct3D 12 和跨平台的 Vulkan 相似的功能和特性。 從 10.11 開始在 OS X 上提供支持。
* Quartz：Quartz 是 OS X 上的 UI 繪圖層，由 Quartz Compositor（合成視窗系統，管理和合成幕後視窗視頻來創建 Mac OS X 用戶界面） 和 Quartz 2D（以 PDF 規範為基礎的圖形庫，用來繪製二維文字和圖形，現在被稱為 Core Graphics）組成。
* 顏色管理
* 音視頻文件解析：包括 QuickTime Kit、Core Media 、Core Video 等一系列多媒體處理框架。
* 字體渲染系統：包括 Cocoa Text 系統和 Core Text。

### 圖形用戶界面（Cocoa 層）

圖形用戶界面層包括設計和用戶交互的 UI、響應用戶操作、管理程序的行為。

* Aqua：Aqua 是承載於 Quartz 上的 GUI 系統和視覺主題，首次發布於 2000 年。
* X11（XQuartz）: XQuartz 是 OS X 上 X 窗口系統的一個實現，最初和 OS X 10.2 公開預覽版一起提供，從 OS X 10.8 開始不隨系統提供。
* Spotlight：OS X 下的搜索工具。
* Cocoa: Cocoa 是 Mac OS X 上原生物件導向的編程環境，建立在 Quartz 上並由 Objective-C 語言編寫，Cocoa 程序也主要使用 Objective-C 語言編寫，但是通過橋接技術，也可以使用 JAVA、Python、Ruby 等語言開發 Cocoa 應用。Cocoa 是典型的 MVC 模式。
  * Appkit：直接派生自 NeXTSTEP 的 AppKit 的。它包含了程序與圖形用戶界面交互所需的代碼。
  * Foundation 工具包：首先出現在 OpenStep 中。在 Mac OS X 中，它是基於 Core Foundation 的。作為通用的物件導向的函數庫，Foundation 提供了字符串，數值的管理，容器及其枚舉，分布式計算，事件循環，以及一些其它的與圖形用戶界面沒有直接關係的功能。
  * Core Data：Core Data 是 Mac OS X 中 Cocoa API 的一部分，它允許按照 MVC 模型組織 APP 的數據，並以 XML，二進位文件或 SQLite 數據文件的格式將其序列化。

## 參考文檔

## 外部連結

* OS X 和 PDF （頁面存檔備份，存於網際網路檔案館）
* Apple: Mac OS X （頁面存檔備份，存於網際網路檔案館） — OS X 官方頁面。
* Mac OS X (arstechnica.com) （頁面存檔備份，存於網際網路檔案館） —  Mac OS X 評測 (10.0 - 10.10)
* Mac OS X Internals The web page associated with the book.
* OpenGL for OS X （頁面存檔備份，存於網際網路檔案館） Apple developer guide for OpenGL.
* Kernel Extension Programming Topics （頁面存檔備份，存於網際網路檔案館） Mac developer library.