LinuxとWindowsでは、32ビットと64ビットのソフトウェアを並べて実行できるマルチアーチ/ WoWを含むシステムを持つために、64ビットのカーネルが必要でした。
それから数年前、誰かがMacOS 10.6 Snow Leopardが32ビットモードのカーネルで64ビットアプリケーションを実行できることを示したとき、私は驚きました。これは一回限りの技術転換だったので、今はほとんど忘れられたでしょう。ハードウェアがモバイル分野をリードしているため、私が知っている限り、iOSとAndroidで64ビットに切り替える必要はありませんでした。
私の質問:32ビットLinuxカーネル(i386またはarmhf)で同じ機能をどのように取得できますか?
私はこれが小さなことではないかもしれないことを知っています。その場合、Microsoftはこの機能をWindows XP 32ビットに配置できます。しかし、一般的な要件は何ですか?パッチや概念証明を提案したことがありますか?
組み込みの世界では、デバイスドライバの64ビットサポートがはるかに遅れている可能性があるため、これは特に便利です。
答え1
64ビットアプリケーションを実行するには、カーネルのいくつかのサポートが必要です。プログラムがカーネルに行って戻ったとき、カーネルは少なくともページテーブル、割り込みテーブルなどのコンテキストを設定する必要があります。したがって、純粋な32ビットカーネルは64ビットユーザースペースをサポートできません。
ただし、カーネルはユーザースペースで64ビットコードをサポートしながら、カーネルスペースで32ビットコードを実行できます。これには、64ビットカーネルを使用して32ビットアプリケーションを実行するために必要なサポートと同様の処理が含まれます。デフォルトでは、カーネルはアプリケーションが期待する64ビットインタフェースをサポートする必要があります。たとえば、64ビットコードがカーネルを呼び出してパラメータの意味を保存するためのいくつかのメカニズムを提供する必要があります(双方向)。
もしそうなら、問題はそれが価値があるかどうかです。 Macや他のシステムでは、32ビットカーネルコードをサポートすることは、ドライバがすべて同時に切り替えられる必要がないことを意味するので可能です。 Linuxでは開発モデルが異なります。大きな変更が行われると、カーネル内のすべてのエントリが必要に応じて移行され、カーネル開発者は実際にカーネルの外側のエントリをサポートしません。 32ビットユーザーゾーンをサポートするために64ビットカーネルを使用することは、非常に便利で努力する価値があります(少なくともx86-64サポートが追加された場合)。 32ビットの代わりに64ビットを使用する必要があるかどうかわかりません...
答え2
Snow Leopardは、Intel 64ビットCPUで64ビットバイナリを実行できます。
efiがすでに64ビットの場合は、64ビットカーネルで起動することもできます(私のMacbookの「変換モデル」Proの生産展開はすでにそのようなシステムでした)。
エミュレーションは必要ありません。32ビットモードで起動すると、わずかなパフォーマンスコストが発生します。
純粋な32ビットCPUでは、64ビットコードを解釈する方法がわからないため、これはできません。シミュレーションにソフトウェアを使用しない限り、伝統的に低電力の組み込みシステムの場合、速度は遅くなります。