地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

プログラムの領域

領域の話

プログラムは最初に OS にメモリ領域を要求し、OS はそのプログラム用に要求通りのメモリ領域を与える。

メモリ領域内には『命令』と、『その命令に使うその他のデータ』が展開される。

実際に要求して割り当てられたメモリは以下のような構成をとる

  • プログラムを置く text領域
  • 初期化されたグローバル変数を置くdata領域
  • (初期化されていない)グローバル変数を置くbss領域
  • 関数呼び出しやローカル変数等で使用されるスタック領域 stack領域
  • プログラムのデータを置くheap領域

各プロセスはそれぞれ仮想アドレスを通してメモリへアクセスしていく。

ただし、カーネル空間だけは別で与えられたユーザー空間の他に、カーネル空間が共通して、ページテーブルに用意される。

ちなみにユーザモードとカーネルモードの切り替えは、プロセスの切り替えでも利用される Context Switch