【操作系統】第五章:虛擬內存(Part1:交換[swapping]和覆蓋[overlay]技術)

OS.StudyLog.Ch5.Virtual Memory.虛擬內存

虛存的起源

(從二維方塊到3D和動畫CG)電子遊戲所佔的內存越來越大,對計算機要求的性能也就越來越過。也就說程序規模的增長遠大於儲存器容量增長的速度。
我們理想中的存儲器:更大更快且非易失性存儲器。實際的物理硬件是很難獲取的。
在這裏插入圖片描述
如圖所示,快速訪問的存儲器都靠近CPU但是容量低且造價高。從下往上,意味着價格越來越高,容量越來越小,速度越來越快。硬盤存儲空間 夠大,但是速度不夠,所以我們只能把程序放到內存上去執行;那麼有沒有什麼辦法能夠把硬盤空間用於執行程序?===>虛存【把不常用的數據放入硬盤,把常用的數據放入內存,使得有限的內存放經常訪問的數據,形成一種虛擬的大內存的感覺】
這種方式需要硬件MMU(內存管理單元)和OS內核一起完成。
在這裏插入圖片描述
覆蓋技術:常用的代碼和數據放入內存,不常用的數據和代碼放入硬盤
.交換:內存中會跑多個程序,把一些當前優先級不高的程序放到硬盤中,使當前執行的程序會有一個更大的內存去執行。交換技術可由OS完成,但是開銷比較大,因爲需要導出整個程序到硬盤和導入內存,程序越大,導入導出的代價越大。
虛存技術:只把程序的一部分數據導入導出硬盤,減少交換技術的開銷。以頁和段爲粒度,來把數據和代碼導入導出,從而有效使用有限的物理空間。

覆蓋技術

目標:在較小的可用內存中運行較大的程序
依據程序邏輯結構,將程序劃分爲若干功能相對獨立的模塊;將不會同時執行的模塊共享同一塊內存區域。【在不同區間,這些程序塊可以不同時運行】某一段時間某一個區間執行,另一個時間另一個區間執行。但是這些函數分時共享一個內存空間。
必要部分:一定要有的代碼和數據常駐內存,他來負責決定某個時間段把相應區間的函數導入或者導出內存
可選部分(不常用功能):其他程序執行中放入外存中或放在其他程序模塊中,只在需要用到時裝入內存
不存在調用關係的模塊可相互覆蓋,共用同一塊內存區域
在這裏插入圖片描述
如圖所示,他們之間的邏輯關係是:A調用BC,B調用D;C調用E或者F
A是常駐內存,因爲他要調用其他所有函數。B和C都被A調用,且BC不會相互調用,這說明他們是隔離且獨立的,所有可以把BC分在一個區,同理DEF分爲另一個區。
內存總110K,程序總容量190K,也就說想把這個程序全部裝入內存,空間是不夠的。此時根據覆蓋技術:A作爲常駐內存放入常駐區。然後調用B和C中的一個,必然存在先後順序,且其中一個執行時,另一個一定不執行,則只在需要時進行導入和導出操作即可【代碼是隻讀的,他只需要釋放空間不需要其他開銷】
同理根據相互獨立原則,還可以找出多種不同的覆蓋方式。比如B和EF相互獨立,C和D相互獨立的。即他們之間不會相互調用,所以他們可以共享一個覆蓋區。則此時覆蓋區0爲50K空間(裝BEF),覆蓋區1爲30K空間(裝CD),則比着如圖所示的分區方法,總內存使用空間量還要少10K
20K[]+(50+40)K[]<20K[]+(30+50)K[]20K[常駐]+(50+40)K[覆蓋]<20K[常駐]+(30+50)K[覆蓋]
缺點:開銷大。
1.設計的開銷,程序猿需要考慮怎麼把一個大的程序根據邏輯關係劃分出一個個小的相互之間可以覆蓋的功能模塊,增加了程序猿的負擔
2.不同執行階段的對內存的導入和導出其實就是對硬盤的讀寫操作,這個過程時間開銷也很大。

交換技術

在這裏插入圖片描述
導入導出的開銷相對來說是比較大的,一般最小粒度也大於了一個頁。邏輯如下:
在這裏插入圖片描述
交換存在的問題:
1.交換時機:如果程序執行過程中頻繁交換,其實對整個系統的負荷很大。每一次的硬盤操作會有較長的時間開銷,會耽誤程序的快速執行,所以只有當且僅當內存空間不夠用時,纔會進行交換操作,而且要儘量減少這種操作。
2.所需空間[交換區的大小]:必須足夠大以存放所有用戶進程的所有內存映像的拷貝,必須對這些內存映像直接存取。假設一個內存中可以跑10程序,那麼極端的情況下可能會把9個程序導出去,所以所需空間的預設計就要求比較大。
3.程序的重定位:程序執行時換出再換入後,內存位置可能發生了變化,這時候當前空閒空間和換出位置不同,那麼尋址就可能出現問題。一般來說,採取動態映射的方法可以比較好的處理這個問題。【類似上一章講解的虛擬地址和物理地址之間的映射表】
交換技術由操作系統來完成,對程序猿是透明的,程序猿不需要了解什麼時候換入和換出,由OS自主管理。
交換和覆蓋的比較
在這裏插入圖片描述
簡單概括:
覆蓋:小範圍一個程序內
交換:大範圍多個程序間

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