虛擬內存的作用

1,虛擬內存管理可以控制物理內存的訪問權限 
    物理內存本身是不限制訪問的,任何地址都可以讀寫,而操作系統要求不同的頁面具有不同的訪問權限,這是利用CPU模式和MMU的內存保護機制實現的。例如,Text Segment被只讀保護起來,防止被錯誤的指令意外改寫,內核地址空間也被保護起來,防止在用戶模式下執行錯誤的指令意外改寫內核數據。這樣,執行錯誤指令或惡意代碼的破壞能力受到了限制,頂多使當前進程因段錯誤終止,而不會影響整個系統的穩定性。
2,虛擬內存管理最主要的作用是讓每個進程有獨立的地址空間
    所謂獨立的地址空間是指,不同進程中的同一個VA被MMU映射到不同的PA,並且在某一個進程中訪問任何地址都不可能訪問到另外一個進程的數據,這樣使得任何一個進程由於執行錯誤指令或惡意代碼導致的非法內存訪問都不會意外改寫其它進程的數據,不會影響其它進程的運行,從而保證整個系統的穩定性。另一方面,每個進程都認爲自己獨佔整個虛擬地址空間,這樣鏈接器和加載器的實現會比較容易,不必考慮各進程的地址範圍是否衝突。
    現在我們也可以理解爲什麼共享庫必須是位置無關代碼了。比如libc,不同的進程雖然共享libc所在的物理頁面,但這些物理頁面被映射到各進程的虛擬地址空間時卻位於不同的地址,所以要求libc的代碼不管加載到什麼地址都能正確執行。
3,VA到PA的映射會給分配和釋放內存帶來方便
    物理地址不連續的幾塊內存可以映射成虛擬地址連續的一塊內存。比如要用malloc分配一塊很大的內存空間,雖然有足夠多的空閒物理內存,卻沒有足夠大的連續空閒內存,這時就可以分配多個不連續的物理頁面而映射到連續的虛擬地址範圍。
4,一個系統如果同時運行着很多進程,爲各進程分配的內存之和可能會大於實際可用的物理內存,虛擬內存管理使得這種情況下各進程仍然能夠正常運行
    因爲各進程分配的只不過是虛擬內存的頁面,這些頁面的數據可以映射到物理頁面,也可以臨時保存到磁盤上而不佔用物理頁面,在磁盤上臨時保存虛擬內存頁面的可能是一個磁盤分區,也可能是一個磁盤文件,稱爲交換設備(Swap Device)。當物理內存不夠用時,將一些不常用的物理頁面中的數據臨時保存到交換設備,然後這個物理頁面就認爲是空閒的了,可以重新分配給進程使用,這個過程稱爲換出(Pageout)。如果進程要用到被換出的頁面,就從交換設備再加載回物理內存,這稱爲換入(Pagein)。換出和換入操作統稱爲換頁(Paging),因此:
系統中可分配的內存總量 = 物理內存的大小 + 交換設備的大小
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章