char *p = (char*) mmap(...);
....; /* check if p is not -1 */
a = *p;
運行最後一條語句時,發生頁面錯誤。內核中的錯誤處理程序將在物理內存中分配頁面,並將4K字節從文件複製到該頁面中,然後修改頁面條目。讀取*p
的指令將在此次成功執行。調用mmap後文件的路徑名稱在哪裏?
但是,錯誤處理程序如何知道與頁面相關的文件名和路徑。文件名(或fd
)在哪裏存儲?和文件中的偏移量。
如果一個進程的數據段中的一個頁面被換出(我想是一個交換文件)會怎麼樣?內核如何知道從何時開始複製頁面以後需要交換頁面?
謝謝ShadowRanger。在這種情況下,我在這個線程中錯了,是不是? http://stackoverflow.com/questions/38850533/how-does-the-page-fault-handler-know-where-to-get-the-4k-bytes/38975619#38975619我以爲我找到了答案。 – xiaokaoy