仮想アドレスと物理アドレス、TLB
マイコンのアドレス空間、仮想アドレスと物理アドレスの関係、そして、仮想アドレスと物理アドレスの間に入るTLBを記載します。
マイコンのアドレス空間
最近、組み込みシステムでも64bitマイコンが使われるようになってきた。64bitのアドレス空間は、2の64乗から16E(エクサ)バイトになる。これは非常に大きなアドレス空間であり、16Eバイト分のRAMや外部デバイスを実装するとシステムの原価が高騰するし、そこまで広大なプログラムを作成して処理することは無いため、64bitのアドレス空間は必要ない。現状、64bitマイコンは40bit程度のアドレス空間を持つ(マイコンによってアドレス空間は異なり、52bitや48bitなど様々。ここでは40bitとして記載します)。
40bitのアドレス空間は、2の40乗から1T(テラ)バイトになる。1Tバイトのアドレス空間にRAM(LPDDR4など)や外部デバイス(PCIe、USB、Ethernet、UFSなど)を実装するが、1Tバイトのアドレス空間すべてにRAMや外部デバイスを実装することはない(1Tバイトのアドレス空間すべてにRAMや外部デバイスを敷き詰めることはない)。
ここからは、LPDDR4などのRAMを中心に記載する。
組み込みシステムのRAMの容量は4Gバイト程度なのだが、
・マイコンは、プログラムを実行したり、計算結果を保管。
・外部デバイスは、ワーク領域(台所のようなもの)や、DMA転送(マイコンの指示なくデータ転送)の際に使用。
というように、このRAMはデータ処理の要である。理由は、マイコンの次にRAMが高速でデータ容量も確保できるため(図1)。
仮想アドレスと物理アドレスの関係
マイコンのアドレス空間1Tバイト(アドレス空間…0x00_0000_0000~0xff_ffff_ffff)と、RAMのアドレス空間4Gバイト(アドレス空間…0x00_0000_0000~0x00_ffff_ffff)のイメージは図2の通り。
図2のように、マイコンのアドレス空間のアドレスを仮想アドレス(論理アドレス)、RAMのアドレス空間のアドレスを物理アドレスと呼ぶ(マイコンの外側に配置されるRAMや外部デバイスは全て物理アドレス)。
また、図2のように、マイコンのアドレス空間と、RAMのアドレス空間は異なるので、仮想アドレスと物理アドレスは1対1でなく、TLB(Translation Lookaside Buffer)というアドレス変換器によって管理,変換される。
例えば、
①仮想アドレス0x00_1000_0000番地が物理アドレス0x00_0000_0000
②仮想アドレス0x00_1000_4000番地が物理アドレス0x00_0000_4000
に設定され、プログラムやデータが処理されていたとする。その後、②のプログラム処理が終了し、空き領域になったところに、③仮想アドレス0x00_1000_8000番地のプログラムを処理することになったら、
③仮想アドレス0x00_1000_8000番地が物理アドレス0x00_0000_4000
というように、②だった物理アドレスに設定されて処理される。このように仮想アドレスと物理アドレスを紐付けして効率よく管理,変換しているのがTLBである。
参考…アドレス空間は、仮想アドレス52bitに対して物理アドレスは52bitや、仮想アドレス48bitに対して物理アドレスは44bitなど、マイコンによって仮想アドレスと物理アドレスのアドレス空間の関係は様々です。
TLBの構造
TLBの仮想アドレスと物理アドレスの変換のイメージは、図3の通り。データキャッシュと同じような構造,仕組みなのだが(https://note.com/tech_micom/n/neee0bfe823fe)、データキャッシュは「比較」装置が1つしかないのに対し、TLBは各ラインに「比較」装置があり(図3は「比較」が1つだけですみません)、仮想アドレスは一斉に比較させれるのでデータキャッシュより高速です。しかし、構造が複雑なため容量はデータキャッシュよりも少なく数Kバイトになります。なお、図3のように各ラインに「比較」装置がある構造をフルセットアソシアティブと呼ぶ。
仮想アドレスから物理アドレスへの変換
TLBの1つのラインに注目したアドレス変換を下図に記載します。
まず、仮想アドレス(上位ビット)と仮想アドレス(下位ビット)に分かれていますが、TLBが4KBの領域を管理するならば、「仮想アドレス(下位ビット)」は12bitになります。なお、TLB自体は1MB等の領域も設定できますが、TLBが何KBの領域を管理するかは、OSの仕様に依存します(OS次第と考えて下さい)。
次に、「仮想アドレス(上位ビット)」とTLB内の「仮想アドレス」を比較して一致したら、TLB内の「物理アドレス」と「仮想アドレス(下位ビット)」の12bitが合体して物理アドレスが誕生します。
<補足>
上図のC,W,Mの機能は以下の通り。マイコンによって名称や機能は異なりますが、TLBでアドレス変換する領域の仕様を設定します。
Cは、仮想アドレスから物理アドレスに変換する本領域に対し、キャッシュ使用もしくは不使用を設定します。高速にデータ処理したい場合はキャッシュ使用、I/Oデバイスにアクセスする場合はキャッシュ不使用になります。
Wは、仮想アドレスから物理アドレスに変換する本領域に対し、書き込みを許可する/しないを設定します。読み出しは常に可能です。
Mは、仮想アドレスから物理アドレスに変換する本領域に対し、セキュリティのある(セキュア領域の)メモリか、セキュリティのない通常のメモリにアクセスするかを設定します。