XNU
XNU是一個由蘋果電腦開發用於macOS操作系統的操作系統內核。它是Darwin操作系統的一部分,跟隨着Darwin一同作為自由及開放源代碼軟件被發布。它還是iOS、tvOS和watchOS操作系統的內核。XNU是X is Not Unix的縮寫[3]。
開發者 | 蘋果公司 |
---|---|
編程語言 | C, C++ |
作業系統家族 | 類Unix |
運作狀態 | 開發中 |
源碼模式 | 開放原始碼 |
首次發布 | 1996年12月 |
當前版本 | |
支持的語言 | 英文, 其他 |
支援平台 | IA-32, x86-64, ARM |
內核類別 | 混合 |
許可證 | 蘋果公共源代碼許可證 2.0 |
官方網站 | opensource |
倉庫 |
XNU最早是NeXT公司為了NeXTSTEP操作系統而發展的。它是一種混合式核心(Hybrid kernel),結合了由卡內基美隆大學發展的Mach 2.5版,4.3BSD,與稱為Driver Kit的面向對象程序設計應用程序界面。
在蘋果電腦收購NeXT公司之後,XNU的Mach微內核被升級到Mach 3.0,BSD的部分升級至FreeBSD,Driver Kit則改成I/O Kit,一套以C++撰寫的應用程序界面。
內核設計
XNU是一個混合內核,將宏內核與微內核兩者的特性兼收並蓄,以期同時擁有兩種內核的優點————比如在微內核中提高操作系統模塊化程度以及讓操作系統更多的部分接受內存保護的消息傳遞機制,和宏內核在高負荷下表現的高性能。
到2007年為止,XNU支持單核和具有對稱多處理的ARM[4],IA-32和x86-64處理器。在第10版(即Mac OS X 10.6)之後,不再支持PowerPC。
Mach
XNU內核以一個被深度定製的Mach3.0內核作為基礎。如此這般,它便可以把操作系統的核心部分作為獨立的進程運行,由此帶來極大的靈活性(Mach核心之上可平行運行多個操作系統)。但是因為內核態/用戶態的上下文切換會額外消耗時間,同時內核與服務進程之間的消息傳遞也會降低運行效率,所以這種設計通常會降低性能。為了提高效率,在 Mac OS X 中BSD部分與Mach一起內建於核心部分。深度定製的「混合」Mach3.0內核與傳統BSD內核融合一體的產物就是一個「混合」內核,同時具有兩者的優點與缺點。
BSD
內核的伯克利軟件套件(BSD)部分提供了POSIX應用程序接口(BSD系統稱為API):基於Mach的任務之上的Unix進程模型,基本安全策略,用戶和用戶組,權限,網絡協議棧,虛擬文件系統(包括一個文件系統無關的日誌層),幾個本地文件系統(例如HFS/HFS+),網絡文件系統(NFS)客戶端與服務器,加密框架,UNIX System V進程間通信(IPC),審計機制,強制訪問控制,和一些鎖原語[5]。XNU中的BSD代碼來自FreeBSD內核。儘管其中相當一部分代碼都被深度修改過,蘋果和FreeBSD項目之間依然會交換代碼[6]。
K32/K64
XNU在Mac OS X 10.6 Snow Leopard(Darwin版本號10)及之後演化為兩個分支,稱為K32的32位版和稱為K64的64位版[7]。K32可以在用戶態運行64位應用。Mac OS X 10.6 的新特性是在64位用戶空間運行XNU。在除2008年及之後的Mac Pro和Xserve外的所有設備上,K32是10.6 Server系統的默認內核,並且可以運行64位應用[8]。K64相比K32有如下幾點優勢[9]:
- 可以管理超過32GB的內存,內存地址空間相比32位內核有巨大增長。
- 緩存容量可以超過32位內核空間的限制,潛在提升I/O性能。
- 當使用高性能網絡設備或多個GPU時性能會提升,因為即使在直接存儲器訪問DMA緩存很大的情況下內核也可以把所有設備映射在64位地址空間中。
在支持64位內核的機器啟動時按下6和4按鍵會使機器使用K64啟動。K64可以運行32位應用,但不會運行32位的內核模塊,所以這些內核模塊需要移植到K64才能被加載。
I/O Kit
I/O Kit 是一個設備驅動框架,用基於Embedded C++的C++子集編寫[10]。藉助它的面向對象設計,框架提供每種設備驅動需要的常見特性,以使驅動程序可以用更少的時間和代碼完成。I/O Kit 具有多線程設計,對稱多處理安全,支持熱拔插設備和自動動態配置設備等特性。 很多設備驅動可以編寫運行於用戶態,進一步提升了系統的穩定性。如果用戶態的驅動崩潰,內核不會因此崩潰。但是,內核態的驅動崩潰會導致內核崩潰。磁盤適配器和網絡適配器驅動、顯卡驅動、USB驅動和火線控制器驅動以及虛擬機軟件如VirtualBox,Parallels Desktop for Mac和VMware Fusion等的驅動都是典型的內核態驅動。
共享資源保護
為了在多核設備上安全運行,對共享資源(文件、數據結構等) 的訪問必須被序列化,這樣線程和進程就無法在同一時間修改同一資源。原子操作、自旋鎖、臨界區塊、互斥鎖("mutexes")和序列化標記(serializing tokens)都可以實現防止訪問衝突發生。從Mac OS X 10.4與Darwin8.0開始,XNU如較新版本的Linux與FreeBSD一樣使用一種折中的互斥模型來獲得在多處理器系統上的高性能表現。
參見
參考資料
- ^ Release 1228. 2007年10月30日 [2023年6月22日].
- ^ xnu-8796.101.5. 2023年6月14日 [2023年7月30日].
- ^ Porting UNIX/Linux Applications to Mac OS X: Glossary. Apple Computer. 2005 [March 27, 2009]. (原始內容存檔於2012年8月13日).
- ^ iPhone processor found: 620MHz ARM CPU (頁面存檔備份,存於網際網路檔案館) (July 1, 2007) Retrieved January 6, 2008
- ^ Watson, Robert. Re: freebsd-advocacy Digest, Vol 248, Issue 1. freebsd-advocacy (郵件列表). August 2, 2008 [October 24, 2013]. (原始內容存檔於2021-02-25).
- ^ FreeBSD Quarterly Status Report (Grand Central Dispatch - FreeBSD port). April 2009 [October 24, 2013]. (原始內容存檔於2009-10-14).
- ^ Mac OS X 10.6 Snow Leopard: the Ars Technica review, page 5. [2017-04-08]. (原始內容存檔於2012-08-13).
- ^ Mac OS X Server v10.6: Macs that use the 64-bit kernel. [2017-04-08]. (原始內容存檔於2010-12-05).
- ^ What's New in Mac OS X: Mac OS X v10.6. [2017-04-08]. (原始內容存檔於2009-12-08).
- ^ I/O Kit uses a restricted subset of C++. [2017-04-08]. (原始內容存檔於2019-04-19).
外部連結
- http://opensource.apple.com/source/xnu/ (頁面存檔備份,存於網際網路檔案館)
- Unofficial mirror of XNU at GitHub (頁面存檔備份,存於網際網路檔案館)
- XNU: The Kernel (頁面存檔備份,存於網際網路檔案館) – Amit Singh 於 2003年12月寫的對XNU結構組成的概述
- Inside the Mac OS X Kernel (頁面存檔備份,存於網際網路檔案館) – "This talk intends to clear up the confusion by presenting details of the Mac OS X kernel(這次演講旨在通過深入介紹Mac OS X 內核來澄清誤解)"