目次
MPU (x86に限らず、組み込み系のものも含む)の
「アドレス単位はなぜ1byte(8bit)に設定されているのか?」
について調べた。
2011現在、大多数のMPUは、
MPUの処理するデータが1byte単位であることが多いため、
内部で扱えるbit数とは無関係に、アドレス単位が1byteに固定されている。
昔(1970年前後〜)は、一部のMPUは、
MPU内部での処理単位に合わせて、
アドレス単位が1word(≒レジスタサイズ)単位で設計されていた。
このため、過去には
と呼んで区別していた。(2011年現在、これらの単語は死語と化していると思われる)
MPUは、外部に備えたメモリ※へのアクセスを、アドレスバスを通じて行う。
※ ここでは「物理メモリ(メインメモリ)」のことを意味する。仮想メモリについてはここでは対象としない。
ここで、アクセス可能なアドレスの最大値は、MPUのアドレスバス幅[bit]に依存する。
(アドレスバス幅)^2
が、MPUが指定可能なメモリアドレスの個数になる。
ここで、2011現在、一般的には、
1つのアドレスが示すメモリ空間(メモリのアクセス単位)は8bit(1byte)である(※)ため、
(アドレスバス幅)^2 * 1[byte]
がMPUが扱える最大メモリ空間(サイズ)になる。
例えば、32bitアドレス幅をもつMPUの場合、
2^32 * 1 [byte] = 4 [GB]
が、MPUからアクセス可能な最大メモリ空間になる。
上述のように、アクセス可能なアドレスの最大値は、アドレスバスのbit幅によって決まってくる。
ここで、各種MPUの枕詞として使われる「〜bitプロセッサ」との名称は、
必ずしもアドレスバスの幅を示していないことに注意が必要である。
例えば、32bitプロセッサと呼ばれていたintel社のPentium Proの場合、
下表のように、レジスタサイズは32bitであるのに対し、アドレスバス幅は36bitである。
箇所 | bit数 |
プロセッサ内部(レジスタ) | 32ビット |
外部アドレスバス | 36ビット |
外部データバス | 64ビット |
浮動小数点ユニット | 80ビット |
このため、例えば、32bitプロセッサであるPentiumProとi450GXチップセットとの組み合わせにおいては、
最大8GBまでのメインメモリを搭載でき、
アドレス幅が32bitである場合の最大値である4GB以上のメモリ空間にアクセス可能であった(ようだ)。
2011年現在、市販のMPUはほぼ全てのものが、
メモリアクセス単位が1byte(8bit)(いわゆるバイトマシン)となっている。
MPUが1byte単位で処理を行うことが多いので、
MPUのワード数(≒レジスタサイズ)とは無関係に、メモリのアクセス単位は1byteに固定されているらしい。
この仕様が一般化した理由は不明。
過去(1970年前後〜)には、一部に、
メモリアクセス単位として、MPUのワード単位を採用するもの(いわゆるワードマシン)が存在していた。
具体例は、下記、Wikipediaのワードマシンのページを参照。
(いずれも、2011現在では現役で使われていない、はず。)
そのため1ワードが1byte(8bit)でない場合に、
アドレスのアクセス単位が1byteと異なっていた模様。
2011現在は、1byte = 8bit で統一されていると見て問題ないと思われるが、
過去には、1byte = 7bit のものや、1byte = 9bitのものが存在していたので
バイトマシン=アドレス単位が8bit
とは言葉の上では定義できないことに注意。
基礎から学ぶコンピュータ -- 《第十五号》 ワードとバイト (?)
http://rryu.sakura.ne.jp/compfund/backnumber/compfund015.txt
Omicron ワードマシン (2002)
http://tiki.is.os-omicron.org/tiki.cgi?c=v&p=%A5%EF%A1%BC%A5%C9%A5%DE%A5%B7%A5%F3
バイトマシン - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%88%E3%83%9E%E3%82%B7%E3%83%B3
ワードマシン - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%AF%E3%83%BC%E3%83%89%E3%83%9E%E3%82%B7%E3%83%B3
バイト (情報) - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%88_(%E6%83%85%E5%A0%B1)
なぜ今時のコンピュータのビット数 (語長) は2の冪乗なのか?|プログラムは楽しげに走らねばならない♪ (2007)
http://ameblo.jp/noocyte/entry-10049187365.html