簡體   English   中英

虛擬地址到物理地址的映射

[英]Mapping of Virtual Address to Physical Address

我懷疑每個進程是否有自己獨立的頁表,那么為什么需要系統范圍的頁表呢? 此外,如果Page表是將虛擬地址映射到物理地址,那么我認為兩個進程可能映射到相同的物理地址,因為所有進程都具有相同的虛擬地址空間。 系統范圍頁面表上的任何良好鏈接也將解決我的問題?

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

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

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

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

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

第二種類型是OS沒有映射時,因為例如,進程的內存已經交換到磁盤,如上所述。 這些在輕載機器上很少發生,但隨着內存壓力的增加,更頻繁地發生,每秒高達100s到1000s,甚至更多。

第三種類型是操作系統沒有映射,因為映射不存在 - 進程正在嘗試訪問不屬於它的內存。 這會產生段錯誤,通常會導致進程被終止。 這些不應該經常發生,並且完全取決於軟件在機器上的編寫程度,並且與調度或機器負載沒有任何關系。

即使你已經知道這一點,我想我會把它扔給社區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM