0

我最近被問到一個問題,即在計算機系統中,如果主存儲器(RAM)與次存儲器(HDD)具有可比性,那麼是否需要在這樣的計算機系統中實現虛擬存儲器? 由於分頁和分段需要純粹處理開銷的上下文切換,虛擬內存的好處會超過它所需的處理開銷嗎? 有人可以幫我解決這個問題嗎? Thanku需要虛擬內存嗎?

回答

0

我要轉儲我對此事的理解,絕對沒有後臺憑據來備份它。會得到downvoted? :)

首先,通過說主要記憶與二次記憶相當,我假設你的意思是空間。 (畢竟,訪問RAM比訪問存儲要快)。

現在,據我所知,

隨機存取存儲器用的地址空間,這是該操作系統可以存儲東西,在地址限制,32位操作系統是有限的大致4gb of RAM,而64位操作系統系統(理論上)限於2.3EXABYTES of RAM,儘管Windows 7將其限制爲200gb for Ultimate edition, and 2tb for Server 2008

當然,還存在着多種因素,如

  • 製造成本RAM。 (動輒8GB上一個RAM的thingie(?)仍然)

  • DIMM插槽在主板上(我見過的板帶4個插槽)

但對於本次討論的目的,讓我們忽略這些限制,並談論空間。


讓我們來談談現在的應用程序如何處理內存。應用程序不知道存在多少內存 - 大多數情況下,它只是從操作系統中請求它。操作系統負責管理哪些地址空間已分配給正在運行的每個應用程序。如果它不夠,那麼發生不好的事情。

但是,肯定有理論上的2EXABYTES的RAM,你永遠不會用完?好吧,很久以前一位知名人士曾經說過,我們永遠不需要超過64kB的RAM。因爲現在大多數應用程序都是貪婪的(它們會像操作系統一樣願意付出),如果在足夠強大的計算機上運行足夠多的應用程序,理論上可以超出物理內存的存儲限制。在這種情況下,虛擬內存將需要組成額外的所需內存。

所以要回答你的問題:(在我對這個問題有限的知識形成的愚見中)是的,你仍然需要實現虛擬內存。


很明顯,採取這一切,做自己的研究。我把它變成一個社區維基,以便其他人可以編輯它,或者只是在它明顯錯誤時刪除它:)

3

確實,使用虛擬內存,您可以讓程序提交(即分配)一個總共有更多的物理可用內存。但是,如果擁有虛擬內存,這只是衆多好處之一,甚至不是最重要的。就我個人而言,當我使用電腦時,我會定期檢查任務管理器,看看我使用我的實際RAM有多接近。如果我經常過去,我會去購買更多的內存。

所有使用虛擬內存的操作系統的關鍵屬性是每個進程都有自己的獨立地址空間。這意味着您可以擁有1GB內存的機器,並且有50個進程正在運行,但每個進程仍將具有4GB的可尋址內存空間(假設爲32位操作系統)。它爲什麼如此重要?這並不是說你可以「僞造東西」並使用不在那裏的RAM。只要您開始交換,您的虛擬內存管理器就會開始抖動,性能將停止。更重要的是,如果每個程序都有自己的地址空間,那麼它就不可能寫入任何隨機內存位置並影響另一個程序。

這是主要優勢:穩定性/可靠性。在Windows 95中,您可以編寫一個應用程序來使整個操作系統崩潰。在W2K +中,編寫一個遍佈自己的地址空間並崩潰自我以外的程序是不可能的。

還有其他幾個優點。當可執行文件和DLL被加載到RAM中時,虛擬內存管理器可以檢測到同一個二進制文件被加載多次,並且會使多個進程共享相同的物理RAM。在虛擬內存級別,每個進程看起來好像每個進程都有自己的副本,但在較低的級別上,它們都映射到一個點。這加快了程序啓動速度,並且還優化了內存使用情況,因爲每個DLL只加載一次。

虛擬內存管理器還允許您通過將文件映射到虛擬地址空間中的頁面來執行文件I/O。除了引入使用文件的有趣替代方法之外,這還允許實現共享內存段,即在具有讀/寫頁的物理RAM有意地在進程間共享高效的進程間通信(IPC)時。具有所有這些優點,如果我們認爲大多數時候您仍然希望拍攝具有更多物理RAM而不是整體提交大小,並且認爲現代CPU支持直接構建到硬件中的虛擬地址映射,則開銷擁有虛擬內存管理器實際上是非常小的。另一方面,在許多不同供應商的許多應用程序同時運行的環境中,進程地址空間是無價的。