操作系統(二)

虛擬內存

(1)目錄
-起因
-覆蓋技術(早期)/交換技術(早期)/虛存技術
-虛擬內存技術:目標/程序局部性原理/基本概念/基本特徵/虛擬頁式內存管理
(2)起因
-經常出現內存不夠了。程序規模的增長大於存儲器容量的增長。
-理想的存儲器:更大,更快,更便宜,非易失性存儲。

-把硬盤的空間也用上(扮演內存的作用)

-不常用的放在硬盤上,常用的放在內存上。
(3)在計算機系統中,尤其是在多道程序運行的環境中,可能會出現內存不夠用的情況,怎麼辦?
->如果程序太大,超過了內存的容量,可以採用 手動的覆蓋(overlay) 技術,只把需要的指令和數據保存在內存中
->如果是程序太多,超過了內存的容量,可以採用 自動的交換(swapping) 技術,把暫時不能執行的程序送到外存中
->如果想在有限容量的內存中,以更小的頁粒度爲單位裝入更多更大的程序,可以採用 自動的虛擬存儲技術 。

覆蓋技術

(1)目標
在較小的可用內存中運行較大的程序。常用於多道程序系統,與分區存儲管理配合使用。
(2)原理
把程序按照其自身邏輯結構,劃分爲若干個功能上相對獨立的程序模塊,那些不會同時執行的模塊共享同一塊內存區域,按時間先後來運行。
->必要部分(常用功能)的代碼和數據常駐內存
->可選部分(不常用功能)在其它程序模塊中實現,平時存放在外存中,在需要時才裝入內存。
->不存在調用關係的模塊不必同時裝入內存,從而可以相互覆蓋,即這些模塊共用一個分區。

(3)缺點
-由程序員來把一個大的程序劃分爲若干個小的功能模塊,並確定各個模塊之間的覆蓋關係,費時費力,增加了編程的複雜度。
-覆蓋模塊從外存裝入內存,是以時間換空間。

交換技術

(1)目標
多道程序在內存中時,讓正在運行的程序或需要運行的程序獲得更多的內存資源。
(2)方法
-可將暫時不能運行的程序送到外存,從而獲得空閒內存空間。
-操作系統把一個進程的整個地址空間的內容保存到外存中(換出swap out),而將將外存中的某個進程的地址空間讀入到內存中(換入swap in)。換入換出內容大小爲整個程序的地址空間。

(3)交換技術實現中的幾個問題
-交換時機的確定:只有當內存空間不夠或有不夠的危險時換出
-交換區的大小:必須足夠大以存放所有用戶進程的所有內存映像的拷貝,必須能對這些內存映像進行直接存取
-程序換入時的重定位:因爲換出換入後的內存位置不一定相同,所以最好採用動態地址映射的方法
(4)覆蓋與交換技術的比較
-覆蓋只能發生在那些(程序內)相互之間沒有調用關係的程序模塊之間,因此程序員必須給出程序內的各個模塊之間的邏輯覆蓋結構。
-交換技術是以在內存中的程序大小爲單位來進行的,它不需要程序員給出各個模塊之間的邏輯覆蓋結構。
—>交換髮生在內存中 程序 與 管理程序或操作系統 之間,而覆蓋則髮色會跟你在運行程序的內部。

虛(擬)(內)存(管理)技術

(1)虛存技術的目標
-解決覆蓋技術給程序員負擔大和交換技術處理器開銷大的問題。
-像覆蓋技術一樣,不是把程序的所有內容都放在內存中,因而能夠運行比當前的空閒內存空間還要大的程序。但做得更好,能由操作系統自動完成,無需程序員介入
-能像交換技術那樣,能夠實現進程在內存和外存之間的交換,因而獲得更多的空閒內存空間。但能做得更好,只對進程的部分內容在內存和外存之間進行交換。

(2)程序的局部性原理(principle of locality)
指程序在執行過程中的一個較短時間,所執行的指令地址和指令的操作數地址分別侷限於一定區域,表現爲:
->時間局部性:一條指令的一次執行和下次執行,一個數據的一次訪問和下次訪問都集中在一個較短的時間裏
->空間局部性:當前指令和領近的幾條指令,當前訪問的數據和領近的幾個數據都集中在一個較小區域內
程序的局部性原理表明,從理論上來說,虛擬存儲技術是能夠實現的,而且在實現了以後應該能夠取得一個滿意的效果的。

在這裏插入圖片描述
注意,方法1是按行訪問,也就是每跳過1024個訪問一個,考慮到4k只能放1024個數字(一個int佔32位,4個byte),所以每次訪問都會換入換出,不滿足空間局部性。

你知道的越多,你不知道的越多。
有道無術,術尚可求,有術無道,止於術。
如有其它問題,歡迎大家留言,我們一起討論,一起學習,一起進步

發佈了114 篇原創文章 · 獲贊 67 · 訪問量 8008
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章