<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > Linux 內存管理機制簡(jiǎn)介

Linux 內存管理機制簡(jiǎn)介

作者: 時(shí)間:2012-07-30 來(lái)源:網(wǎng)絡(luò ) 收藏

中經(jīng)常發(fā)現空閑很少,似乎所有的都被系統占用了,表面感覺(jué)是不夠用了,其實(shí)不然。這是內存的一個(gè)優(yōu)秀特性,在這方面,區別于 Windows的內存。主要特點(diǎn)是,無(wú)論物理內存有多大, 都將其充份利用,將一些程序調用過(guò)的硬盤(pán)數據讀入內存,利用內存讀寫(xiě)的高速特性來(lái)提高Linux系統的數據訪(fǎng)問(wèn)性能。而Windows 是只在需要內存時(shí),才為應用程序分配內存,并不能充分利用大容量的內存空間。換句話(huà)說(shuō),每增加一些物理內存,Linux 都將能充分利用起來(lái),發(fā)揮了硬件投資帶來(lái)的好處,而Windows只將其做為擺設,即使增加8GB甚至更大。

本文引用地址:http://dyxdggzs.com/article/148699.htm

Linux 的這一特性,主要是利用空閑的物理內存,劃分出一部份空間,做為 cache 和 buffers ,以此提高數據訪(fǎng)問(wèn)性能。

1、什么是 cache ?

頁(yè)高速緩存(cache)是 Linux內核實(shí)現的一種主要磁盤(pán)緩存。它主要用來(lái)減少對磁盤(pán)的I/O操作。具體地講,是通過(guò)把磁盤(pán)中的數據緩存到物理內存中,把對磁盤(pán)的訪(fǎng)問(wèn)變?yōu)閷ξ锢韮却娴脑L(fǎng)問(wèn)。

磁盤(pán)高速緩存的價(jià)值在于兩個(gè)方面:第一,訪(fǎng)問(wèn)磁盤(pán)的速度要遠遠低于訪(fǎng)問(wèn)內存的速度,因此,從內存訪(fǎng)問(wèn)數據比從磁盤(pán)訪(fǎng)問(wèn)速度更快。第二,數據一旦被訪(fǎng)問(wèn),就很有可能在短期內再次被訪(fǎng)問(wèn)到。

頁(yè)高速緩存是由內存中的物理頁(yè)組成的,緩存中每一頁(yè)都對應著(zhù)磁盤(pán)中的多個(gè)塊。每當內核開(kāi)始執行一個(gè)頁(yè)I/O操作時(shí)(通常是對普通文件中頁(yè)大小的塊進(jìn)行磁盤(pán)操作),首先會(huì )檢查需要的數據是否在高速緩存中,如果在,那么內核就直接使用高速緩存中的數據,從而避免訪(fǎng)問(wèn)磁盤(pán)。

舉個(gè)例子,當使用文本編輯器打開(kāi)一個(gè)源程序文件時(shí),該文件的數據就被調入內存。編輯該文件的過(guò)程中,越來(lái)越多的數據會(huì )相繼被調入內存頁(yè)。最后,當你編譯它的時(shí)候,內核可以直接使用頁(yè)高速緩存中的頁(yè),而不需要重新從磁盤(pán)讀取該文件了。因為用戶(hù)往往會(huì )反復讀取或操作同一個(gè)文件,所以頁(yè)高速緩存能減少大量的磁盤(pán)操作。

2、cache 如何更新?

由于頁(yè)高速緩存的緩存作用,寫(xiě)操作實(shí)際上會(huì )被延遲。當頁(yè)高速緩存中的數據比后臺存儲的數據更新時(shí),那么該數據就被稱(chēng)做臟數據。在內存中累積起來(lái)的臟頁(yè)最終必須被寫(xiě)回磁盤(pán)。在以下兩種情況發(fā)生時(shí),臟頁(yè)被寫(xiě)回磁盤(pán):

◆當空閑內存低于一個(gè)特定的閾值時(shí),內核必須將臟頁(yè)寫(xiě)回磁盤(pán),以便釋放內存。

◆當臟頁(yè)在內存中駐留時(shí)間超過(guò)一個(gè)特定的閾值時(shí),內核必須將超時(shí)的臟頁(yè)寫(xiě)回磁盤(pán),以確保臟頁(yè)不會(huì )無(wú)限期地駐留在內存中。

在2.6內核中,由一群內核線(xiàn)程—pdflush后臺回寫(xiě)例程統一執行兩種工作。

首先,pdflush線(xiàn)程在系統中的空閑內存低于一個(gè)特定的閾值時(shí),將臟頁(yè)刷新回磁盤(pán)。該后臺回寫(xiě)例程的目的在于在可用物理內存過(guò)低時(shí),釋放臟頁(yè)以重新獲得內存。特定的內存閾值可以通過(guò)dirty_background_ratio sysctl系統調用設置。當空閑內存比閾值:dirty_background_ratio還低時(shí),內核便會(huì )調用函數wakeup_bdflush()喚醒一個(gè)pdflush線(xiàn)程,隨后pdflush線(xiàn)程進(jìn)一步調用函數background_writeout()開(kāi)始將臟頁(yè)寫(xiě)回磁盤(pán)。函數background_ writeout()需要一個(gè)長(cháng)整型參數,該參數指定試圖寫(xiě)回的頁(yè)面數目。函數background_writeout()會(huì )連續地寫(xiě)出數據,直到滿(mǎn)足以下兩個(gè)條件:

◆已經(jīng)有指定的最小數目的頁(yè)被寫(xiě)出到磁盤(pán)。

◆空閑內存數已經(jīng)回升,超過(guò)了閾值dirty_background_ratio。

上述條件確保了pdflush操作可以減輕系統中內存不足的壓力?;貙?xiě)操作不會(huì )在達到這兩個(gè)條件前停止,除非pdflush寫(xiě)回了所有的臟頁(yè),沒(méi)有剩下的臟頁(yè)可再被寫(xiě)回了。

為了滿(mǎn)足第二個(gè)目標,pdflush后臺例程會(huì )被周期性喚醒(和空閑內存是否過(guò)低無(wú)關(guān)),將那些在內存中駐留時(shí)間過(guò)長(cháng)的臟頁(yè)寫(xiě)出,確保內存中不會(huì )有長(cháng)期存在的臟頁(yè)。如果系統發(fā)生崩潰,由于內存處于混亂之中,所以那些在內存中還沒(méi)來(lái)得及寫(xiě)回磁盤(pán)的臟頁(yè)就會(huì )丟失,所以周期性同步頁(yè)高速緩存和磁盤(pán)非常重要。在系統啟動(dòng)時(shí),內核初始化一個(gè)定時(shí)器,讓它周期地喚醒pdflush線(xiàn)程,隨后使其運行函數wb_kupdate()。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


關(guān)鍵詞: 簡(jiǎn)介 機制 管理 內存 Linux

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>