it-swarm-ja.com

ハードウェアが64ビットの場合、32ビットオペレーティングシステムで64ビットアプリケーションを実行することは可能ですか?

64ビット対応のハードウェアを搭載したPCを持っています。

32ビットのUbuntuディストリビューションをインストールしましたが、64ビットのアプリケーションを実行できるかどうか知りたいです(Mac OS X Snow Leopardのように動作します)。

4
Doron

32ビットMacOS Xは、64ビットハードウェア上で64ビットアプリケーションを実行できます。

これが機能する理由は、OS X(Darwin)カーネルが実際にはロングモードの互換性サブモードで実行されているためです。

WindowsとLinuxはこれを行わず、x86とx64の間のよりクリーンなカットを強制します。 WindowsまたはLinuxでは、64ビットカーネルと64ビットドライバー(および64ビットと32ビットプログラムの両方を実行)または32ビットカーネルと32ビットドライバー(および32ビットと16ビットプログラムのみを実行)のいずれかを実行できます。

リアルモードの16ビットコードはロングモードでは機能しないため、Mac OS Xに16ビットプログラムが存在し、Mac OS Xがロングモード(互換モードを含む)で実行されている場合、Mac OSXはおそらく16ビットプログラムを実行できないことに注意してください。 Windowsは、64ビットモードで16ビットリアルモードコードを実行することもできません。

64ビットハードウェア上の32ビットMacOSXで実行されているVMwareFusionまたはParallelsは、64ビットゲストを実行します。

64ビットハードウェア上の32ビットMacOS Xで実行されている各32ビットプロセスは、4GBのユーザー仮想アドレス空間と4GBのカーネル仮想アドレス空間を取得すると思います。 64ビットプロセスは、8 TBのユーザー仮想アドレス空間と4GBのカーネル仮想アドレス空間(カーネルは32ビットモードで実行されるため)を取得すると思います。

Mac OS Xカーネルは(ほとんどのMac OS Xプログラムと同様に)、PowerPC、x86(32ビット)、およびx64(64ビット)のバイナリコードを含むユニバーサルバイナリです。あるプラットフォームから別のプラットフォームに切り替えると、バイナリの適切な部分が「単に」ロードされます。 x86コードは、ロングモードが使用可能かどうかを確認し、可能であればロングモードに切り替え、互換モードで実行して目的の結果を達成します。

注:Mac OS X Snow LeopardはPowerPCで実行されませんが、カーネルにはPowerPCコードが含まれています。これは、おそらくPowerPCバイナリがそれを利用している可能性があるためです。 PowerPCバイナリは引き続きx86およびx64Macで動作します。

11
Andrew J. Brehm

ハードウェア仮想化をサポートするプロセッサ(最新のIntelがサポート)とそれをサポートするVMソフトウェア)がある場合は、64ビットOSをVMホストOSが32ビットの場合。VM内で64ビットアプリを実行できます。しかし、それは私が見ることができるのとほぼ同じです。

6
BBlake

他の人が言っているように、一般的に、64ビットアプリケーションは32ビットOSでは実行できません。

これがOSXで機能する理由は、10.5で、32ビットカーネルが32ビットから64ビットのユーザーアドレス空間をコピーする機能を獲得し、トラップ/システムコールなどの64ビットハンドラーを備えているためです。これは本質的に、64ビットドライバーを必要としないが、特定の64ビット機能を備えたハイブリッドカーネルです。

1
phoebus