XNU

XNU
XNUカーネル
開発者アップル社
書かれたCC++アセンブリ言語
OSファミリーUnixライクUnix [ 1 ]
作業状態現在
ソースモデルオープンソース
初回リリース1996年12月 (1996-12
リポジトリ
サポートされているプラ​​ットフォーム現在: x86-64、64ビットARM32 ビット 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)オペレーティングシステムで使用するために開発され、無料のオープンソースソフトウェアとしてリリースされたDarwin OSの一部としてリリースされたコンピュータオペレーティングシステム(OS)カーネルであり macOSの基礎であることに加えて、iOSiPadOSwatchOSvisionOStvOSの基礎でもあります。[ 2 ]

XNUは、もともとNeXT社によってNeXTSTEPオペレーティングシステム向けに開発されました。カーネギーメロン大学で開発されたMachカーネルバージョン2.5から派生したハイブリッドカーネルで、Machプリミティブ上で動作するように修正された4.3BSDカーネルの大部分と、 DriverKitと呼ばれるドライバ開発用のObjective-Cアプリケーションプログラミングインターフェース(API)が組み込まれていました。[ 3 ]

AppleがNeXTを買収した後、カーネルはOSF [ 4 ]とFreeBSDプロジェクトのOSF MK 7.3から派生したコードで更新され、DriverKitはC++の制限されたサブセット[ 5 ]Embedded C++に基づく)[ 6 ]であるIOKitの新しいAPIに置き換えられました。

BSDカーネルをXNUの3番目の部分に残すことで、[ 7 ] macOSがThe Open GroupによるSingle UNIX Specification(SUS)の下でUNIX認定を取得したときに、XNUはUNIXベースになりました。[ 8 ]それにもかかわらず、Appleは「XはUnixではない」という意味の元の「XNU」という名前を保持しました。これは、macOSがUNIX認定される前のNeXTSTEPの名残です。これは、macOS全体が正式にUNIXオペレーティングシステムとして認められているにもかかわらず、名前がXNUがUNIXとは別のものであることを示唆しているため、混乱を招きました。[ 1 ]

カーネル設計

XNU は、モノリシック カーネルマイクロカーネルの両方の機能を備えたハイブリッド カーネルであり、マイクロカーネルのメッセージ パッシング機能など、両方のテクノロジを最大限に活用して、モジュール性を高め、OS のより大きな部分でメモリ保護のメリットを享受したり、一部の重要なタスクでモノリシック カーネルの速度を維持したりすることを目指しています。

2021年現在、XNUはARM64およびx86-64プロセッサ(シングルプロセッサおよび対称型マルチプロセッシング(SMP)モデルの両方)で動作します。PowerPCのサポートはMac OS X Snow Leopardのバージョンで削除されました。IA -32のサポートはMac OS X Lionのバージョンで削除されました。32ビットARMのサポートはiOS 11のバージョンで削除されました。

マッハ

XNUカーネルのベースは、大幅に改良された(ハイブリッド)Open Software Foundation Machカーネル(OSF MK)7.3です。[ 4 ] OSF MK 7.3は、ユタ大学のMach 4カーネルと、オリジナルのカーネギーメロン大学のMach 3.0マイクロカーネルからフォークされた多くのMach 3.0バリアントから適用可能なコードを含むマイクロカーネル[ 9 ]です。

OSF MK 7.3 は、オペレーティング システムのコアを独立したプロセスとして実行できるため、柔軟性が大幅に向上します (Mach コア上で複数のオペレーティング システムを並行して実行できます)。ただし、時間のかかるカーネル/ユーザー モードのコンテキスト切り替えや、カーネルのアドレス空間とサービス デーモンのアドレス空間間でのメッセージのマッピングやコピーから生じるオーバーヘッドにより、パフォーマンスが低下することがよくあります。

AppleはOSFからOSF MK 7.3のライセンスを取得し、 Machコードに加えてBSD関数をカーネルに組み込むことで、いくつかのタスクの効率化を図りました。その結果、大幅に改変された(ハイブリッドな)OSF MK 7.3カーネルが誕生しました。

BSD

カーネルのBerkeley Software Distribution (BSD)部分は、Portable Operating System Interface ( POSIX )アプリケーションプログラミングインターフェース(API、BSDシステムコール)、 Machタスク上のUnixプロセスモデル、基本的なセキュリティポリシー、ユーザーIDとグループID、パーミッション、ネットワークプロトコルスタック(プロトコル)、仮想ファイルシステムコード(ファイルシステムに依存しないジャーナリング層を含む)、階層型ファイルシステム(HFS、HFS Plus(HFS+)) 、 Apple File System APFS)などのいくつかのローカルファイルシステム、ネットワークファイルシステム(NFS)クライアントとサーバー、暗号化フレームワーク、UNIX System Vプロセス間通信(IPC)、監査サブシステム、強制アクセス制御、およびいくつかのロックプリミティブを提供します。[ 10 ] XNUのBSDコードは、最近FreeBSDカーネルのコードと同期されました。その多くは大幅に変更されていますが、2009年現在でもAppleとFreeBSDプロジェクトの間でコード共有が行われています。[ 11 ]

K32/K64

Mac OS X Snow Leopard、v10.6 ( Darwinバージョン10)の XNU には、 K32と呼ばれる32 ビット版とK64と呼ばれる64 ビット版の 2 種類があります。[ 12 ] K32 は、ユーザーランドで 64 ビットアプリケーションを実行できます。[ 13 ] Mac OS X 10.6 の新機能は、64 ビットカーネル空間で XNU を実行できる機能でした。K32 は、 2008 年以降のMac ProおよびXserveモデルを除くすべてのマシンで使用される10.6 Serverのデフォルトカーネルであり[ 14 ]、64 ビットアプリケーションを実行できます。K64 には、K32 と比較していくつかの利点があります。[ 15 ]

64を押しながら起動すると、64ビットカーネルをサポートしているマシンでは強制的にK64が起動します。[ 16 ] K64は32ビットアプリケーションを実行しますが、32ビットカーネル拡張(KEXT)は実行しないため、これらをロードできるようにするにはK64に移植する必要があります。

OS X Mountain Lion (10.8) 以降の XNU は、64 ビット カーネルのみを提供します。

IOKit

IOKitは、 Embedded C++をベースにC++のサブセットで記述されたデバイスドライバフレームワークです。[ 17 ]オブジェクト指向設計を採用しているため、あらゆるクラスのドライバに共通する機能がフレームワーク内に提供されており、デバイスドライバの開発時間とコード量を削減できます。IOKitはマルチスレッド対応で、対称型マルチプロセッシング(SMP)に対応しており、ホットプラグ可能なデバイスと自動かつ動的なデバイス構成を可能にします。

多くのドライバはユーザーモードで実行するように記述することができ、これによりシステムの安定性がさらに向上します。ユーザーモードで実行中のドライバがクラッシュしても、カーネルはクラッシュしません。しかし、カーネルモードで実行中のドライバがクラッシュすると、カーネルがクラッシュします。カーネルモードで実行されるドライバの例には、ディスクアダプタおよびネットワークアダプタドライバ、グラフィックドライバ、ユニバーサルシリアルバス(USB)およびFireWireホストコントローラ用ドライバ、VirtualBoxParallels Desktop for MacVMware Fusionなどの仮想マシンソフトウェア用ドライバなどがあります。macOS Catalina以降のリリースでは、DriverKitによってこれらのタイプのドライバの一部をユーザーモードで実行できるようになりました。[ 18 ]

参照

参考文献

  1. ^ a b「オープンブランド」
  2. ^ 「UNIX/LinuxアプリケーションのMac OS Xへの移植:用語集」 Apple Computer、2005年。 2017年6月7日閲覧
  3. ^ 「XNU GitHubソースコードREADME」 . GitHub . 2021年12月16日.
  4. ^ a b Magee, Jim. WWDC 2000 セッション 106 – Mac OS X: カーネル. 14分後. 2021年12月21日時点のオリジナルよりアーカイブ。
  5. ^ 「libkern C++ランタイム」。IOKitデバイスドライバー設計ガイドライン
  6. ^ Amit Singh. 「What is Mac OS X?」 2019年4月19日時点のオリジナルよりアーカイブ2015年3月4日閲覧。
  7. ^ 「Mac OS Xの仕組み」HowStuffWorks . 2011年8月8日. 2025年3月12日閲覧
  8. ^ McKay, Dave (2019年10月21日). 「macOSはUNIXか?(そしてそれは何を意味するのか?)」 How -To Geek . 2025年3月12日閲覧
  9. ^ Wells, Douglas M. (1994).信頼性、拡張性、リアルタイム性を備えたオペレーティングシステム環境(PDF) . 1994 IEEE Dual-Use Technologies and Applications Conference. S2CID 5205380 . 2017年8月22日時点のオリジナル(PDF)からアーカイブ。 
  10. ^ Watson, Robert (2008年8月2日). 「Re: freebsd-advocacy Digest, Vol 248, Issue 1」 . freebsd-advocacy (メーリングリスト) . 2013年10月24日閲覧
  11. ^ 「FreeBSD 四半期ステータスレポート(Grand Central Dispatch – FreeBSD ポート)」 2009年4月. 2013年10月24日閲覧
  12. ^ Mac OS X 10.6 Snow Leopard: Ars Technicaのレビュー、5ページ
  13. ^ Siracusa, John (2009年8月31日). 「Mac OS X 10.6 Snow Leopard:Ars Technicaレビュー」 . Ars Technica .最後に、繰り返しになりますが、64ビットアプリケーションを実行するために64ビットカーネルを実行する必要はなく、Macに4GBを超えるRAMを搭載する必要もありません。アプリケーションは32ビットカーネル上で64ビットモードでも問題なく動作します。また、以前のバージョンのMac OS Xでも、4GBをはるかに超えるRAMを搭載して活用することが可能でした。
  14. ^ Mac OS X Server v10.6: 64ビットカーネルを使用するMac
  15. ^ 「Mac OS Xの新機能:Mac OS X v10.6」。Apple Developer。Apple , Inc.
  16. ^ Mac OS X Server v10.6: 32ビットまたは64ビットカーネルでの起動
  17. ^ Amit Singh. 「XNU: カーネル」 . Mac OS Xとは? . I/O Kit. 2019年4月19日時点のオリジナルよりアーカイブ2011年9月9日閲覧。I /O KitはC++の限定的なサブセットを使用しています。
  18. ^ 「DriverKit」。Apple Developer
  • GitHubxnu、公式リポジトリ
  • XNU: The Kernel at the Wayback Machine (2020年6月2日アーカイブ) – 2003年12月にAmit Singhが執筆したXNUのコンポーネントの概要
  • Mac OS Xカーネルの内部– 「この講演では、Mac OS Xカーネルの詳細を紹介することで、混乱を解消することを目的としています」(2007年12月)