この記事は下記書籍を主に参考にしています。
コンピュータの構成と設計 第5版 上 | デイビッド A パターソン, ジョン L ヘネシー, 成田 光彰 | コンピュータ・IT | Kindleストア | Amazon
コンピュータが実行すること
- 情報を受け取り(入力)
- その情報を記憶し(記憶)
- それを用いて演算し(演算)
- 出力する(出力)
- 上記全てを制御する(制御)
これらをうまく設計してくれているものが、コンピュータになります。
コンピュータが理解する言語
当たり前ですが、通常自分たちが使っているプログラミング言語を機械は読み取ってくれることはありません。
機械が読めるコードは、0と1の2進数で構成されていなければいけません。
仮にC言語を使用しているものとします。
その場合、下記の手順を踏むことで、コンピュータは命令を読み取り、命令を実行できています。
- C言語をコンパイルし、機械語プログラムに翻訳
- リンカでプログラムを統一
- ローダでメインに読み込み、実行できるようにします。
リンカ
複数のプログラム部品を結合して1個にまとめるプログラム
プログラミングの概要より引用
個々にアセンブルされた機械語のプログラムを統合してくれます。
プロセッサの処理の流れ
ではさらに細部を見ていきましょう。
主に出てくるメンバー
- プログラムカウンタ(PC)
- 命令レジスタ
- レジスタ
- ALU
- メモリ
命令を実行するまでの5つのステップ
- 命令を取り出す
- 命令のデコード, レジスタフェッチ
- 命令実行・アドレス作成
- データ・メモリ・アクセス
- 書き込み
※PCは、プログラムカウンタのことですよー。
さらに細かくなると下記のようなイメージです。
第8章 「コンピュータシステム」より引用
変数を定義した場合には、その変数はメモリに作成されます。
そのあと、演算がある命令に関しては、メモリからレジスタにデータをコピーしてきて、それをALUで計算してあげる。
その計算結果をメモリに読み込んであげて、結果を出力してあげています。
アドレス
メモリ上の番地のことを指します。
このアドレスを使って、データを取り出します。
命令の構成
アドレス部のところは指定の方法がいくつかあり、
アドレスをそのまま使って、データを取り出す直接アドレス方式、
アドレス部のデータが指し示すメモリアドレスにはデータではなく、アドレスが入っていて、そのアドレスにデータが入っている間接アドレス方式などがあります。
レジスタ
レジスタはCPUに内蔵された記憶装置で、演算結果や実行状態などを保持するために利用されます。
レジスタは様々な働きが存在します。
プログラムカウンタ(PC)
- 現在実行しているプログラムの番地を格納します
- プログラムの流れの制御を行います
命令レジスタ
命令自体を保持するためのメモリである.
コンピュータの基本構成要素より引用
プログラムには、命令と命令に含まれるデータが含まれています。
これを一つ一つ取り出し、解釈し(decode)、実行していきます。
命令レジスタ(IR)
- メモリから読み出した命令を一時的に記憶します
メモリアドレスレジスタ(AR)
- メモリに対してこれから操作するアドレスを格納します
- メモリ装置はここを参照して指定されたアドレスにアクセスします
メモリデータレジスタ(MR)
- メモリから読み出されたデータを格納します
- メモリに書き込むデータを格納します
ALU
ALUはCPUに内蔵されていて、算術演算や論理演算を行う装置です。
マイクロプロセッサより引用
ALUができること
- 整数演算操作 (加算、減算、乗算)
- 論理演算 (AND、NOT、OR、XOR)
- ビットシフト操作
it-shikaku.jp - コンピュータシステム - 3.コンピュータ構成要素 - 1.プロセッサ - 4.プロセッサの構造と方式
シフト
ビットを左または右にずらして、空いた部分に0をうめる操作のことを指します。
機能
ロード(load)
変数の値(主記憶の内容)をレジスタに読み出します。
ストア(store)
レジスタの内容を変数に格納する(主記憶に)書きこみます。
コンピュータの仕組み|CPU|ALU|レジスタ|メインメモリ|バス|アドレス指定方式
メモリ
主記憶(main mamory) とも呼ばれます。
データとプログラムを記憶しておく場所です。
メモリにはアドレスが振られており、このアドレスによってメモリを特定し、データのやりとりを行います。
バス
レジスタ同士やALUとを繋いでくれます。
主にデータバスとアドレスバスがあります。
MUX
数の電気信号をひとつの信号にする回路のことを指します。
今回の図では出てきていませんが、さらに詳細の図になると必ず出てきます。
マルチプレクサ - Wikipedia
参考にした記事
コンピュータの仕組み|CPU|ALU|レジスタ|メインメモリ|バス|アドレス指定方式
コンピュータの構造と命令
TODO
パイプライン処理
複数の処理を少しずラジ、同時並行的に実行する方法のこと。
上記であげた命令のフェッチやデコードな度を並行的に進めることになる。
パイプライン処理の基本を学ぶ - ponsuke_tarou’s blog