操作系統-- 虛存技術

一、虛存技術的起因

理想中的存儲器:更大、更快、更便宜的非易失性存儲
但這個是目前達到不了的,我們只能採用多級存儲機制,達到一個大、快、便宜的一個感覺:
在這裏插入圖片描述寄存器、緩存、主存這都是比較快的,但價格較高,所以不可能很大。我們的外存硬盤很大,但是又很慢。我們的虛存技術,就是將這兩個的特點有機的結合在一起,實現給人的感覺大、快、便宜。

在這裏插入圖片描述以設計了三種技術:
1)手動覆蓋技術:只把指令和數據保存在內存中
2)自動交換技術:將程序導出內存到硬盤上,程序大小爲粒度
3)虛擬內存技術(前兩種是虛擬內存還沒出現的情況下誕生的):以更小的粒度把數據在內存和硬盤間換入換出。是前兩種方法的合體版。

二、覆蓋技術

1、瞭解覆蓋技術

目標:是在較小的可用內存中運行較大的(相對而言)的程序。因爲覆蓋技術需要分區所以需要和分區存儲管理配合使用

原理:把程序按照其自身的邏輯結構,劃分爲若干個功能上相對獨立的程序模塊,那些不會同時執行的模塊共享同一塊內存區域,按時間先後來運行。

  • 必要部分(常用功能)的代碼和數據常駐內存;
  • 可選部分(不常用內存)在其他程序模塊中實現,平時存放在外存中,在需要用到時才裝入內存;
  • 不存在調用關係的模塊不必同時裝入到內存,從而可以相互覆蓋,既這些模塊共有一個分區。

2、實戰演練

在這裏插入圖片描述我們先看下調用關係:
A可以分別(注意不是同時)調用B、C,B調用D,C可以分別調用E、F。
不存在調用關係可以放到一個覆蓋區裏。
下面還有一種更好的方案:
A不變(20K),BEF在覆蓋區0(50K),CD在覆蓋區1(30K)。這樣也是可以,需要的內存更小

缺點:
由程序員來把一個大的程序劃分爲若干個小功能模塊,並確定各個模塊之間的覆蓋技術,費時費力,增加了編程的複雜度。

三、交換技術

1、交換技術的基礎

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

2、交換技術實現的幾個問題

1)交換時機的確定:何時發生交換?只當內存空間不夠或有不夠危險的時候才換出。
2)交換區的大小:必須足夠大以存放所以用戶進程的所有內存映射的拷貝;必須能對這些內存映像進行直接存取。
3)程序換入時的重定位:換出後再換入的內存位置一定要在原來的位置上嗎,尋址可能會出現問題?最好採用動態地址映射的方法,建好頁表就行。

3、交換技術的缺點

以一個程序的大小爲單位進行換入換出,開銷太大!

四、小結–覆蓋與交換的比較

  • 覆蓋只能發生在那些相互之間沒有調用關係的程序模塊之間,因此程序員必須給出程序內的各個模塊之間的邏輯覆蓋結構。
  • 交換技術是以內存中的程序大小爲單位來進行的,它不需要程序員給出各個模塊之間的邏輯覆蓋結構。換言之,交換髮生在內存中程序與管理程序或操作系統之間,而覆蓋則發生在運行程序內部。

五、虛存技術

針對覆蓋技術和交換技術的缺點,和特點,發明了虛存技術
目標:
1)像覆蓋技術那樣,不是把程序的所有內容都放在內存中,因而能夠運行比當前的空閒內存空間還要大的程序。但做得更好,由操作系統自動來完成,無須程序員的干涉;
2)像交換技術那樣,能夠實現進程在內存與外存之間的交換,因而獲得更多的空閒內存空間。但做得更好,只對進程的部分內容在內存和外存之間進行交換。
在這裏插入圖片描述
如圖所示:程序只有少部分在內存中,而大部分都是在外存中存儲。

1、程序的局部性原理

定義:程序的局部性原理(principle of locality),指程序在執行過程中的一個較短時期,所執行的指令地址和指令的操作數地址,分別侷限於一定的區域,這個可以表現爲:

  • 時間局部性:一條指令的一次執行和下次執行,一個數據的一次訪問和下一次訪問都集中在一個較短時期內。
  • 空間局部性:當前指令和鄰近的幾條指令,當前訪問的數據和鄰近的幾個數據都集中在一個較小區域內。

程序的局部性原理表明,從理論上說,虛擬存儲技術是能夠實現的,而且在實現了以後應該是能夠取得一個滿意的效果。訪問的速度更快,並且可以提供一個很多的空間。

2、虛擬技術的大致流程

前提:操作系統有了硬件支持分段/分頁機制,在此內存管理基礎之上來實現一個以頁或者是段爲單位的虛存管理。
過程:
1)在裝入程序的時候,不必將所有的程序和數據裝入內存中去,而只需將當前需要執行的部分的代碼數據放在相關的段或者是頁中,這樣可以是的一小部分的代碼放在內存中去了。
2)在程序執行過程中,如果需要執行的指令或訪問的數據尚未在內存中(稱爲缺頁或缺段),則由處理器通知操作系統將相應的頁面或段調入到內存,然後繼續執行程序。
3)另一方面。操作系統將內存中暫時不使用的頁面或段調出保存在外存上,從而騰出更多空閒空間存放將要裝入的程序以及將要調入的頁面或段。

3、虛擬內存的基本特徵

1)較大的用戶空間:
通過把物理內存與外存結合,提供給用戶的虛擬內存空間通常大於實際的物理內存,既實現了這兩者的分離。如32位的虛擬地址理論上可以訪問4GB,而可能計算機上僅有256M的物理內存,但硬盤的容量大於4GB
2)部分交換:
與交換技術相比較,虛擬存儲的調入和調出是對部分虛擬地址空間進行的,其每次的換入換出是非常規整的,要麼是段或者是頁。不需要將整個程序交換出去。力度更小,但是效率更高。
3)不連續性:
物理內存分配不連續,虛擬地址空間使用也是不連續的。本來所有的數據都是連續的放在虛擬內存中的,但是操作系統要把某些數據換出去,而造成的不連續。操作系統會彌補好,正常的訪問。

4、虛擬內存技術的具體實現

具體實現:虛擬頁式內存管理。
虛擬頁式內存管理,即在頁式內存管理的基礎上增加了請求調頁頁面置換的功能。
請求調頁:產生缺頁中斷,向操作系統請求從硬盤調頁
頁面置換:應用頁面置換算法,決定把那個頁從內存放到硬盤

5、頁表表項解析

在這裏插入圖片描述

  • 駐留位:表示該頁是在內存還是外存。如果該位等於1,表示該頁位於內存當中,既該頁表項是有效的,可以使用;如果改爲爲0,表示該頁當前還在外存當中,如果訪問該頁表項,將導致缺頁中斷。
  • 保護位:表示允許對該頁做何種類型的訪問,如只讀,可讀寫,可執行等。
  • 修改位:表面此頁面在內存中是否被修改過,當系統回收該物理頁面時,根據此位來決定是否把他的內容寫回外存。位爲0就表示數據一樣的,不需要寫回外存中。
  • 訪問位:如果該頁面被訪問過(包括讀操作或寫操作),則設定詞尾,用於頁面的置換算法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章