CPUとメモリ

[教科書7.1] コンピュータの内部構造

CPUは次のように動作する。

  1. PCのアドレスの内容を主記憶装置から読み出す。
  2. 読み出した命令を解析する。
  3. 命令で使うデータをメモリから読み込む。
  4. 命令を実行する。
  5. 計算結果をメモリに書き出す。
  6. 1.に戻る
この動作のなかで、1.から2.、2.から3.に移るタイミングを決めるためにクロックが使われる。 1秒間にクロックが0から1に変化する回数をクロック周波数という。 一般的には、クロック周波数が高いほど計算が速い。

練習1: 左上のリンゴマーク→「このMacについて」で、今使っているCPUのクロック周波数が表示される。(ECCSのiMacでの話)
上記のように5回のクロックで1回加算ができると仮定すると、1秒間に何回加算ができるだろうか?

命令集合の例(CPUによって違う。以下はED21というシミュレータのもの。教科書表7.1とは少し違う)
命令のカテゴリ 命令 内容 命令の16進表現
データ転送命令 LOAD A ACにアドレスAの内容を読みこむ 0x0800+A
LOADI D DをACをセットする 0x1000+D
STORE A ACの内容をアドレスAに保存する 0x1800+A
演算命令 ADD A ACの内容にアドレスAの内容を加算する 0x3000+A
SUB A ACの内容にアドレスAの内容を減算する 0x3800+A
MUL A ACの内容にアドレスAの内容を乗算する 0x4000+A
DIV A ACの内容からアドレスAの内容を除算する。 ACの下位16ビットが商、上位16ビットが余りとなる 0x4800+A
分岐命令 J A アドレスAにジャンプする(PCの値をAとする) 0xD800+A
JZ A ACが0の時、アドレスAにジャンプする 0xE800+A
JM A ACが負の時、アドレスAにジャンプする 0xE000+A
制御命令 STOP 0 プログラムを停止する 0

ED21のプログラムのサンプルを使って 計算機シミュレータ(ED21) でプログラムがどのように実行されるかの実演をする。

参考: 最近はクロックを速くすることが限界に近づいてきているので、上で説明したCPUを「コア」と呼び、 複数のコアを使って複数の処理を並列に行うようになってきている。 ECCSで使っているiMacのCPUは Core 2 Duo といってコアが2つ内蔵されている。

参考: (高速な計算を行うための)スパコンでは多数のコアを使って高速に計算するようになっている。 スパコンランキングによると、 2008年11月時点の最速のスパコンはIBMのRoadrunnerであるが、 このコンピュータでは約12万9600個のコアを使って1秒間に最大1456.70x1012回の浮動小数点計算ができる。 電力消費は2483.47KWである。(黒部ダム)

コンピュータに関するものでは、個々のものはそれほど難しくないが、それを組合せると難しくなることが多い。 ここに潜む難しさをまとめて複雑さと呼ぶことにする。 コンピュータ発展の歴史は、「複雑さ」を克服する方法の歴史であったと言っても過言ではない。

複雑さを克服する方法のなかで重要なものが抽象化である。 抽象化とは「不要な要素を除いて単純化すること」である。 一連の操作がそのなかで完結するような抽象化をモデルと呼ぶので、「〜のモデル」という言い方もよく使われる。 教科書の第4章のデータモデルや第5章のプログラムの記述は具体的な抽象化(モデル化)の例である。 コンピュータが扱うデータは全て0と1で表現されているが、0と1で考えているのでは大変である。そこで、0と1を抽象化したものとしてデータモデルを考えるのである。 コンピュータのプログラムはload 1234やadd 5432などの命令からなるが、そのレベルで考えるのは大変である。そこで、命令を抽象化したモデルとしてプログラムの記述を考えるのである。 このような抽象的な思考方法を身につけることで情報はずっととっつきやすくなる。

yamaguch@mail.ecc.u-tokyo.ac.jp
Copyright 2009 Kazunori Yamaguchi 山口和紀@東京大学総合文化研究科