作為壹個BSD衍生的操作系統,OSX繼承了很多BSD的特性,包括POSIX系統調用、壹些BSD擴展(內核隊列)以及BSD的強制訪問控制。
蘋果新增的內容:“沙盒”機制。替換了原本系統配置的/etc目錄。標準的UNIX syslog被AppleSystem Log增強了。還有FSEvents新技術。
盡管XNU的絕對的核心是Mach,但XNU向用戶態展現出來的主要接口是BSD層。
sysctl(8)訪問內核內部狀態的標準方法。直接查詢內核變量的值,獲得重要的運行時診斷信息。也可以設置可寫變量的值。
內核組件也可以在運行會註冊額外的sysctl變量值,甚至增加整個名稱空間。
sysctl變量的範圍很廣,包括從壹些簡單的調試變量到其他可控制整個子系統行為的讀寫變量。ps和netstat都依賴於sysctl獲得PID和socket系列,當然也可以通過其他方式獲得。
kqueue是BSD中使用的內核事件通知機制。壹個kqueue指的是壹個描述符,這個描述符會阻塞等待知道壹個特定類型和種類的事件發生。用戶態的進程(或內核)可以等待這個描述符,因為kqueue提供了壹種用於壹個或多個進程同步的簡單高效的方法。
kqueue和對應的 kevent(表示事件的數據結構) 構成了內核異步I/O的基礎。
審計是OSX中壹個自包含的子系統。主要的用戶態組件是auditd,由launchd根據需要而啟動的後臺服務進程。這個後臺服務進程不負責實際的審計日誌記錄,審計日誌記錄是由內核本身直接完成的。然後這個後臺服務進程能控制內核。
如果啟用了審計,那麽XNU中編號從350到359的系統調用都被分配用於啟用和控制審計。
添加了對象級別的安全性,限制特定進程針對具體文件或資源的訪問權限。可以控制壹個給定的應用程序不允許訪問用戶的私有數據或某網站。
從內核的角度看,在各種系統調用的實現中插入了對MAC的調用,每壹個系統調用都必須先通過MAC的驗證,然後才能真正處理來自用戶態的請求。
MAC是OSX的隔離機制和iOS的entitlement機制的基礎。
UNIX從傳統上都依賴密碼文件 /etc/passwd 和保存密碼的散列文件 /etc/shadow 。在OSX單用戶(以及iOS)中,使用 /etc/master.passwd 作為shadow文件,其他情況都放棄了這些密碼文件,使用自己的 目錄服務 。
目錄服務的維護的內容不僅僅是用戶和用戶組,還保存了系統配置和很多其他方面的信息。
OSX還拋棄了大部分其他配置文件,這些配置文件傳統上在UNIX中是當做系統“註冊表”使用的。
為了維護系統配置,OSX和IOS使用了壹個特殊的守護程序—— configd(8) ,這個守護程序可以加載額外的可加載的bundle(插件),這個bundle位於 /System/Library/SystemConfiguration 下,包含IP和IPv6配置、日誌以及其他bundle。
可通過工具 scutil 來流量和查詢系統配置。
OSX也繼承了傳統UNIX的系統日誌功能。OSX10.4引入新的日誌模型,ASL,提供了更多特性,例如過濾和搜索。
ASL采用模塊化設置,同時提供了以下四種日誌接口:
ASL日誌收集在 /var/log/asl 目錄中。 aslmanager(8) 命令負責管理這些日誌,launchd自動運行這條命令。
ASL日誌采用的是二進制格式,而不是syslog采用的文本文件。日誌文件變小了,但不像syslog那麽對grep友好。OSX包含了syslog()命令用於顯示和查看日誌,並提供了搜索和過濾的功能。
OSX有非常強大的支持腳本的能力。通過osascript(1)命令和友好的Automator應用程序可以訪問AppleScript
FSEvents是文件系統的通知API,應用程序可以簡單快速地響應文件添加、修改和刪除事件。
OSX提供了壹個系統級的通知機制,這是分布式IPC的壹種形式。
通知機制核心部分在於notifyd(8)守護進程,在系統引導時啟動,這是Darwin的通知服務器。
Entitlement可以將壹些表現行為良好的應用程序單獨從監禁中釋放出來。