2

最新の x86_64 マイクロプロセッサ (Intel SandyBridge、AMD Bulldozer) で、TLB (L1 および L2) が複数のページ サイズでの同時アクセスをサポートしているかどうか知っている人はいますか? x86 コア パイプラインはページ サイズに関する情報を MMU に提供しますか?

よろしくお願いします、

アレックス

4

2 に答える 2

5

これは、TLB が許可するものではなく、アーキテクチャが許可するものの問題です。PSアーキテクチャでは、適切なレベルでページ ディレクトリ エントリのビットを設定することにより、同じページ階層内に小さい (4k)、大きい (2M)、および巨大な (1G) ページを混在させることができます。

すべてのレベルの TLB が必ずしもすべてのサイズのページをキャッシュできるわけではありませんが、必要に応じてページを混在させることをやめるべきではありません。

現在、MMU の前の x86 パイプには、ページ サイズに関するデータを実際に必要とするものは何もありません。それはすべて、ページ階層自体にエンコードされています。


ページ分割に関して、 アドレスxにページ境界があり、 で始まるメモリ アクセスがx - 11 バイト幅を超える場合、両方のページにアクセスします。これは、2 つのページのサイズが異なっていても機能します。

于 2012-11-16T14:30:36.897 に答える
3

TLB は通常、コードとデータの 2 つに分割されます。これらのそれぞれは、いくつかのレベルに分割される場合がありますが、通常は L1 であり、場合によっては L2 です。各レベルは、単一のページ サイズまたは混合ページ サイズをサポートする場合があります。

たとえば、私のプロセッサでは、2mb/4mb ページ用の I-L1 TLB が混在、2mb/4mb ページ用の D-L1 TLB が混在、4kb ページ用の I-L1 TLB、4kb ページ用の D-L1 TLB があります。最後に、4kb ページ用の D-L2 TLB です。

TLB が混合ページをサポートする場合、TLB は特定の仮想アドレス タグに関連付けられたページ サイズを格納します。

TLB レベルにページ サイズごとに複数の個別のキャッシュがある場合、ページ サイズがまだ不明であるため、ルックアップは並行して実行されます。

いずれの場合も、L1 TLB がミスした場合、ページ テーブル ウォークを試みる前に L2 がチェックされます。

詳細が明らかになったので、ようやくあなたの質問に答えることができます。同時に複数のページ サイズを使用できますが、重複することはありません (OS では、同じ場所に 2 つの仮想ページをマップすることはできません)。実際、カーネルは内部的にさまざまな目的で複数のページ サイズを使用しています。

OS によっては、ユーザー空間プロセスで複数のページ サイズを使用するのが簡単な場合と面倒な場合があります。詳細については、Linux Huge Page サポートおよび Windows Large Page サポートを参照してください。他の OS のドキュメントには、これに関する詳細が記載されています。

于 2015-03-19T21:05:54.540 に答える