GNU/Linux >> Linux の 問題 >  >> Linux

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

ダーティ ページは必ずしも書き戻しを必要としません。ダーティ ページは、カーネルが最後にクリーンとマークした後に書き込まれたページです。データは必ずしも元のファイルに保存する必要はありません。

ページは非公開であり、共有されていないため、元のファイルに保存されることはありません。読み取り専用ファイルに裏打ちされたダーティ ページを持つことは不可能です。ページを RAM から削除する必要がある場合は、スワップに保存されます。

読み取り専用、プライベート、およびダーティであるが、メモリ マップト ファイルの範囲内にあるページは、通常、実行時に初期化する必要があるが初期化後に変更されない定数を含むデータ ページです。たとえば、ポインターを埋め込む静的データが含まれている場合があります。ポインタ値は、プログラムまたはライブラリがマップされているアドレスに依存するため、プログラムの開始後に計算する必要があり、この段階でページは読み書き可能です。ポインタが計算された後は、プログラムのこのインスタンスでページの内容が変更されることはないため、ページを読み取り専用に変更できます。コード フラグメントの例については、stosb による「Hunting Down Dirty Memory Pages」を参照してください。

ごくまれに、読み取り専用、実行可能、非公開、ダーティ ページが表示されることがあります。これらは、コードとデータをより自由に混合する一部のリンカーや、ジャストインタイム コンパイルで発生します。


Gilles が挙げたケースに加えて:

プロセスが fork すると、カーネルはそのすべてのダーティ ページを読み取り専用としてマークすることができ、それらは親と子の間で共有されます。プロセスの 1 つがページに書き込むと、例外が発生し、カーネルがページをコピーして書き込み可能としてマークします。これにより、どちらのプロセスによっても最終的に変更されないページをコピーする作業が節約されます。 (この状況では、ページはハードウェアで読み取り専用としてマークされますが、カーネルによって書き込み可能であることが認識されていることに注意してください。)


Linux
  1. 「man」ページに多くの余分な行があるのはなぜですか?

  2. 「/」に「..」エントリがあるのはなぜですか?

  3. shm_open を使用する理由

  1. MAP_GROWSDOWN マッピングが成長しないのはなぜですか?

  2. LINUX に 3 種類の X セレクションがあるのはなぜですか?

  3. man ページで pvremove の強制が重複しているのはなぜですか?

  1. OpenStackでWindows10VMが遅いのはなぜですか?

  2. Rmが読み取り専用ファイルを削除できるのはなぜですか?

  3. Linux – Linuxは、物理的にインストールしたメモリよりも多くのメモリと少ないメモリの両方を表示するのはなぜですか?