CPUのbit数とメモリの関係について教えてください。


http://mag.autumn.org/Content.modf?id=20050119154552
こちらのページを読んでいて色々わかりませんでした。

>物理的にCPUに接続できるメモリのメモリ空間は、主にCPUからアドレスバスが何本出ているかで決まります。
>プログラムがアクセス可能なメモリ空間は、CPUの論理的なアーキテクチャで決まります。

これらの意味の違いはどういったことでしょうか。
知識が浅いので簡単な言葉で教えていただけると助かります。

よろしくお願いします。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2008/04/09 20:45:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:yo-kun No.1

回答回数220ベストアンサー獲得回数30

ポイント20pt

>物理的にCPUに接続できるメモリのメモリ空間は、主にCPUからアドレスバスが何本出ているかで決まります。


まず、メモリ内部は小さなデータを保存する区画があり、それぞれに0、1、2、…と番号付けされていると考えてください。(アドレスといいます)

ここまではOKでしょうか?

さて、CPUがメモリとデータをやり取りする場合、メモリの何番地のデータを読み書きするのかを指定してやらねばなりません。

当然CPUもメモリも電気的なデバイスですから電気的に番地を指定してやらないといけません。

ということはCPUとメモリとの間に番地を指定するための配線があるはずです。これをアドレスバスといいます。


アドレスバスではOn/Offの2値しか区別できないとします。(実際デジタル回路ですからそうなっています)

すると1本のアドレスバスで指定できる番地の種類はOn/Offの2通りしかありません。

つまり2つ分しかメモリの中の保存区画を利用することができないことを意味します。


さて、アドレスバスが2本になるとどうなるかというとそれぞれにOn/Offの状態をとれるわけですから2×2の4つ分利用できます。

同様にアドレスバスがn本だと2のn乗分だけの区画を利用できることになります。


>プログラムがアクセス可能なメモリ空間は、CPUの論理的なアーキテクチャで決まります。

CPUのデータ転送命令ではメモリ空間へのアクセスは○○をメモリの××に書き込むといった命令があります。

ここで番地指定のことをアドレッシングといいます。

アドレッシングにはCPUによってもさまざまな方法がありますが一般的にこの番地もデータである以上指定できる番地数に上限があります。

これがCPUの論理的なアーキテクチャで決まることになります。



まとめると、

前者がアドレスバス用に用意されている物理的な配線の数であり、2のn乗の番地指定が限界になります。

後者がCPUの命令として許容できる番地の数の上限です。


ただし通常この限界は同じ、もしくは同程度です。

id:the_yakisoba

丁寧にご説明ありがとうございます。

CPUのbit数はここで言うアドレスパスorアドレッシングできる数の、

どちらかと同義でしょうか??

2008/04/02 23:08:27
id:Gay_Yahng No.2

回答回数724ベストアンサー獲得回数26

ポイント20pt

CPUからのアドレスバスを直接1つのメモリにつないだときはアドレスバスの数でアドレスがきまる。

だから32ビットCPUは2の32乗の4GBのメモリ空間にアクセスできる。

でも例えば、CPUからメモリ1、メモリ2にアドレスバスを平行につないであげて、何かのコマンドで

これからメモリ1にアクセスします

これからメモリ2にアクセスします

と制御できるとしたら?

メモリ1で4GB、メモリ2で4GBの合計8GBのメモリ空間にアクセスできる。

この例は極端かもしれないけど32ビットのアドレスバスだからって4GBしかアクセスできないわけじゃないということ。

id:RC30-popo No.3

回答回数345ベストアンサー獲得回数13

ポイント20pt

アドレスバスの本数の意味は既に回答されているので、

「CPUのbit数はここで言うアドレスパスorアドレッシングできる数の、

どちらかと同義でしょうか??」

答えはどちらでもありません。どちらかと言えば「アドレッシングできる数」

と同義のことが多いのですが、あらゆるCPUにこの定義があてはまるわけでは無いため、

良く混乱を引き起こします。

CPUの中にはメモリとは別に、様々な処理のためにデータを溜めておくレジスタというものがあります。

この中でも通常の四則演算等に利用する汎用レジスタのビット数=CPUのビット数とすることが多いです。レジスタにも色々な種類があり、「メモリのアドレッシングに使うレジスタ」のbit数が

ほぼ「CPUの論理的なアーキテクチャ」になります。

最近の32bitや64bitのCPUでは汎用レジスタがアドレッシングにも使われるため、汎用レジスタのビット数=主要な演算器のビット数=アドレッシング可能なビット数の関係が成り立っていますが、そうでないCPUも世の中にはたくさんあります。

特に昔の8bitや16bitのCPUでは汎用レジスタや演算器は8bitや16bitでも、メモリのアドレッシングは複数のレジスタを組み合わせてレジスタのビット以上のアドレッシングができるものが多くあります。Intelの8086は16bit CPUですが、論理的には20bitのアドレッシング能力がありました。



一方でCPU内部では例えば32bitのレジスタを持っており、32bitのアドレッシングができても、

CPU(LSI)の外部に32本のアドレス線が出ているとは限りません。これはその時代のメモリコスト

から見て、まだ32bit=4GBというメモリ搭載量が現実的でなかったり(つまりメモリの値段がばか

高くて、とても実現できない)、システムの要求的にそれほどのメモリ量を必要しなかったり

する場合に、LSIそのものや、マザーボードのコストを下げるためにアドレス線の本数を

減らします。

以下のURLは64bit CPUと実際のアドレス線の本数に例が載っています。

http://www.itmedia.co.jp/enterprise/articles/0506/08/news003.htm...

id:the_yakisoba

ご回答ありがとうございます。

上記のページを見てみましたが、

実際のアドレス線の本数=物理アドレス

という認識であっていますか??

またここで、

仮想アドレスと物理アドレスの差分は、

仮想メモリとして用いることのできるサイズということでよろしいでしょうか??

とんちんかんなことを言っていたら申し訳ないです。

2008/04/03 01:27:09
id:itss No.4

回答回数171ベストアンサー獲得回数1

ポイント20pt

Hi,

16ビットCPUでまず考えてください。

以下のCPUは16ビットCPUです。

・8086 ->1M

http://ja.wikipedia.org/wiki/Intel_8086

・80286 ->16M

http://ja.wikipedia.org/wiki/Intel_80286

id:hujikojp No.5

回答回数101ベストアンサー獲得回数7

ポイント20pt

まず、「CPUのビット数」は単なるマーケティングのキーワードで、技術的に定義があるわけではありません。よって、一概にアドレス空間との関係は言えません。最初に参照されている文書は、そのあやふやなところを付いた、技術的にはただしい文書のようです。わざと奇を衒って書いてあるので、混乱するのも無理はありませんが。

なにをもって「CPUのビット数」とするかには諸説ありました(データバスの幅、演算レジスタの幅など)。

ただ、近年の 64bit CPU (Alpha, MIPS64, AMD64) では、論理的にアドレスできる空間の bit数が問題になってます。なぜなら、そもそもデータベースなどで (4GBを越えるよな) 巨大なデータをアプリケーションから簡単に扱いたいというのが 64bit化のモチベーションになってるので。

だからこそ逆に「32bit CPUは 4GBしかつかえない」という「都市伝説」もうまれるわけです。これは、正確には参照された文書の述べるように間違いです。普通の使い方をしている場合、あまり気にならない間違いではありますが。

そもそも「CPUが使えるメモリ空間」という概念が曖昧なのが、この問題をややこしくしている所以です。自分の言葉でこれを定義してみようとしてみてください。

(間)

模範解答としては、これは二つの意味がいりまじったもので、技術的に分けてみれば「CPUに接続できるメモリのメモリ空間」と「プログラムがアクセス可能なメモリ空間」ということになるのです。前者が物理メモリ空間、後者が仮想メモリ空間と思ってほぼまちがいないでしょう。

さらに噛み砕いていえば、1GBしかメモリを (物理的に) 搭載していないシステムでも、2GBのメモリを (論理的に) 使うアプリケーションを動かすことができます。でも (「普通」の 32bit CPU上の「普通の」 OSでは) 4GB以上のメモリを使うアプリケーションを動かすことはできません。これは直感的には明らかではないかもしれませんが、それが論理的なアドレス空間の制限というものです。

以上、参考になれば幸いです。

追記: i386って Segmentationがあっても、それを一度 32bitの論理アドレスにmapしてから、さらに 32bitの物理アドレスにするんじゃなかったっけ。つまり、参照した文書の「32bitのx86アーキテクチャは、48bitの論理メモリ空間を持ちます」は、技術的にも怪しい気がしてきました。瑣末な問題ですが。

  • id:ken33jp
    >それを一度 32bitの論理アドレスにmapしてから、さらに 32bitの物理アドレスにするんじゃなかったっけ。

    ここまでは正しい。

    >つまり、参照した文書の「32bitのx86アーキテクチャは、48bitの論理メモリ空間
    >を持ちます」は、技術的にも怪しい気がしてきました。

    間違ってます。48bitであってるはずです。
  • id:hkrhr1
     どなたの答えも難しいですね。

    間単に言うと、Windowsで一般的に使われているインテルのCPUは32bitなので、
    その32bitで表現できる4.3ギガ個のアドレスしか使えないのです。

    今は、多くのCPUが64bitになり、メモリーの上限が問題になる事はなくなりました。
    64bitの場合、計算すると20億ギガ個になるようです。

     一般のWindowsが動いているCPUは未だに32bitです。アップルが、IBMのCPU(PPC;64bit)から、インテルのCPU(32bit)に代えた時は驚きでした。

    64bitのCPUの製品化の先陣を切ったDECと言う会社のCPU(アルファ)ができた時は、メモリが4ギガバイト以上も必要になる分けないと馬鹿にされたものでした。今昔物語。

  • id:hkrhr1
     論理空間と物理空間、論理アドレスと物理アドレスもあまり難しく考えないで、
    つまりは、次のようです。
    メモリに使うDRAMは高いので、多く使えないが、ハードディスクは安いからメモリーとして一部使う事しました。つまり、ハードディスクの一部をあたかもDRAMのようにメモリーとして使用するようになり、ハードディスクメモリーの事を論理空間、仮想空間あるいは仮想メモリーと呼ぶ様になりました。


    これは、IBMが1960年代に始めた事で、メインフレームコンピュータに広くつかわれましたが、最も優れた仮想空間マネージメントを行なっていたOSは、やはり、DECと言う会社のOSで、名前をVMSと言いますが、これは、Virtual Memory System(日本語に訳すと、「仮想メモリシステム」)の略号で、如何に仮想メモリーに力を注いでいたかが分かります。UnixやMSDOSは、DECのVMS上で作成されたOSですが、両者共、仮想メモリーの部分はないがしろにしてしまい、その結果、未だに問題があるように」感じています(大きなデータを扱うと極端に計算が遅くなる)。

  • id:hujikojp
    なんかコメントでやりとりするのも野暮ですが:
    id:ken33jpさん曰く:
    >間違ってます。48bitであってるはずです。
    うーむ、全ての 2^16個 segmentがあって、各々が 4GBの空間をもてるとしても、全ての segmentは重なって、おなじ 4GBの空間を指すことしかできないのでは? 結局ひとつの 32bit空間に集約されるはずなので。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません