プログラムを書く時に、あまりCPUやメモリなど低レイヤーについて考えることが少ないと思います。低レイヤーの技術を学ぶことで、プログラムがどのように動いているかを理解して、内部構造を知ることで技術の向上、障害発生時に調査する時に役立ちます。
今回はCPUとメモリの内容を書いていきます。
CPUとは
CPUはCentral Processing Unitの略で、パソコンの演算処理を行う部分となります。
CPUの内部は「レジスタ」「制御装置」「演算装置」「クロック」の4つの要素から構成されている。CPUの構造でプログラマが気にする必要があるのは、レジスタになります。レジスタは対象となる命令やデータを格納する領域です。
メモリとは
メモリは読み書き可能なメモリ素子で構成されていて、1バイトずつにアドレスがついている。CPUはこのアドレスを指定してメモリに格納している命令やデータを読み出したり、データを書き込んだりしている。
プログラムの流れ
メモリには命令やデータの格納場所を示すアドレスが割り振られている。OSはプログラムをハードディスクからメモリにコピーをしたあとで、レジスタの1つであるプログラム・カウンタに値を設定する。CPUが1つの命令を実行すると自動で1増加する。CPUの制御装置はプログラムカウンタの値を参照して、メモリから命令を読み出している。
以下の絵を使って説明しますと、
①プログラムカウンタに設定されている「1001」番地のアドレスの内容をメモリから参照
②メモリ上のアドレスを命令レジスタに設定して、命令を実行する
③プログラムカウントを1増加して、「1002」になる
CPUが実行する命令
CPUが実行できる命令は大きく分けて以下になる。
- データ転送命令:データの読み書き
- 演算命令:算術演算、論理演算など
- ジャンプ命令:条件分岐、繰り返しなどに使用、直前の演算結果のアドレスを見てジャンプをするか決める
- コール/リターン命令:関数の呼び出し、関数から戻る
補足
- プログラムカウンタですが、条件分岐や繰り返しで使われる指定されたアドレスにジャンプする命令が実行された時に、プログラムカウンタがそのアドレスの値に変更される。
- 命令レジスタは命令そのものを格納する。プログラムがこのレジスタの値を見るのではなく、CPUの制御装置がメモリー上の命令やデータをレジスタに読み出し、命令の実行結果に応じてコンピュータ全体を制御する。データの演算は演算装置が実施する。
理解度チェック
今回の内容がわかっているかの問題を作成しています。
問題をクリックすると、答えが表示されますので、今回の内容を理解できたかチェックをしてみてください。
まとめ
今回はCPUとメモリについて書いてきました。ざっくりとCPUとメモリが何をしているのかを理解できたかと思います。基礎から低レイヤーについて学びたい場合は、参考資料の本を読むことをオススメします。
他にもGoの記事を書いてますので、興味があれば読んでみてください。
【おすすめ記事のリンク】
コメント