
Mac OS X の起動プロセスでは何が起こりますか?
Mac OS Xの起動プロセスで何が起こっているのか、疑問に思ったことはありませんか?Mac OS Xでは、以前よりも少し複雑になっています。クラシックMac OS(System 9、8、7、6)の時代は過ぎ去りました。Macが起動すると、アイコンだけで識別できる一連の機能拡張とコントロールパネルが表示され、その後、機能拡張フォルダを探して、Macの起動時に読み込まれるものや実行されるものを簡単に調整できた時代です。しかし、今日ではMac OS XはUnixを基盤としているため、多くのユーザーは舞台裏で何が起こっているのか全く認識していません。
では、Mac OS Xの起動プロセスでは一体何が起こっているのでしょうか?MacをVerboseモードで起動すれば、より詳しく確認することができますが、必ずしも表示される内容の全てを説明できるわけではありません。幸いなことに、KernelThreadのセクションに素晴らしい解説が掲載されています。Mac OS Xの起動イベントのシーケンスが最初から最後まで丁寧にリストアップされています。非常に詳細な内容で、読む価値があります。好奇心旺盛なMacユーザーのために、以下に内容を改めて記載します。
注: 読者が指摘したように、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
現在のシナリオで必要な拡張機能(拡張機能のバンドルのファイルOSBundleRequired
内の プロパティの値によって決定されます)を検索することに注意しInfo.plist
てください。 - カーネルルーチン
init
が実行され、ブートシステムのルートデバイスが決定されます。この時点では、ファームウェアにはアクセスできなくなります。 - さまざまな Mach/BSD データ構造はカーネルによって初期化されます。
- I/O キットが初期化されました。
- カーネルは
/sbin/mach_init
、Mach サービス命名 (ブートストラップ) デーモンを起動します。mach_init
サービス名と、それらのサービスへのアクセスを提供する Mach ポート間のマッピングを維持します。
ここからは、スタートアップはユーザーレベルになります。
mach_init
/sbin/init
は、従来の BSD init プロセスを起動します。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を実行します。fsckrc.boot
の戻り値も処理します。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固有のディレクトリ/ファイルを「クリーンアップ」します。- BootCache が開始されました。
- 様々な
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
開始されます。/System/Library/Extensions.mkext
が より古い場合/System/Library/Extensions
、/etc/rc
既存の mkext を削除し、新しい mkext を作成します。また、既存の 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
項目は、通常はシェルスクリプトであるプログラムで、名前はフォルダ名と一致します。フォルダには、、、、、開始/停止メッセージなどのキーと値のペアを含むプロパティリストファイルが含まれています。rootとして実行すると、プログラムはデバッグ情報と依存関係情報を出力します(実際には何も実行しません)。/System/Library/StartupItems
/Library/StartupItems
Description
Provides
Requires
OrderPreference
SystemStarter -n -D
- スタートアップ
CoreGraphics
項目は、Apple Type Services デーモン (ATSServer
) と Window Server (WindowServer
) を起動します。
そしてMacが起動します。
詳細モードを使用すると、このアクティビティの一部を自分で確認することができます (起動ごとに詳細モードで起動したり、常に UNIX スタイルの起動を確認したい場合は、Mac が常に詳細モードで起動するように設定することもできます)。ただし、これはかなり徹底した説明です。
Apple は、Mac のブートプロセスに関するドキュメントもいくつか公開しており、こちらにある開発者ドキュメント ライブラリで入手できます。
上記の情報を提供していた元のURLは現在は無効となっているため、後世のためにキャッシュ経由でその投稿を上記に含めています。元の情報源はKernelThreadのスレッド(URL:http://www.kernelthread.com/mac/osx/arch_startup.html)でしたが、現在はオフラインで、新しい場所にリダイレクトされません。
Mac OS X のブート シーケンスに追加したい豆知識やその他の情報があれば、コメント欄で共有してください。