組み込みOS自作入門勉強会(4)
この日は3章を読んだ。メインはROMとRAMの違いとメモリ上の領域の話かな。
ROMとRAM
ROMは読み込み専用でプログラム側からは書き込みできないけど、電源OFFしても内容が残る。RAMはプログラム側から値を読み書きできるが、電源OFFすると値は消える。ROMは種類がある。例えば、特別な操作で内容の書き換えが可能なフラッシュROMがある。なので、基本的なデータ(ex.ブートローダ)などをフラッシュROMに書き込んでおき、電源ONになるとRAM上にデータコピーするなどして値を取り扱う。
メモリ上の領域
CPUがプログラムを実行するには、実行形式ファイルの内容をメモリ上にコピーして読み出す必要がある。ベタにコピーするのではなく一般に以下の領域に決められた条件で展開される。
領域名 | レジスタ |
---|---|
テキスト領域 | CPUが実行する機械語コードがおかれる |
データ領域 | 初期値を持つ静的変数などがおかれる |
BSS領域 | 初期値を持たない静的変数などがおかれる |
静的変数というのは、自動変数でないもの。例えば、関数の外で定義されたものやstaticがついたもの。静的変数はメモリ上に常に存在し続ける。その領域を静的領域と呼ぶ。静的領域=データ領域+BSS領域。一方、自動変数は関数内などで定義されて関数を抜けると消滅する変数。スタックに積まれる。