CPU側からみたOSの64bitと32bitの違いは次の通りです。
Q/最近のOSには32ビットと64ビットのものがあるように思えますが異なるものですか?
A/64bit版は32bitの上位レジスタが利用できるOSを意味します。32bitなら2の32乗までの演算を一度(1クロック)で行うことができます。64bitでは2の64乗までの演算を1回で行えるのです。電卓でいうと、8桁の数字液晶画面があるものと、16桁の数字液晶があるもののような扱いです。
・恩恵のある具体的な違いとしては、
・4GB以上のメモリ空間が使え、最大で16EBまでのメモリ空間を認識可能。(ただしOSの対応と、x64プロセッサ及びEFI/BIOS/メインボードの対応が必要)
・GPTドライブとして2,1TBを超えるハードディスクをOSをインストールするドライブとして利用可能。(別途EFIの対応が必須)
・8本の追加レジスタを利用し、演算効率をより高めることが出来る。
・SSE2命令に標準で対応する。
・64bitアプリケーションを使うことができる。
これらが一般的な違いです。
Q/64ビットのCPUのパソコンにWindows 7をインストールする場合はWindows 7のインストーラが64ビットのものでないと使えないのでしょうか?
A/現在のwindows7に使われるCPUは、x86と呼ばれる技術(アーキテクチャ)をベースにしています。
この技術は、米Intel社が開発したもので、それをAMD(アドバンストマイクロデバイス)社が、64bit処理に対応したものに拡張したのが現在の64bitOSが使えるCPU技術です。
このプロセッサは通称x64(正式名はAMD64)と呼ばれ、64bitで動作するLong Mode、32bitで動作するLegacy Modeが登載されています。64bitで動作しているときには、64bitで動作する追加レジスタ8本も利用することができます。そのため、64bit最適化された命令なら32bitで作られた(コンパイルされた)同じ命令機構より高速に演算できる場合があります。また、メモリ空間も多くの割り当てが可能です。
このLong Modeでは、32bitの命令をCompatible Modeと呼ばれるモードで演算することも可能です(OSが対応している必要があります)。Windowsの64bit版でこのコンパッチブルモードを使うと、メモリの制約が3.25GBから4GBフルまで使えるようになるという利点が生まれており、64bit環境で動作可能な32bitアプリケーションであれば、32bitネイティブのOSよりも、高速に動作することがあります。
Legacy Modeでは、100%の32bit互換x86モードで動作します。その代わり、64bitで動作する追加レジスタは使うことが出来ないのが特徴です。メモリ空間なども、32bitの上限に引き摺られるのが一般的です。このモードは32bitOSをインストールしたときに自動的に認識し動作します。
よって、64bitCPU環境では32bitのOSもインストールできます。
Q/32ビットのCPUのパソコンに64ビットなどと書かれているOSをインストールした場合一般的には使えないのと32ビットで動作するのとどちらになりますか?
A/64bitのOSは、32bitのCPU(中央演算処理装置)で実行するとオーバーフロー(桁あふれ)を起こすため、実行出来ません。これは、先に述べたように電卓と同じです。
OSだけで見た32bitと64bitの違いとして、まず64bitのwindowsは、32bitとは少し異なる設計が一部に行われています。32bitより堅牢なプログラムとなっているのです。さらに、追加レジスタに最適化されています。
使う側が感じる特徴的な部分は64bitでは32bitアプリケーションをWOWでエミュレートするという違いがあります。
64bitOSと32bitOSで動作するアプリケーション互換の話も出ていますが、これは、CPUのアーキテクチャの違いによる物ではなく、windows機構上のエミュレータの問題です。
32bitで設計されたアプリケーションは、元々64bit向けのソフトではないため、先に書いたCMとWOW64の組み合わせで動作します。WOW64というのは、Windows On Windows64bitの略で、32bitのソフトを64bitに見せかけるための仕組みです。32bitのソフトが起動されたと識別されたら、windowsは、それに登録されているプログラム関数を確認し、標準のライブラリに属すると判断されれば、それを64bitの代替コードとすり替え実行します。
これが、WOW64と呼ばれる機能です。これには欠点があり、ライブラリに存在しないコードは、実行時エラーになることがあります。即ち、起動できないケースがあるのです。
今でも大半のアプリケーションは32bitで設計されていますから、これまで使っていたアプリケーションの動作はしっかり確認して64bitOSをインストールする必要があるでしょう。
尚、ハイパーバイザーやXPMなどでゲストOSとして32bitOSを入れれば、100%、32bitアプリケーションを動作させることも出来ます。この場合は、ハードウェアドライバなどの問題がなければ、100%32bit環境をエミュレートできます。
アプリケーション側からみると、64bitはコンパイルの違いです。
最近は、コンパイラがある程度自動的に32bitプログラムを64bitに、翻訳する技術を備えているケースもあるため、必ずしも設計ががらっと変わるとは限りません。記述した最初のコードは同じでも、最終的に機械語翻訳(コンパイル)の段階で、コードが64bit化できるケースもあります。
64bitにすることで、より多くのメモリや追加レジスタが使えますが、必ず速度に有利とは限りません。プログラムの大きさによっては、32bitでも64bitでも速度は大差ないことも、しばしばあります。これは、電卓に1+1をさせようが、10+10をさせようが、コンピュータにさせようが同じということです。
桁が少なく簡単な計算なら、そもそも64bitの恩恵は少ないですからね。
プログラミングをする場合は、どの環境で使うのかが大事です。32bit環境をこれからも使うなら、32bitで設計し、64bitでも動作することを確認するのが良いでしょう。64bitでメインに使い大量のメモリを消費するなら、64bitが良いでしょう。ただし、64bitの場合は、32bitOSでは使うことが出来ませんので注意が必要です。
いかがでしょうか?
補足
64ビット用のCPUというのは64ビットでも32ビットでも使用可能なものという意味だったんですね。 OSの方は必ずしも64ビットの方が優れているとは限らないということですね。 ありがとうございました。