欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Linux的虛擬內(nèi)存怎么理解

這篇文章主要介紹了Linux的虛擬內(nèi)存怎么理解的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Linux的虛擬內(nèi)存怎么理解文章都會有所收獲,下面我們一起來看看吧。

創(chuàng)新互聯(lián)建站專注于桂林企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),成都做商城網(wǎng)站。桂林網(wǎng)站建設(shè)公司,為桂林等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站開發(fā),專業(yè)設(shè)計,全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)

定義

        為了正確的理解虛擬內(nèi)存管理器的工作原理,磨刀不誤砍柴工,我們先來了解一下虛擬內(nèi)存的組成。雖然對于虛擬內(nèi)存低層級組成概念很有益處,但是有必要更深入地了解虛擬內(nèi)存如何工作以及怎樣才能優(yōu)化其性能。

虛擬內(nèi)存是由什么構(gòu)成?

Linux的虛擬內(nèi)存怎么理解

圖表1. 高級虛擬內(nèi)存子系統(tǒng)組成圖

        Linux系統(tǒng)中的虛擬內(nèi)存子系統(tǒng)復(fù)雜極其復(fù)雜,但是我們可以通過下面的組件更深入地了解虛擬內(nèi)存:

MMU

        內(nèi)存管理單元(MMU, Memory Management Unit,下面簡稱MMU)是作為實(shí)現(xiàn)虛擬內(nèi)存系統(tǒng)的物理硬件基礎(chǔ),MMU可以允許軟件通過一個別名的地址跟物理地址建立映射,通常是多于一個。這是通過使用分頁(pages)和分頁表(分頁表:分頁表是一種數(shù)據(jù)結(jié)構(gòu),為使用電腦操作系統(tǒng)之虛擬內(nèi)存技術(shù),將內(nèi)存空間切割成分頁的形式,用于儲存虛擬內(nèi)存及實(shí)體內(nèi)存間的對應(yīng)). MMU再使用一部分內(nèi)存,通過一系列的查找表(Table lookups)來翻譯虛擬地址到物理地址的映射。

Zoned Buddy Allocator (暫譯為:區(qū)域內(nèi)存分配器 沒有找到中文標(biāo)準(zhǔn)的翻譯, Buddy Allocator暫譯為友內(nèi)存分配器)

       區(qū)域內(nèi)存分配器負(fù)責(zé)整個虛擬內(nèi)存系統(tǒng)分頁存儲管理。 這部分代碼管理連續(xù)物理內(nèi)存分頁的鏈表并且讓他們映射到MMU的分頁表(page tables),當(dāng)其他系統(tǒng)和核心子系統(tǒng)請求分配物理地址的時候,由其提供有效的物理地址(物理地址到虛擬內(nèi)存地址的映射是被虛擬內(nèi)存系統(tǒng)較高層處理的)。通過友內(nèi)存分配器的名字我們就可以推斷出子系統(tǒng)用來維護(hù)空閑列表的算法。所有在內(nèi)存中的物理分頁是被友內(nèi)存分配器分類和分組進(jìn)入列表的。每一個列表代表了2n分頁個的簇,這里的n會隨著每個逐步自增。如果在請求列表中沒有任何請求,下一個里誒包的請求將會被分在兩個隔離的簇中并且在下一個請求到達(dá)的時候返回給請求者。當(dāng)分配返回請求給到好友分配器友內(nèi)存分配器的時候,反轉(zhuǎn)處理便開始了;注意到友內(nèi)存分配器也管理著定義不同用途的內(nèi)存池的內(nèi)存區(qū)域。目前友內(nèi)存分配器能夠管理進(jìn)入一下三種內(nèi)存池:

  • DMA-這個區(qū)域包含內(nèi)存最開始的16MB空間,這部分是作為遺留設(shè)備(legacy devices)用作直接對內(nèi)存進(jìn)行操作的空間的。

  • NORMAL-這部分區(qū)域包括接下來的16MB到1GB的內(nèi)存地址,被用作內(nèi)核的內(nèi)部數(shù)據(jù)結(jié)構(gòu)以及系統(tǒng)和用戶的空間來分配使用。

  • HIGHMEM-這部分區(qū)域包含1GB以上的地址,被專門留給操作系統(tǒng)分配使用(如文件系統(tǒng)緩沖,用戶空間分配,等等)。

Slab 分配器

       Slab分配器提供了一種可用性更高的前端實(shí)現(xiàn)來配合Buddy(伙伴算法)分配器,它主要用來應(yīng)對內(nèi)核中某些部分需求大小更加靈活內(nèi)存(并非常用的4KB)的請求。Slab分配器允許內(nèi)核組件創(chuàng)建給定大小的內(nèi)存對象緩存。Slab分配器負(fù)責(zé)將盡可能多的緩存對象放在一頁并且監(jiān)控哪些對象已經(jīng)釋放,哪些內(nèi)存已經(jīng)被分配。當(dāng)有內(nèi)存分配請求但是頁面中沒有內(nèi)存可用時,Slab分配器會向Buddy分配器請求更多的頁來滿足分配請求。這就使得內(nèi)核組件用一種更簡單的方法來使用內(nèi)存。使用這種方法,很多只利用一小部分內(nèi)存的組件就不需要各自獨(dú)立實(shí)現(xiàn)內(nèi)存管理的代碼,從而不需要浪費(fèi)很多的頁。Slab分配器只可能從DMA和NORMAL區(qū)域分配內(nèi)存。

內(nèi)核線程

        最后一個虛擬內(nèi)存子系統(tǒng)的組件是內(nèi)核線程,包括:kscand, kswapd, kupdated, 和bdflush。這些線程負(fù)責(zé)正在使用的內(nèi)存的恢復(fù)和管理。虛擬內(nèi)存中的所有頁面都有一個關(guān)聯(lián)的狀態(tài)(更多關(guān)于內(nèi)存狀態(tài)機(jī)的信息請參考"頁面的生命周期"章節(jié))一般來說,內(nèi)核中虛擬內(nèi)存相關(guān)的活躍線程負(fù)責(zé)嘗試將頁面移出RAM的操作。它們定期的檢查RAM,嘗試識別和釋放非活躍的內(nèi)存,從而使得這一部分內(nèi)存可以在系統(tǒng)中另作他用。

頁面的生命周期

        所有由虛擬內(nèi)存管理的內(nèi)存都會被一個狀態(tài)標(biāo)記。這些狀態(tài)幫助虛擬內(nèi)存知道在各種各樣的情形下對給定的頁面該做些什么。依賴于當(dāng)前系統(tǒng)的需要,虛擬內(nèi)存可能依據(jù)狀態(tài)機(jī)(圖示2. "虛擬內(nèi)存頁面狀態(tài)機(jī)")將頁面從一種狀態(tài)轉(zhuǎn)移到下一個狀態(tài)。利用這些狀態(tài), 虛擬內(nèi)存可以決定操作系統(tǒng)在某個時間對某個頁面做了什么,并且它還可以決定對這個頁面做什么操作。這些有特殊意義的狀態(tài)如下所示

        1.FREE —— 所有可被分配的頁面從這個狀態(tài)開始。這個狀態(tài)告訴虛擬內(nèi)存本頁面沒有被用于任何目的,并且可分配。

        2.ACTIVE —— 頁面已經(jīng)被Buddy分配器分配了之后進(jìn)入ACTIVE狀態(tài)。這個狀態(tài)告訴虛擬內(nèi)存本頁面已經(jīng)被分配,并且它已經(jīng)被內(nèi)存進(jìn)程或者用戶進(jìn)程所使用。

        3. INACTIVE DIRTY —— 這個狀態(tài)預(yù)示著本頁面已經(jīng)被要求分配它的進(jìn)程所拋棄,并且它成為將要從主存中被剔除的候選者。kscand任務(wù)會定期掃描內(nèi)存中的頁面,并記下頁面自從最后一次訪問的到當(dāng)前呆在內(nèi)存的總時間。如果kscand任務(wù)發(fā)現(xiàn)自從上次它掃面這個頁面以來,這個頁面有被訪問,它會增加這個頁面的年齡計數(shù)器的值,否則,它會減少這個頁面的年齡計數(shù)器的值。當(dāng)kscand任務(wù)發(fā)現(xiàn)這個頁面的年齡計數(shù)器的值為0,它會將這個頁面的狀態(tài)置成INACTIVE DIRTY狀態(tài)。在INACTIVE DIRTY狀態(tài)下的頁面被保存在將要被清除的頁面列表里面。

        4. INACTIVE LAUNDERED —— 這是一個臨時的狀態(tài),在這個狀態(tài)下的頁面已經(jīng)被選擇出要從主存中剔除,與此同時這個頁面的內(nèi)容將被保存在磁盤上。只有在INACTIVE DIRTY狀態(tài)下的頁面才能進(jìn)入這個狀態(tài)。一旦磁盤I/O操作(寫磁盤操作)完成,這個頁面的狀態(tài)轉(zhuǎn)移到INACTIVE CLEAN,在INACTIVE CLEAN 狀態(tài)下,這個頁面可能會被釋放或者由于其他目的而被重寫。如果在(寫)磁盤操作期間,這個頁面被訪問了, 它的狀態(tài)將變成ACTIVE。

        5. INACTIVE CLEAN —— 這個狀態(tài)下的頁面已經(jīng)被從內(nèi)存中清除了。這意味著此頁面的內(nèi)容已經(jīng)同步到磁盤上。從而,此頁面可能會被虛擬內(nèi)存釋放或者由于其他目的而被重寫。

關(guān)于“Linux的虛擬內(nèi)存怎么理解”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“Linux的虛擬內(nèi)存怎么理解”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

本文名稱:Linux的虛擬內(nèi)存怎么理解
URL鏈接:http://chinadenli.net/article22/jigijc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)定制開發(fā)面包屑導(dǎo)航Google標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營