1

ARMv7 VMSA MMU には、ttbr0 と ttbr1 が指す 2 組の変換テーブルがあります。ttbr0 または ttbr1 が指すテーブルによって変換に使用される仮想アドレスの範囲は、「N」フィールド TTBCR レジスタによって設定されます。

ここで、この TTBCR.N を 7 に設定すると、ttbr0 の変換テーブルがカバーするアドレス範囲は 0x00000000 ~ 0x2000000 になります。

したがって、0x2000000 の後の最初のアドレス (つまり 0x2000004?) は、変換のために ttbr1 の変換テーブルを使用します。ARMv7 VMSA の短い記述子形式に従って、変換テーブルには、セクション (1MB) 領域、スーパーセクション (16MB) マッピング領域のいずれかを含めることができます。

私の質問は、0x1600000 などのアドレス位置にスーパーセクションを配置するとどうなるかということです。

理論によれば、0x1600000 から 0x2600000 の範囲のアドレスは、物理アドレス 0x1600000 にマップされます。(しかし、変換テーブル自体が 0x2000000 で変更されるため、これは機能しませんか?)

では、このシナリオでは何が起こるでしょうか? また、この場合、ttbr1 の最初のエントリには何を配置する必要がありますか?

4

1 に答える 1

0

これはプログラミング エラーであり、ページ テーブルは、1 つの領域のアドレス ブロックが他の領域と重複するように設定されるべきではありません。16 MB まで VA 0x1600000 を 16 MB のスーパー セクションのブロックに設定したと考えてください。場所 0x1600000 にアクセスすると、TLB には 0x1600000 から始まる 16MB セクションの仮想から物理へのマッピングが作成されます。次に、メモリの場所 0x2000000 にアクセスするとします。ここで、TLB の検索が最初に行われ、一致するエントリが見つかりません。ページ テーブル ウォークが発生します。0x2000000 以降を他の物理アドレス空間にマップしている可能性があり、そのようなアクセスは意図しない場所にアドレス指定する可能性があります。

于 2013-11-20T06:51:45.373 に答える