プログラマにとってCPUとはなにか
皆さんは以下のような質問に端的に答えることはできるでしょうか
1. プログラムとは何ですか
2. マシン語とは何ですか
3. 実行時のプログラムはどこに格納されていますか
4. メモリーのアドレスとは何ですか
5. コンピュータの構成要素の中で、プログラムを解釈/実行する装置は何ですか
答えは以下です。
1. プログラムとは何ですか
→ コンピュータに実行させる処理の順番を示す
2. マシン語とは何ですか
→ CPUが直接解釈できる言語
3. 実行時のプログラムはどこに格納されていますか
→ メモリー
4. メモリーのアドレスとは何ですか
→ メモリー上で命令やデータが格納されている場所を示す値
5. コンピュータの構成要素の中で、プログラムを解釈/実行する装置は何ですか
→ CPU
我々プログラマはコードを書きますが、コードはCPUに解釈され命令が実行されます。
ではCPUとは一体どんなものなのでしょうか
CPU
CPUとは、先ほども述べたように、「マシン語となったプログラムを解釈/実行する装置」です。
CPUは主に次の4つの要素から成り立っています。
- レジスタ
- 制御装置
- 演算装置
- クロック
CPUを理解するためには4つの中でも、特にレジスタの理解が必須です。
レジスタは命令やデータを格納する領域のことです。レジスタがなぜ重要かについては、プログラムが実際に実行されるまでの流れを説明した後に解説します。
プログラム実行までの流れ
プログラムが動くまでには以下のような流れを踏みます
- プログラムを書く
- プログラムをコンパイルしてマシン語のEXEファイルへと変換する
- プログラム実行時に、2.で変換したEXEファイルをメモリー上に作成する
- CPUがプログラムの中身を解釈・実行する
CPUはレジスタの集合体である
CPUを理解するためにはレジスタが重要と言いましたが、それはなぜかと言うと、
プログラマが考慮しなければならないのは、「レジスタ・制御装置・演算装置・クロック」のなかでレジスタだけだからです。
レジスタに命令やデータを格納する記憶装置ですが、プログラムはそれらの命令やデータを宣言することでレジスタに格納できるようにします。
一つのCPUの内部には数十から数千のレジスタが存在していて、制御装置が命令やデータをレジスタに読み出して、演算装置はレジスタに読み出されたデータを演算する役割を担っています。
CPUにできること
CPUにできることはとてもシンプルです
以下の4つしかありません
- データ転送命令…レジスタとメモリー、メモリーとメモリー、レジスタと周辺装置の間のデータの読み書き
- 演算命令…算術演算、論理演算、比較演算、シフト演算を行う
- ジャンプ命令…条件分岐、繰り返し処理
- コール/リターン命令…関数を呼び出し、呼び出し元へと戻る
我々が、複雑な設計や、複雑なロジックを記述しても、CPUではそれらを分解して上記の内容へと落とし込み高速に読み書きします。
参考
プログラムはなぜ動くのか 第2版 知っておきたいプログラムの基礎知識