こんにちは、ダックです。
前回に引き続き MMU の機能であるメモリの変換についてです。
アドレス変換とはどのようなものか、MMU があることで何が良いのかを見ていきます。
アドレス変換の基本
まずは、簡単な仕組みから見ていきましょう。アドレス変換をするには、変換前と変換後を対比させた表(ページ表)が必要になります。
MMU は TLB ( translation lookaside buffer ) というバッファを持っており、ここにページ表を保存しておきます。MMU は TLB を参照して、メモリを変換します。
変換方法
もう少し詳しく見てみましょう。例として 32 bit アドレスを変換するとします。
仮想アドレスは上位ビット (仮想ページ番号) と下位ビット (ページ内オフセット) に分けられます。
仮想ページ番号と合致する物理ページアドレスの上位ビットを呼び出します。下位ビットは変換せずにそのまま使います。
この変換された物理アドレスのデータにアクセスしに行きます。
デバイスやシステムの設定により、それぞれの bit 幅は変わってきます。
メモリ保護機能
実はもう一つ MMU のメリットがあります。それがプロテクション機能です。
これがあると間違ったメモリ領域へデータを読み書きすることができなくなります。
プログラム B が動いている時に、間違ってプログラム A のメモリをアクセスしようとすると、MMU は例外処理を発生させます。
仕組みとしては、TLB をプログラムごとに入れ替えるという方法を行っています。TLB は現在のプログラムで使う範囲だけのページ表を用意しておくことで、誤った領域でアドレス変換しようとすると MMU が感知して CPU に知らせるような仕組みになっています。
通常細かいプログラムごとで保護機能を使うことは少なく主に OS が使用するカーネル領域とその他のユーザー領域に分けるために使われることが多いようです。
OS が使うメモリを誤って書き換えることが無いようにするためです。
メモリ保護機能だけが独立した MPU ( memory protection unit ) などもあります。
覚えておきたい+α
実は TLB はプログラムすべてのアドレス変換をカバーできるほどのメモリの大きさを持っていません。
そのため、同じプログラム内でも TLB 一致なしの例外 (ページフォルト) は起こることがあります。
そのため、ページフォルトの原因によって処理を変えるようにプログラムを組んでおく必要があります。
ダックの 『 SoC でも大活躍!? MMU の役目とは?? 』 シリーズ
高度な組み込みシステムには必須ともいえる MMU!その役割を全 2 回で紹介!
MMU とは?アドレス空間とは? まずはアドレス変換について基礎から押さえる!
TLB を用いた、実際のアドレス変換の仕組みについて解説!