我試着去了解MMAP,得到了以下鏈接閱讀:
http://duartes.org/gustavo/blog/post/page-cache-the-affair-between-memory-and-files理解文件映射
我理解一般的文本,並將其對我來說很有意義。但最後是一段,我不明白或不符合我的理解。
上面顯示的只讀頁表條目並不意味着映射是隻讀的,它們僅僅是共享物理內存直到最後一刻的內核技巧。你可以看到'私人'是否有點用詞不當,除非你記得它只適用於更新。這種設計的結果是,只要從只讀取了頁面,其他程序就可以私下映射文件的虛擬頁面可以看到文件所做的更改。一旦寫入完成,其他人的更改將不再顯示。內核無法保證這種行爲,但這是您在x86中獲得的,並且從API的角度來看是有意義的。相比之下,共享映射簡單地映射到頁面緩存上,就是這樣。其他進程可以看到更新並最終進入磁盤。最後,如果上面的映射是隻讀的,頁面錯誤將觸發分段錯誤,而不是寫入時複製。
下面的行與我不符。我沒有意識到。
這種設計的結果是映射文件的虛擬頁面私下認爲只要頁面只被從讀取其他程序做文件變化。
它是私人的。所以無法看到其他人的更改!
最後,如果上面的映射是隻讀的,頁面錯誤將觸發分段錯誤而不是寫入時複製。
不知道作者的意思是什麼。他們是否是「MAP_READ_ONLY」的標誌?在寫入發生之前,從程序虛擬頁面到頁面緩存中的頁面表項的每個指針是只讀。
你能幫我理解這兩行嗎? 感謝
更新
看來它得到它,與一些幫助。
這種設計的結果是映射文件的虛擬頁面私下認爲只要在頁面僅被讀取其他程序做的文件更改。
儘管映射是私有的,但虛擬頁面確實可以看到其他人的更改,直到它修改自己的頁面爲止。修改爲是私人的,並且只對寫入程序的虛擬頁面可見。
最後,如果上面的映射是隻讀的,頁面錯誤將觸發分段錯誤而不是寫入時複製。
我被告知,頁面本身也可以有權限(讀/寫/執行)。
告訴我,如果我錯了。
謝謝!得到它了。 – Peter 2012-04-21 15:09:14