CPUがしていること
3 GHzのプロセッサーは1秒に30億回刻み、1回の刻みは3分の1ナノ秒ごとです。
コンピューターの授業を思いうかべましょう。(これは作り話の場面です。)黒板に番号のついた箱が16個描かれ、どの箱にも8ビットが書かれています。3人の生徒がCPUの役をします。1人はPCと書かれたカード、1人はIRと書かれたカード、1人はACCと書かれたカードを持ちます。PCのカードには0とあります。IRの生徒は箱0まで歩いていき、そこにある0001 1110を写します。PCの生徒はカードを1に書きかえます。クラスは壁の表で最初の4ビットを調べます。0001はLOADという意味です。最後の4ビット1110は14です。そこでACCの生徒は箱14まで行き、そこにある7を写します。それから、箱1からまた同じことが始まります。
箱1にはADD 15とあるので、ACCは7 + 5 = 12になります。箱2にはSTORE 13とあり、ACCの生徒は箱13に12を書きます。箱3にはHALTとあり、全員が席に着きます。動きは全部で12回でした。3人のうちだれも、このプログラムが「7と5を足す」ものだと知る必要はありませんでした。1人1人が小さな規則を1つずつ守っただけです。箱がメモリ、カードがレジスタ、壁の表がデコーダーです。本物のCPUも同じしくみで、それを1秒に何十億回もくり返しています。そして中のだれも、やはりプログラムを理解してはいません。
同じ短いループを、1秒に何十億回も
ゲートは足したり、比べたり、選んだりできますが、何を、どの順で、どの数でするのかを指示するものが必要です。それが中央処理装置、CPUの仕事です。CPUは1つの短いループをくり返します。プログラムカウンター(PC)は次の命令のアドレスを持っています。フェッチ:CPUはPCが指すセルを命令レジスタ(IR)に読みこみ、PCを1つ進めます。デコード:制御回路がオペコードのビットを見て、正しい経路を用意します。たとえばADDなら加算器をつなぎます。実行:仕事が行われます。数が読みこまれたり、足されたり、書きこまれたり、あるいはPCが変えられてプログラムが別の場所へジャンプしたりします。そしてループがまた始まります。JZという命令はアキュムレーターが0のときだけジャンプします。この1種類のジャンプだけで、プログラムは判断とくり返しができるようになります。
ドラッグで回転、スクロールまたはピンチで拡大・縮小。
シーンは、クラスが演じたのと同じプログラムを実行します。「ステップ」を押すと、PC、IR、ACCがカードとまったく同じように変わります。LOAD 14、次にADD 15、STORE 13、HALTで、3段階ずつの命令が4つ、全部で12段階です。かけ算のプログラムも同じ少数の命令を使いますが、セル15のカウンターが0になるまでに、JZとJUMPがPCを2回0へ戻すので、72段階で24個の命令を実行します。足し算の6倍の命令数です。
プログラムは数と同じメモリにある
黒板では、命令と数の7と5が同じ列の箱に入っていました。これは偶然ではありません。1945年6月、ジョン・フォン・ノイマンは「EDVACに関する報告書の第一草稿」を書き、命令をデータと同じメモリに置くコンピューターを説明しました。それ以来、ほとんどすべてのコンピューターがこの方式で動いています。命令は、ビットがいくつかの欄に分かれた数にすぎません。このおもちゃのコンピューターでは、どのセルにも8ビットが入ります。最初の4ビットが何をするか(オペコード)、最後の4ビットがどのセルを使うか(アドレス)を表します。0001はLOADなので、0001 1110は「LOAD 14」、つまりセル14の数をアキュムレーター(CPUの作業用レジスタ)に写すという意味です。
ループの速さ
各段階は、一定の速さでオンとオフを切り替える電圧、クロック信号に合わせて進みます。3 GHzのクロックは1秒に3,000,000,000回刻むので、1回の刻みは1 ÷ 3,000,000,000秒、約0.333ナノ秒です。その間に光は約10センチメートルしか進めません。1回の刻みで1段階なら、おもちゃの7 + 5のプログラムを1秒に2.5億回実行できる数の刻みです。実際のプロセッサーは、おもちゃのように単純に1回の刻みで命令を1つずつ終えるわけではありません。いくつもの命令の段階を組み立てラインのように重ねて進め、これをパイプライン処理と呼びます。また、いまのチップには、コアと呼ばれる完全なプロセッサーがいくつも並んでいます。おもちゃにはそのどれもありません。だからこそ、手で追いかけられるのです。
| オペコード | 名前 | すること |
|---|---|---|
| 0000 | HALT | 停止 |
| 0001 | LOAD a | ACC = セル a |
| 0010 | ADD a | ACC = ACC + セル a |
| 0011 | SUB a | ACC = ACC − セル a |
| 0100 | STORE a | セル a = ACC |
| 0101 | JUMP a | PC = a |
| 0110 | JZ a | ACC = 0ならPC = a |
- 「PCは実行した命令の数を数えている」 PCは次の命令のアドレスを持っています。4 × 3のプログラムでは、PCは2回0へ戻されますが、終わった命令の数は24まで増え続けます。
- 「CPUは人と同じようにプログラムを読む」 CPUは8ビットを読み、オペコードとアドレスに分け、そのオペコード用に決まった配線に従います。カードを持った生徒と同じく、プログラムが7と5を足すものだとは決して知りません。
- 「GHzの数字が大きいほど、必ず速いコンピューターだ」 クロックが決めるのは段階が起こる頻度で、1回の刻みでどれだけ仕事をするかではありません。実際のチップは命令の段階を重ねて進め、コアもいくつかあるので、同じGHzの2つのチップでも、こなす仕事の量は大きくちがうことがあります。
- 命令サイクルの段階を順に並べましょう。
- CPUがアドレス3の命令をフェッチします。フェッチの直後、PCはいくつですか?
- おもちゃのコンピューターで、0010 1111はどんな意味ですか?
- ADD 15
- LOAD 15
- STORE 2
- ADD 7
- LOAD 14を8ビットで書きましょう。
- クロックが3 GHzで動いています。1回の刻みは何ナノ秒ですか?(小数第3位まで)
- 7 + 5のプログラムは、HALTを含めていくつの命令を実行しますか?
- どの命令も3段階かかります。7 + 5のプログラムは何段階かかりますか?
- STORE 13は何をしますか?
- アキュムレーターをセル13に写す
- セル13をアキュムレーターに写す
- アドレス13へジャンプする
- アキュムレーターに13を足す
- カウントが0になるまでプログラムにループをくり返させる命令はどれですか?
- JZ(0ならジャンプ)
- STORE
- HALT
- LOAD
- フォン・ノイマンが「EDVACに関する報告書の第一草稿」を書いたのは何年ですか?
- プログラムは数として、データと同じメモリに記録される(フォン・ノイマン、1945年)。
- CPUはフェッチ、デコード、実行をくり返す。PCは次の命令を指す。
- 命令のビットはオペコードとアドレスに分かれる。
- クロックが速さを決める。3 GHzなら0.333 nsごとに1回刻む。
このコースの出典 (9)
- (checked 2026-10-17; reordered 2026-10-19: standards first, then official documentation, then the teaching model and calculations, history sources last)
- Standards: NIST, "Prefixes for binary multiples" (physics.nist.gov/cuu/Units/binary.html: IEC approved kibi, mebi, gibi in December 1998; 1 B = 8 bit; 1 MiB = 1 048 576 B; 1 MB = 1 000 000 B; 1 GiB = 1 073 741 824 B; historical note: memory makers usually mean 2²⁰ bytes by megabyte, storage makers 1 000 000, and the "1.44 MB" diskette uses a megabyte of 1 024 000 bytes)
- IETF RFC 20 "ASCII format for Network Interchange" (1969, 7-bit codes, A = 65, a = 97, 0 = 48)
- IETF RFC 3629 "UTF-8, a transformation format of ISO 10646" (2003: 1 to 4 octets per character, ASCII unchanged, code points up to U+10FFFF, U+0800 to U+FFFF take three octets, "the first octet of a multi-octet sequence indicates the number of octets", example U+D55C U+AD6D U+C5B4 = ED 95 9C EA B5 AD EC 96 B4)
- Official documentation: MDN Web Docs, "<color>" (hexadecimal colour notation #RRGGBB)
- Intel, "Intel Chips" timeline poster (2012: Intel 4004 of 1971 with 2,300 transistors; 2nd generation Core 2010 with 1.16 billion)
- Claude E. Shannon, "A Symbolic Analysis of Relay and Switching Circuits", Transactions of the AIEE vol. 57 (1938)
- abstract of his MIT master's thesis. Computer History Museum, The Silicon Engine, "1947: Invention of the Point-Contact Transistor" (Bardeen and Brattain, December 1947, germanium)
- John von Neumann, "First Draft of a Report on the EDVAC" (30 June 1945, Moore School, reprinted in IEEE Annals of the History of Computing 15:4, 1993).
確認日: 2026-10-17