コンピュータアーキテクチャ #06 命令実行サイクル

コンピュータアーキテクチャ
#06 命令実行サイクル
1
コンピュータアーキテクチャ
#06
命令実行サイクル
情報システム学科
坂本政祐
sakapon@sit.ac.jp
2
「レジスタ」とは何なのか(1)
CPUの中にある,記憶装置。
一時的な保管場所。
実体はFlip-Flopという,トランジスタでできた電子回路だが,CPUの中で使うときはそれに
いろいろな役割を持たせて,レジスタという名前で呼ぶことにしている。
PC(プログラムカウンタ),MAR(メモリアドレスレジスタ),命令レジスタ,データレジス
タ,...
あれ,でも「キャッシュ」もCPUの中にあって,一時的な保管場所なのでは…?
命令実行サイクルの説明をする前に
3
「レジスタ」とは何なのか(2)
命令実行サイクルの説明をする前に
CPU側
リソース側
高速 低速
小容量 大容量
CPU内
CPU外
SRAM
銅線
磁気
DRAM
「記憶」をつかさどるものはコンピュータの中には沢山ある。
そのヒエラルキーの頂点,もっともALUに近いものがレジスタ。
速いけどちょっとしかない。
どうせちょっとしかないので,番地で管理しないですべてのレジスタに「名前」がついてい
る。
※ あとで詳しくやります。
4
「レジスタ」とは何なのか(3)
どのくらいちょっとかと言うと:
x86系 基本的に保証されているのは8個
MIPS系 16個
SPARC,PowerPC 32個
メインメモリは数100MB∼数GB,L2キャッシュも1MBとかあるわけだから,すごくちょっと。
命令実行サイクルの説明をする前に
5
命令実行サイクル
6
命令実行サイクル
以前の右図を思い出そう。
プログラムが実行されるときは,HDDからプログラムが全部読み出されてメモリにコピーされ
,その後逐次的に実行CPUに送られる,という話だった。
その送られるひとかたまりが即ち命令語である。
CPUに送られたあと,命令語は分解され,オペコードに従ってひと仕事してデータを返す。こ
のローテーションをひたすらこなす。
この1回のローテーションのことを命令実行サイクルという。
CPU
Bus
Bus
メモリ
HDD
1.
2.
7
「空間的に」命令実行サイクルを表す図
ALU
IR
10101001
PC
234
DataReg
デコーダ
シーケ
ンサ
アドレス
指定
命令
オペコード
オペランド
データ
データ
データ
データ
命令アドレス
Bus
データ
アドレス
オペランド
MAR
00101111
メインメモリ
制御信号
CPU
なお,このモデルではプログラムカウンタはメモリに直接アクセスできないと仮定している
。
8
「時間的に」命令実行サイクルを表すチャート
PC
データレジスタ,メインメモリ
メインメモリ
IR
命令デコーダ
命令実行サイクル(1サイクル)
データレジスタ,メインメモリ
ALUの入力側で一時停止
ALU
ALUの出力側で一時停止
パイプライン化や分岐予測など,今日のCPUには非常に様々な高速化手法が入っているが,今
でも基本はすべてこのサイクル。
ただしこれはCISCと呼ばれる基本構造のとき。対してRISCは少し違うが,それはだいぶ後に
後述。
命令フェッチ
命令デコード
オペランド
フェッチ
命令実行
結果格納
x86とか
1
コンピュータアーキテクチャ
#06 命令実行サイクル
9
今回のここから以降は
以降では,この「空間的」&「時間的」な図を対比させながら,命令実行サイクルを詳しく見
ていく。
サイクルのどこをやっているとき,CPU上のどこが働いているのか。
10
命令フェッチ
PC
データレジスタ,メインメモリ
メインメモリ
IR
命令デコーダ
命令実行サイクル(1サイクル)
データレジスタ,メインメモリ
ALUの入力側で一時停止
ALU
ALUの出力側で一時停止
命令
フェッチ
命令
デコード
オペランド
フェッチ
命令
実行
結果
格納
※fetch=「取ってくる」
プログラムカウンタPCに命令語のアドレスが入っている。
そのアドレスをMARに渡す。
MARはさらにそのアドレスをメインメモリに渡す。
メインメモリはそのアドレスに入っている命令語をバスに送出。
命令レジスタIRはバスから命令語を獲得。
命令語アドレス
命令語
11
命令デコード
PC
データレジスタ,メインメモリ
メインメモリ
IR
命令デコーダ
命令実行サイクル(1サイクル)
データレジスタ,メインメモリ
ALUの入力側で一時停止
ALU
ALUの出力側で一時停止
命令
フェッチ
命令
デコード
オペランド
フェッチ
命令
実行
結果
格納
デコーダはIRから命令語を受け取って,中身を解読する。
どんな命令か。
オペランドはあるか。
データはどこから(レジスタ?メインメモリ?)読むべきか,あるいはどこに置くべきか。
解読できたら,必要な制御信号をデータレジスタやメモリに送出。
例えばデータレジスタに対して,「今保持している中身をバスに送出してね」等。
命令語
オペランド
12
オペランドフェッチ
PC
データレジスタ,メインメモリ
メインメモリ
IR
命令デコーダ
命令実行サイクル(1サイクル)
データレジスタ,メインメモリ
ALUの入力側で一時停止
ALU
ALUの出力側で一時停止
命令
フェッチ
命令
デコード
オペランド
フェッチ
命令
実行
結果
格納
データレジスタやメモリから,必要なデータを読み出す。
読み出したデータはALUの入力のところに一旦ためておく。
演算に使うデータ
13
PC
データレジスタ,メインメモリ
メインメモリ
IR
命令デコーダ
命令実行サイクル(1サイクル)
データレジスタ,メインメモリ
ALUの入力側で一時停止
ALU
ALUの出力側で一時停止
命令
フェッチ
命令
デコード
オペランド
フェッチ
命令
実行
結果
格納
命令実行
オペコードをALUに送出する。
ALUは,送られてきたオペコードに従って演算を行う。
加算,減算,乗算などの算術演算
論理演算
シフト
演算結果はALUの出力のところに一旦ためておく。
入力データ
出力データ
14
PC
データレジスタ,メインメモリ
メインメモリ
IR
命令デコーダ
命令実行サイクル(1サイクル)
データレジスタ,メインメモリ
ALUの入力側で一時停止
ALU
ALUの出力側で一時停止
命令
フェッチ
命令
デコード
オペランド
フェッチ
命令
実行
結果
格納
結果格納
実行結果としてALUの出口にたまっているデータを,デスティネイションオペランドに従って
データレジスタやメインメモリに送出。
出力データ
15
次のサイクルへ
PC
データレジスタ,メインメモリ
メインメモリ
IR
命令デコーダ
命令実行サイクル(1サイクル)
データレジスタ,メインメモリ
ALUの入力側で一時停止
ALU
ALUの出力側で一時停止
この後,PCの中のアドレスの数値を1命令語分進める。
例えば,命令語が4バイト固定であるようなアーキテクチャなら,現在の値に4を足せば良い
。
これで1サイクル終了。
再び最初に戻って繰返し。
16
今日のまとめ
命令実行サイクルについて説明した。
すべてのCPUは,このようなシンプルなサイクルをひたすら繰り返すことで複雑な計算や仕事
を行っている。
次回は「基本命令セット」について。
2