禁用虛擬內存,操作系統還能實現虛擬存儲器這種機制嗎?

虛擬存儲器是對內存的抽象,極大地方便了內存的管理。不過,現在內存容量很大,有些人禁用了虛擬內存。我想問,如果禁用了虛擬內存,操作系統還能提供虛擬存儲器這種機制嗎?另外,有必要禁用嗎?(以程序員的角度)


@王迅的說法有誤,Windows也不能禁用虛擬內存,能夠禁用的那個叫作「頁面文件」(paging file),頁面文件和Linux、UNIX裡面的交換空間(swap space)是相似的東西。Windows中所有的說法都叫作paging file,沒有說能夠關閉virtual memory的。

至於頁面文件,我認為也沒有必要禁用,之前有過一則討論,請移步《在物理內存充足的情況下,是否需要禁用虛擬內存?》


那個東西叫分頁文件不叫虛擬內存


我和我們宿舍的討論了一下。禁用掉Windows的虛擬內存,或不為Linux分配交換空間,OS還是會有虛擬存儲器這種機制的。還是會給每個進程分配一個虛擬的地址空間。不過,硬碟沒有提供交換的空間,內存不足時,內存也不會和硬碟交換數據。


所有的現代操作系統都以保護模式運行CPU,從實模式切換到保護模式是系統啟動中不可缺少的一個環節。所有應用程序的內存訪問都需要經過地址翻譯。虛擬存儲器機制不止增加了可用的內存空間,還提供了共享動態鏈接庫、內存可見性、內存訪問許可權等諸多功能。

用戶可以修改的部分只是更改磁碟上分頁文件的大小。


禁用虛擬內存?這個是win上才有的概念。

CSAPP這本書完全是基於unix操作系統模型講的。

虛擬存儲器提供的是對主存的抽象,其中一個效果就是所有用戶態進程都有統一地址空間。這跟win下面某個系統設置里所謂禁用虛擬內存完全不是一回事。

我的理解是win下的這個所謂虛擬內存,就是linux下的swap空間。

假設當前已經跑的幾個進程已經幾乎佔滿了可用的物理頁,一些內核線程定期的會把物理頁換出到swap空間,這時就有足夠的物理頁供以後要load的進程使用。

swap空間用盡的時候,一般也就是內存不足的情況。

禁用了虛擬內存,字面上理解就是把swap空間大小設為0而已,跟虛擬存儲器機制沒關係。虛擬存儲器機制沒了,OS就後退回幾十年前那種一個程序只能載入在主存的某段的計算機模型了。


推薦閱讀:

單生產者和單消費者共同操作同一個環形緩衝區需要加鎖嗎?
如何利用磁碟順序讀寫快於內存隨機讀寫這一現象?
怎麼把系統跑在內存里?
多核系統下內存一致性如何保證?
目前這個這個時代,swap space還有什麼意義?

TAG:操作系統 | 虛擬內存 |