web-dev-qa-db-ja.com

32ビットOSは64ビットプロセッサで実行できますか?

32ビットOSと64ビットOSの違いは何ですか? 32ビットOSは64ビットプロセッサで実行できますか?

26
Prabhu

あなたの質問はアーキテクチャ固有です。 x64は基本的にx86アーキテクチャの拡張です。 64ビットのアドレス空間をサポートしています。これは、いくつかの新しい命令と新しいレジスターを提供します。

X64マシンで32ビットx86 Windowsを実行できます。 Itanium 64ビットシステムではこれを実行できないことに注意してください。

35
Mehrdad Afshari

64ビットプロセッサは、32および64 OSの両方を実行できます(少なくともx64はできます)。 32ビットプロセッサは、ネイティブで32のみ実行できます。

違いはほとんどポインタ/参照のサイズについてです。 64ビットマシンでは、64ビットアドレス範囲のアドレスを参照できます(したがって、2 ^ 64バイトのメモリが提供されます)。 32ビットでは、2 ^ 32バイト(= 4 GB)しかアドレス指定できません。現在のコンピューターを見ると、なぜ世界が64ビットに移行しているのかは明らかです。32ビットでは、すべてのRAM。

X64(AMD/Intel)では、64ビットの追加の利点があります。 CPUにはより多くのレジスタがあり、より効率的なコードが可能です。

他のアーキテクチャでは、64ビットと32ビットの違いはそれほど明白ではありません。たとえば、Nintendo 64(覚えていますか?)は64ビットマシンでしたが、そのコードのほとんどは32ビットでした。したがって、その場合、64ビットの方がマーケティングトリックとして役立ちました。

19
Lemmy

現在受け入れられている答えは一般的に正しいですが、特にそうではありません。 「32ビットCPU」または「「64ビットCPU」と呼ばれるものは実際には1つもありません。これは、CPUアーキテクチャの1つの小さな部分のみを参照する説明です。特に、つまり、CPUとメモリの間のアドレス選択ライン、つまり、いわゆるアドレス空間がメモリ操作に使用できます。

人々が座って、プロセッサとメモリの間のワイヤを織り(ラップ)していたCPUが昔の時代には、32または(理論的には当時は存在しなかったため)を使用する必要があったでしょう。アクセスしたいメモリアドレスを指定するために使用される、CPUとメモリコントローラ間の64線。たとえば、2ビットのメモリアーキテクチャがあるとします。00を送信するとアドレス0が選択され、01がアドレス1を選択し、10がアドレス2を選択し、11がアドレス3を選択します。この2ビットで2 ^ 2バイトが得られますRAM(4バイト)。

32ビットCPUを使用していて、CPUとメモリコントローラーの間にさらに32本のワイヤーを追加して、より多くのメモリを魔法のようにサポートできるようにすると、32ビットを実行できる「64ビットCPU」ができます。コードまたは64ビットコード。これはどういう意味ですか?さて、この回答の最初の部分から2ビットCPUを取り出し、別のワイヤーを追加して、それを3ビットCPUに変えて、4バイトから2 ^ 3または8バイトのRAMにします。

既存の「2バイト」コードが実行され、上記のように最後の2つのワイヤの値を設定します(00-11)。追加の接続はデフォルトでゼロになるように配線するため、実際には2バイトのコードが実行され、00を選択すると実際には000が選択され、11を選択すると実際には011が選択されます。簡単です。

現在、プログラマーは「ネイティブ」の3バイトコードを書きたいと考えており、追加のアドレス空間を利用するためにソフトウェアを書きます。彼女はCPUに、自分が何をしているのかを知っていて、新しい追加のワイヤーを手動で制御することを伝えます。彼女のソフトウェアは追加のワイヤを認識しており、000〜111を正しく送信し、この新しいCPUアーキテクチャでサポートされているメモリの範囲へのフルアクセスを提供します。

しかし、それはそうしなければならない方法ではありません。実際、これは通常notがどのように発生するかです。 64ビットCPUが最初に導入されたとき(そして多数ありました)、それらはすべて完全に新しいアーキテクチャー/デザインで採用されました。彼らは32本のワイヤーを追加して「これで、これは32ビットまたは64ビットモードで使用できる64ビットCPUだ」と言うだけでなく、「これは私たちの新しいCPUであり、このまったく新しいマシン言語でプログラミングするだけで、このまったく新しい方法で動作し、従来のx86/i386 32ビットCPUよりもはるかにエレガントにさまざまな問題を解決し、ネイティブの64ビットアーキテクチャです。 」

それは、それがどれほど大規模に沈んだかにより、現在「イタニック」として知られているIntel Itaniumの話でした。それは新しい64ビット時代の到来を告げるはずでした、そしてそれは見事なものでした。可変長命令、巨大なキャッシュ、64ビットアドレススペース、大量のレジスター、非常にエキサイティングで超クール、そして超ハードで、20年間のレガシーコードを再コンパイルまたは書き直すように皆を説得します。これは、AMDとIntelが実際に競合していた頃のことでした。AMDは、「この「すべての世界の問題を解決する」ビジネスをすべて忘れて、i386に32本のワイヤーを追加して、32ビット互換64ビットCPU」とx86_64 CPUアーキテクチャが誕生しました。

実際、主要なオペレーティングシステム(Linux、Windows、BSDなど)のカーネル名とソースを見ると、AMD64 CPUとAMD64アーキテクチャへの参照が散らばっていることがわかります。 AMDは、32ビットOSが64ビットハードウェアまたは32ビットアプリケーションで実行できるように、32ビットアプリケーションとの互換性を維持しながら、すべての人を64ビットの世界に切り替えるための優れた戦略を思い付きました64ビットハードウェア上の64ビットOSで実行できます。 Intelは「Intel EM64T」アーキテクチャ(基本的にはAMD64と同じ)でスイートを後から追うのではなく、x86_64が優勢でしたが、ItanicとMIPS64やALPHA64のような他のものはデスクトップ/サーバー市場で見られなくなりました。

tl; dr AMD64 aka x86_64 CPUは、32ビットと64ビットの両方のカーネルお​​よびコードと互換性があるように設計されていますが、ほとんどの64ビットCPUは、同じように明らかに下位互換性がありますnot。 32ビットCPUは最大4GiBのメモリにアクセスできますが、64ビットCPUは驚くべき16 EiB(16×1024 ^ 6バイト、または4 billion 4GiBのメモリの倍)にアクセスできます。 。

3