1.如果把二進(jìn)制程序全部加載到內(nèi)存中寂纪,會出現(xiàn)一種情況就是明明內(nèi)存還有空間,但是不夠二進(jìn)制程序的大小街州,所以也加載不了刑顺,這樣很浪費(fèi)內(nèi)存,而且會產(chǎn)生外部碎片缔杉,所以就改良成2中描述的方案。
2.采用頁表的方式對內(nèi)存進(jìn)行管理搁料。分頁將物理內(nèi)存和可執(zhí)行程序劃分成很小的區(qū)塊或详,這個(gè)區(qū)塊定義為頁,每個(gè)頁的大小為4k,二進(jìn)制程序中不足4k的頁默認(rèn)為4k郭计。操作系統(tǒng)會為每個(gè)進(jìn)程維護(hù)一個(gè)頁表霸琴。頁表主要記錄進(jìn)程的頁號與內(nèi)存中的頁號的對應(yīng)關(guān)系。這樣的話就沒有要求二進(jìn)制程序加載到物理內(nèi)存中必須是連續(xù)的昭伸,不會產(chǎn)生外部碎片梧乘,但是因?yàn)槎M(jìn)制程序中不足4k的頁默認(rèn)為4k,會浪費(fèi)一點(diǎn)點(diǎn)內(nèi)存庐杨,稱為內(nèi)部碎片选调。但是因?yàn)閮?nèi)存有限,所以加載的二進(jìn)制程序有限灵份,所以可以有了3中的方案解決內(nèi)存有限的問題仁堪。
3.虛擬內(nèi)存:
概念:磁盤空間開辟空間作為內(nèi)存的補(bǔ)充。
有效位:0存儲在磁盤上,1已經(jīng)存儲在物理內(nèi)存上
虛擬地址空間(虛擬內(nèi)存)被分成了固定大小的頁填渠,每一頁或者沒有映射任何東西弦聂,或者被映射到硬盤上的交換文件中,或者映射到物理內(nèi)存氛什。即未分配莺葫、未緩存、已緩存枪眉。
程序加載的時(shí)候要執(zhí)行虛擬內(nèi)存到磁盤空間的映射捺檬。
進(jìn)程可以一部分駐留在內(nèi)存上,而其他部分存儲在虛擬內(nèi)存上瑰谜。cpu要執(zhí)行的虛擬地址從頁表中找不到對應(yīng)的物理頁地址時(shí)欺冀,就會發(fā)生頁中斷(頁錯(cuò)誤)树绩。此時(shí)CPU無法執(zhí)行,中斷處理程序會將虛擬地址所在的虛擬內(nèi)存的空間隐轩,將其加載到內(nèi)存饺饭。CPU再次掃描,程序正常執(zhí)行职车。這里會涉及到頁面的換入換出瘫俊,所以講一下系統(tǒng)抖動(dòng)。
系統(tǒng)抖動(dòng)概念:在請求分頁存儲管理中悴灵,從內(nèi)存剛剛換出某一頁面后扛芽,根據(jù)請求又馬上換入該頁,這種反復(fù)換入換出的現(xiàn)象积瞒,叫系統(tǒng)抖動(dòng)川尖,或系統(tǒng)顛簸。系統(tǒng)抖動(dòng)是因?yàn)轫撳e(cuò)誤太多茫孔,頻繁出現(xiàn)頁中斷叮喳,浪費(fèi)CPU大部分時(shí)間。為了降低系統(tǒng)抖動(dòng)缰贝,降低頁錯(cuò)誤次數(shù)馍悟,就要使用頁面置換算法(FIFO),原則是先進(jìn)先出剩晴,但這種算法只是在按順序訪問地址空間時(shí)是理想的锣咒。因此我們可以使用另一種算法,即最近最久未使用算法(LRU)赞弥,它是置換最近過去一段時(shí)間最久未使用的頁面毅整。
虛擬內(nèi)存的優(yōu)點(diǎn):?
a.操作系統(tǒng)同時(shí)執(zhí)行的進(jìn)程數(shù)量會大幅提升。?
b.操作系統(tǒng)可以執(zhí)行比內(nèi)存空間大的多的進(jìn)程嗤攻。
虛擬內(nèi)存的缺點(diǎn):?
a.頁中斷處理程序執(zhí)行時(shí)毛嫉,CPU需要等待,會浪費(fèi)時(shí)間妇菱。
參考:
http://www.reibang.com/p/6bcf1f07cb58
https://www.bilibili.com/read/cv14307807