64ビットプロセッサを搭載した32ビットオペレーティングシステムに64ビットプログラムをインストールする

64ビットプロセッサを搭載した32ビットオペレーティングシステムに64ビットプログラムをインストールする

気になりました。 64ビットプロセッサを搭載した32ビットオペレーティングシステムに64ビットプログラムをインストールできますか?

私はRaspberry Pi 3でLinuxを実行しており、最新バージョンのMongoDBをインストールしようとしています。

armv7l GNU/Linux
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=raspbian
ID_LIKE=debian

答え1

64ビットプロセッサを搭載した32ビットオペレーティングシステムに64ビットプログラムをインストールできますか?

原則としては可能ですが、プロセッサとオペレーティングシステムはそれをサポートする必要があります。

ARMv8では、32ビット(Aarch32)カーネルは64ビット(Aarch64)プロセスを実行できません。これはプロセッサの制限です。

これらの制限がない他のプロセッサもあります。たとえば、x86_64プロセッサのx86_32コアの上でx86_64プロセスを実行できますが、それをサポートするコアはほとんどありません。それはおそらく限られた有用性によるものです(ほとんどの場合、RAMビットを節約できます)。 1つのカーネルで(32ビットで作成)、Linuxではサポートされていませんが、Solarisではサポートされています。

64ビットオペレーティングシステムを実行している場合は、既存の32ビットオペレーティングシステムを維持できます。コア。 Aarch64 LinuxカーネルはAarch32プロセスを実行できます。 Raspbianはデフォルトではサポートされていないため、32ビットオペレーティングシステムと64ビットオペレーティングシステムの両方を維持する必要があります。これらのいずれかを基本オペレーティングシステムとして使用できます(例:内部にそしてシステムサービス)、他はchrootを使用して特定のプログラムを実行します。バラより64ビットDebian / Ubuntuで32ビットプログラムを実行するにはどうすればよいですか?実用的なアプローチ。

64ビットプログラムに必要なすべてのライブラリをインストールする必要があります。特定のプロセスは完全に32ビットまたは完全に64ビットである必要があるため、64ビット実行可能ファイルでは32ビットライブラリを使用できません。

32ビットシステムを維持する理由がない限り、64ビット実行可能ファイルを実行する必要がある場合は、64ビットシステムをインストールする方が簡単です。

32ビットプログラムはできませんが、64ビットプログラムができる唯一の作業は3GB以上の仮想メモリを処理することです。これは1GB RAMを搭載したシステムでは有用性が制限されます。さらに大きなレジスタを使用するとパフォーマンス上の利点が得られますが、メモリへの追加アクセスによってパフォーマンスが低下する可能性があります。

答え2

一部のアーキテクチャではそうです。ただし、ARMまたはx86には該当しません。

QEMUを使用して64ビットシステムをエミュレートできますが、そうしたくありません。

答え3

64ビットバイナリを実行できるように、カーネルを64ビットカーネルにのみアップグレードしてください。デフォルトでは、ディストリビューション全体は32ビット互換モードで実行され、唯一の64ビットmongodbは通常モードで実行されます。

しかし、その価格ほど価値がありません。 mongodbを32ビットに切り替えることをお勧めします。ただし、この場合、コンテンツ全体を仮想メモリに直接マッピングするため、データベースが2 GBを超えることができないという制限があります。データベースが大きい場合、カーネルのアップグレードのみが残ります。 (拡張を助けてくれた@duskwuffに感謝します!)

ただし、データベースに大きな負荷が必要ない場合、またはその前にいくつかのキャッシュソリューション(他の32ビットmongoなど)を使用できる場合は、CPUエミュレーションが機能する可能性があります。これを行うには、「qemu qemu-system-x86_64」インターネット検索を開始してください。これらのソリューションは実行不可能なタスク要件を持つ可能性があり、本番環境では奇妙に見なされる可能性があります。

あなたの立場では、私のデータベースに十分な場合は32ビットmongoを使用し、そうでない場合は64ビットカーネルを使用します。

答え4

私はしばらく32ビットシステムで64ビットカーネルを使用してきました(64ビット実行可能ファイルと必要なすべての64ビットライブラリをデフォルトで実行するための最小前提条件です)。私はそれをお勧めしません。最終的に私を64ビットシステムにアップグレードしたのは、ALSAヘッダー(特にMidi ioctl呼び出し)がサイズに依存しないことに気づいたからです。これは、32ビットモードでコンパイルされたコンテンツが64ビットカーネルと正しく相互運用されないことを意味します。

もちろん、これは修正する価値のあるバグと見なすことができますが、ALSAの開発速度はほとんど停滞しており、混在プラットフォームのサポートが修正されるまで(そして非バイナリ互換の方法で修正されるまで)数年を待つことはできません。非ハイブリッドプラットフォーム)実行文書)、とにかくハイブリッドプラットフォームへの関心は急激に減少しています。

一部のアプリケーションでは、混在モードで動作しますが(驚くべきことに実際には)、カーネルとインタフェースする基本的な部分以上を実行している場合は、外部ライブラリを介しても過度に楽観的です。

関連情報