web-dev-qa-db-ja.com

32ビットのカーネルで64ビットのユーザーランドソフトウェアを実行するには何が必要ですか?

LinuxとWindowsでは、32ビットと64ビットのソフトウェアを並行して実行できるmultiarch/WoWを備えたシステムを64ビットのカーネルに必要とする状況に慣れています。

そして、何年か前に、誰かがMacOS 10.6 Snow Leopardが32ビットモードのカーネルで64ビットアプリケーションを実行できることを示したとき、それは私の心を驚かせました。これは、1回限りの技術移行だったため、今ではほとんど忘れられている可能性があります。モバイルスペースの最先端を行くハードウェアで、私の知る限り、iOSとAndroidの64ビットへの移行でこれは必要ありませんでした。

私の質問:32ビットLinuxカーネル(i386またはarmhf)で同じ機能を得るには何が必要ですか?

これはおそらく簡単ではないことを理解しています。もしそうなら、マイクロソフトはその機能をWindowsに組み込むことができたかもしれませんXP 32ビット。ただし、一般的な要件は何ですか?提案されたパッチまたは概念実証はありませんか?

組み込みの世界では、64ビットのサポートがデバイスドライバーで長時間遅れることがあるため、これは特に役立つと思います。

10
jdonald

64ビットアプリケーションの実行には、カーネルからのサポートが必要です。カーネルは、CPUでの64ビットコードの実行をサポートするために必要に応じて、少なくともページテーブルや割り込みテーブルなどを設定する必要があり、完全な64ビットを保存する必要があります。アプリケーション間を切り替えるときのコンテキスト(およびアプリケーションからカーネルにそしてその逆)。したがって、純粋に32ビットのカーネルは64ビットのユーザー空間をサポートできません。

ただし、カーネルは、ユーザー空間で64ビットコードをサポートしながら、カーネル空間で32ビットコードを実行できます。これには、64ビットカーネルで32ビットアプリケーションを実行するために必要なサポートと同様の処理が含まれます。基本的に、カーネルは、アプリケーションが期待する64ビットインターフェイスをサポートする必要があります。たとえば、64ビットコードがカーネルを呼び出すためのメカニズムを提供し、パラメーターの意味を(両方向で)保持する必要があります。

問題は、その価値があるかどうかです。 Macおよびその他の一部のシステムでは、32ビットのカーネルコードをサポートしているため、ドライバーがすべて同時に切り替える必要がないため、問題が発生する可能性があります。 Linuxでは、開発モデルが異なります。大きな変更が加えられると、カーネル内のすべてが必要に応じて移行されます。また、カーネル開発者は、カーネル外のものは実際にはサポートしていません。 64ビットのカーネルで32ビットのユーザーランドをサポートすることは確かに有用であり、努力する価値があります(少なくとも、x86-64のサポートが追加されたときはそうでした)。32で64ビットを作成する必要があるかどうかはわかりません-ビット...

16
Stephen Kitt

Snow Leopardは、Intel 64ビットCPUで64ビットバイナリを実行できました。

Efiが既に64ビットの場合、64ビットカーネルで起動することもできました(Macbook "transition-model" proの私の生産バッチは既にそのようなマシンでした)。

エミュレーションは含まれていませんでした。32ビットモードで起動した場合のパフォーマンスコストは低くなります。

純粋な32ビットCPUでは、64ビットコードの解釈方法がわからないため、これを行うことはできません。ソフトウェアでエミュレートしている場合を除いて、これは従来のようにパワーが不足している組み込みクラスのマシンでは遅くなります。

3
Rui F Ribeiro