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

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

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ビットを使用する必要があるかどうかわかりません...

おすすめ記事