OS X 架構概述
層次結構:
- 用戶體驗層
- Aqua、Dashboard、Spotlight和accessibility
- iOS中包括SpringBoard
- 應用框架層
- Cocoa、Carbon、Java
- iOS中 Cocoa Touch
- 核心框架
- 核心框架、OpenGL、QuickTime
- Darwin
- 內(nèi)核和UNIX shell環(huán)境
Darwin是完全開源的,提供了底層API,上面那些層閉源。
Darwin架構:
Darwin,很大程度上使用FreeBSD的代碼和工具,是Mac OS X的核心, 由FreeBSD 4.5和NeXTSTEP混合派生。
XNU,由蘋果電腦發(fā)展的操作系統(tǒng)內(nèi)核,被使用于Mac OS X中。它是Darwin操作系統(tǒng)的一部分,跟隨著Darwin一同作為自由及開放源代碼軟件被發(fā)布。XNU是X is Not Unix的縮寫。XNU實際上由兩種技術混合在一起:Mach和BSD,此外還添加一些其他的組件,主要是IOKit
柏克萊軟件套件(英語:Berkeley Software Distribution,縮寫為 BSD),也被稱為柏克萊Unix(Berkeley Unix),是一個操作系統(tǒng)的名稱。衍生自Unix(類Unix),1970年代由伯克利加州大學的學生比爾·喬伊(Bill Joy)開創(chuàng),也被用來代表其衍生出的各種套件。
用戶體驗層
用戶體驗層
- Aqua
- Quick Look
- Dashboard
- Spotlight
- accessibility
- SpringBoard
Aqua
Aqua是OS X GUI。
系統(tǒng)的第一個用戶態(tài)進程launchd負責啟動GUI,支持GUI工作的主進程是WindowServer。
Darwin —— UNIX 核心
Darwin 是完全成熟的UNIX實現(xiàn)。
Shell
默認使用shell是 /bin/bash
文件系統(tǒng)
OS X使用HFS+文件系統(tǒng)。
四個變種:
- 大小寫敏感/不敏感
- 可選的日志功能
UNIX的系統(tǒng)目錄
- /bin
- UNIX 的二進制文件,常用UNIX命令
- /sbin
- 系統(tǒng)程序,這些二進制程序用于系統(tǒng)管理,例如文件管理和網(wǎng)絡配置
- /usr
- User目錄,第三方軟件安裝目錄
- 目錄中包含bin、sbin、lib
- /usr/lib 用戶存放共享的目標文件
- /etc
- 其他文件
- 包含大部分配置文件,例如密碼文件/etc/passwd
- 這個目錄實際上是指向/private/etc的符號鏈接
- /dev
- BSD設備文件
- /tmp
- 臨時目錄,所有人都可寫的目錄
- /var
- 各種雜項文件。保存日志文件、郵件存儲等
OS X 特有目錄
- /Applications
- 系統(tǒng)所有應用程序的默認目錄
- /Developer
- 安裝開發(fā)者工具
- /Library
- 系統(tǒng)應用的數(shù)據(jù)、幫助和文檔
- /Network
- 用于鄰居節(jié)點發(fā)現(xiàn)和訪問的虛擬目錄
- /System
- 系統(tǒng)文件目錄,包含系統(tǒng)重要組件,錄入框架和內(nèi)核模塊
- /Users
- 所有用戶的主目錄
- /Volumes
- 可移動媒體和網(wǎng)絡文件系統(tǒng)的掛載點
- /Cores
- 保存核心轉儲文件
iOS 文件系統(tǒng)的區(qū)別
- 文件系統(tǒng)是大小寫敏感的,文件系統(tǒng)是部分加密的
- 只有一個/User目錄
bundle
一種標準化的層次結構,保存了可執(zhí)行代碼以及代碼所需要的資源。
系統(tǒng)調用
OS X導出了兩套獨特的調用接口:Mach調用和POSIX調用。
系統(tǒng)調用并不是直接調用的,而是通過libSystem.B.dylib中的淺層封裝進行的。
XNU 概述
內(nèi)核XNU是Darwin的核心,由幾個組件構成:
- Mach微內(nèi)核
- XNU 的核心
- 進程和線程的抽象
- 虛擬內(nèi)存管理
- 任務調用
- 進行間通信和消息傳遞機制
- BSD層
- Mach之上,XNU中不可分割的一部分,提供了更高層次的抽象
- UNIX進程模型
- POSIX線程模型及其相關的同步原語
- UNIX用戶和組
- 網(wǎng)絡協(xié)議棧
- 文件系統(tǒng)訪問
- 設備訪問
- libKern
- I/O Kit
- 設備驅動框架
內(nèi)核是模塊化的,允許動態(tài)加載插件的形式進行內(nèi)核擴展。