📝

プログラムはどうやって実行されるのか

2025/02/08に公開

Daily Blogging49日目

ざっくりとした概要をまとめていくぅ

登場人物

大まかな登場人物とその役割

OS

  • プログラムをストレージからメモリにロードする
  • どの領域にどのプログラムを割り当てるかなどのメモリを管理

メモリ(RAM)

過去の記事でもちょっと触れてる
プログラムに関するデータを一時的に格納しておく場所
なんかいっぱい領域ある

  • テキスト領域
    • プログラムの命令が入る
  • データ領域
    • 初期化したグローバル・静的変数が入る
  • BSS領域
    • 初期化されてないグローバル・静的変数が入る
  • ヒープ領域
    • 動的に確保されたデータが入る
  • スタック領域
    • 関数のローカル変数や呼び出し情報などが入る

CPU

プログラムの命令を実際に遂行する装置
命令サイクルを繰り返して命令を遂行していく

CPUはレジスタと呼ばれる領域の集合体である
レジスタ→超高速な記憶領域

ストレージ(HDD / SSD)

プログラムのファイルが格納されている。

バス

CPUとメモリ、ストレージや周辺機器を繋ぐデータの通り道

プログラムが実行される流れ

1. プログラムをメモリにロード

  • OSが、ストレージからメモリにプログラムをコピーする
  • プログラム・カウンタと呼ばれるCPU内のレジスタに、最初の命令が格納されているメモリのアドレスをセットする

2. 命令を処理

命令を実行できる準備が整ったら、CPUの出番
実際に命令を実行していく。
命令は、命令サイクルに従って実行されていくよ

  1. フェッチ
    • プログラム・カウンタにあるアドレスを基に命令を取り出し、命令レジスタというレジストリに格納する
  2. デコード
    • 命令からどんな処理を行うのかを解読し、処理に必要なデータをアキュムレータというレジスタや汎用レジスタを使って処理したり、メモリから読み出す
  3. 実行
    • CPUの演算装置(ALU)で演算を行い、結果をアキュムレータ汎用レジスタ、メモリに格納する

3. 次の命令へ

  • プログラム・カウンタに次の命令が格納されているメモリのアドレスをセット
  • 条件分岐や繰り返しの場合は、フラグ・レジスタの値を基に、ジャンプ命令と呼ばれる仕組みで次の命令にジャンプする

まとめ

これ最初に考えた人天才すぎる
実際にはもっと色々なレジスタが登場したり、コール命令とかリターン命令とかもあるよ

Discussion