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ビットのサポートがデバイスドライバーで長時間遅れることがあるため、これは特に役立つと思います。
64ビットアプリケーションの実行には、カーネルからのサポートが必要です。カーネルは、CPUでの64ビットコードの実行をサポートするために必要に応じて、少なくともページテーブルや割り込みテーブルなどを設定する必要があり、完全な64ビットを保存する必要があります。アプリケーション間を切り替えるときのコンテキスト(およびアプリケーションからカーネルにそしてその逆)。したがって、純粋に32ビットのカーネルは64ビットのユーザー空間をサポートできません。
ただし、カーネルは、ユーザー空間で64ビットコードをサポートしながら、カーネル空間で32ビットコードを実行できます。これには、64ビットカーネルで32ビットアプリケーションを実行するために必要なサポートと同様の処理が含まれます。基本的に、カーネルは、アプリケーションが期待する64ビットインターフェイスをサポートする必要があります。たとえば、64ビットコードがカーネルを呼び出すためのメカニズムを提供し、パラメーターの意味を(両方向で)保持する必要があります。
問題は、その価値があるかどうかです。 Macおよびその他の一部のシステムでは、32ビットのカーネルコードをサポートしているため、ドライバーがすべて同時に切り替える必要がないため、問題が発生する可能性があります。 Linuxでは、開発モデルが異なります。大きな変更が加えられると、カーネル内のすべてが必要に応じて移行されます。また、カーネル開発者は、カーネル外のものは実際にはサポートしていません。 64ビットのカーネルで32ビットのユーザーランドをサポートすることは確かに有用であり、努力する価値があります(少なくとも、x86-64のサポートが追加されたときはそうでした)。32で64ビットを作成する必要があるかどうかはわかりません-ビット...
Snow Leopardは、Intel 64ビットCPUで64ビットバイナリを実行できました。
Efiが既に64ビットの場合、64ビットカーネルで起動することもできました(Macbook "transition-model" proの私の生産バッチは既にそのようなマシンでした)。
エミュレーションは含まれていませんでした。32ビットモードで起動した場合のパフォーマンスコストは低くなります。
純粋な32ビットCPUでは、64ビットコードの解釈方法がわからないため、これを行うことはできません。ソフトウェアでエミュレートしている場合を除いて、これは従来のようにパワーが不足している組み込みクラスのマシンでは遅くなります。