はじめに
私たちはコンピューターを動かす際、様々な命令を行っています。
例えば、「検索して」や、「メールを送って」などは、よく行いますよね。
今回は、そんな命令がコンピューターの中でどのように行われているかを一緒に学んでいきましょう!
CPUの命令実行サイクル
実際の命令実行サイクルは以下のようになっています。
以降、①から順番に説明していきますね!
イメージで覚える!
私は、実際に例を出して覚えました。
今回は、「A君へのメールを送信する」という命令で考えてみましょう!
①命令の取り込み
まず説明するのは、図の黄色い部分です。
そもそもですが、コンピューターの中では、様々な命令が絶えず実行され続けています。
そのため、「A君へのメールを送信する」という命令も、すぐに実行されるわけではありません。
これらの命令は、自分の番が来るまでは主記憶というメモリの中に格納されています。
なので、命令を実行するためにはまず、主記憶からその命令自体を取り出さなければならないのです。
ここで、命令アドレスレジスタは次の命令(今回は「A君へのメールを送信する」)が主記憶のどこにあるかを知っている人です。
まずは命令アドレスレジスタから命令が格納されている住所を聞いて、命令を取り出してくるのです。
この処理を、命令フェッチと言います。
イメージとしては、「命令さん、順番が来たらお呼びしますので、それまで主記憶の中でお待ちください」という感じです。
②命令の分別
次に、今取り出した命令を、命令レジスタというところに格納します。
ここで、命令レジスタは、今から行う命令を格納する場所と覚えておいてください。
調理するための「まな板」だと覚えてもいいかもしれません。
ただ、命令を格納する際、命令を命令部とアドレス部に分ける必要があります。
命令部は、命令の動詞の部分です。
今回の「A君へのメールを送信する」だと、「送信する」があたります。
アドレス部は、命令の目的語の部分です。「○○を」の部分のことですね。
今回の「A君へのメールを送信する」だと、「A君へのメールを」があたります。
なんでそんなことをするの?と疑問に思うと思います。
実はこの先、命令部とアドレス部では処理が変わってくるのですね。
そのため、今まで一つの「A君へのメールを送信する」だったのを、
「送信する」の命令部と「A君へのメールを」のアドレス部に分ける必要があります。
③解読
次に、命令部の処理を行います。
今、「送信する」という命令部がありますが、コンピューターからしたら「送信する」と言われても、何をすればいいのか分からないのです。
なので、この「送信する」というのを具体的に「装置Aさんは○○して」、「装置Bさんは△△して」のような指示に変換しなければなりません。
その処理を行っているのがデコーダという部分です。
つまり、命令を取り出した後、コンピューターが処理しやすいような形に変換しているんですね。
ここで変換された命令は、その後実際に命令を実行する演算装置に送られます。
④アドレス生成
その次に行うのが、アドレス部の解析です。
今の命令は「A君へのメールを送信して」というものですが、コンピューターはこの「A君へのメール」がどれのことかだか分からないのです。
そこで、今回は「A君へのメール」を持ってきてあげなければいけません。
ここで、アドレスレジスタというのは、その「A君へのメール」が格納されている住所を知っている人です。
なので、アドレスレジスタで目的のデータの住所を計算してもらい、主記憶の中から目的のデータを取り出します。
今、住所の計算と言いましたが、ここにも複雑な方式がありまして…
詳しくはこちらで解説していますので、是非こちらもご覧ください。
⑤ファイル読み出し
次は、ファイル読み出しです。
これは、今取り出したデータを演算装置に送ることです。
実際に命令が実行されるのは演算装置の中なので、処理対象のデータを送って、処理してもらいます。
⑥実行
いよいよ処理の実行です。長かったですね。
ここでは、デコーダで変換された命令部の「送信する」と、
アドレス部に指定された「A君へのメール」が組み合わされて、メールが送信されます。
⑦結果の格納
最後に、結果の格納です。
メールなどでは、無事に送信が完了したら「送信済み」BOXに送られますね。
そんな感じで、実行の結果がここで格納されます。
さて、これで命令実行サイクルは完了となりましたが、どうでしたか?
色々分解されて順番を覚えるのが大変だと思いますが、図でイメージすると意外と覚えられる
ので、おすすめです!
練習問題
問題1
A,書き込み B,実行とアドレス作成 C,命令でコードとレジスタファイル読み出し、
D、命令フェッチ E,メモリアクセス を、順番通りに並べてください。
(平成28年度春学期試験より引用)
正解 D→C→B→E→A
解説 まず、Aの書き込みは、実行結果の書き込みのことです。なので、図の⑦にあたります。
Bの実行とアドレス生成は、命令の実行のことなので、⑥にあたります。
Cの命令デコードとレジスタファイル読み出しは、③④にあたります。
Dの命令フェッチは、命令を取り出して分けることなので、①②にあたります。
Eのメモリアクセスは、少し悩むかもしれません。今、メモリ(主記憶のところ)にアクセスして
いるのは、①④⑦です。しかし、①はDの命令フェッチで、④はCのレジスタファイル読み出しで
すでに出てきているのです。したがって、ここでは⑦の部分を指しています。
なので、Aの書き込む前ということになります。
したがって、D→C→B→E→A の順番になります。