📝
プログラムはどうやって実行されるのか
Daily Blogging49日目
ざっくりとした概要をまとめていくぅ
登場人物
大まかな登場人物とその役割
OS
- プログラムをストレージからメモリにロードする
- どの領域にどのプログラムを割り当てるかなどのメモリを管理
メモリ(RAM)
過去の記事でもちょっと触れてる
プログラムに関するデータを一時的に格納しておく場所
なんかいっぱい領域ある
- テキスト領域
- プログラムの命令が入る
- データ領域
- 初期化したグローバル・静的変数が入る
- BSS領域
- 初期化されてないグローバル・静的変数が入る
- ヒープ領域
- 動的に確保されたデータが入る
- スタック領域
- 関数のローカル変数や呼び出し情報などが入る
CPU
プログラムの命令を実際に遂行する装置
命令サイクルを繰り返して命令を遂行していく
CPUはレジスタと呼ばれる領域の集合体である
レジスタ→超高速な記憶領域
ストレージ(HDD / SSD)
プログラムのファイルが格納されている。
バス
CPUとメモリ、ストレージや周辺機器を繋ぐデータの通り道
プログラムが実行される流れ
1. プログラムをメモリにロード
- OSが、ストレージからメモリにプログラムをコピーする
- プログラム・カウンタと呼ばれるCPU内のレジスタに、最初の命令が格納されているメモリのアドレスをセットする
2. 命令を処理
命令を実行できる準備が整ったら、CPUの出番
実際に命令を実行していく。
命令は、命令サイクルに従って実行されていくよ
- フェッチ
- プログラム・カウンタにあるアドレスを基に命令を取り出し、命令レジスタというレジストリに格納する
- デコード
- 命令からどんな処理を行うのかを解読し、処理に必要なデータをアキュムレータというレジスタや汎用レジスタを使って処理したり、メモリから読み出す
- 実行
- CPUの演算装置(ALU)で演算を行い、結果をアキュムレータや汎用レジスタ、メモリに格納する
3. 次の命令へ
- プログラム・カウンタに次の命令が格納されているメモリのアドレスをセット
- 条件分岐や繰り返しの場合は、フラグ・レジスタの値を基に、ジャンプ命令と呼ばれる仕組みで次の命令にジャンプする
まとめ
これ最初に考えた人天才すぎる
実際にはもっと色々なレジスタが登場したり、コール命令とかリターン命令とかもあるよ
Discussion