6

仮想メモリのページ サイズを変更することはできますか? ウィキペディアの MMU 記事の X86_64 の部分で、さまざまなページ サイズについて説明しているため、私はこれを求めています。ページサイズを実際に変更できる場合、どのように変更しますか?

4

5 に答える 5

4

x86_64 では、 hugetlbfsを使用して、通常の 4 KiB ページの代わりに 2 MiB ページを明示的に要求できます。透過的なヒュージ ページをサポートする最新のカーネルでは、メモリの断片化がそれほど大きくなく、十分なメモリがまだ空いている場合、小さなページをバックグラウンドでヒュージ ページに自動的に連結できます。

于 2012-04-19T20:58:09.303 に答える
3

私の知る限り、アプリケーションがページサイズを要求できるオペレーティングシステムはありません。x86_64ページングシステムは、さまざまなサイズのページを混在させる機能を提供しますが、これは通常、大量のメモリが一度に割り当てられる場合にのみ使用されます。

x86_64(およびx86)では、仮想アドレスは一連のページテーブルを介して物理アドレスにマップされます。各テーブルは、物理仮想アドレスに特定のビット数を提供します。x86_64は現在、マッピングごとに最大4つのテーブルを使用でき、それぞれが9つの仮想アドレスビットを提供し、下位12ビットがページ内のオフセットを指定します。最初の3つのテーブルはそれぞれ次のテーブルの物理アドレスを指し、最後のテーブルは実際のページの物理アドレスを指します。

| PML4T entry |-+
                V
  +-| PDPT entry |
  V
 | PDT entry |-+
               V
     | PT entry |-> Physical address (4kB page)

ただし、2番目と3番目のテーブルエントリにもビットが含まれています。これが設定されている場合、それ以上のテーブルがないことを示し、そのエントリが物理アドレスを提供します。これが発生すると、他のテーブルによって提供されるビットが物理ページオフセットに移動され、削除されたテーブルごとにページサイズに512が乗算されます。

| PML4T entry |-+
                V
  +-| PDPT entry |
  V
 | PDT entry (PS=1) | -> Physical address (2MB page)

特定の仮想アドレスへのマップに使用されるテーブルの数を変更することにより、オペレーティングシステムは4kB(4テーブル)、2MB(3テーブル)、または1GB(2テーブル)のページを作成できます。各テーブルエントリでビットが提供されるため、さまざまなページサイズを混在させることができます。たとえば、2MBのページの後に4kBのページを続けることができます。

于 2012-04-19T20:49:16.327 に答える
2

はいといいえ。

ページサイズは固定されています。ただし、仮想メモリ領域のサイズは(x86アーキテクチャでは)そうではありません。ページと同じサイズではない仮想メモリ領域を作成する場合、それはセグメントと呼ばれます。

于 2012-04-19T20:50:22.190 に答える
-2

Windows: http://windows.microsoft.com/en-US/windows-vista/Change-the-size-of-virtual-memory

Linux:

/usr/src/linux/include/asm-generic/page.h には、次の行があります。

/* PAGE_SHIFT はページサイズを決定します */

PAGE_SHIFT 12 を定義する

以下の記事のコメント欄で説明しています。

http://www.cyberciti.biz/faq/linux-check-the-size-of-pagesize/

/proc/sys/vm/swappiness パラメーター。システム ページ キャッシュからページを削除するのではなく、ランタイム メモリをスワップ アウトする間のバランスを変更します。

于 2012-04-19T20:14:21.077 に答える