Snow Leopard探索記--カーネルの動作モードとユニバーサルバイナリの関係

海上忍
2009-08-25 12:56:01
  • このエントリーをはてなブックマークに追加

 現行のLeopardは、基本レイヤーの64bit化がおよそ完了している。CocoaやCarbonなどの主要フレームワークや、「/usr/lib」以下に置かれる各種共有ライブラリ(libSystem.B.dylibなど)は、i386とx86_64、ppc7400とppc64という4種のアーキテクチャに対応したバイナリを収録している。

 このしくみは、Mac OS Xに採用されているバイナリ形式「Mach-O」ならではの芸当。前身であるNeXTSTEPの時代からすでに利用され、68kとi386、さらにはPA-RISCとSPARCにも対応するバイナリが存在した。名称は当時のMulti Architecture Binary(MAB)から「ユニバーサルバイナリ」「ユニバーサルアプリケーション」へと変化したが、複数の区画に異なるバイナリを収録し、異種CPUでネイティブな動作を可能にするというしくみは同じだ。

 余談だが、Mac OS XのユニバーサルバイナリをNeXTSTEPで判定すると、プラットフォーム名こそ正しく表示されない(最終アップデートはx86_64登場以前のNeXTSTEPがx86_64を知るわけがない)ものの、複数区画は正常に検出される。

 システムが64bitモードで動作するということは、カーネルの動作モードも含めた話、言い換えればカーネル(/mach_kernel)に64bitバイナリが含まれていなければならないが、Leopardのカーネルにはi386とppc7400のバイナリしか収録されていない。Snow Leopardでは、ここに「x86_64」が加わるはずで、システムブート時におけるハードウェアの判定方法も含めて要注目だ。

Leopardのカーネルには、64bit CPU向けのバイナリが収録されていない。Snow Leopardでは、ここに「x86_64」が加わるはず(画像をクリックすると拡大します) Leopardのカーネルには、64bit CPU向けのバイナリが収録されていない。Snow Leopardでは、ここに「x86_64」が加わるはず(画像をクリックすると拡大します)
  • 新着記事
  • 特集
  • ブログ