メモリとレジスタの働き
序論
CPUは計算を行う装置であるが、CPU単体ではプログラムを実行できない。
なぜなら、計算対象となる数値や命令を保持する場所が必要だからである。
本節では、「メモリ(memory)」と「レジスタ(register)」という
2つの記憶領域が、なぜ分けて設計されているのかを説明する。
これは速度・構造・役割の違いに起因する。
本論
記憶装置が必要な理由
プログラムは「命令」と「データ」から構成される。
これらは実行中、どこかに保存されていなければならない。
CPUは電源を切ると状態を保持できないため、
外部に記憶装置を持つ必要がある。
この役割を担うのがメモリである。
メモリ(memory)とは何か
メモリとは、CPUの外部に存在する大容量の記憶装置である。
プログラム全体や大量のデータは、まずメモリに配置される。
メモリは以下の特徴を持つ。
- 大量のデータを保存できる
- CPUからはアドレス(address)を指定して読み書きする
- CPU内部よりもアクセス速度が遅い
レジスタ(register)とは何か
レジスタは、CPU内部に存在する極めて高速な記憶領域である。
計算中の数値や一時的な結果は、必ずレジスタに置かれる。
レジスタの特徴は次の通りである。
- CPU内部にある
- 非常に高速にアクセスできる
- 数が少ない
なぜメモリとレジスタを分けるのか
もしすべてをレジスタで賄おうとすると、
CPU内部が巨大になり、回路が複雑化する。
逆に、すべてをメモリで処理すると、
アクセスが遅すぎて実用的な速度が得られない。
そこで、
「大量だが遅いメモリ」と
「少量だが速いレジスタ」
を組み合わせる設計が採用された。
CPUはどのように使い分けているか
CPUは次のような流れで動作する。
- メモリから命令やデータを読み出す
- 必要なデータをレジスタに転送する
- レジスタ上で計算を行う
- 結果を必要に応じてメモリへ書き戻す
このため、CPUの演算命令は
「レジスタ同士の演算」
として定義されている場合が多い。
2の補数との関係
前節で説明した2の補数による整数表現は、
実際にはレジスタ上で扱われる。
メモリ上のビット列は単なるデータであり、
それを符号付き整数として解釈するかどうかは、
レジスタに読み込まれ、演算される文脈によって決まる。
結論
メモリとレジスタは、
単なる容量の違いではなく、
CPU設計思想そのものを反映した役割分担である。
この違いを理解しないままプログラムを書くと、
性能低下や予期しない挙動の原因となる。
Q&A
- Q. memory とは何ですか?
- A. データやプログラムを大量に保存する場所です。CPUの外にあり、住所(address)を指定して使います。
- Q. register とは何ですか?
- A. CPUの中にある、とても速い作業机のような場所です。計算は必ずここで行われます。
- Q. なぜ直接メモリで計算しないのですか?
- A. メモリは遅いため、毎回アクセスすると計算が極端に遅くなるからです。
- Q. プログラマはレジスタを意識する必要がありますか?
-
A. 高水準言語では意識しない場合もありますが、性能や安全性を考える場合、
レジスタとメモリの違いを理解することは重要です。
