INTERACTIVE LAB · COMPUTER SYSTEMS
CPUと記憶装置
RAMを書き換える。実行する。キャッシュの働きを比べる。
自分のプログラムで、確かめよう
- RAMの行を押すと編集画面が開き、命令や数値を変更できます。
- 「次へ」で命令の取得・CPUへの取り込み・データ参照・計算を1動作ずつ確認。「自動実行」で最後まで進めます。「全画面」でCPU → キャッシュ → RAMを広く表示できます。
- 終了命令まで実行すると結果が自動保存されます。キャッシュのON/OFFや容量を変えて再実行し、結果を比較できます。設定やRAMの編集時には、CPUとキャッシュが初期化されます。
加算・減算は指定番地の数値を使います。「値の設定」だけは数値をそのまま使います。計算中の値は1つです。
プログラムと保存 基本の加算
16・17番地の数値を変えて、計算を試してみよう。
CPU
- 次に実行する番地
- 0
- 現在の命令 (—番地)
- —
- CPUが受け取った値
- —
- 完了した命令数
- 0
仮想アクセス時間
キャッシュ
CPUからの要求待ち
実行するとブロックが入ります。
この命令のアクセス
押すと理由を表示
「次へ」を押して、
最初の命令を取得しよう。
主記憶装置 RAM
| 番地 | 現在の内容 |
|---|
行を押して初期内容を編集。反映すると初期RAMからやり直します。2番地で1ブロック。
実行状況
仮想時間 / ns- CPU処理0 ns
- キャッシュ参照0 ns
- RAM転送0 ns
命令取得 0 · 読出 0 · 書込 0 / RAM転送 0
記録と比較 0件
EXPERIMENT RECORDS
条件を変えて、比べよう。
終了命令まで実行すると、結果と初期条件を自動保存します。途中の結果はボタンで保存できます。記録は最新12件をこのブラウザに保存。各記録の「条件を復元」で初期RAMと設定を読み戻せます。同じ初期RAM・開始番地の記録には同じ条件番号が付きます。
| 記録 / 初期条件 | キャッシュ | 結果 / 命令数 | 合計時間 | CPU / キャッシュ / RAM(ns) | ヒット率 | アクセス / RAM転送 | 操作 |
|---|
まず1回実行して、結果を残そう。次はキャッシュをOFFにしてみよう。
この実験のしくみ・時間の数え方
RAMの行を押すと、現在の内容を確認しながら初期内容を編集できます。「次へ」で1動作ずつ進み、「前へ」でCPU・RAM・キャッシュ・計測値を直前の段階へ戻します。青い破線は番地の要求、緑の実線は命令やデータの転送です。命令取得・読み出し・書き込みで色の意味は変わりません。キャッシュのヒット/ミスは要求欄で太字と色を使って表示します。開始番地は常に0です。対象のRAM行は自動で表示し、背景色で強調します。キャッシュヒット時のRAM行の表示は参照先の確認用で、RAMへの転送は発生しません。ミスの場合も、まずCPUからキャッシュへ要求し、ミス判定後にRAMへブロックを要求します。キャッシュの枠には要求を処理する制御を含めて表しています。
命令と数値は同じRAM(0〜31番地)に置きます。命令取得とデータ読み書きは1つのキャッシュを共有し、2番地単位のブロックをどの枠にも保持できます。最近使われていないブロックから置き換えます(LRU)。書込ミスでもブロックを取得し(ライトアロケート)、RAMにもその都度書き込みます(ライトスルー)。書き込みによって命令が数値に変わる場合もあります。
仮想時間の計算方法
合計時間=命令数 × CPU処理時間 + 全メモリアクセスの待ち時間として計算します。 CPU処理時間は命令が完了するたびに1回だけ加算し、命令の種類にかかわらず一定です(初期設定は1ns)。加算・分岐・書き込みなどでCPU処理時間は変えません。 一方、メモリ待ち時間は命令に必要なアクセス回数と、各アクセスのヒット/ミスによって変わります。
命令ごとのメモリアクセス
どの命令も、最初に命令をRAM上の番地から取得します(読出1回)。その後にデータの読出や書込が必要な命令は、もう1回アクセスします。
| 命令 | アクセスの内訳 |
|---|---|
| 値の設定・分岐・終了 | 命令取得のみ(計1回) |
| 読出・加算・減算 | 命令取得+データ読出(計2回) |
| 書込 | 命令取得+データ書込(計2回) |
アクセス1回あたりの仮想待ち時間
同じ状況なら、どの命令でアクセスしたかによらず同じ時間を加算します。命令取得は「読出」に含みます。
| 状況 | 仮想待ち時間 |
|---|---|
| 読出ヒット | キャッシュ参照時間 |
| 読出ミス | キャッシュ参照時間 + RAM転送時間 |
| 書込ヒット | キャッシュ参照時間 + RAM転送時間 |
| 書込ミス | キャッシュ参照時間 + RAM転送時間 × 2 |
| キャッシュOFF(読出・書込) | RAM転送時間 |
書込ヒットでもRAMに書き込むため、RAM転送時間を1回加えます(ライトスルー)。書込ミスではブロック取得と書き込みでRAM転送を2回数えます(ライトアロケート+ライトスルー)。2番地分のブロック取得は1転送として扱います。
例えば初期設定(CPU処理1ns、キャッシュ参照2ns、RAM転送40ns)で、すべてキャッシュヒットした場合、値の設定は3ns、加算は5ns、書込は45nsです。 つまり、CPU処理時間が一律でも、命令全体の時間は同じとは限りません。
読出ヒット時はキャッシュ → CPU、ミス時はRAM → キャッシュ → CPUの順でデータを渡し、RAMからの取得を二重には数えません。実機では必要な値をブロック取得中に先に返す場合もあります。実機の書込バッファや並行処理は省略し、この教材では順番に仮想時間を加算します。CPU処理時間は画面上の命令完了時に計上し、表示・自動実行の速度は仮想時間に影響しません。
実行状況のメーターは、CPU処理・キャッシュ参照・RAM転送にかかった時間の割合です。凡例の数値はそれぞれの仮想時間を表します。キャッシュ参照にはミスを調べた時間も含みます。RAM転送にはミス時のブロック取得、ライトスルーの書き込み、キャッシュOFF時の直接アクセスを含みます。青の無地・オレンジの斜線・紫の点模様を使い、色だけでなく模様と文字でも区別できます。
値は安全な整数の範囲で扱います。自動実行は10,000命令ごとに一時停止。RAM・設定の変更後はキャッシュを空にし、計算中の値を0に戻します。保存済みの比較記録は保持します。