2012-01-25 146 views
2

我有一個疑問,當每個進程有它自己的單獨的頁表,那麼爲什麼有系統寬的頁表需要?另外,如果Page表是將虛擬地址映射到物理地址,那麼我認爲兩個進程可映射到相同的物理地址,因爲所有進程都具有相同的虛擬地址空間。系統範圍頁面表上的任何良好鏈接也將解決我的問題?虛擬地址映射到物理地址

+1

您需要考慮共享內存。每個進程都需要自己的虛擬到物理映射,但系統需要對整個物理內存進行概述,以便知道當進程需要更多映射到物理內存的虛擬內存時可用的內容。 –

+0

[虛擬內存中的兩個進程]的可能重複(http://stackoverflow.com/questions/8994571/two-processes-in-virtual-memory) –

回答

10

每個進程都有自己獨立的虛擬地址空間 - 兩個進程可以將virtpage 1映射到不同的物理頁面。進程可以參與共享內存,在這種情況下,它們每個都有一些virtpage映射到同一個頁面。

一個進程的虛擬地址空間可以用來將virtpages映射到物理頁面,映射到內存映射的文件,設備等。虛擬頁面不必連線到RAM。一個進程可以對整個1GB文件進行內存映射 - 在這種情況下,其物理內存使用量可能只有幾兆,但其虛擬地址空間使用量將爲1GB或更多。許多進程都可以這樣做,在這種情況下,所有進程的虛擬地址空間使用總和可能是40 GB,而總物理內存使用率可能只有100 megs;這在32位系統上很容易實現。

由於許多進程加載相同的庫,操作系統通常將庫放在一組只讀可執行頁面中,然後在每個進程的virtpage空間中加載映射以指向一組頁面,節省物理內存。

進程可能沒有指向任何內容的virtpage映射,例如,如果進程內存的一部分被寫入頁面文件 - 進程將嘗試訪問該頁面,CPU將觸發頁面錯誤,操作系統將看到頁面錯誤,並通過暫停進程來處理它,從頁面文件中將頁面讀回到內存中,然後恢復進程。

通常有3種類型的頁面錯誤。第一種類型是CPU在TLB中沒有虛擬物理映射 - 處理器調用操作系統中的頁面錯誤軟件中斷,操作系統將映射放入該進程的處理器中,然後proc重新運行違規說明。這些每秒發生數千次。

第二種類型是操作系統沒有映射,因爲如上所述,因爲該進程的內存已被交換到磁盤。這些在輕載機器上很少發生,但是隨着內存壓力的增加,每秒鐘可以達到100秒到1000秒,甚至更多,這種情況經常發生。

第三種類型是操作系統沒有映射,因爲映射不存在 - 進程試圖訪問不屬於它的內存。這會生成段錯誤,並且通常會終止該進程。這些不應該經常發生,並且完全取決於軟件在機器上的寫入方式,並且與計劃或機器負載無關。

即使你已經知道,我想我把它扔進社區。

相關問題