2012-04-18 49 views
0

我是從galvin研究有關虛擬內存的管理,我無法理解這樣的說法:無法理解fork()的描述

除了從物理內存中分離邏輯記憶,虛擬 內存允許文件和內存,可以通過兩個或多個進程 通過頁面共享。這導致了以下好處

虛擬內存可以讓頁面來創建進程與fork()系統調用過程中共享的共享,從而加快創建進程。

頁面如何與fork()共享?請澄清。

回答

0

如果具有相同或不同虛擬地址頁的兩個進程共享相同的物理內存幀,則可以通過fork來共享頁面。他們在他們的頁表中具有相同的幀號的條目

1

我相信文本指的是爲fork()完成的copy-on-write優化。

基本上fork()克隆進程,複製整個內存。 這可能需要很長時間,特別是對於使用大量資金的流程。此外,fork()後面緊跟着一個exec(),這使得以前的拷貝毫無意義。

而不是爲每個fork()做所有的工作現代Unix創建新的進程,但不要複製所有的內存。他們只是將原始進程和新進程的虛擬內存頁面指向相同的物理頁面。

這大大降低了叉()的成本,減少副本和減少內存使用量。

缺點是,無論fork()ed進程還是原始進程寫入頁面,write都會引發異常(因爲物理頁面標記爲只讀),並且頁面被複制。 幸運的是,事實並非如此。