Mac OS X のブート プロセスでは何が行われますか?
Mac OS X の起動および起動プロセス中に何が起こるか疑問に思ったことはありませんか? Mac OS X では、以前よりも少し複雑になり、一連の拡張機能とコントロール パネルで Mac が起動するのを監視していた Classic Mac OS (システム 9、8、7、6) の時代は過ぎ去りました。アイコンだけでいつでも識別でき、Extensions フォルダーを調べて、Mac の起動時に読み込まれているものと発生しているものを簡単に調整できます。今日、Mac OS X の Unix 基盤により、多くのユーザーは舞台裏で何が起こっているのかをまったく認識していません。
では、Mac OS X の起動プロセス中に正確に何が起こるのでしょうか? Verbose Mode で Mac を起動することでいつでも見栄えを良くすることができますが、それですべての表示が説明されるとは限りません。幸いなことに、KernelThread のセグメントを介して優れた説明を利用できます。このセクションでは、Mac OS X の起動イベントのシーケンスを最初から最後まで注意深くリストしています。好奇心旺盛な Mac ユーザーのために、以下に繰り返し説明します。
note: 読者の指摘通り、PPC は OF (Openfirmware) を使用、i386 は EFI (Extensible Firmware Interface) を使用
では、Mac OS X の起動プロセス中に何が起こるのでしょうか? Mac の電源を入れると、次のことが起こります:
- 電源が入りました。
- OFまたはEFIコードが実行されます。
- ハードウェア情報を収集し、ハードウェアを初期化します。
- 何か (通常は OS ですが、Apple Hardware Test なども含まれます) が選択されて起動します。ユーザーは何を起動するかを選択するよう求められる場合があります。
- 制御は
/System/Library/CoreServices/BootX、ブート ローダーに渡されます。 BootX はカーネルをロードし、もしあれば OS バッジも描画します。
- BootX は、以前にキャッシュされたデバイス ドライバのリスト (
/usr/sbin/kextcache
によって作成/更新) をロードしようとします。このようなキャッシュのタイプはmkext
で、複数のカーネル エクステンションの情報ディクショナリとバイナリ ファイルが含まれています。 mkext キャッシュが破損しているか見つからない場合、BootX は/System/Library/Extensions
で現在のシナリオに必要な拡張機能を探すことに注意してください (拡張機能のバンドルのInfo.plist
ファイルのOSBundleRequired プロパティの値。
-
init カーネルのルーチンが実行されます。起動システムのルートデバイスが決定されます。この時点で、ファームウェアにはアクセスできなくなりました。
- さまざまな Mach/BSD データ構造がカーネルによって初期化されます。
- I/Oキットが初期化されました。
- カーネルは
/sbin/mach_init
、Mach サービス ネーミング (ブートストラップ) デーモンを開始します。mach_init は、サービス名とそれらのサービスへのアクセスを提供する Mach ポートとの間のマッピングを維持します。
ここから、スタートアップはユーザーレベルになります:
mach_init
/sbin/init
を開始、従来の BSD初期化プロセス。 init はランレベルを決定し、/etc/rc.boot を実行します。
実行中、rc。boot
およびその他の rc
スクリプト ソース /etc/rc.common
、
CheckForNetwork() (ネットワークが稼働しているかどうかをチェック)、
GetPID などのユーティリティ関数を含むシェル スクリプト()、purgedir() (ディレクトリの内容のみを削除し、構造は削除しない) など
rc.boot
は、ブートのタイプ (マルチユーザー、セーフ、CD-ROM、ネットワークなど) を特定します。ネットワークブートの場合 (sysctl
変数kern.netboot
はに設定されます1
この場合)、/etc/rc.netboot
をで実行しますstart 引数
/etc/rc.netboot
は、ネットワーク ブートのさまざまな側面を処理します。たとえば、ネットワークおよび (存在する場合) ローカル マウントを実行します。また、/usr/bin/nbst を呼び出して、ルート デバイスとして使用されているディスク イメージにシャドウ ファイルを関連付けます。アイデアは、できればローカル ストレージにあるシャドウ ファイルに書き込みをリダイレクトすることです。
rc.boot
は、ファイル システムの整合性チェックが必要かどうかを判断します。シングルユーザーおよび CD-ROM ブートでは、fsck は実行されません。 SafeBoot は常に fsck を実行します。rc.boot は fsck の戻りステータスも処理します。
-
rc.boot
が正常に終了した場合/etc/rc
マルチユーザー起動スクリプトが実行されます。 CD-ROM から起動する場合、スクリプトは/etc/rc.cdrom (インストール) に切り替わります。
/etc/rc
ローカルファイルシステム (HFS+、HFS、UFS、/dev/ fd
、
/.vol)、ディレクトリ
/private/var/tmpが存在し、/etc/rc.installer_cleanup が存在する場合は実行します (再起動前にインストーラによって残されます)。
/etc/rc.cleanup が実行されます。多くの Unix および Mac 固有のディレクトリ/ファイルを「消去」します。
- ブートキャッシュが開始されました。
- さまざまな
sysctl
変数が設定されます (vnode の最大数、System V IPC など)。/etc/sysctl.conf
が存在する場合 (および/etc/sysctl-macosxserver.conf
Mac OS X Server の場合)、それが読み取られ、sysctlそこに含まれる変数が設定されます。
syslogd を開始しました。
- Mach シンボル ファイルが作成されます。
/etc/rc
開始kextd 、デーモンプロセスカーネルまたはクライアント プロセスからオンデマンドでカーネル エクステンションをロードします。
/usr/libexec/register_mach_bootstrap_servers
は/ に含まれるさまざまな Mach ブートストラップ ベースのサービスをロードするために実行されます。 etc/mach_init.d
portmap
およびnetinfo が開始されました。
- If
/System/Library/Extensions.mkext
が/System/Library/Extensions より古い場合
,/etc/rc既存の mkext を削除し、新しい mkext を作成します。また、存在しない場合は作成します。
/etc/rc
開始/usr/sbin/update 、内部ファイル システム キャッシュをディスクに頻繁にフラッシュするデーモン。
/etc/rc
仮想メモリシステムを起動します。/private/var/vm
をスワップディレクトリとして設定します。/sbin/dynamic_pager は、適切な引数 (スワップ ファイル名のパス テンプレート、作成されたスワップ ファイルのサイズ、追加のスワップをいつ作成するかを指定する最高水位と最低水位のアラート トリガー) で開始されますファイルを削除するか、既存のファイルを削除します。
/etc/rc
開始/usr/libexec/fix_prebinding誤って事前にバインドされたバイナリを修正します。
/etc/rc
実行/etc/rc.cleanupファイルとデバイスをクリーンアップしてリセットします。
/etc/rc
最終起動/sbin/SystemStarter
/System/Library/StartupItems
および/Library/StartupItems
などの場所からスタートアップ アイテムを処理するStartupItem はプログラム (通常はシェル スクリプト) で、その名前はフォルダー名と一致します。フォルダには、Description
、Provides
、などのキーと値のペアを含むプロパティ リスト ファイルが含まれています。Requires
、OrderPreference
、メッセージの開始/停止などを実行できますSystemStarter -n -Dルートとして、プログラムがデバッグおよび依存関係の情報を (実際には何も実行せずに) 出力するようにします。
-
CoreGraphics
スタートアップ項目は、Apple Type Services デーモンを開始します (ATSServer
) と Window Server (WindowServer).
そして、Mac が起動します!
このアクティビティの一部は Verbose Mode で確認できます (起動ごとに Verbose Mode で起動するか、常に確認したい場合は Mac を常に Verbose Mode で起動するように設定することもできます)。 unix スタイルのブート) ですが、これはかなり徹底した説明です。
.上記の情報を提供する元の URL はもはやアクティブではないことに注意してください。そのため、その投稿は後世のためにキャッシュ経由で上記に含まれています。元のソースは次の URL にある KernelThread のスレッドでした: http://www.kernelthread.com/mac/osx/arch_startup.html 現在オフラインで、新しい場所にリダイレクトされません。
Mac OS X のブート シーケンスに追加する情報やその他の追加機能がある場合は、コメントで共有してください!