私はmmapを理解しようとし、次のリンクを読んでもらいました:http:
//duartes.org/gustavo/blog/post/page-cache-the-affair-between-memory-and-files
私は一般的にテキストを理解していて、それは私にとって理にかなっています。しかし、最後に段落がありますが、それは私が本当に理解していないか、私の理解に適合していません。
上記の読み取り専用ページテーブルエントリは、マッピングが読み取り専用であることを意味するのではなく、可能な限り最後の瞬間まで物理メモリを共有するためのカーネルトリックにすぎません。更新にのみ適用されることを思い出すまで、「プライベート」が少し誤称であることがわかります。この設計の結果、ファイルをマップする仮想ページは、ページがから読み取られただけである限り、他のプログラムによってファイルに加えられた変更を非公開で確認します。。コピーオンライトが実行されると、他のユーザーによる変更は表示されなくなります。この動作はカーネルによって保証されていませんが、x86で得られるものであり、APIの観点からは理にかなっています。対照的に、共有マッピングは単にページキャッシュにマッピングされ、それだけです。更新は他のプロセスに表示され、最終的にディスクに保存されます。最後に、上記のマッピングが読み取り専用の場合、ページフォールトは、コピーオンライトではなくセグメンテーションフォールトをトリガーします。
次の行は私には一致しません。意味がわかりません。
この設計の結果、ファイルをマップする仮想ページは、ページがから読み取られただけである限り、他のプログラムによってファイルに加えられた変更を非公開で確認します。
プライベートです。そのため、他の人による変更を確認することはできません。
最後に、上記のマッピングが読み取り専用の場合、ページフォールトは、コピーオンライトではなくセグメンテーションフォールトをトリガーします。
これで作者が何を意味するのかわからない。彼らの旗は「MAP_READ_ONLY」ですか?書き込みが発生するまで、プログラムvirtual-pagesからpage-cache内のpage-table-entriesへのすべてのポインタは読み取り専用です。
この2行を理解するのを手伝ってくれませんか。ありがとう
更新
いくつかの助けを借りて、それはそれを手に入れたようです。
この設計の結果、ファイルをマップする仮想ページは、ページが読み取られただけである限り、他のプログラムによってファイルに加えられた変更を非公開で認識します。
マッピングはプライベートですが、仮想ページは、それ自体がページを変更するまで、他の人による変更を実際に見ることができます。変更は非公開になり、書き込みプログラムの仮想ページにのみ表示されます。
最後に、上記のマッピングが読み取り専用の場合、ページフォールトは、コピーオンライトではなくセグメンテーションフォールトをトリガーします。
ページ自体にも権限(読み取り/書き込み/実行)を設定できると言われています。
私が間違っているかどうか教えてください。