在x86 CPU中,存在控制寄存器編號0. 該寄存器的第16位指示「寫保護」設置。 如果該位被清除,CPU可以覆蓋只讀數據。內存中的 (在頁表項中配置)。如果該位置位,CPU不能覆蓋存儲器中的RO數據。什麼是x86 cr0 WP位的目的?
我很好奇的是 「這個位的原始目的是什麼??」 「爲什麼x86 CPU需要這個?」
在x86 CPU中,存在控制寄存器編號0. 該寄存器的第16位指示「寫保護」設置。 如果該位被清除,CPU可以覆蓋只讀數據。內存中的 (在頁表項中配置)。如果該位置位,CPU不能覆蓋存儲器中的RO數據。什麼是x86 cr0 WP位的目的?
我很好奇的是 「這個位的原始目的是什麼??」 「爲什麼x86 CPU需要這個?」
從Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3A pg. 2-15報價(重點礦山):
WP寫保護(CR0的位16) - 當設置,從寫入只讀頁抑制主管級別的程序;如果清除,則允許管理員級別的過程寫入只讀頁面(不管U/S位設置如何;請參見第4.1.3節和第4.6節)。 此標誌有助於實現創建由UNIX等操作系統使用的新進程(分支)的寫入時複製方法。
更新: 看着wikipedia on fork():
每當一個過程(父母或子女)修改一個頁面,特定頁面的單獨副本單是該進程(父母或子女)製成進行了修改。
這是在寫入時複製的核心,但呈現在修改內核做了一個問題(在實際寫入時爲系統調用的結果如 - 認爲read()
)。
從4.1.3:
CR0.WP允許頁面從主管模式來保護寫道。如果CR0.WP = 0,則允許管理員模式寫入 訪問具有隻讀訪問權限的線性地址;如果CR0.WP = 1,他們不是。 (用戶模式 寫訪問決不允許線性地址與只讀訪問權,而不管 CR0.WP.的值)
通過設置CR0.WP = 1
內核將被通知(用PAGE-故障),當它修改只讀用戶頁面並且可以在繼續頁面修改之前執行寫入時複製操作。
謝謝!我已經檢查了Intel手冊。但我仍然不明白爲什麼WP位可以促進COW的實施...... – daehee 2013-03-08 09:00:35
@daehee:我已經更新了答案。關鍵是沒有'CR0.WP',內核無法知道是否需要修改需要複製的**用戶**頁面。 – user786653 2013-03-10 10:35:57
謝謝!它幫助了很多 – daehee 2013-03-11 07:24:35