Skip to content
oraccha edited this page Jan 14, 2013 · 1 revision

Translation Lookaside Buffer

アドレス変換におけるキャッシュ機構.

  • 仮想アドレスをタグに物理アドレスを出力するキャッシュ機構とも言える.
    • ダイレクトマップ . 仮想アドレスに対して,TLBエントリ(物理アドレス)が一意に決まる.
    • フルアソシアティブ . エントリ数分,仮想アドレスを保持できる.
    • nウェイセットアソシアティブ . 仮想アドレスに対してエントリは一意に決まるが,ウェイ数分のエントリが存在する.
  • キャッシュとして,仮想アドレスを使う方法と,物理アドレスを使う方法がある.

ページ参照の局所性を利用して高速化しようという考え方.

IA32 のようにハードウェアだけで完結するものと,RISCプロセッサのようにソフトウェアからプログラマブルなものがある.

  • [http://www.cs.rice.edu/~jnavarro/sp/size.html TLB coverage] . TLB がメモリ全体のどれくらいをカバーするのかというデータ.

ページフォルトとTLBミスの違い

  • ページフォルトは、主記憶上にデータがなく、それを二次記憶から読む必要があるのに対して、TLBミスは、主記憶上にデータはあるものの、それにアクセスするためのTLB エントリが失われているだけの状態で起きる。
  • IA32はTLBミスのケアはハードウェアで行われるが、MIPSの場合は、OSがページテーブルからTLBエントリの内容を補充してあげる必要がある。

=== Pentium の場合 === 命令とデータ用の TLB エントリが分離されており,さらにラージベージ用の TLB も存在する.

  • 命令TLB: 32エントリ,4ウェイセットアソシアティブ

  • データTLB: 64エントリ,4ウェイセットアソシアティブ

  • 命令TLB(ラージページ): 4k ページと同じ

  • データTLB(ラージページ): 8エントリ,4ウェイセットアソシアティブ

  • CR3 に値がロードされた時点で,自動的に TLB が無効化される.

  • ただし,PTE の G(Global)フラグがセットされている場合は無効化されない.

  • INVLPG(Invalidate TLB Entry) 命令で任意の TLB エントリを無効化できる.

=== UltraSPARC の場合 === TLB エントリをメインメモリ上にキャッシュするための TSB(Translation Software Buffer) が存在する.TLB は 64 エントリだが,TSB はシステムのメモリサイズによって 32k〜64M エントリ持つことができる.


=== SMP と TLB === TLB はプロセッサごとに存在し,ページテーブルはメインメモリ上に存在する.つまり,ページテーブルの変更は全プロセッサの TLB purge が必要になる.


=== 論文 ===

  • [http://www.computer.org/tc/tc2001/t0482abs.htm Uniprocessor Virtual Memory without TLBs] . プロセッサは TLB すら持たず,アドレス変換を完全にソフトウェアで実現するアプローチ(Software-Managed Caches)の可能性に関する研究.
    • [http://www.enee.umd.edu/~blj/memory/ Memory Management Research] . Bruce Jacob 氏のページ.

メモ

  • Linux の場合,x86info(1) で調べることができる.
Clone this wiki locally