TLB(ティーエルビー)とは | 意味や読み方など丁寧でわかりやすい用語解説
TLB(ティーエルビー)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
トランスレーション・ルックアサイド・バッファ (トランスレーションルックアサイドバッファ)
英語表記
TLB (ティーエルビー)
用語解説
TLBとは、Translation Lookaside Buffer(トランスレーション・ルックアサイド・バッファ)の略称である。これは、現代のCPUに組み込まれた特別なキャッシュメモリで、仮想記憶システムにおいて仮想アドレスから物理アドレスへの変換処理を高速化する役割を担っている。
コンピュータがプログラムを実行する際、各プログラムは仮想アドレスという概念的なメモリ空間を使用する。この仮想アドレスは、プログラムがメモリを自由に利用できるようにするための仕組みだが、実際にCPUが物理的なメインメモリ(RAM)にアクセスする際には、この仮想アドレスを対応する物理アドレスに変換する必要がある。この変換処理はMemory Management Unit(MMU、メモリ管理ユニット)と呼ばれるハードウェアが行う。
しかし、仮想アドレスから物理アドレスへの変換は、通常、メインメモリ上に存在する「ページテーブル」という変換表を参照することで行われる。このページテーブルは、仮想アドレス空間を一定の大きさ(通常4KBなど)に分割した「ページ」と、物理アドレス空間を同じ大きさに分割した「物理フレーム」の対応関係を記録している。プログラムがメモリにアクセスするたびに、CPUは仮想アドレスを生成し、MMUがページテーブルをメインメモリから探し出して物理アドレスを特定する。特に、多段階のページテーブル構造を持つシステムでは、1つのアドレス変換に複数回のメインメモリへのアクセスが必要になる場合があり、これが非常に大きな性能ボトルネックとなる。CPUは非常に高速に動作するのに対し、メインメモリへのアクセスは比較的遅いため、この変換処理が繰り返されると、システムの全体的なパフォーマンスが著しく低下してしまう。
この性能低下を防ぐために考案されたのがTLBである。TLBは、仮想アドレスから物理アドレスへの変換情報、つまりページテーブルエントリの一部をCPUの内部にキャッシュとして保持する。これにより、頻繁に参照される変換情報をメインメモリにアクセスすることなく高速に取得できるようになる。
具体的な動作としては、CPUが仮想アドレスを生成すると、MMUはまずTLBにアクセスし、その仮想アドレスに対応する物理アドレスの変換情報がすでにキャッシュされているかを検索する。もしTLB内に対応するエントリが見つかれば、これを「TLBヒット」と呼び、MMUは非常に高速に物理アドレスを特定し、そのアドレスを使ってメインメモリにアクセスする。これにより、メインメモリへのアクセス回数を大幅に削減し、変換処理の遅延を最小限に抑えることができる。
しかし、TLB内に対応するエントリが見つからなかった場合、これを「TLBミス」と呼ぶ。TLBミスの際には、MMUはメインメモリ上のページテーブルを実際に参照しに行く。ページテーブルを辿って目的の物理アドレスを特定した後、MMUはその変換情報をTLBに格納する。次に同じ仮想アドレスへのアクセスがあった場合には、TLBヒットとなり高速に処理できるようになる。TLBはキャッシュメモリであるため、そのサイズには限りがあり、一定数のエントリしか保持できない。そのため、エントリがいっぱいになると、使用頻度の低いものや最も古く使われたものなど、特定のアルゴリズムに基づいて既存のエントリが新しいエントリに置き換えられる。
TLBは、複数のCPUコアを持つ現代のプロセッサでは、各コアに個別のTLBが用意される場合や、複数のレベルのTLB(L1 TLB、L2 TLBなど)が構成される場合もある。L1 TLBは通常高速で小さい容量を持ち、L2 TLBはL1よりも遅いが大容量を持つ、といった階層構造を持つことで、変換処理の効率をさらに高めている。
また、コンピュータで複数のプログラム(プロセス)が同時に実行される場合、OSはこれらのプロセスを切り替えて(コンテキストスイッチ)CPUを利用させる。プロセスが切り替わると、以前のプロセスが使用していた仮想アドレス空間と、新しいプロセスが使用する仮想アドレス空間は異なるため、TLBにキャッシュされていた変換情報も無効となる。そのため、通常はコンテキストスイッチが発生するたびにTLBの内容をすべてクリア(フラッシュ)する必要がある。TLBフラッシュは、その都度すべてのキャッシュ情報を失うため、一時的にシステム全体の性能を低下させる要因となることもある。この問題に対応するため、最近のCPUではAddress Space ID(ASID)などの仕組みを導入し、プロセスごとに異なるアドレス空間を識別できるようにすることで、TLBの完全なフラッシュを回避し、性能低下を最小限に抑える工夫もなされている。
TLBの存在は、仮想記憶システムの性能を決定づける非常に重要な要素であり、そのヒット率の高さが、アプリケーションの応答性やシステム全体の効率に直接的に影響する。システムエンジニアとしてコンピュータシステムの性能を理解する上で、TLBの役割とその動作原理を把握することは不可欠である。