版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、虛擬機(jī)內(nèi)存工作原理Windows環(huán)境內(nèi)存名詞釋義Windows內(nèi)存管理概述 在現(xiàn)代計(jì)算機(jī)系統(tǒng)中,內(nèi)存是指CPU可以直接訪問(wèn)的隨機(jī)存儲(chǔ)器。在硬件上,CPU通過(guò)一組地址線連接到內(nèi)存上,這組地址線稱(chēng)為內(nèi)存總線。而在軟件上,CPU的許多指令允許用內(nèi)存單元地址作為指令的操作數(shù),實(shí)現(xiàn)直接操縱這些內(nèi)存單元。內(nèi)存地址,在Intel x86體系結(jié)構(gòu)中,內(nèi)存地址有三種類(lèi)型: 物理地址即內(nèi)存存儲(chǔ)器的索引,CPU操縱內(nèi)存芯片時(shí),通過(guò)地址線管腳加上電信號(hào)來(lái)讀或?qū)懴鄳?yīng)的內(nèi)存單元。在Intel x86體系結(jié)構(gòu)上,物理地址是一個(gè)32位或36位的無(wú)符號(hào)整數(shù)。虛擬地址:在32位系統(tǒng)上,虛擬地址空間可以達(dá)到4G
2、B大小,也就是說(shuō),整個(gè)空間可以有232=4294967296個(gè)字節(jié)單元。Intel x86芯片內(nèi)有專(zhuān)門(mén)的電路負(fù)責(zé)把一個(gè)虛擬地址轉(zhuǎn)譯成物理地址。邏輯地址。邏輯地址包含兩部分:段和偏移。段指定了在整個(gè)地址空間中的一個(gè)基地址、段空間的大小、屬性。與尋址相關(guān)的是段的基址和大小。偏移部分指定了一個(gè)邏輯地址相對(duì)于段基址的偏移量。此偏移量不能超過(guò)段的邊界。因此,邏輯地址的實(shí)際地址是段基址加上偏移量。Intel x86芯片也有專(zhuān)門(mén)的電路把邏輯地址轉(zhuǎn)譯成一個(gè)虛擬地址或物理地址。 把一個(gè)地址告訴CPU,讓它訪問(wèn)相對(duì)應(yīng)的物理內(nèi)存單元,這一過(guò)程是操作系統(tǒng)和CPU相互協(xié)作來(lái)完成的。CPU最終需要的是一個(gè)物理地
3、址,它必須把軟件指令中的地址轉(zhuǎn)譯成物理地址,在轉(zhuǎn)譯過(guò)程中可能會(huì)涉及一些數(shù)據(jù)結(jié)構(gòu),甚至涉及I/O操作。 從操作系統(tǒng)的角度來(lái)看,一方面,它需要有效地管理所有的物理內(nèi)存,使得當(dāng)一個(gè)進(jìn)程需要內(nèi)存時(shí),能夠分配足夠的內(nèi)存單元給這一進(jìn)程;另一方面,正如上一章所講,進(jìn)程代表一個(gè)相對(duì)獨(dú)立的任務(wù),它有一個(gè)邏輯上獨(dú)立的地址空間。不同進(jìn)程的地址空間應(yīng)該是相互隔離的。實(shí)現(xiàn)每個(gè)進(jìn)程都有自己的私有地址空間。當(dāng)系統(tǒng)中進(jìn)程數(shù)量增加以后,所需內(nèi)存數(shù)量往往超過(guò)了總的物理內(nèi)存,在這種情況下,操作系統(tǒng)須合理地安排內(nèi)存的使用,使得內(nèi)存緊缺時(shí),既不會(huì)波及系統(tǒng)本身的穩(wěn)定性,同時(shí)也不會(huì)嚴(yán)重影響系統(tǒng)的性能。當(dāng)發(fā)生這種情況時(shí),一般的做法
4、是把不緊急的進(jìn)程中的數(shù)據(jù)或代碼先存放到硬盤(pán)(pagefile)中,從而把它們占用的物理內(nèi)存騰出來(lái)給緊急的進(jìn)程使用,或者交給系統(tǒng)使用。當(dāng)內(nèi)存緊缺的狀況緩解時(shí),系統(tǒng)再把硬盤(pán)(pagefile)中的進(jìn)程數(shù)據(jù)或代碼裝回到已經(jīng)空閑下來(lái)的內(nèi)存單元中,從而使這些進(jìn)程有機(jī)會(huì)繼續(xù)運(yùn)行。這兩個(gè)過(guò)程稱(chēng)為內(nèi)存換出和換入。幾乎所有的多進(jìn)程操作系統(tǒng)都支持這種內(nèi)存管理。內(nèi)存基本單元總是字節(jié)Bytes。每個(gè)內(nèi)存地址指向一個(gè)字節(jié),地址值加1以后指向下一個(gè)字節(jié)。物理內(nèi)存的地址是固定的,故讓進(jìn)程使用物理地址來(lái)訪問(wèn)內(nèi)存將使得進(jìn)程的動(dòng)態(tài)分配難以有效實(shí)施,因?yàn)閮?nèi)存單元與進(jìn)程將通過(guò)物理地址緊密地聯(lián)系在一起了,從而內(nèi)存的回收和再分配將受限于
5、特定的進(jìn)程和物理地址。為打破這種關(guān)聯(lián)關(guān)系,思路是讓進(jìn)程使用虛擬地址,而虛擬地址和物理地址之間通過(guò)一個(gè)映射表來(lái)完成轉(zhuǎn)譯。1.1 pagefile:即windows安裝過(guò)程中創(chuàng)建的分頁(yè)文件,見(jiàn)下圖。注:Linux中Swap(交換分區(qū)),類(lèi)似Windows的pagefile,當(dāng)物理內(nèi)存不足時(shí),把一部分硬盤(pán)空間虛擬成內(nèi)存使用,解決物理內(nèi)存容量不足的情況。Android是基于Linux的操作系統(tǒng),故也可使用Swap分區(qū)來(lái)提升系統(tǒng)運(yùn)行效率。VMware ESXi上創(chuàng)建的虛擬機(jī)會(huì)自動(dòng)根據(jù)虛擬機(jī)的內(nèi)存大小創(chuàng)建一個(gè)同等大小的swap 文件,這個(gè)文件通常和虛擬機(jī)鏡像文件在同一個(gè)目錄,文件名:*.vswp。比如創(chuàng)建
6、一個(gè)內(nèi)存為8GB的VM,*.vswap會(huì)自動(dòng)創(chuàng)建,且大小為8GB,保存在同1個(gè) datastore中。1.2虛擬內(nèi)存:Windows可使用的內(nèi)存總稱(chēng),包括物理內(nèi)存和分頁(yè)文件。從win NT開(kāi)始,普通的應(yīng)用程序已無(wú)法直接訪問(wèn)物理內(nèi)存,只能訪問(wèn)虛擬內(nèi)存,再由CPU將虛擬內(nèi)存地址轉(zhuǎn)換為物理內(nèi)存地址。所以運(yùn)行軟件和游戲,訪問(wèn)的都是虛擬內(nèi)存。(驅(qū)動(dòng)程序應(yīng)能直接訪問(wèn)物理內(nèi)存)應(yīng)用程序能使用一系列虛擬地址來(lái)訪問(wèn)大于可用物理內(nèi)存的內(nèi)存緩沖區(qū)。當(dāng)物理內(nèi)存的供應(yīng)量變小時(shí),內(nèi)存管理器會(huì)將物理內(nèi)存頁(yè)(通常4KB)保存到磁盤(pán)文件。數(shù)據(jù)或代碼頁(yè)會(huì)根據(jù)需要在物理內(nèi)存與磁盤(pán)之間移動(dòng)。案例:pagefile的應(yīng)用(物理內(nèi)存16
7、G,pagefile 16G)應(yīng)用程序內(nèi)存掃描啟動(dòng)物理內(nèi)存剩余量活躍/閑置PagefileA20GNOB8GYES8G7G/1G1GC6GYES2G5G/1G1GD4GYES2G+OS回收2GTotal應(yīng)用占用了32G,應(yīng)用程序X無(wú)法啟動(dòng)。極限之后會(huì)出現(xiàn):藍(lán)屏或重啟。VMware虛擬機(jī)環(huán)境內(nèi)存利用技術(shù)1、透明頁(yè)共享TPS透明頁(yè)共享是虛擬化中的內(nèi)存管理技術(shù)之一,是指將1臺(tái)主機(jī)上的冗余內(nèi)存頁(yè)精簡(jiǎn)為1個(gè)頁(yè)面,而其它頁(yè)面用指針代替,從而達(dá)到釋放內(nèi)存空間的目的。該技術(shù)的核心要點(diǎn):相同類(lèi)型操作系統(tǒng)中,相同服務(wù)或是進(jìn)程所消耗的內(nèi)存,只保留1份。TPS不能用于內(nèi)存很大的頁(yè)面,因?yàn)橥ǔG闆r下,只有小內(nèi)存頁(yè)才能完
8、全相同。VMware的ESXi是按照4KB為單位進(jìn)行內(nèi)存切片的。內(nèi)存回收的速度取決于掃描的速度,在ESXi的高級(jí)設(shè)置中可以設(shè)置TPS掃描的速度和時(shí)間間隔。故最好將相同OS的VM配置在1臺(tái)ESXi主機(jī)上,以便更好的使用TPS節(jié)省內(nèi)存。案例:當(dāng)多個(gè)VM運(yùn)行相同的Windows server 2008R2在同一個(gè)ESXi主機(jī)上時(shí),就會(huì)有存儲(chǔ)完全相同的進(jìn)程或服務(wù)的內(nèi)存頁(yè)面。虛擬機(jī)管理程序會(huì)在每個(gè)內(nèi)存頁(yè)面上分配哈希值,并一位一位的進(jìn)行比較,一旦不同頁(yè)面的哈希值相匹配,就說(shuō)明存在相同的內(nèi)存頁(yè)面。如果虛擬機(jī)管理程序確認(rèn)了同一主機(jī)上的多個(gè)虛擬機(jī)有完全相同的內(nèi)存頁(yè)面,它會(huì)保留其中一份,而其它頁(yè)面用指針代替。這樣
9、就釋放了很多內(nèi)存空間。另外,如果虛擬機(jī)上指針?biāo)淼男畔l(fā)生變化,虛擬機(jī)管理程序就會(huì)向內(nèi)存信息寫(xiě)入一個(gè)新的頁(yè)面,同時(shí)改變指針信息。2、氣球膨脹(Ballooning)依據(jù)VMware Tools在Guest OS中的氣球驅(qū)動(dòng)(balloon driver)來(lái)回收內(nèi)存。當(dāng)需要從該虛擬機(jī)回收內(nèi)存時(shí),氣球膨脹從Guest OS中請(qǐng)求內(nèi)存,分配給氣球驅(qū)動(dòng)的內(nèi)存可被hypervisor安全的回收,Guest OS自行決定將哪些內(nèi)存swapping交換到硬盤(pán)上以保證分配給氣球驅(qū)動(dòng)內(nèi)存。顯然需要安裝VMware Tools才能實(shí)現(xiàn)氣球回收內(nèi)存,通過(guò)這種方式回收內(nèi)存較慢,依賴(lài)于Guest OS內(nèi)存分配的速度。
10、附件1: VM內(nèi)存調(diào)度機(jī)制-balloonVM內(nèi)存調(diào)度機(jī)制-balloon在內(nèi)存沒(méi)有過(guò)量配置的情況下,內(nèi)存的調(diào)度機(jī)制完全不會(huì)啟動(dòng),就沒(méi)有內(nèi)存回收措施。因?yàn)橹鳈C(jī)總的物理內(nèi)存大于所有VM配置內(nèi)存的總額的情況下,每臺(tái)虛機(jī)想要多少內(nèi)存,都能得到滿(mǎn)足,所以不需要調(diào)度機(jī)制。以下研究的VMware的內(nèi)存調(diào)度機(jī)制,都是在內(nèi)存過(guò)量配置的情況下發(fā)生的。案例:發(fā)生在一個(gè)有智慧的水池(Host)中,水池有不少水(4GB物理內(nèi)存),里面還有2個(gè)水箱(配置了2臺(tái)VM),水箱有一定的容量(配置內(nèi)存是4GB),原本是空的(沒(méi)有開(kāi)機(jī))。1、充裕HOST memory保障VM memory使用的情況現(xiàn)在水箱1里面要養(yǎng)魚(yú)了,必須放
11、點(diǎn)水進(jìn)去以便魚(yú)可以存活(開(kāi)機(jī)了)。最少需要1GB內(nèi)存。于是水箱1(VM1)就向水池(Host)要水(物理內(nèi)存),水池里面有足夠的水,就滿(mǎn)足了水箱1的要求。現(xiàn)在水箱1有1GB的活水,而水池里面只剩下3GB的水了。水箱1里面多丟了些魚(yú)(啟動(dòng)新的應(yīng)用),原來(lái)1GB的水不夠用了,于是水箱1就繼續(xù)向水池要水,水池HOST里面還有足夠的水,就又滿(mǎn)足了水箱1的要求?,F(xiàn)在水箱1里面有3GB的水,而水池里面只剩下1GB的水了。解釋?zhuān)阂⒁獾氖牵藭r(shí)VM1里面的應(yīng)用程序都是活動(dòng)的(active),所以這些內(nèi)存都屬于活躍狀態(tài),叫做活動(dòng)內(nèi)存(Active Memory)。2、VM閑置的memory不會(huì)主動(dòng)歸還HOST
12、經(jīng)過(guò)了一段時(shí)間以后,水箱1里面的魚(yú)被捕走了,現(xiàn)在水箱1不需要那么多水也足夠養(yǎng)活剩下的魚(yú)了。但是水池并不知道水箱1的狀況。于是水箱1還是有那么多水。解釋?zhuān)篤M1的某些應(yīng)用結(jié)束后,釋放了部分內(nèi)存,但是這些內(nèi)存釋放動(dòng)作是在VM的Guest OS層面釋放的,故Host并不知道有內(nèi)存被釋放了,這些內(nèi)存沒(méi)有歸還Host,仍然由VM1占有。VM1中就有一部分內(nèi)存屬于idle(空閑的)memory,另外一些正在使用的內(nèi)存就是active memory。當(dāng)然,就VM1自己的Guest OS看起來(lái),有3GB空閑內(nèi)存(idle memory),1GB的活動(dòng)內(nèi)存;而此時(shí)就Host看來(lái),只看見(jiàn)有3GB內(nèi)存是分配給了VM
13、1的。Host通過(guò)VMware Tools中的驅(qū)動(dòng),每隔一定的時(shí)間(ESX4中默認(rèn)是60秒)去掃描一下VM1的內(nèi)存使用狀態(tài),以了解活動(dòng)內(nèi)存(active memory)的情況。 3、Balloon或Swap內(nèi)存調(diào)度機(jī)制水箱2中養(yǎng)魚(yú)了(VM2開(kāi)機(jī)),水箱2也開(kāi)始從水池中抽水。但是水池HOST里面的水不能枯竭,因此水池有警戒水位,第一條警戒水位是6%,當(dāng)下降到第一警戒水位以下并仍然在不停下降時(shí),就要開(kāi)動(dòng)調(diào)水機(jī)制從其他水箱反抽水。解釋?zhuān)篤M2開(kāi)機(jī)時(shí)也需要1GB內(nèi)存,在啟動(dòng)時(shí),它也不斷向Host請(qǐng)求內(nèi)存。Host則將自己的內(nèi)存源源不斷地分配給VM2,直到下降到第一條警戒位6%。Host內(nèi)存有
14、4種狀態(tài),分別是High, Soft, Hard和Low,它們間的分界線分別是6%, 4%, 2%和1%??捎脙?nèi)存高于6%時(shí),不會(huì)啟動(dòng)Balloon或Swap機(jī)制。當(dāng)?shù)陀?%向4%逼近時(shí),Balloon機(jī)制就啟動(dòng)了。向哪個(gè)水箱抽水呢?誰(shuí)的水最富裕就向誰(shuí)抽。解釋?zhuān)喝绾闻袛嗄兀縿偛盼覀冋f(shuō)過(guò),Host每隔一定時(shí)間就會(huì)掃描Guest OS的內(nèi)存使用狀況,此時(shí),Host會(huì)計(jì)算(VM tools)每個(gè)VM的份額內(nèi)存比,對(duì)最小的那臺(tái)虛機(jī)啟動(dòng)氣球驅(qū)動(dòng),氣球開(kāi)始膨脹。于是,氣球開(kāi)始膨脹,并將多余的水?dāng)D出水箱。解釋?zhuān)築alloon驅(qū)動(dòng)如同普通驅(qū)動(dòng)那樣,不斷向Guest OS索取內(nèi)存,Guest OS盡自己可能滿(mǎn)足
15、氣球驅(qū)動(dòng),并優(yōu)先將空閑部分的內(nèi)存分配給它,注意,此時(shí)可能出現(xiàn)Guest OS自己的物理內(nèi)存不足,并引起Guest OS的paging(內(nèi)存分頁(yè))機(jī)制,將一部分內(nèi)存page out(頁(yè)出)到自己的swap中。這個(gè)例子中,VM1還有很多空閑內(nèi)存,因此足夠讓主機(jī)回收并滿(mǎn)足VM2的需求。主機(jī)將比較氣球膨脹獲得的這部分內(nèi)存的地址,如果原先是分配給VM1獨(dú)享的,(也就是沒(méi)有TPS共享),那么就可以收回。主機(jī)將不停的通過(guò)氣球驅(qū)動(dòng)收回內(nèi)存,收回的目標(biāo)是保持至少6%的內(nèi)存。注意:此時(shí)內(nèi)存沒(méi)有出現(xiàn)爭(zhēng)用情況,因此shares仍然沒(méi)有起作用,但是Overcommitment是存在的,所以會(huì)有reclaim,會(huì)有bal
16、looning。Ballooning回收內(nèi)存是比較慢的,通常需要幾分鐘。如果主機(jī)可用內(nèi)存池的內(nèi)存減少速度大于氣球驅(qū)動(dòng)返還主機(jī)的內(nèi)存,那么可用內(nèi)存會(huì)進(jìn)一步下降,當(dāng)突破4%的第2警戒線時(shí),進(jìn)入到hard狀態(tài),主機(jī)就會(huì)啟用第2種回收機(jī)制swapping(交換),將VM1的一部分物理內(nèi)存交換到swap文件中,以加快回收內(nèi)存的速度。目的是將可用內(nèi)存保持在4%的警戒線以上。如果可用內(nèi)存繼續(xù)下降到2%以下,進(jìn)入到low狀態(tài)的時(shí)候,ESX不僅會(huì)繼續(xù)加速Swapping,還會(huì)阻止其上所有VM的內(nèi)存請(qǐng)求?,F(xiàn)在,情況又發(fā)生了變化,水箱2中的魚(yú)越來(lái)越多了,它不停地向水池要水,而水池也通過(guò)氣球驅(qū)動(dòng),不停地將水箱1中的空閑內(nèi)存擠出來(lái),直到水箱1和2的總需求量大于了水池能供給的水量。水池再也不能提供更多的水了,只能部分滿(mǎn)足2個(gè)水箱的要求了。不夠的部分怎么辦?用一些臟水(swap)來(lái)滿(mǎn)足。臟水雖然臟(swap內(nèi)存速度很慢,注意:硬盤(pán)訪問(wèn)時(shí)間是以毫秒(ms,千分之一秒)計(jì)算,而內(nèi)存訪問(wèn)時(shí)間以納秒(ns,十億分之一)計(jì)算,兩者相差100萬(wàn)倍。),魚(yú)在臟水里面生存的很困難,但畢竟還是有水的,不至于因?yàn)闆](méi)有足夠
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 四川電影電視學(xué)院《表演基礎(chǔ)訓(xùn)練》2021-2022學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《園林樹(shù)木學(xué)》2022-2023學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《水利工程施工與組織》2022-2023學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《臨床藥物動(dòng)力學(xué)》2022-2023學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《管理文秘》2023-2024學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《教學(xué)簡(jiǎn)筆畫(huà)》2022-2023學(xué)年第一學(xué)期期末試卷
- 沈陽(yáng)理工大學(xué)《伺服電機(jī)及控制》2022-2023學(xué)年期末試卷
- 沈陽(yáng)理工大學(xué)《面向?qū)ο蟪绦蛟O(shè)計(jì)(Java)》2021-2022學(xué)年期末試卷
- 沈陽(yáng)理工大學(xué)《機(jī)械工程材料及其加工工藝》2021-2022學(xué)年第一學(xué)期期末試卷
- 沈陽(yáng)理工大學(xué)《翻譯批評(píng)與賞析》2022-2023學(xué)年第一學(xué)期期末試卷
- 抗高血壓藥物基因檢測(cè)課件
- 醫(yī)院管理醫(yī)院應(yīng)急調(diào)配機(jī)制
- (公開(kāi)課)文言文斷句-完整版課件
- 小學(xué)生性教育調(diào)查問(wèn)卷
- 醫(yī)院感染管理質(zhì)量持續(xù)改進(jìn)反饋表
- 臺(tái)背填土現(xiàn)場(chǎng)質(zhì)量檢驗(yàn)報(bào)告單
- 旅游行政管理第二章旅游行政管理體制課件
- 學(xué)生崗位實(shí)習(xí)家長(zhǎng)(或法定監(jiān)護(hù)人)知情同意書(shū)
- 衛(wèi)生院關(guān)于召開(kāi)基本公共衛(wèi)生服務(wù)項(xiàng)目培訓(xùn)會(huì)的通知
- JJF(電子)0036-2019 示波器電流探頭校準(zhǔn)規(guī)范-(高清現(xiàn)行)
- 飛機(jī)試飛運(yùn)行管理+調(diào)機(jī)飛行運(yùn)行管理規(guī)定
評(píng)論
0/150
提交評(píng)論