XNU

維基百科,自由的百科全書
跳至導覽 跳至搜尋
XNU kernel
開發者蘋果公司
程式語言C, C++
作業系統家族類Unix
運作狀態開發中
源碼模式開放原始碼
首次發佈1996年12月,​29年前​(1996-12
當前版本
    Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    支持的語言英文, 其他
    支援平台IA-32, x86-64, ARM
    內核類別混合
    許可證蘋果公共原始碼許可證 2.0
    官方網站opensource.apple.com/source/xnu
    倉庫
    • {{URL|example.com|可选的显示文本}}
    Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)

    XNU是一個由蘋果電腦開發用於macOSiOSiPadOStvOSwatchOSvisionOS作業系統的作業系統內核。它是Darwin作業系統的一部分,跟隨着Darwin一同作為自由及開放原始碼軟件被發佈。XNU是「X is Not Unix」的遞迴縮寫[1]

    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[2]IA-32x86-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),審計機制,強制訪問控制,和一些鎖原語[3]。XNU中的BSD代碼來自FreeBSD內核。儘管其中相當一部分代碼都被深度修改過,蘋果和FreeBSD項目之間依然會交換代碼[4]

    K32/K64[編輯]

    XNU在Mac OS X 10.6 Snow LeopardDarwin版本號10)及之後演化為兩個分支,稱為K32的32位版和稱為K64的64位[5]。K32可以在用戶態運行64位應用。Mac OS X 10.6 的新特性是在64位用戶空間運行XNU。在除2008年及之後的Mac ProXserve外的所有設備上,K32是10.6 Server系統的默認內核,並且可以運行64位應用[6]。K64相比K32有如下幾點優勢[7]

    • 可以管理超過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++子集編寫[8]。藉助它的面向對象設計,框架提供每種設備驅動需要的常見特性,以使驅動程序可以用更少的時間和代碼完成。I/O Kit 具有多線程設計,對稱多處理安全,支持熱拔插設備和自動動態配置設備等特性。 很多設備驅動可以編寫運行於用戶態,進一步提升了系統的穩定性。如果用戶態的驅動崩潰,內核不會因此崩潰。但是,內核態的驅動崩潰會導致內核崩潰。磁盤適配器和網絡適配器驅動、顯卡驅動、USB驅動和火線控制器驅動以及虛擬機軟件如VirtualBoxParallels Desktop for MacVMware Fusion等的驅動都是典型的內核態驅動。

    共享資源保護[編輯]

    為了在多核設備上安全運行,對共享資源(文件、數據結構等) 的訪問必須被序列化,這樣線程和進程就無法在同一時間修改同一資源。原子操作、自旋鎖、臨界區塊互斥鎖("mutexes")和序列化標記(serializing tokens)都可以實現防止訪問衝突發生。從Mac OS X 10.4與Darwin8.0開始,XNU如較新版本的Linux與FreeBSD一樣使用一種折中的互斥模型來獲得在多處理器系統上的高性能表現。

    參見[編輯]

    • 內核
    • A/UX
    • mkLinux
    • Darwin – 蘋果公司以XNU為內核發佈的開源作業系統
    • macOS – 蘋果公司以XNU為內核發佈的作業系統

    參考資料[編輯]

    1. ^ Porting UNIX/Linux Applications to Mac OS X: Glossary. Apple Computer. 2005 [March 27, 2009]. (原始內容存檔於2012年8月13日). 
    2. ^ iPhone processor found: 620MHz ARM CPU頁面存檔備份,存於互聯網檔案館) (July 1, 2007) Retrieved January 6, 2008
    3. ^ Watson, Robert. Re: freebsd-advocacy Digest, Vol 248, Issue 1. freebsd-advocacy (郵件列表). August 2, 2008 [October 24, 2013]. (原始內容存檔於2021-02-25). 
    4. ^ FreeBSD Quarterly Status Report (Grand Central Dispatch - FreeBSD port). April 2009 [October 24, 2013]. (原始內容存檔於2009-10-14). 
    5. ^ Mac OS X 10.6 Snow Leopard: the Ars Technica review, page 5. [2017-04-08]. (原始內容存檔於2012-08-13). 
    6. ^ Mac OS X Server v10.6: Macs that use the 64-bit kernel. [2017-04-08]. (原始內容存檔於2010-12-05). 
    7. ^ What's New in Mac OS X: Mac OS X v10.6. [2017-04-08]. (原始內容存檔於2009-12-08). 
    8. ^ I/O Kit uses a restricted subset of C++. [2017-04-08]. (原始內容存檔於2019-04-19). 

    外部連結[編輯]