2012-03-30 4 views
2

OS X Lion(10.7)OSは、アクティビティモニターによって報告されるように、主に64ビットのバイナリで動作します。 これは私のラップトップがEFIの32ビット版と32ビットカーネルを実行しているため、どのようにアーチミキシングが一般的に機能しますか?DarwinのカーネルアーキテクチャーとOS X、32ビットカーネルの64ビット、どのように動作しますか?

Darwin Kernel Version 11.3.0: Thu Jan 12 18:48:32 PST 2012; root:xnu-1699.24.23~1/RELEASE_I386 

通常1はx86_64の上32bとバイナリを実行しますが、他の方法は、周りの私の知る限りでは、元に戻すことはできません64Bモード、にCPUを押して必要となります。この質問は十分に明確である

・ホープ..

答えて

4

のx86-64アーキテクチャはかなり複雑です。 64ビットモードと32ビットモードを持つだけでなく、2つのメインモード(ロングとレガシー)があり、それぞれにはいくつかのサブモードがあります(Wikipedia article参照)。

レガシーモードでは、CPUが本質的に32ビットCPUをエミュレートします。さまざまなサブモード(リアル、プロテクトなど)を持ちますが、64ビットの命令やアドレッシングを切り替える機能はありません。一般に、非64ビット対応OSはこのモードで動作します。

ロングモードでは、CPUは64ビットの機能を備えていますが、32ビットおよび16ビットの「互換性」モードでも実行できます。モード切り替えは、コードセグメント記述子のLとDフラグによって制御されます(「64ビットワールドのx86の拡張」を参照してください)。基本的に、メモリの異なるセクションは64,32、または16ビットコードであり、CPUは現在実行しているコードセグメントに適したモードに切り替わります。カーネルのコードセグメントは、実行中のアプリケーションのコードセグメントとは独立して、64ビットまたは32ビットとしてフラグを立てることができます。

ですから、原理的には単純です。実際には、私は気づいていない複雑な問題があると確信しています(コンテキスト切り替えプロセスについてはあまり知らない)が、OSが「知っている」限り64ビットで動作しているCPUを使用してコードセグメント記述子を適切に構成すると、32ビットカーネルで64ビットプロセスを実行する際に根本的な問題はありません。

また、OS Xでは、バージョン10.3まで、PowerPC G5 CPUの32ビットカーネルで64ビットプロセスを実行することもできました。 PPC CPUはアーキテクチャがまったく異なり、モード切り替えがどのように機能しているかわかりません。

+1

Nice answer、+1 :) – Macmade

1

はEFIと、カーネルはあなたが64-ビットカーネルで32ビットEFIを持つことができる2つの別々のもの...
です。ここでのポイントではありません...

32ビットモードで実行する場合を除き、ライオンズのカーネルは通常、デフォルトで64ビットモードで動作します。

«アーチミキシング»とは、x86_64規格で保証されています。
64ビットモードは、32ビットコードと完全に下位互換性があります。

32ビットモードで64ビットのコードを実行することはできません。
AppleのMach-O形式は、32ビットと64ビットのコードを提供するバイナリをビルドできるので、これを解決します。

EDIT

どうやら、Mac OS Xは、全体の32/64-ビットのCPUモードを持っていません。
これはどのように可能か、そしてCPUで内部的にどのように管理しているかわかりません。

しかし、すべてのプログラムが「最良のモード」で動作しているようです。
は、だから私は64-ビットネイティブコードが32ビットカーネルで実行することができ、単に間違っていた...

は...もう探すしようとします。)

+0

答えをありがとう。明らかに私のシステムは、una​​meによって報告されたように、常に32ビットカーネルをブートします。私の質問は、64bコードが32bカーネル上でどのように動作するかについてです。私は反対の状況が一般的な場所であることを知っています。例えば、Linux、Winなど – overscore

+1

編集を参照してください。)非常に良い質問... – Macmade

関連する問題