我有一個疑問,當每個進程有它自己的單獨的頁表,那麼爲什麼有系統寬的頁表需要?另外,如果Page表是將虛擬地址映射到物理地址,那麼我認爲兩個進程可映射到相同的物理地址,因爲所有進程都具有相同的虛擬地址空間。系統範圍頁面表上的任何良好鏈接也將解決我的問題?虛擬地址映射到物理地址
回答
每個進程都有自己獨立的虛擬地址空間 - 兩個進程可以將virtpage 1映射到不同的物理頁面。進程可以參與共享內存,在這種情況下,它們每個都有一些virtpage映射到同一個頁面。
一個進程的虛擬地址空間可以用來將virtpages映射到物理頁面,映射到內存映射的文件,設備等。虛擬頁面不必連線到RAM。一個進程可以對整個1GB文件進行內存映射 - 在這種情況下,其物理內存使用量可能只有幾兆,但其虛擬地址空間使用量將爲1GB或更多。許多進程都可以這樣做,在這種情況下,所有進程的虛擬地址空間使用總和可能是40 GB,而總物理內存使用率可能只有100 megs;這在32位系統上很容易實現。
由於許多進程加載相同的庫,操作系統通常將庫放在一組只讀可執行頁面中,然後在每個進程的virtpage空間中加載映射以指向一組頁面,節省物理內存。
進程可能沒有指向任何內容的virtpage映射,例如,如果進程內存的一部分被寫入頁面文件 - 進程將嘗試訪問該頁面,CPU將觸發頁面錯誤,操作系統將看到頁面錯誤,並通過暫停進程來處理它,從頁面文件中將頁面讀回到內存中,然後恢復進程。
通常有3種類型的頁面錯誤。第一種類型是CPU在TLB中沒有虛擬物理映射 - 處理器調用操作系統中的頁面錯誤軟件中斷,操作系統將映射放入該進程的處理器中,然後proc重新運行違規說明。這些每秒發生數千次。
第二種類型是操作系統沒有映射,因爲如上所述,因爲該進程的內存已被交換到磁盤。這些在輕載機器上很少發生,但是隨着內存壓力的增加,每秒鐘可以達到100秒到1000秒,甚至更多,這種情況經常發生。
第三種類型是操作系統沒有映射,因爲映射不存在 - 進程試圖訪問不屬於它的內存。這會生成段錯誤,並且通常會終止該進程。這些不應該經常發生,並且完全取決於軟件在機器上的寫入方式,並且與計劃或機器負載無關。
即使你已經知道,我想我把它扔進社區。
- 1. 將物理地址映射到虛擬地址linux
- 2. 將虛擬地址映射到特定物理地址
- 3. 虛擬地址到物理地址映射
- 4. 物理地址與虛擬地址
- 5. 映射虛擬地址到物理地址的含義是什麼?
- 6. 如何將物理地址映射到不同大小的虛擬地址?
- 7. 虛擬與物理地址
- 8. 轉換邏輯(虛擬)地址到物理地址
- 9. 虛擬地址到物理地址的轉換
- 10. 轉換DMA映射虛擬地址
- 11. 內存映射IO - 誰將地址映射到物理地址空間?
- 12. ELF中的虛擬和物理地址
- 13. 將虛擬地址轉換爲物理地址。任務解決
- 14. elf文件中段的虛擬地址和物理地址
- 15. 函數指針:物理地址或虛擬地址
- 16. 虛擬地址和物理地址的區別?
- 17. 內存與物理地址或虛擬地址合併?
- 18. C指針是指物理地址還是虛擬地址
- 19. malloc的返回值是虛擬地址還是物理地址?
- 20. PTE中的條目是物理地址還是虛擬地址? |虛擬內存
- 21. 兩個進程中兩個相同的虛擬地址如何映射到不同的物理地址?
- 22. 虛擬地址
- 23. 物理地址到IP地址
- 24. 將內核空間虛擬地址映射到Windows 10驅動程序中的用戶空間虛擬地址
- 25. 虛擬IP地址
- 26. 虛擬物理網址
- 27. VA(虛擬地址)&RVA(相對虛擬地址)
- 28. 虛擬地址空間大小vs物理地址空間大小
- 29. 如何使用頁表來虛擬地址轉換爲物理地址
- 30. 緩存是由物理地址還是虛擬地址索引的?
您需要考慮共享內存。每個進程都需要自己的虛擬到物理映射,但系統需要對整個物理內存進行概述,以便知道當進程需要更多映射到物理內存的虛擬內存時可用的內容。 –
[虛擬內存中的兩個進程]的可能重複(http://stackoverflow.com/questions/8994571/two-processes-in-virtual-memory) –