ARM1176JZF-SのテクニカルリファレンスマニュアルはDDI0301のようです。このドキュメントには、その特定のARMコアの特定の詳細がすべて含まれています。
TLBが何であるか、またはどのように見えるかはまだわかりません。私が理解している限り、各TLBエントリは仮想ページを物理ページにマップし、メモリのアクセス許可を再マップおよび制御できるようにします。
TLBは、ページテーブルのキャッシュです。一部のプロセッサは、ページテーブルについて何も知らずにTLBに直接アクセスできますが(例:MIPS)、他のプロセッサはページテーブルについて知っており、プログラマーがほとんど見ないTLBを内部的に使用します(例:x86)。この場合、TLBはハードウェアによって管理され、システム・プログラマーは、TTB(変換テーブル・ベース)レジスターがページ・テーブルを指すようにし、適切な場所でTLBを無効にするだけで済みます。
TLBエントリにはどのような構造がありますか?新しいエントリを作成するにはどうすればよいですか?
ハードウェアによって行われます。TLBミスの場合、MMUはページテーブルをウォークし、そこからTLBを埋めます。
ユーザースペーススレッドのコンテキストスイッチでVMを処理するにはどうすればよいですか?
一部のプラットフォームには、仮想アドレスを物理アドレスに単純にマップするTLBがあります(例:x86)。これらのプラットフォームでは、各コンテキストスイッチで完全なTLBフラッシュを実行する必要があります。他のプラットフォーム(MIPS、この特定のARMコア)は、(ASID、仮想アドレス)ペアを物理アドレスにマップします。ASIDは、アプリケーション固有の識別子、つまりプロセスの識別子です。MMUはレジスタを使用して、使用するASIDを認識します(この場合はコンテキストIDレジスタだと思います)。ASIDよりも多くのプロセスが存在する可能性があるため、ASIDをリサイクルして(別のプロセスに割り当てる)、TLBフラッシュを実行する必要がある場合があります(これが、ASIDによるTLBの無効化操作の目的です)。
なぜ2つのTLBがあるのですか?MicroTLBが10エントリしかない場合、何に使用できますか?確かに、10個以上必要です。
これは、命令とデータ用に小さな個別のレベル1キャッシュがあるのとまったく同じ理由です。これらはキャッシュであるため、10個を超える必要はありません(ただし、これを超えるとパフォーマンスが向上する可能性があります)。
メインTLBの一部の1つは、「ロック可能な8つの要素の完全な連想配列」であると書かれています。それは何ですか?メインTLBのエントリは8つしかありませんか?
一部のメモリページ(例:カーネルの一部)は非常に頻繁にアクセスされます。それらをロックすることは理にかなっているので、TLBから投げ出されることはありません。また、リアルタイムシステムでは、TLBミスまたはキャッシュミスにより、望ましくない予測不能性が生じる可能性があります。したがって、多数のTLBエントリをロックするオプションがあります。メインTLBにはさらに多くのエントリがありますが、ロックできるのはそのうちの8つだけです。