Ⅰ 怎樣使用「虛擬存儲器」
不管你用的是MS WINDOWS系列操作系統,或者是LINUX或者UNIX,加上我用過的IRIX(一種64位的UNIX,專用於SGI圖形工作站),虛擬內存或者是交換文件(實際上英文名解釋來說都是Swap file)都是由操作系統本身提供的驅動程序,無需使用者額外安裝驅動或第三方驅動程序。
在微軟的WINDOWS 2000以上操作系統中,微軟的虛擬機管理器程序VMM(Virtual Machine Manager) 是位於最底層的操作系統部件(VMM 包含了所有基本的系統功能,如任務調度、虛擬內存操作、程序裝入及終止、任務間通訊等,此外,還負責處理主要的中斷及例外情況)。目前,個人電腦上安裝最多的Windows XP也使用操作系統自帶的虛擬內存管理器(VMM)技術和驅動程序來管理虛擬內存(4GB以下的系統都需要設置虛擬內存),無需用戶再安裝額外的虛擬內存驅動程序了,呵呵~~~
附:上面提到的「4GB以下的系統都需要設置虛擬內存」的更多說明
系統虛擬內存簡而言之就是為了避免物理內存容量不足,系統在硬碟中設置的名為PageFile.Sys的可作為內存使用的大容量文件,通常也叫做頁面文件。合理的分配虛擬內存,可以讓它輔助物理內存更好的改善系統性能。反之,系統性能降低。
Windows XP個人版使用了32位的內存模型,這樣可以允許內存存的地址空間達到4GB.也就是說Windows XP最大支持4GB的物理內存。前端的2GB空間只能被操作系統使用,底端的2GB內存則由操作系統和應用程序共同使用。當內存不夠時,Windows XP使用虛擬內存管理器(VMM)技術來管理虛擬內存,也就是說4GB以下的系統都需要設置虛擬內存。
正確設置虛批內存的方法是:右擊「我的電腦→屬性→高級」,在「性能」區域選擇「設置」,彈出「性能選項」窗口,在「高級」選項卡點擊「虛擬內存」區域的「更改」按鈕,在「虛擬內存」對話框中我們可以設置硬碟的頁面文件的「初始大小」和「最大值」。根據你的磁碟剩餘空間和速度來設置不同分區的虛擬內存,建議只對系統盤和鄰近分區設置頁面文件。填完後記住點擊「設置」完成。
對於虛擬內存「初始大小」的大小,微軟的標準是設置為物理內存的1.5倍;對於最佳的「最大值」大小,我們只需觀察到系統運行大型應用程序時的虛擬內存使用峰值即可。觀察的方法是:打開「Windows任務管理器」,在「性能」選項卡界面左下角的「認可用量」部分中,可以看到當前峰值的數字是多少。如果多次觀察這個數字均為最大值,那麼就把這個值(單位KB)設為最大值即可,記住將此值除以1024轉換為MB後再填入。
Ⅱ 操作系統(三)內存管理 3.2 虛擬內存管理
傳統存儲管理很多暫時用不到的數據也會長期佔用內存,導致內存利用率不高,他們具有以下兩個特徵
高速緩沖技術的思想:將近期會頻繁訪問到的數據放到更高速的存儲器中,暫時用不到的數據放在更低速存儲器中。快表機構就是將近期常訪問的頁表項副本放到更高速的聯想寄存器中,其依賴的就是局部性原理
時間局部性:如果執行了程序中的某條指令,那麼不久後這條指令很有可能再次執行;如果某個數據被訪問過,不久之後該數據很可能再次被訪問。(因為程序中存在大量的循環)
空間局部性:一旦程序訪問了某個存儲單元,在不久之後,其附近的存儲單元也很有可能被訪問。(因為很多數據在內存中都是連續存放的,並且程序的指令也是順序地在內存中存放的)
基於局部性原理,在程序裝入時,可以將程序中很快會用到的部分裝入內存,暫時用不到的部分留在外存,就可以讓程序開始執行。在程序執行過程中,當所訪問的信息不在內存時,由操作系統負責將所需信息從外存調入內存,然後繼續執行程序。若內存空間不夠,由操作系統負責將內存中暫時用不到的信息換出到外存。在操作系統的管理下,在用戶看來似乎有一個比實際內存大得多的內存,這就是 虛擬內存 。虛擬內存是操作系統虛擬性的一個體現,實際的物理內存大小沒有變,只是在邏輯上進行了擴充。
虛擬內存有以下三個主要特徵:
虛擬內存技術,允許一個作業分多次調入內存。如果採用連續分配方式,會不方便實現。因此,虛擬內存的實現需要建立在離散分配的內存管理方式基礎上。
虛擬內存的實現有以下三種方式
在程序執行過程中,當所訪問的信息不在內存時,由操作系統負責將所需信息從外存調入內存,然後繼續執行程序。 [1] 若內存空間不夠,由操作系統負責將內存中暫時用不到的信息換出到外存。 [2]
請求分頁系統建立在基本分頁系統之上,為了支持虛擬存儲器功能而增加了請求調頁和頁面置換功能
與基本分頁管理相比,請求分頁管理中,為了實現「請求調頁」,操作系統需要知道每個頁面是否已經調入內存;如果還沒調入,那麼也需要知道該頁面在外存中存放的位置。當內存空間不夠時,要實現「頁面置換」,操作系統需要通過某些指標來決定到底換出哪個頁面;有的頁面沒有被修改過,就不用再浪費時間寫回外存。有的頁面修改過,就需要將外存中的舊數據覆蓋,因此,操作系統也需要記錄各個頁面是否被修改的信息。因此,請求頁表項增加了四個欄位
在請求分頁系統中,每當要訪問的頁面不在內存時,便產生一個缺頁中斷,然後由操作系統的缺頁中斷處理程序處理中斷。此時缺頁的進程阻塞,放入阻塞隊列,調頁完成後再將其喚醒,放回就緒隊列。如果內存中有空閑塊,則為進程分配一個空閑塊,將所缺頁面裝入該塊,並修改頁表中相應的頁表項。
找到對應頁表項後,若對應頁面未調入內存,則產生缺頁中斷,之後由操作系統的缺頁中斷處理程序進行處理
快表中有的頁面一定是在內存中的。若某個頁面被換出外存,則快表中的相應表項也要刪除,否則可能訪問錯誤的頁面
頁面的換入、換出需要磁碟I/O,會有較大的開銷,因此好的頁面置換演算法應該追求更少的缺頁率
最佳置換演算法(OPT,Optimal):每次選擇淘汰的頁面將是以後永不使用,或者在最長時間內不再被訪問的頁面,這樣可以保證最低的缺頁率。
最佳置換演算法可以保證最低的缺頁率,但實際上,只有在進程執行的過程中才能知道接下來會訪問到的是哪個頁面。操作系統無法提前預判頁面訪問序列。因此,最佳置換演算法是無法實現的。
先進先出置換演算法(FIFO):每次選擇淘汰的頁面是最早進入內存的頁面。把調入內存的頁面根據調入的先後順序排成一個隊列,需要換出頁面時選擇隊頭頁面即可。隊列的最大長度取決於系統為進程分配了多少個內存塊。
只有FIFO演算法會產生Belady異常 [3] 。另外,FIFO演算法雖然實現簡單,但是該演算法與進程實際運行時的規律不適應,因為先進入的頁面也有可能最經常被訪問。因此,演算法性能差
最近最久未使用置換演算法(LRU,least recently used):每次淘汰的頁面是最近最久未使用的頁面。賦予每個頁面對應的頁表項中,用訪問欄位記錄該頁面自上次被訪問以來所經歷的時間t。當需要淘汰一個頁面時,選擇現有頁面中t值最大的,即最近最久未使用的頁面。
該演算法的實現需要專門的硬體支持,雖然演算法性能好,但是實現困難,開銷大
時鍾置換演算法是一種性能和開銷較均衡的演算法,又稱CLOCK演算法,或最近未用演算法(NRU,NotRecently Used)簡單的CLOCK演算法實現方法:為每個頁面設置一個訪問位,再將內存中的頁面都通過鏈接指針鏈接成一個循環隊列。當某頁被訪問時,其訪問位置為1。當需要淘汰一個頁面時,只需檢查頁的訪問位。如果是0,就選擇該頁換出;如果是1,則將它置為0,暫不換出,繼續檢查下一個頁面,若第一輪掃描中所有頁面都是1,則將這些頁面的訪問位依次置為0後,再進行第二輪掃描(第二輪掃描中一定會有訪問位為0的頁面,因此簡單的CLOCK演算法選擇一個淘汰頁面最多會經過兩輪掃描)
改進型的時鍾置換演算法:
簡單的時鍾置換演算法僅考慮到一個頁面最近是否被訪問過。事實上,如果被淘汰的頁面沒有被修改過,就不需要執行I/O操作寫回外存。只有被淘汰的頁面被修改過時,才需要寫回外存。因此,除了考慮一個頁面最近有沒有被訪問過之外,操作系統還應考慮頁面有沒有被修改過。在其他條件都相同時,應優先淘汰沒有修改過的頁面,避免I/O操作。這就是改進型的時鍾置換演算法的思想。修改位=0,表示頁面沒有被修改過;修改位=1,表示頁面被修改過。為方便討論,用(訪問位,修改位)的形式表示各頁面狀態。如(1,1)表示一個頁面近期被訪問過,且被修改過。
演算法規則:將所有可能被置換的頁面排成一個循環隊列
由於第二輪已將所有幀的訪問位設為0,因此經過第三輪、第四輪掃描一定會有一個幀被選中,因此改進型CLOCK置換演算法選擇一個淘汰頁面最多會進行四輪掃描
對於分頁式的虛擬內存,在進程准備執行時,不需要也不可能把-一個進程的所有頁都讀入主存。因此,操作系統必須決定讀取多少頁,即決定給特定的進程分配幾個頁框。
分配方式有
置換方式有
根據以上,現代操作系統通常採用三種策略:
預調頁策略:根據局部性原理,一次調入若干個相鄰的頁面可能比一次調入一個頁面更高效。但如果提前調入的頁面中大多數都沒被訪問過,則又是低效的。因此可以預測不久之後可能訪問到的頁面,將它們預先調入內存,但目前預測成功率只有50%左右。故這種策略 主要用於進程的首次調入 ,由程序員指出應該先調入哪些部分。
請求調頁策略:進程 在運行期間發現缺頁時才將所缺頁面調入內存 。由這種策略調入的頁面一定會被訪問到,但由於每次只能調入一頁,而每次調頁都要磁碟l/O操作,因此I/O開銷較大。
請求分頁系統中的外存分為兩部分:用於存放文件的文件區和用於存放對換頁面的對換區。對換區通常採用連續分配方式,而文件區採用離散分配方式,因此對換區的磁碟I/O速度比文件去的更快
剛剛換出的頁面馬上又要換入內存,剛剛換入的頁面馬上又要換出外存,這種頻繁的頁面調度行為稱為抖動,或顛簸。產生抖動的主要原因是進程頻繁訪問的頁面數目高於可用的物理塊數(分配給進程的物理塊不夠)
工作集:指在某段時間間隔里,進程實際訪問頁面的集合。
操作系統會根據「窗口尺寸」來算出工作集。
工作集大小可能小於窗口尺寸,實際應用中,操作系統可以統計進程的工作集大小,根據工作集大小給進程分配若干內存塊。 [4]
一般來說,駐留集大小不能小於工作集大小,否則進程運行過程中將頻繁缺頁。
Ⅲ 虛擬存儲器的管理方式有_____,_____,_____三種。
調度方式有分頁式、段式、段頁式3種。頁式調度是將邏輯和物理地址空間都分成固定大小的頁。主存按頁順序編號,而每個獨立編址的程序空間有自己的頁號順序,通過調度輔存中程序的各頁可以離散裝入主存中不同的頁面位置,並可據表一一對應檢索。頁式調度的優點是頁內零頭小,頁表對程序員來說是透明的,地址變換快,調入操作簡單;缺點是各頁不是程序的獨立模塊,不便於實現程序和數據的保護。段式調度是按程序的邏輯結構劃分地址空間,段的長度是隨意的,並且允許伸長,它的優點是消除了內存零頭,易於實現存儲保護,便於程序動態裝配;缺點是調入操作復雜。將這兩種方法結合起來便構成段頁式調度。在段頁式調度中把物理空間分成頁,程序按模塊分段,每個段再分成與物理空間頁同樣小的頁面。段頁式調度綜合了段式和頁式的優點。其缺點是增加了硬體成本,軟體也較復雜。大型通用計算機系統多數採用段頁式調度。