読み取り専用メモリマッピング領域にダーティページがあるのはなぜですか?

読み取り専用メモリマッピング領域にダーティページがあるのはなぜですか?

たとえば、次のコマンドを実行して、メモリマップされたページのリストを取得します。

pmap -x `pidof bash`

私は次のような結果を得ます。 ここに画像の説明を入力してください。 一部の読み取り専用ページが「ダーティー」と表示されるのはなぜですか?これは、書き込まれた後に書き直す必要があることを意味しますか?読み取り専用の場合、プロセスはここに書き込むことはできません...

/proc/も確認しました。PID/ smapsページは「個人情報保護汚れ」として説明されています。

ベストアンサー1

ダーティページを必ず書き換える必要はありません。ダーティページは、カーネルが最後にクリーンページとして表示された後に記録されたページです。データを常に元のファイルに再保存する必要はありません。

これらのページは非公開であり、共有されないため、元のファイルに再保存されません。読み取り専用ファイルはダーティページをサポートできません。ページをRAMから削除する必要がある場合、そのページはスワップ領域に保存されます。

読み取り専用、個人​​、およびダーティページ(メモリマップされたファイルの範囲内)は、通常、実行時に初期化する必要があるが初期化後に変更されない定数を含むデータページです。たとえば、ポインタを含む静的データを含めることができます。ポインタ値はプログラムまたはライブラリによってマップされたアドレスによって異なります。したがって、プログラムの起動後にページを読み書きする際に計算する必要があります。ポインタが計算されると、ページの内容はこのプログラムインスタンスでは決して変更されないため、ページを読み取り専用に変更できます。バラよりStosbの「ダーティメモリページを探す」コードスニペットを含む例。

読み取り専用、実行可能、個人用、ダーティページは、コードとデータをより自由に混在させるいくつかのリンカーまたはタイムリーなコンパイルで発生することがほとんどありません。

おすすめ記事