XNUカーネル | |
| 開発者 | アップル社 |
|---|---|
| 書かれた | C、C++ |
| OSファミリー | Unixライク、Unix |
| 作業状態 | 現在 |
| ソースモデル | オープンソース |
| 初回リリース | 1996年12月 |
| リポジトリ |
|
| プラットフォーム | 現在: x86-64、64ビット ARM、32 ビット ARM (32 ビット ARM サポートはクローズドソース) 履歴: PowerPC ( 32 ビットおよび 64 ビット)、IA-32 |
| カーネルタイプ | ハイブリッド |
| ライセンス | Apple パブリック ソース ライセンス2.0 |
| 先行 | マッハ、ニューカーネル |
| 公式サイト | github.com/apple-oss-distributions/xnu |
XNU(「X is Not Unix」)は、1996年12月からApple社でMac OS X(現在のmacOS)オペレーティングシステムで使用するために開発され、無料のオープンソースソフトウェアとしてリリースされたコンピュータオペレーティングシステム(OS )カーネルです。Darwin OSの一部としてリリースされ、macOSの基礎となっているほか、 Apple TVソフトウェア、iOS、iPadOS、watchOS、visionOS、tvOSの基礎でもあります。[1]
XNUはもともとNeXTによってNeXTSTEPオペレーティングシステム用に開発されました。カーネギーメロン大学で開発されたMachカーネルのバージョン2.5から派生したハイブリッドカーネルで、Machプリミティブ上で動作するように修正された4.3BSDカーネルの大部分と、 DriverKitと呼ばれるドライバを書くためのObjective-Cのアプリケーションプログラミングインターフェース(API)が組み込まれていました。[2]
AppleがNeXTを買収した後、カーネルはOSF [3]とFreeBSDプロジェクトのOSFMK 7.3から派生したコードで更新され、DriverKitはC++ [4](Embedded C++に基づく)[5]の制限されたサブセットであるIOKitの新しいAPIに置き換えられました。
カーネル設計
XNU は、モノリシック カーネルとマイクロカーネルの両方の機能を備えたハイブリッド カーネルであり、マイクロカーネルのメッセージ パッシング機能など、両方のテクノロジを最大限に活用して、モジュール性を高め、OS のより大きな部分でメモリ保護のメリットを享受したり、一部の重要なタスクでモノリシック カーネルの速度を維持したりすることを目指しています。
2021 年現在[アップデート]、XNU は ARM64 および x86-64 プロセッサ (1 プロセッサおよび対称型マルチプロセッシング (SMP) モデルの両方) で動作します。PowerPC のサポートは、 Mac OS X Snow Leopardのバージョン以降で削除されました。IA -32のサポートは、 Mac OS X Lionのバージョン以降で削除されました。32 ビット ARM のサポートは、 iOS 11のバージョン以降で削除されました。
マッハ
XNUカーネルのベースは、大幅に変更された(ハイブリッド)Open Software Foundation Machカーネル(OSFMK)7.3です。[3] OSFMK 7.3は、ユタ大学のMach 4カーネルと、オリジナルのカーネギーメロン大学のMach 3.0マイクロカーネルからフォークされた多くのMach 3.0バリアントから適用可能なコードを含むマイクロカーネル[6]です。
OSFMK 7.3 は、オペレーティング システムのコアを独立したプロセスとして実行できるため、柔軟性が大幅に向上します (Mach コア上で複数のオペレーティング システムを並行して実行できます)。ただし、時間のかかるカーネル/ユーザー モードのコンテキスト切り替えや、カーネルのアドレス空間とサービス デーモンのアドレス空間間のメッセージのマッピングまたはコピーから生じるオーバーヘッドにより、パフォーマンスが低下することがよくあります [引用が必要] 。
Apple は OSF から OSFMK 7.3 のライセンスを取得し、 Mach コードとともにBSD関数をカーネルに組み込むことで、いくつかのタスクを効率化しようとしました。その結果、大幅に変更された (ハイブリッド) OSFMK 7.3 カーネルが誕生しました。
BSDA の
カーネルの Berkeley Software Distribution (BSD) 部分は、Portable Operating System Interface ( POSIX )アプリケーションプログラミングインターフェース(API、BSD システムコール)、 Mach タスク上のUnixプロセスモデル、基本的なセキュリティポリシー、ユーザー ID とグループ ID、権限、ネットワークプロトコルスタック(プロトコル)、仮想ファイルシステムコード (ファイルシステムに依存しないジャーナリング層を含む)、 Hierarchical File System (HFS、HFS Plus (HFS+)) やApple File System (APFS)などのいくつかのローカルファイルシステム、Network File System (NFS) クライアントとサーバー、暗号化フレームワーク、UNIX System V プロセス間通信(IPC)、監査サブシステム、強制アクセス制御、およびいくつかのロックプリミティブを提供します。[7] XNU に存在する BSD コードは、最近FreeBSDカーネルのコードと同期されました。その多くは大幅に変更されていますが、2009 年の時点でも Apple と FreeBSD プロジェクトの間でコード共有が行われています[アップデート]。[8]
K32/K64
Mac OS X Snow Leopard、v10.6、( Darwinバージョン10)のXNUには、 K32と呼ばれる32ビットバージョンとK64と呼ばれる64ビットバージョンの2種類があります。[9] K32は、ユーザーランドで64ビットアプリケーションを実行できます。[10] Mac OS X 10.6の新機能は、64ビットカーネルスペースでXNUを実行できることです。K32は、2008年以降のMac ProとXserveモデルを除くすべてのマシンで使用される10.6 Serverのデフォルトカーネルであり[11]、64ビットアプリケーションを実行できます。K64には、K32と比較していくつかの利点があります。[12]
- メモリ マップは32 ビット カーネル空間の不釣り合いに大きな領域を消費するため、32 GB を超える RAM を管理できます。
- キャッシュ バッファ サイズは 32 ビット カーネル スペースで許可されるサイズよりも大きくすることができ、I/O パフォーマンスが向上する可能性があります。
- 高性能ネットワーク デバイスまたは複数のグラフィックス プロセッシング ユニット(GPU) を使用する場合、複数のデバイスに非常に大きなダイレクト メモリ アクセス(DMA) バッファーがあっても、カーネルがすべてのデバイスを 64 ビット空間にマップできるため、パフォーマンスが向上します。
6と4を押しながら起動すると、64ビットカーネルをサポートするマシンでは強制的にK64が起動します。[13] K64は32ビットアプリケーションを実行しますが、32ビットカーネル拡張(KEXT)は実行しないため、これらをロードできるようにするにはK64に移植する必要があります。
OS X Mountain Lion (10.8) 以降 の XNU は、64 ビット カーネルのみを提供します。
IOKit
IOKitは、 Embedded C++に基づくC++のサブセットで書かれたデバイスドライバフレームワークです。[14]オブジェクト指向設計により、あらゆるクラスのドライバに共通する機能がフレームワーク内で提供されるため、デバイスドライバを短時間で少ないコードで作成できます。IOKitはマルチスレッドで対称型マルチプロセッシング(SMP)に対応しており、ホットプラグ可能なデバイスと自動で動的なデバイス構成が可能です。
多くのドライバーはユーザーモードで実行するように記述することができ、これによりシステムの安定性がさらに向上します。ユーザーモードで実行されているドライバーがクラッシュしても、カーネルはクラッシュしません。ただし、カーネルモードで実行されているドライバーがクラッシュすると、カーネルがクラッシュします。カーネルモードで実行されるドライバーの例には、ディスクアダプターおよびネットワークアダプタードライバー、グラフィックスドライバー、ユニバーサルシリアルバス ( USB ) およびFireWire ホストコントローラーのドライバー、VirtualBox、Parallels Desktop for Mac、VMware Fusionなどの仮想マシンソフトウェアのドライバーが含まれます。macOS Catalina以降のリリースでは、DriverKit により、これらのタイプのドライバーの一部をユーザーモードで実行できます。[15]
参照
- カーネル(オペレーティング システム)
- オーディオ/UX
- mkLinux
- OSF/1
- Darwin (オペレーティングシステム) - Apple 社がリリースしたオープンソースのオペレーティングシステム。カーネルは XNU です。
- macOS – Apple社がリリースしたオペレーティングシステム。カーネルにはXNUを採用。
参考文献
- ^ 「UNIX/Linux アプリケーションの Mac OS X への移植: 用語集」 Apple Computer、2005 年。2017 年6 月 7 日閲覧。
- ^ 「XNU GitHub ソースコード README」。GitHub。2021年12月16日。
- ^ ab Magee, Jim. WWDC 2000 セッション 106 – Mac OS X: カーネル。14分目。2021年12月21日時点のオリジナルよりアーカイブ。
- ^ 「libkern C++ ランタイム」。IOKitデバイス ドライバー設計ガイドライン。
- ^ Amit Singh. 「What is Mac OS X?」. 2019年4月19日時点のオリジナルよりアーカイブ。2015年3月4日閲覧。
- ^ Wells, Douglas M. (1994). 信頼性が高く、スケーラブルなリアルタイムオペレーティングシステム環境(PDF)。1994 IEEE Dual-Use Technologies and Applications Conference。S2CID 5205380。 2017年8月22日時点の オリジナル(PDF)からアーカイブ。
- ^ Watson, Robert (2008 年 8 月 2 日). 「Re: freebsd-advocacy Digest, Vol 248, Issue 1」. freebsd-advocacy (メーリング リスト) . 2013 年10 月 24 日閲覧。
- ^ 「FreeBSD 四半期ステータスレポート (Grand Central Dispatch – FreeBSD ポート)」。2009 年 4 月。2013 年10 月 24 日閲覧。
- ^ Mac OS X 10.6 Snow Leopard: Ars Technica レビュー、5 ページ
- ^ Siracusa, John (2009 年 8 月 31 日)。「Mac OS X 10.6 Snow Leopard: Ars Technica のレビュー」。Ars Technica。
最後に、繰り返しになりますが、64 ビット アプリケーションを実行するために 64 ビット カーネルを実行する必要はなく、Mac に 4 GB を超える RAM をインストールする必要もありません。アプリケーションは 32 ビット カーネル上の 64 ビット モードで問題なく実行され、以前のバージョンの Mac OS X でも 4 GB を超える RAM をインストールして活用することができました。
- ^ Mac OS X Server v10.6: 64 ビットカーネルを使用する Mac
- ^ 「Mac OS X の新機能: Mac OS X v10.6」。Apple Developer。Apple , Inc.
- ^ Mac OS X Server v10.6: 32 ビットまたは 64 ビットカーネルでの起動
- ^ Amit Singh. 「XNU: カーネル」。Mac OS X とは? I/O Kit。2019 年 4 月 19 日時点のオリジナルからアーカイブ。2011年9 月 9 日閲覧。I
/O Kit は C++ の制限されたサブセットを使用します。
- ^ 「DriverKit」。Apple Developer。
外部リンク
- GitHubの xnu 、公式リポジトリ
- XNU:ウェイバックマシンのカーネル(2020年6月2日アーカイブ) – 2003年12月にAmit Singhが書いたXNUのコンポーネントの概要
- Mac OS X カーネルの内部 – 「この講演では、Mac OS X カーネルの詳細を紹介することで、混乱を解消することを目的としています」(2007 年 12 月)
