作業系統概念(九) 虛擬記憶體

2021-10-01 09:47:26 字數 4059 閱讀 2309

有些情況下不需要將整個程式放入記憶體:

①程式中有處理異常錯誤條件的**

②陣列、鍊錶、表通常分配了比實際所需要的更多的記憶體

③程式某些選項可能很少使用

虛擬記憶體將記憶體抽象成乙個巨大的、統一的儲存陣列,進而將使用者邏輯記憶體與物理記憶體分開,邏輯記憶體的大小不再受限,需要記憶體管理單元mmu將邏輯頁對映到記憶體的物理頁幀,這裡只講請求分頁排程。

1、在需要的時候才調入相應的頁

2、交換程式對整個程序進行操作,調頁程式只對程序的單個頁進行操作。

3、在換入的時候,調頁程式會推測在再次換出前會用到哪些頁

4、有效無效位:之前在記憶體管理中的是表示是否有效,而現在是表示(1:合法且在記憶體中;0:無效或者可能在磁碟上)。初始值為0,當時試圖訪問為0的頁時會發生頁錯誤陷阱

5、當有效位無效的時候,不會對mmu進行位址轉換

6、是否合法需要在中斷程式中判斷

7、長期排程的時候會決定哪些頁放入記憶體,哪些放在磁碟

②如果引用非法,那麼終止程序。如果引用有效但是尚未調入頁面,那麼現在應調入。

③找到乙個空閒幀(從空閒幀鍊錶中取乙個,可能引發頁面置換)

④排程乙個磁碟操作,以便將所需要的頁調入剛分配的幀。是磁碟i/o採用dma方式進行,會將程序放入等待佇列

⑤當磁碟讀操作完成後,修改程序的內部表和頁表,以表示該頁已在記憶體中。i/o完成

⑥重新開始因非法位址陷阱而中斷的指令。程序現在能訪問所需的頁,就好像它似乎總在記憶體中。程序狀態改變

9、通過第一次中斷陷入os,os啟動i/o操作,i/o操作完成引發第二次中斷

10、有的指令(如mov)可能會訪問多個(三個)頁的記憶體(一頁指令,兩頁資料)

11、頁表:通過有效無效位將條目設定為有效/無效

12、次級儲存器:儲存不在記憶體的頁,一般為快速磁碟,即交換空間。

13、請求調頁的關鍵是在頁錯誤之後重新執行指令

14、效能:

設p為頁錯誤的概率(0≤p ≤ 1),如果p等於0,則不存在頁錯誤,如果p等於1,則每次訪問都存在頁錯誤:

有效訪問時間(eat)= (1-p)× 記憶體訪問時間 + p×頁錯誤時間

15、交換空間有兩種使用方法:

①程序在建立時將整個檔案映象複製到交換空間中,並從交換空間進行按頁排程

②從檔案系統中按需調頁,頁置換時將頁寫入交換空間

1、允許父子程序開始時共享同一頁面,如果任一程序需要對該頁進行寫操作,則建立乙個共享頁的拷貝。所有非修改頁會被父程序和子程序共享

2、寫時複製需要的空閒頁來自乙個空閒緩衝池,該池中的頁在分配前先填充0,以清除之前的內容

1、給原有的頁錯誤服務程式增加頁置換,以防止記憶體的過度分配

2、只有被修改過的頁才能寫回到磁碟

3、頁置換分開了邏輯記憶體與物理記憶體

①查詢所需頁在磁碟上的位置

②查詢乙個空閒幀,否則用頁置換演算法選擇乙個犧牲幀,將其寫入磁碟,並改變頁表與幀表

③將所需頁寫入空閒幀,改變頁表與幀表

④重啟程序,阻塞到就緒

1、通過修改位或者髒位來降低開銷,表示是否需要重寫到磁碟上的副本

2、需要開發幀分配演算法與頁置換演算法,分別決定乙個程序分配多少幀以及如何選擇要置換的頁

3、通過執行乙個特殊字串(引用串)來檢驗演算法並計算頁錯誤率

1、記錄每個頁進入記憶體的時間,並選擇最老的頁

2、belay異常:頁錯誤率可能會隨著分配幀的數目的增加而增加,而不是一般情況下的降低

1、難以實現,需要引用未來的知識

2、是所有演算法中產生頁錯誤率最低的,且不會有belay異常的情況

3、會置換最長時間內不會被使用的頁(向前看

1、最近最少使用演算法,置換最長時間內沒有被使用的頁(向後看

2、可以通過為每乙個頁表項關聯乙個時間域,並給cpu增加乙個計數器,每次記憶體引用,為對應頁表項的時間域進行更新,置換最小的頁

3、或者通過乙個頁碼堆疊,每次將被引用的頁從堆疊中刪除並重新放回頂部,這樣堆疊的頂部必定是最近使用的頁,而底部為lru頁

1、附加引用位演算法:每頁關聯乙個引用位,初始化為0,當頁被引用的時候,改為被設定為1。引用位可以有多個,比方說有8位引用位,就表示著該頁在最近8個時間週期內被使用的情況。而11000100比01110111的頁更為最近使用。每次選擇8位最小的乙個頁為lru頁,進行置換。

2、二次機會演算法:基於fifo演算法。當選擇時,檢查引用位,如果為0則直接進行置換,否則會給第二次機會,並將引用位清零,到達時間設定為當前時間。

為每個頁保留乙個用於記錄其引用次數的計數器,有兩種演算法:

①最不經常使用頁置換演算法

②最常使用頁置換演算法

1、給每個程序分配最低數量的頁,必須有足夠的幀容納所有單個指令所引用的頁,而幀的最少數量是由計算機定義的。

2、指令是6位元組,可能跨2頁

3、要移動的字元的塊和要移動到目的的區域也可能都要跨頁。

4、有兩種主要的分配方法:

①固定分配

②優先順序分配

1、有兩種:

①平均分配

②按比例分配

2、每個程序所分配的數量會隨著多道程式的級別而改變,多道程式的程度增加(記憶體中程序的數量增加),那麼每個程序會失去一些幀來給新的程序

1、按優先順序比例而不是進城大小來分配

2、如果乙個程序產生了乙個頁錯誤,那麼可以:

①從自身的幀中選擇用於替換

②從比自身優先順序低的程序中選取幀用於替換

1、全域性置換:允許乙個程序從所有幀集合中選擇乙個置換幀,而不管該幀是否已分配給其他程序;乙個程序可以從另乙個程序中取幀。

2、區域性置換:要求每個程序僅從其自己的分配幀中進行選擇

1、如果乙個程序沒有足夠的頁,那麼會一直忙於將頁面換進換出,頁錯誤率就會非常高。這會導致cpu使用率低,新的程序會加入到系統中來。

2、os發現cpu使用率低,會加大多道程式程度,使更多程序加入到記憶體,使頁錯誤率更高,最終系統無法完成工作

3、區域性置換可以限制顛簸在程序之間傳遞與擴散,而不能解決

4、工作集合策略研究乙個程序實際正在使用多少幀,定義了程序執行的區域性模型。

5、當程序執行時,它從乙個區域性移向另乙個區域性。區域性是乙個經常使用頁的集合。乙個程式通常由多個不同區域性組成,它們可能重疊。

6、當乙個子程式(函式)呼叫的時候,就定義了乙個新區域性

7、區域性是由程式結構與資料結構來定義的,如果分配的幀少於區域性的大小,程序會顛簸

1、定義工作集合視窗,檢查最近a個頁面的引用,即工作集合。如果正在使用,則保留,否則,會在上次引用的a個時間單位後刪除

2、工作集合模型是程式區域性的近似

3、精確度與a的大小有關,如果a太小,則不能包含整個區域性。若太大,可能包含多個區域性

4、wssi (程序pi的工作集) = 最近所引用的所有頁面的總數(不同時刻值不同)

5、d = ∑wssi 表示總的幀需求量。如果 d 大於可用幀數量,那麼有的程序就得不到足夠幀,從而會出現顛簸

6、這時可以懸掛某些程序,以消除顛簸現象

7、os會跟蹤每個程序的工作集合,並分配大於其工作集合的幀數。如果有空閒幀,則可以啟動另乙個程序

8、通過固定定時中斷和義勇為,能夠近似模擬工作集合模型

1、可以靈活地控制顛簸

2、如果實際的頁錯誤頻率太高,則分配更多的幀,如果太低,就可以從程序中拿走幀

3、如果太高而又沒有可用的空閒幀,那麼就選擇乙個程序進行暫停,將其的幀進行釋放,並分配給錯誤率高的程序

1、頁的大小如何選擇:

①若考慮碎片,則需要小頁

②若考慮頁表大小,則需要大頁

③若考慮i/o開銷,則需要大頁

④若考慮區域性性,會有兩個極端的矛盾。更小的頁應用導致更少的i/o和更少的總的分配記憶體;而為了降低頁錯誤數量,需要大頁。

2、tlb範圍:通過tlb可訪問的記憶體量

3、在理想的時候,乙個程序所有的工作集合均在tlb中

作業系統總結(九)虛擬記憶體

利用虛擬記憶體,可以編寫大於實際記憶體的程式 採用部分程式載入到記憶體中,可以同時執行更多的程序,併發度好,效率高。將需要的部分放入記憶體,有些用不到的部分從來不放入記憶體,記憶體利用率高 程式開始執行 響應時間等更快。使用虛擬記憶體有利於系統,同時也有利於使用者。虛擬記憶體的實現 早期 記憶體不足...

作業系統 虛擬記憶體

1.虛擬記憶體術語 虛擬記憶體 程式引用記憶體使用位址與記憶體系統用於識別物理儲存站點的位址是不同的,程式生成的位址會自動轉換成機器指令。虛擬記憶體的大小收到定址機制和可用的備用記憶體量的限制,而不受記憶體儲存位置實際數量的限制。虛擬位址 在虛擬記憶體中分配給某一位置的位址使該位置可以被訪問,彷彿它...

作業系統虛擬記憶體

虛擬記憶體是計算機作業系統提供的一種記憶體管理技術,它使得應用程式認為它擁有連續可用的記憶體 乙個連續完整的位址空間 而實際上,它通常是被分隔成多個物理記憶體碎片,還有部分暫時儲存在外部磁碟儲存器上,在需要時進行資料交換。與沒有使用虛擬記憶體技術的系統相比,使用這種技術的系統使得大型程式的編寫變得更...