v7-A および v7-R の ARM アーキテクチャ リファレンス マニュアルのセクション B3 を調べましたが、TTBR0 および TTBR1 レジスタで使用されているアドレスが仮想アドレスまたは物理アドレスのどちらであるかがわかりません。
物理的なことが最も理にかなっていますが、私は決定的に知りたいです.
では、このアドレスは物理的または仮想的であると想定されていますか?
ページ テーブルの場所を ID アドレス (PA == VA) としてマップしておく必要がありますか?
コードのとおり、pgd の物理アドレスが TTBR に書き込まれます。
http://lxr.free-electrons.com/source/arch/arm/include/asm/proc-fns.h#L116
#define cpu_switch_mm(pgd,mm) cpu_do_switch_mm(virt_to_phys(pgd),mm)
それが仮想アドレスだったと想像してください...
CPU は、仮想アドレスに対してトランザクションを発行します。それを変換するために、MMU はテーブル ウォークを行う必要があります。そのためには、バス上でアドレス指定する RAM のビットを知る必要があるため、ベース レジスタを調べます。これで、仮想ベース アドレスが得られました。それを物理アドレスに変換して、バス上でアドレス指定する RAM のビットを知る必要があるだけなので、テーブル ウォークを実行する必要があります。そのためには...などが必要です。
要するに、はい、それらは間違いなく物理アドレスです。LPAE 実装で TTBRn が 64 ビットであるという事実も、少し手がかりになります。*
ページ テーブルが設定され、MMU がオンになると、特定の関係は言うまでもなく、それらをマッピングしておく必要はまったくありません。データが RAM に物理的に存在する場合、MMU は非常に満足しています。CPU は、テーブルを更新している場合にのみ、その RAM をアドレス空間にマップする必要があります。残りの時間は、アドレス空間の無駄になります。
* ...もちろん、仮想化拡張機能が関係している場合、これは完全な嘘です;) その場合、それらは中間の物理アドレスであり、ステージ 2 変換の気まぐれに完全に左右されます。上記に該当する方。楽しい。
物理的。この点では、ARMv5 から変更されていません。