41.虚拟存储器以及相关算法
虛擬存儲(chǔ)器,又有人叫虛擬內(nèi)存。很容易大家就會(huì)把它當(dāng)做硬件看待。
所以我們先給虛擬存儲(chǔ)器定性。
虛擬存儲(chǔ)器是計(jì)算機(jī)系統(tǒng)內(nèi)存管理的一種技術(shù),它使得應(yīng)用程序認(rèn)為它擁有連續(xù)的可用的內(nèi)存(一個(gè)連續(xù)完整的地址空間),而實(shí)際上,它通常是被分隔成多個(gè)物理內(nèi)存碎片,還有部分暫時(shí)存儲(chǔ)在外部磁盤存儲(chǔ)器上,在需要時(shí)進(jìn)行數(shù)據(jù)交換。
虛擬存儲(chǔ)器并不是硬件,而是一種技術(shù)。
那么它的作用是什么呢?上面的話說(shuō)的很抽象。但是通俗講就是虛擬出一塊內(nèi)存,簡(jiǎn)直就是無(wú)中生有。我們知道主存的大小不大,而且比較貴。所以有的時(shí)候會(huì)出現(xiàn)內(nèi)存不夠用的情況,這個(gè)時(shí)候虛擬內(nèi)存就起作用了。它把硬盤上劃出了一塊地方,用障眼法告訴CPU,這是內(nèi)存,你拿去用吧。
那這個(gè)時(shí)候我們就很好奇障眼法是怎么實(shí)現(xiàn)的呢?它是怎么騙CPU的呢?
這個(gè)時(shí)候我們先講講內(nèi)存是怎么分配給程序的?
一般有兩種分配方式:
1.連續(xù)分配 2.非連續(xù)分配
1.連續(xù)分配管理(會(huì)出現(xiàn)碎片):
①.單一連續(xù)分配
劃分成系統(tǒng)區(qū)和用戶區(qū) 只能用于單用戶單任務(wù)。
②.固定分區(qū)分配
劃分多分固定分區(qū)。 單個(gè)作業(yè)進(jìn)入單個(gè)分區(qū),會(huì)出現(xiàn)內(nèi)部碎片。
③.動(dòng)態(tài)分區(qū)分配
作業(yè)進(jìn)入內(nèi)存時(shí)才劃分,大小剛好適應(yīng),會(huì)出現(xiàn)外部碎片
那問(wèn)題來(lái)了,我們第一輪可以直接就分,很簡(jiǎn)單,但是有作業(yè)完成時(shí)釋放內(nèi)存后,就不是規(guī)則了,該怎么分配呢?于是就有了一下幾種算法
a.首次適應(yīng)算法(從頭到尾找,有合適的就動(dòng)態(tài)劃分)
b.循環(huán)首次適應(yīng)算法(不是每次都從頭開(kāi)始,而是從上次分配結(jié)束的地方開(kāi)始)
c.最佳適應(yīng)算法(按從小到大順序,找到了就用)
d.最壞適應(yīng)算法(按從大到小順序,找到了就用)
④.動(dòng)態(tài)重定位分區(qū)分配
基本跟動(dòng)態(tài)分區(qū)一致,區(qū)別就是在動(dòng)態(tài)分區(qū)上加了一個(gè)緊湊的功能,在運(yùn)用程序找不到足夠大的內(nèi)存使用的時(shí)候,把內(nèi)存緊湊后給應(yīng)用使用。
2.非連續(xù)分配管理:
①基本分頁(yè)存儲(chǔ)管理方式
進(jìn)程:頁(yè);內(nèi)存:頁(yè)框(塊)。
邏輯地址:頁(yè)號(hào)+頁(yè)偏移量
物理地址:內(nèi)存上真正的地址
頁(yè)表:邏輯地址和物理地址的映射表
這個(gè)時(shí)候有一個(gè)問(wèn)題,程序員關(guān)注的都是邏輯地址,那么CPU訪問(wèn)一個(gè)邏輯地址需要訪問(wèn)多次內(nèi)存呢?
答案是兩次,第一次先訪問(wèn)內(nèi)存的頁(yè)表,找出對(duì)應(yīng)的物理地址,再次訪問(wèn)對(duì)應(yīng)的物理地址。我們也知道cpu速度比內(nèi)存速度快,所以訪問(wèn)內(nèi)存會(huì)降低cpu的利用率,那么怎么減少訪問(wèn)內(nèi)存的次數(shù)呢?
這個(gè)時(shí)候有一個(gè)概念:TLB 旁路翻譯緩存或者叫快表
作用是什么呢?TLB是在cpu上的緩存,只存放經(jīng)常用到的頁(yè)表。那么我們?cè)L問(wèn)的邏輯地址能夠在cpu的TLB上找到對(duì)應(yīng)的物理地址,那么我們只需要訪問(wèn)一次內(nèi)存就可以了 。那找不到怎么辦?
找不到這個(gè)時(shí)候就是另外的算法了。cpu會(huì)訪問(wèn)內(nèi)存,然后把這個(gè)頁(yè)表放到TLB里。這時(shí)候訪問(wèn)內(nèi)存的次數(shù)是2次。
頁(yè)的大小一般是固定的,是由系統(tǒng)決定的。一般是4K
②基本分段存儲(chǔ)管理方式
段:段內(nèi)是連續(xù)的,不同段間不要求連續(xù)。
邏輯地址:段號(hào)和段內(nèi)偏移量
跟頁(yè)不一樣的地方是:因?yàn)槎蔚拇笮〔灰粯?#xff0c;頁(yè)的大小是一樣的。
所以 分頁(yè)的地址空間就相當(dāng)于一個(gè)y=kx+b函數(shù),兩個(gè)值就會(huì)對(duì)應(yīng)一個(gè)物理地址。也就是說(shuō)是一維的(一條直線)。
但是段就沒(méi)有這么一個(gè)K(k不同),所以找一個(gè)地址空間,就相當(dāng)于在一個(gè)平面上找,所以就是二維的。
段表
段可以共享。
③段頁(yè)式管理方式
頁(yè)式存儲(chǔ)管理能有效地提高內(nèi)存利用率,而分段存儲(chǔ)管理能反映程序的邏輯結(jié)構(gòu)并有利于段的共享。
分頁(yè)管理方式是從計(jì)算機(jī)的角度考慮設(shè)計(jì)的,以提高內(nèi)存的利用率,提升計(jì)算機(jī)的性能, 且分頁(yè)通過(guò)硬件機(jī)制實(shí)現(xiàn),對(duì)用戶完全透明;而分段管理方式的提出則是考慮了用戶和程序員,以滿足方便編程、信息保護(hù)和共享、動(dòng)態(tài)增長(zhǎng)及動(dòng)態(tài)鏈接等多方面的需要。
段頁(yè)式:段里再分頁(yè)。
邏輯地址:段號(hào) 頁(yè)號(hào)和頁(yè)內(nèi)偏移量
講完這么多,我們回來(lái)講講障眼法把。
這里的障眼法就算配非連續(xù)分配管理方式。
CPU要用到某一個(gè)內(nèi)存空間時(shí),看是否是在內(nèi)存上,如果是在內(nèi)存里,那么直接用。如果不是,而是在硬盤上,那么這個(gè)時(shí)候就需要把內(nèi)存勻出一塊,然后把硬盤的數(shù)據(jù)放進(jìn)去。然后CPU即能用了。
也許有人會(huì)問(wèn)?那么要是一直都不在內(nèi)存,那豈不是累死了,一直換。但是我們考慮到局部性原理進(jìn)行交換,就能減少交換數(shù)量。
那把內(nèi)存的哪部分跟硬盤數(shù)據(jù)交換呢?這個(gè)時(shí)候就有相關(guān)算法
頁(yè)面置換算法:
1.FIFO 2.LRU 3.LFU 4.CLOCK置換 5.第二次置換
總結(jié)
以上是生活随笔為你收集整理的41.虚拟存储器以及相关算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 40.简述操作系统中调用过程?
- 下一篇: 42.存储器管理应具有的功能?