32bit, 64bit CPUとはナニ?
こんにちは、Marsです。
今日は、CPUとメモリの構造を語りつつ、32 bit CPUと64 bit CPUの意味および関係について話したいと思います。
パソコンを購入する際に、CPUの隣に32bit, 64bit と書いているとみなさんは気づいているでしょう。32 bit CPU, 64 bit CPUについて大体知ってるぞ、という方もいらっしゃると思いますが、
XX bit CPUのXX bitは、ずばり、一回の処理でCPUが処理できる情報量です。
32bit CPUは、一回につき2^32の情報を処理することができ、64bit CPUは、一回につき2^64bitの情報を処理することができます。
メモリの具体的な構造を解剖し、32bit CPUを例にして説明したいと思います。
今ここで、4GBのメモリがあるとします。
画像の参照元:
http://www.coins.tsukuba.ac.jp/~yas/coins/os2-2009/2010-02-02/index.html
アドレスは、0x00000000から0xffffffffまであります。つまり、2^32個のアドレスがあります。ここでは一番下のテキスト領域に焦点を当てます。
このテキスト領域は、実行するプログラム本体の機械語が入っています。機械語の例を示します。
このように、左側灰色の部分はアドレスで、右の部分はプログラム本体(機械語)です。
これから初心者のためにこの図について説明しますが、知っている方は、適当に読み飛ばしてくださいね^^
アドレスは左から右へ00000000,00000001,00000002,00000003のように1アドレスごとに進み、0000000Fまで行くと改行し、1行に16アドレスがあります。
1アドレスが格納するデータの大きさは、常に1バイト(=8bit)です。つまり、2^8の情報です。機械語の部分を見ると、1桁の数字は16通りの数字を表すことができ(0~F )、つまり2^4です。1個のアドレスが格納しているデータは、図の中では2個の数字で表しています。例えば、6行目の1列目にある69(16進数)とは、メモリにあるアドレスが00000050に格納されているデータであり、2進数で表すと01101001になります。その右の73を格納しているメモリアドレスは、+1で00000051になります。
メモリの説明はここまでにします。次に、CPUのレジスタを説明します。
CPUの中には、レジスタというものがあります。パソコンは、主にCPUにあるレジスタとメモリとハードディスクの間のやりとりで動作しています。いずれも記憶装置です。
メモリからレジスタにデータを渡すことはロード(Load)と言い、レジスタからメモリにデータを渡すことはストア(Store)と言います。
プログラムを実行する直前に、レジスタはメモリから機械語コードをロードします。しかし、レジスタは数に限りがあり、1個のレジスタに入れるデータの大きさも限られています。
図のように、一回のロードは1命令(1行)だけ取り出します。ここまでは命令の内容を取り出すだけで、まだその命令を実行していません。プログラムを実行する際にも命令レジスタが使われ、大きさも変わりません。
ここで本題に戻ります。32bit CPUの32bitとは何ぞや?
「命令レジスタが1回につき処理できる命令の大きさである」
簡単に言えば、命令レジスタ/命令の容量、または幅です。
処理する命令は、メモリからの読み出し命令だったり、データの読み書きだったりとして様々です。
先ほど説明したメモリのテキスト領域からデータをロードする際に、32bitのCPUは32bitのデータしかレジスタにロードできず、一方、64bitのCPUは64bitのデータをレジスタにロードすることができます。
先ほどの機械語の例でいうと、32bitの場合、
1個の四角で囲んだ範囲は1回の命令が扱うフィールドです。その範囲は32bitになります。
64bitの場合は、データが以下のように読み出されます。
1個の四角で囲んだ範囲は64bitです。
64bitのCPUのメリットは、32bitのCPUに比べて1回の命令につき処理できる情報量が多いことです。
1回の処理につき、64bitのCPUは32bitのCPUより2^64/2^32=2^32=4294967296倍もの情報を処理することができます。めちゃくちゃ早いです@o@!
最後に、もう一度整理しましょう。
32bit CPUの32bitとは、
「命令レジスタが1回につき処理できる命令の大きさである」
つまり、命令レジスタ(ウツワ)が1命令(ナカミ)を実行する際に、その器の大きさが32bitということです。
実際、32bitのパソコンは2018年現在ではほとんど見かけなくなっています。ほとんどの場合は64bitになりました\^o^/
もし興味があれば、仮想マシンとかに32bitのOSと64bitのOSを入れて動作速度を比べてみましょう!(暇人かよ!#)
あっ、補足ですが、64bitのCPUのパソコンで32bitのOSは使えますが、32bitのCPUのパソコンで64bitのOSを動作することができません!
理由は簡単ですが、32bitのCPUのパソコンで64bitのOSを動作できないのは、命令レジスタの大きさが足りないからです!最大0.8mlのインクが入る万年筆に1.6mlのインクを入れたい場合を考えましょう。溢れ出て、インクがこぼれてしまいますね...
64bitのCPUのパソコンは、命令レジスタが64bitで、実質下位の32bitだけ使えば32bitのOSを動かすことができます。(上位レジスタがもったいないですが。。。)
読んでくれて、ありがとうございました。