四、虛擬內(nèi)存
- 所討論的各種內(nèi)存管理策略都是為了同時(shí)將多個(gè)進(jìn)程保存在內(nèi)存中以便允許多道程序設(shè)計(jì)。具有的特性:
(1)一次性:作業(yè)必須一次性全部裝入內(nèi)存后,方能開始運(yùn)行。
(2)駐留性:作業(yè)被裝入內(nèi)存后,就一直駐留在內(nèi)存中,其任何部分都不會(huì)被換出,直至作業(yè)運(yùn)行結(jié)束。運(yùn)行中的進(jìn)程,會(huì)因等待I/O而被阻塞,可能處于長(zhǎng)期等待狀態(tài)。
- 存在問題:許多在程序運(yùn)行中不用或暫時(shí)不用的程序(數(shù)據(jù))占據(jù)了大量的內(nèi)存空間,而一些需要運(yùn)行的作業(yè)又無法裝入運(yùn)行,顯然浪費(fèi)了寶貴的內(nèi)存資源。
1、局部性原理
- 局局部性表現(xiàn):
時(shí)間局部性:如果程序中的某條指令一旦執(zhí)行,不久以后該指令可能再次執(zhí)行;如果某數(shù)據(jù)被訪問過,不久以后該數(shù)據(jù)可能再次被訪問。產(chǎn)生時(shí)間局部性的典型原因,是由于在程序中存在著大量的循環(huán)操作。
空間局部性:一旦程序訪問了某個(gè)存儲(chǔ)單元,在不久之后,其附近的存儲(chǔ)單元也將被訪問,即程序在一段時(shí)間內(nèi)所訪問的地址,可能集中在一定的范圍之內(nèi),這是因?yàn)橹噶钔ǔJ琼樞虼娣拧㈨樞驁?zhí)行的,數(shù)據(jù)也一般是以向量、數(shù)組、表等形式簇聚存儲(chǔ)的。
- 時(shí)間局部性是通過將近來使用的指令和數(shù)據(jù)保存到高速緩存存儲(chǔ)器中,并使用高速緩存的層次結(jié)構(gòu)實(shí)現(xiàn)??臻g局部性通常是使用較大的高速緩存,并將預(yù)取機(jī)制集成到高速緩存控制邏輯中實(shí)現(xiàn)。虛擬內(nèi)存技術(shù)實(shí)際上就是建立了 “內(nèi)存一外存”的兩級(jí)存儲(chǔ)器的結(jié)構(gòu),利用局部性原理實(shí)現(xiàn)髙速緩存。
2、虛擬存儲(chǔ)器
- 虛擬存儲(chǔ)器:基于局部性原理,在程序裝入時(shí),可以將程序的一部分裝入內(nèi)存,而將其余部分留在外存,就可以啟動(dòng)程序執(zhí)行。在程序執(zhí)行過程中,當(dāng)所訪問的信息不在內(nèi)存時(shí),由操作系統(tǒng)將所需要的部分調(diào)入內(nèi)存,然后繼續(xù)執(zhí)行程序。另一方面,操作系統(tǒng)將內(nèi)存中暫時(shí)不使用的內(nèi)容換出到外存上,從而騰出空間存放將要調(diào)入內(nèi)存的信息。這樣,系統(tǒng)好像為用戶提供了一個(gè)比實(shí)際內(nèi)存大得多的存儲(chǔ)器,稱為虛擬存儲(chǔ)器。
- 之所以將其稱為虛擬存儲(chǔ)器,是因?yàn)檫@種存儲(chǔ)器實(shí)際上并不存在,只是由于系統(tǒng)提供了部分裝入、請(qǐng)求調(diào)入和置換功能后(對(duì)用戶完全透明),給用戶的感覺是好像存在一個(gè)比實(shí)際物理內(nèi)存大得多的存儲(chǔ)器。虛擬存儲(chǔ)器的大小由計(jì)算機(jī)的地址結(jié)構(gòu)決定,并非是內(nèi)存和外存的簡(jiǎn)單相加。
多次性,是指無需在作業(yè)運(yùn)行時(shí)一次性地全部裝入內(nèi)存,而是允許被分成多次調(diào)入內(nèi)存運(yùn)行。
對(duì)換性,是指無需在作業(yè)運(yùn)行時(shí)一直常駐內(nèi)存,而是允許在作業(yè)的運(yùn)行過程中,進(jìn)行換進(jìn)和換出。
虛擬性,是指從邏輯上擴(kuò)充內(nèi)存的容量,使用戶所看到的內(nèi)存容量,遠(yuǎn)大于實(shí)際的內(nèi)存容量。
3、虛擬內(nèi)存技術(shù)的實(shí)現(xiàn)
- 虛擬內(nèi)存中,允許將一個(gè)作業(yè)分多次調(diào)入內(nèi)存。釆用連續(xù)分配方式時(shí),會(huì)使相當(dāng)一部分內(nèi)存空間都處于暫時(shí)或“永久”的空閑狀態(tài),造成內(nèi)存資源的嚴(yán)重浪費(fèi),而且也無法從邏輯上擴(kuò)大內(nèi)存容量。因此,虛擬內(nèi)存的實(shí)需要建立在離散分配的內(nèi)存管理方式的基礎(chǔ)上。虛擬內(nèi)存的實(shí)現(xiàn)有以下三種方式:請(qǐng)求分頁存儲(chǔ)管理、請(qǐng)求分段存儲(chǔ)管理、請(qǐng)求段頁式存儲(chǔ)管理.
- 不管哪種方式,都需要有一定的硬件支持。一般需要的支持有以下幾個(gè)方面:
(1)一定容量的內(nèi)存和外存。
(2)頁表機(jī)制(或段表機(jī)制),作為主要的數(shù)據(jù)結(jié)構(gòu)。
(3)中斷機(jī)構(gòu),當(dāng)用戶程序要訪問的部分尚未調(diào)入內(nèi)存,則產(chǎn)生中斷。
(4)地址變換機(jī)構(gòu),邏輯地址到物理地址的變換。
五、請(qǐng)求分頁管理方式實(shí)現(xiàn)虛擬內(nèi)存
- 請(qǐng)求分頁系統(tǒng)建立在基本分頁系統(tǒng)基礎(chǔ)之上,為了支持虛擬存儲(chǔ)器功能而增加了請(qǐng)求調(diào)頁功能和頁面置換功能。
- 在請(qǐng)求分頁系統(tǒng)中,只要求將當(dāng)前需要的一部分頁面裝入內(nèi)存,便可以啟動(dòng)作業(yè)運(yùn)行。在作業(yè)執(zhí)行過程中,當(dāng)所要訪問的頁面不在內(nèi)存時(shí),再通過調(diào)頁功能將其調(diào)入,同時(shí)還可以通過置換功能將暫時(shí)不用的頁面換出到外存上,以便騰出內(nèi)存空間。
1、頁表機(jī)制
-
請(qǐng)求分頁系統(tǒng)的頁表機(jī)制不同于基本分頁系統(tǒng),請(qǐng)求分頁系統(tǒng)在一個(gè)作業(yè)運(yùn)行之前不要求全部一次性調(diào)入內(nèi)存,因此在作業(yè)的運(yùn)行過程中,必然會(huì)出現(xiàn)要訪問的頁面不在內(nèi)存的情況,如何發(fā)現(xiàn)和處理這種情況是請(qǐng)求分頁系統(tǒng)必須解決的兩個(gè)基本問題。
請(qǐng)求分頁系統(tǒng)中的頁表項(xiàng)
2、缺頁中斷機(jī)構(gòu)
- 在請(qǐng)求分頁系統(tǒng)中,每當(dāng)所要訪問的頁面不在內(nèi)存時(shí),便產(chǎn)生一個(gè)缺頁中斷,請(qǐng)求操作系統(tǒng)將所缺的頁調(diào)入內(nèi)存。此時(shí)應(yīng)將缺頁的進(jìn)程阻塞(調(diào)頁完成喚醒),如果內(nèi)存中有空閑塊,則分配一個(gè)塊,將要調(diào)入的頁裝入該塊,并修改頁表中相應(yīng)頁表項(xiàng),若此時(shí)內(nèi)存中沒有空閑塊,則要淘汰某頁(若被淘汰頁在內(nèi)存期間被修改過,則要將其寫回外存)。
3、地址變換機(jī)構(gòu)
- 請(qǐng)求分頁系統(tǒng)中的地址變換機(jī)構(gòu),是在分頁系統(tǒng)地址變換機(jī)構(gòu)的基礎(chǔ)上,為實(shí)現(xiàn)虛擬內(nèi)存,又增加了某些功能而形成的。
六、頁面置換算法
- 進(jìn)程運(yùn)行時(shí),若其訪問的頁面不在內(nèi)存而需將其調(diào)入,但內(nèi)存已無空閑空間時(shí),就需要從內(nèi)存中調(diào)出一頁程序或數(shù)據(jù),送入磁盤的對(duì)換區(qū)。選擇調(diào)出頁面的算法就稱為頁面置換算法。好的頁面置換算法應(yīng)有較低的頁面更換頻率,也就是說,應(yīng)將以后不會(huì)再訪問或者以后較長(zhǎng)時(shí)間內(nèi)不會(huì)再訪問的頁面先調(diào)出。
- 常見頁面置換算法
- 最佳置換算法(OPT)
- 先進(jìn)先出(FIFO)頁面置換算法
- 最近最久未使用(LRU)置換算法
- 時(shí)鐘(CLOCK)置換算法
七、頁面分配策略
1、駐留集大小
- 對(duì)于分頁式的虛擬內(nèi)存,在準(zhǔn)備執(zhí)行時(shí),不需要也不可能把一個(gè)進(jìn)程的所有頁都讀取到主存,因此,操作系統(tǒng)必須決定讀取多少頁。也就是說,給特定的進(jìn)程分配多大的主存空間
2、調(diào)入頁面的時(shí)機(jī)
- 為確定系統(tǒng)將進(jìn)程運(yùn)行時(shí)所缺的頁面調(diào)入內(nèi)存的時(shí)機(jī),可釆取以下兩種調(diào)頁策略:預(yù)調(diào)頁策略、請(qǐng)求調(diào)頁策略
3、從何處調(diào)入頁面
- 請(qǐng)求分頁系統(tǒng)中的外存分為兩部分:用于存放文件的文件區(qū)和用于存放對(duì)換頁面的對(duì)換區(qū)。對(duì)換區(qū)通常是釆用連續(xù)分配方式,而文件區(qū)釆用離散分配方式,故對(duì)換區(qū)的磁盤I/O速度比文件區(qū)的更快。
