虛擬存儲器 與虛擬內存詳解

在沒有虛擬存儲器之前

源程序在gcc –o 後生成的文件是可執行目標程序a.out,每條指令都有一個邏輯地址 32位。它存在硬盤上。

要執行時,只需找到該文件,將其裝入內存。

裝入的方式可以有多種,比如分頁,分段等等。但是,必須將該程序完全裝入內存。

 

分頁:將一個進程的邏輯地址空間(32位)分成若干大小相等的頁。

使用分頁方式時有一個問題,必須清楚:

os是根據文件系統找到的a.out,跟a.out的邏輯地址沒有一點關係

假如a.out是3個頁大小,

就將這3個頁分別裝入內存,

裝入內存的過程中將邏輯地址轉換爲物理地址。

 

如果內存爲1G 每個程序的大小是100M,那麼該os最多隻能裝10個程序。

 

虛擬存儲器的定義:

具有請求調入功能和置換功能,能從邏輯上對內存容量加以擴充的一種存儲系統。

即,程序在運行之前,沒必要全部裝入內存,

僅把當前要運行的頁裝入即可,當程序運行時,如果需要其它頁面,再進行頁面調入或者置換。

這樣 假如內存爲1G,硬盤爲200G,每個程序的大小爲2G。

那麼該os可以同時裝100個程序進內存(甚至可以更多,此處是100,是因爲硬盤大小的限制)。而此前的os一個程序也裝不下。

也就是說,在用戶看來,內存的容量變爲了200G,因爲有1002G的程序被裝入內存了。

但實際的內存只有1G,因此將這種存儲系統稱爲虛擬存儲器。

 

 

接下來的問題是,在沒有虛擬存儲器之前,os根據文件名通過文件系統將程序的全部內容載入內存,現在僅裝入了一部分,剩下的部分在需要時os該怎麼找到?

每個進程都有一張頁表。頁表的作用是實現程序頁號到實地址塊號的映射。頁表是放在內存中的。

請求分頁系統的頁表項:

頁號

實地址塊號

狀態位

修改位

外存地址

這樣os就可以根據外存地址將所需的頁面從硬盤中找到裝入對應的內存中了。

 

綜上,邏輯地址跟硬盤一點關係都沒有。

邏輯地址使每個進程可以獨立對程序的指令進行了編號,這樣使每個進程都感覺自己在獨佔內存。到執行的時候容易將其映射爲物理地址。

 

虛擬存儲器的引入 使程序可以不必完全裝入內存就能運行。

虛擬存儲器一般會用到分頁、分段,

但是,分頁、分段並不是因爲虛擬存儲器才被髮明的。

 

明白了這些以後,虛擬內存就比較好理解了

虛擬內存是用硬盤的一部分當內存,雖然把它當做內存用,可這塊空間畢竟是在硬盤,速度肯定不如真是內存,所以說它是虛的。

這塊虛擬內存的主要用途是當真實的內存被用完以後,又發生頁面置換時,可以先把該頁面換到這個地方。即雖然頁面被換出內存了,但認爲其還在內存。這個地方可以被稱爲假的實地址。

這塊硬盤採用的調度算法和其他地方不一樣。它是專門爲換入換出設計的。

在32位系統中,假如物理內存大於4G,虛擬內存將完全無用武之地。因爲cpu只能訪問4G的內存空間,沒必要再用硬盤當內存了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章