「XNU」の版間の差分
m Bot作業依頼: Apple関連記事の改名に伴うリンク修正依頼 (Apple|Apple) - log |
m Bot作業依頼: Apple関連記事の改名に伴うリンク修正依頼 (iOS (Apple)) - log |
||
7行目: | 7行目: | ||
| latest_release_version = |
| latest_release_version = |
||
| latest_release_date = |
| latest_release_date = |
||
| operating_system = [[Darwin (オペレーティングシステム)|Darwin]], [[ |
| operating_system = [[Darwin (オペレーティングシステム)|Darwin]], [[IOS (Apple)|iOS]], [[macOS]] |
||
| genre = [[カーネル]] |
| genre = [[カーネル]] |
||
| kernel_type = [[ハイブリッドカーネル]] |
| kernel_type = [[ハイブリッドカーネル]] |
||
45行目: | 45行目: | ||
=== アップル買収後 === |
=== アップル買収後 === |
||
{{main|macOS|[[Darwin (オペレーティングシステム)|Darwin]]|[[ |
{{main|macOS|[[Darwin (オペレーティングシステム)|Darwin]]|[[IOS (Apple)|iOS]]}} |
||
NeXTがアップルに買収された後、'''Machコンポーネント'''は3.0へ、'''BSDコンポーネント'''は[[FreeBSD]]プロジェクトに由来するコードへとアップグレードされ、Driver Kitは'''I/O Kit'''と呼ばれるドライバを記述するための[[C++]] APIに置き換えられた。 |
NeXTがアップルに買収された後、'''Machコンポーネント'''は3.0へ、'''BSDコンポーネント'''は[[FreeBSD]]プロジェクトに由来するコードへとアップグレードされ、Driver Kitは'''I/O Kit'''と呼ばれるドライバを記述するための[[C++]] APIに置き換えられた。 |
2021年5月20日 (木) 23:44時点における版
開発元 | Apple |
---|---|
リポジトリ | |
対応OS | Darwin, iOS, macOS |
種別 | カーネル |
ライセンス | Apple Public Source License 2.0 |
公式サイト | opensource.apple.com/source/xnu |
XNUは、Appleが取得・開発したオペレーティングシステムカーネルである。macOSに用いられ、オープンソースソフトウェアのDarwinの一部として公開されている。XNUはX is Not Unixの略[1]。
デザイン
XNUはモノリシックカーネルとマイクロカーネルの特徴を併せもつハイブリッドカーネルで、マイクロカーネルが可能にするメッセージパッシングのモジュール性やより広範なメモリ保護、モノリシックカーネルがもつ実行速度の保持など、両方の技術を有効に利用することを試みている。
XNUは現在、ARM[2]、IA-32、x64、PowerPCベースのプロセッサにおいて、シングルプロセッサとSMPの両方で動作する。
Mach
XNUの基礎であるMachはシンプルなマイクロカーネルであり、OSのコアを分割された柔軟なプロセスとして実行することができる(Machコアの上でいくつかのOSを平行して実行できる)。しかし、これはカーネル/ユーザモードの切り替えに時間を消費し、またマイクロカーネルのアドレス空間とデーモンとのあいだで行われるメッセージのマッピングやコピーによってオーバーヘッドを生じることから、しばしばパフォーマンスが低下してしまう。macOSでは効率化のために、BSDの機能はMachのコアの中に組み込まれた。その結果、Machと古典的なBSDカーネル両方の利点と欠点を併せもつものとなった。
Machは、カーネルスレッド、プロセス管理、プリエンプティブ・マルチタスク、メッセージパッシング(プロセス間通信)、メモリ保護、仮想記憶、ソフトリアルタイム処理のサポート、カーネルデバッグのサポート、コンソールI/Oを提供する。
BSD
カーネルのBSDの部分は、POSIX API(BSDシステムコール)、Machタスク上でのUnixプロセスモデル、基本的なセキュリティーポリシー、ユーザIDとグループID、アクセス権、プロトコルスタック、仮想ファイルシステム、HFS / HFS+などいくつかのローカルファイルシステム、Network File System (NFS) クライアントとサーバ、暗号化フレームワーク、UNIX System Vプロセス間通信、auditサブシステム、強制アクセス制御、いくつかのlocking primitivesを提供する。
I/O Kit
I/O KitはC++のサブセットで書かれたデバイスドライバフレームワークである。オブジェクト指向設計を用いており、ドライバのクラスに共通する機能を提供し、ドライバをより早くより少ないコードで書けるようにする。I/O Kitはマルチスレッド化されており、対称型マルチプロセッシングを保証し、ホットプラグや動的なデバイスの配置を可能にする。
システムの安定性を高めるため、多くのドライバはユーザ空間で実行されるように書くことができる。(もしユーザ空間のドライバがクラッシュしてもカーネルはクラッシュしないが、カーネル空間のドライバがクラッシュするとカーネルもクラッシュする。)カーネル空間のドライバの例として、ディスクアダプタやネットワークアダプタのドライバ、グラフィックドライバ、USBやFireWireのコントローラのドライバ、仮想機械のドライバなどがある。
共有資源の保護
マルチプロセッサのマシンを安全に動かすために(ファイル、データ構造など)共有資源へのアクセスは、同一時間のうちにリソースが改変されないように直列化しなければならない。同時発生的なアクセスを防ぐための手法として不可分操作、スピンロック、クリティカルセクション、排他制御、serializing tokenを用いることができる。
歴史
NeXT社時代
もともとNeXTSTEP OSのためにNeXTによって開発されたXNUは、カーネギーメロン大学が開発したMachカーネル2.5に4.3BSDコンポーネントを付加し、Driver Kitと呼ばれるドライバを記述するためのオブジェクト指向APIを組み合わせたハイブリッドカーネルであった。
アップル買収後
NeXTがアップルに買収された後、Machコンポーネントは3.0へ、BSDコンポーネントはFreeBSDプロジェクトに由来するコードへとアップグレードされ、Driver KitはI/O Kitと呼ばれるドライバを記述するためのC++ APIに置き換えられた。
K32/K64
XNUはMac OS X 10.6 Snow Leopard(Darwinバージョン10)から、K32と呼ばれる32ビットのバージョンとK64と呼ばれる64ビットのバージョンの2つになった[3]。K32は64ビットアプリケーションをユーザランドで実行できる。Mac OS X 10.6で新しくなったのは、XNUが64ビットのカーネル空間で実行できるようになったことである。K64はK32と比べていくつかの利点がある[4]。
- より大きい32GBのRAMを扱うことができる。
- より大きなキャッシュバッファが扱え、潜在的なI/Oパフォーマンスが向上する。
- 非常に大きなDMAバッファがいくつかあっても、すべてのデバイスを64ビット空間に配置でき、高性能なネットワークデバイスや複数のGPUを使ったときのパフォーマンスが向上する。
64ビットカーネルをサポートする機種で、6と4キーを押し続けて起動するとK64で起動できる[5]。K64は32ビットアプリケーションを実行できるが、32ビットカーネル機能拡張 (KEXT) は実行できないので、これらを読み込めるようにするにはK64に移植しなければならない。
脚注
- ^ “Porting UNIX/Linux Applications to Mac OS X: Glossary”. Apple Computer (2005年). 2009年3月27日閲覧。
- ^ “iPhone processor found: 620MHz ARM CPU” (1 July 2007). 2008年1月6日閲覧。
- ^ Mac OS X 10.6 Snow Leopard: the Ars Technica review, page 5
- ^ What's New in Mac OS X: Mac OS X v10.6
- ^ Mac OS X Server v10.6: Starting up with the 32-bit or 64-bit kernel
外部リンク
- XNU: The Kernel - kernelthread.comによる、XNUコンポーネントの概要
- Inside the Mac OS X Kernel - 'This talk intends to clear up the confusion by presenting details of the Mac OS X kernel'