CPUのbit数とかについての話

きっかけは、「OSの32bitと64bitって何が違うん?」という質問から。
よくわかってないことに気付かされたので、少し調べてみました。

bitの話

CPUが、とか、OSが、とか言う前にそもそも「bit」に対する理解を定めておきます。

bitとは

bitとは。
wikipediaさんからの引用です。
最小単位だということと、0か1しかとらないということが重要ですね。

ほとんどのデジタルコンピュータが扱うデータの最小単位。英語の binary digit (2進数字)の略であり、2進数の1けたのこと。
【参考】ビット – Wikipedia

Byteとは

では、次に「Byte」とは。
2008年にISOやIECによって、「1Byte = 8bit」と定められましたが、1Byteが6bitだったり、4bitだったりする時代もあったようです。
今となっては、1Byte=8bitが共通認識となってきましたが、以前まではそうでもなかったようです。
そのためか、8bitのことを指す「オクテット」という単位があったり、4bitのことを指す「ニブル」という単位もあるようです。

【参考】
小心者のプログラマー: パソコン昔話1(なぜ、1バイトは8ビット?)
1バイトが8bitに定まったのは2008年 – Qiita

なんで8bit=1Byte

どうして8bitというような中途半端なサイズを1Byteにしたのかというと、アルファベット一文字を表すのに8bitくらいがちょうどいい塩梅だったからだそうです。
アルファベットの大文字(26)、小文字(26)、さらに数字(10)に少しの記号を足すと、2^7通りもあれば事足ります。
ここに、さらにパリティビットという誤り検出符号を加えて、2^8通り。

たとえば、ASCII文字コード表を眺めてみると、記号や、数字、大文字、小文字を16*8通りの文字コードで指定しているのがわかります。

【参考】文字コード

なのでこれを1Byteとしたようです。

CPUの話

CPUには制御と演算を行う部分があり、前者は指揮者のようなもので、後者は計算やデータの演算処理をするものです。
この、CPUの中にも実は記憶装置が入っており、それをレジスタと呼びます。
これはコンピュータの記憶装置の中で最も高速に動作するものです。
レジスタはキャッシュとは別物で、キャッシュよりも高速で記憶容量も小さいです。

CPUのbit数とはどこのことを指すのか

ざっくり5つほどあるらしい。

  1. ALU長(何bitまでの数値を一度に計算できるか)
  2. レジスタ長(何bitまでの数値を一時的に保管しておくことができるか)
  3. データバス長(メモリに対して何bitまでの数値を一度に読み書きできるか)
  4. アドレスバス長(8bitを一単位として、何単位までのメモリをリニアに扱えるか)
  5. 命令長(一つの命令が何bitで構成されているか(演算性能とは関係ないのでここでは扱いません))

【参考】1bit CPU はできるのか? / 1bitCPU はできるのか?

一般的にはこのレジスタ長が32bitなら、「32bit CPU」と呼びますが、実際どこのことを指して「32bit」と言っているのかは注意する必要があります。

CPUが扱える情報の差

32bitのCPUの場合は、2^32(約42億)のサイズの情報を扱うことができ、64bitのCPUなら、2^64(約1844京)のサイズの情報を一気に計算することができます。
つまり32bitと64bitでは扱える情報が2倍ではなく2^32倍増えます。
一気に計算できる量が大きくなるほど、処理能力も大きくなります。

メモリの上限問題

32bitのCPUを用いた場合、そのコンピュータは最大で4GiBまでのメモリしか認識することができません。
どうしてかと言うと、メモリの1つのメモリアドレスに対して1Byteが割り振られるので、32bitのCPUを用いた場合、メモリアドレスは2^32個振られることになります。

2^32Byte = (4 * 2^30) = 4GiB
なので、4GiB以上のメモリを積んだとしても、扱うことができません。

ちなみに、64bitのCPUを用いた場合のメモリの上限は、
2^64Byte = 17,179,869,184GB = 16,777,216TB = 16EB
というふうになります。
ですが、これは理論上の値であって、現在はOSの制限などにより積むことはできません(たぶん)

HDDの上限問題

同様にしてHDDにも上限があります。
32bitCPUで管理できるのは、最大で2TiBまでになります。

ディスクドライブの扱う最小単位に「セクタ」というものがありますが、HDDの場合では1セクタは512Byteです。
ハードディスクのMBRパーティションでは、1パーティションで管理できるセクタの数は全部で32bitなので、

512Byte * 2^32 = 2 * 2^40 = 2TiB
となり、2TiBの壁があるということになります。

【参考】大容量 HDD 導入時には注意!「2TBの壁」 (フェンリル | デベロッパーズブログ)

結論と所感

  • 32bitだとメモリやHDDに限界がある
  • 画像処理や動画編集など大量のデータを処理する場合は巨大なメモリを使える64bitのほうがいい

ちなみに今は64bitのCPUが主流になってきましたが、128bitのCPUはいつごろ出てくるのですかね。
さきほどの計算式でも見たとおり64bitのCPUが管理できるメモリの上限は16EBでしたが、いつかは、これでも足りないほどの情報を一気に扱う必要が出てくるのかもしれません。

そんなに大きな容量が必要になるものかと思ってしまいますが、実際昔の人からしたら2TiBのHDDなんて不要だろって感じだったのかも知れませんね。
ですが、もうここまでくると主記憶装置と補助記憶装置を分ける必要もなくなってくるかも知れません。

その頃には量子コンピュータも実用的なものになっているのかも知れませんね。

【参考】128ビットCPUの登場する日

参考

【今更聞けない!】32bitと64bitの違いとは? まとめ
今さら聞けないOSの32bit版と64bit版の違いとは? | PC-FREEDOM

コメントを残す