36

Linux でメモリ マップド ページと匿名ページを理解できません。誰かが例を挙げて説明してもらえますか? それらに関連するカーネル データ構造は何ですか?

4

3 に答える 3

10

私が理解しているように、匿名ページには名前付きのファイルシステムソースがないため、名前が付けられていますが、マップされたページは具体的なファイルのマッピングです。たとえば、任意のユーザー空間プロセスで単純な malloc 操作を使用して匿名ページを取得できます...

カーネル構造について: 明らかにstruct pageですが、anonymos ページの場合はstruct anon_vmaが page- >mapping に配置され、マップされたページの場合はstruct address_spaceが具体的な inode に接続されます。

于 2014-03-22T08:49:25.023 に答える
3

メモリ マップド ページの意味がわかりません。だから私はそれについて話すつもりはありません。

匿名ページに関しては、通常、カーネルがページ フレームの再利用を行うときに参照されます。匿名ページのインスタンスには、プロセスのスタック、ヒープ、共有メモリ、および変更された共有ライブラリが含まれます。Linux では、すべての動的共有ライブラリは、次のようなシステム コールを介してプロセスの仮想メモリ アドレス空間にマップされます。

firo@linux-6qg8:~> strace -e mmap,openat ls 2>&1 |grep -A1 libc.so
openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
mmap(NULL, 3906144, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0)

MAP_PRIVATEed ファイル/ライブラリに属する​​ページへの書き込みは、ファイル バックエンド ページから匿名ページへの変更をトリガーします。

定義上、匿名ページ (匿名メモリとも呼ばれます) は、カーネルがページ フレームの再利用を行うときにスワップされるバックエンド デバイスを持たない一種のページです。これが、Linux がスワップ領域をサポートする理由です。

匿名ページに関連するカーネル データ構造には 2 種類あります。

  1. 匿名ページを再利用するには、カーネルは匿名ページを使用して PTE (ページ テーブル エントリ) を変更しているすべてのプロセスを認識している必要があります。これをリバース マッピングまたは rmap と呼びます。

    struct address_space は、リバース マッピングを維持するために共有メモリによって使用されます。

    struct anon_vma は、残りの匿名ページで逆マッピングを維持するために使用されます。

  2. カーネルは、LRU アルゴリズムを使用してページ フレームを再利用します。カーネル 5.0 以降の場合、struct pglist_data の struct lruvec を確認してください

于 2019-06-23T06:53:50.910 に答える