組み込みOS自作入門勉強会(4)

この日は3章を読んだ。メインはROMとRAMの違いとメモリ上の領域の話かな。

ROMとRAM

ROMは読み込み専用でプログラム側からは書き込みできないけど、電源OFFしても内容が残る。RAMはプログラム側から値を読み書きできるが、電源OFFすると値は消える。ROMは種類がある。例えば、特別な操作で内容の書き換えが可能なフラッシュROMがある。なので、基本的なデータ(ex.ブートローダ)などをフラッシュROMに書き込んでおき、電源ONになるとRAM上にデータコピーするなどして値を取り扱う。

メモリ上の領域

CPUがプログラムを実行するには、実行形式ファイルの内容をメモリ上にコピーして読み出す必要がある。ベタにコピーするのではなく一般に以下の領域に決められた条件で展開される。

領域名 レジスタ
テキスト領域 CPUが実行する機械語コードがおかれる
データ領域 初期値を持つ静的変数などがおかれる
BSS領域 初期値を持たない静的変数などがおかれる

静的変数というのは、自動変数でないもの。例えば、関数の外で定義されたものやstaticがついたもの。静的変数はメモリ上に常に存在し続ける。その領域を静的領域と呼ぶ。静的領域=データ領域+BSS領域。一方、自動変数は関数内などで定義されて関数を抜けると消滅する変数。スタックに積まれる。