專(zhuān)利名稱(chēng):Linux平臺(tái)物理內(nèi)存信息監(jiān)測(cè)系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種物理內(nèi)存信息監(jiān)測(cè)系統(tǒng),尤其涉及一種通過(guò)內(nèi)核補(bǔ)丁 加內(nèi)核模塊的方式實(shí)現(xiàn)的Linux平臺(tái)物理內(nèi)存信息監(jiān)測(cè)系統(tǒng)。
技術(shù)背景在Linux系統(tǒng)中,資源管理往往是評(píng)價(jià)操作系統(tǒng)優(yōu)劣的一個(gè)重要評(píng)價(jià) 標(biāo)準(zhǔn),而內(nèi)存管理又是資源管理中及其重要的一部分,因此對(duì)內(nèi)存管理的 監(jiān)測(cè)具有非常重要的意義。Linux內(nèi)核是一種宏內(nèi)核的系統(tǒng),進(jìn)程管理、 內(nèi)存管理和文件系統(tǒng)全部運(yùn)行在內(nèi)核空間,而應(yīng)用程序通常運(yùn)行于用戶(hù)空 間。由于當(dāng)前Linux系統(tǒng)的內(nèi)核程序本身并沒(méi)有考慮到各種各樣的測(cè)試需 求和考慮到內(nèi)核的安全性和效率,當(dāng)前的內(nèi)核并沒(méi)有開(kāi)放很多信息,比如 內(nèi)存相關(guān)的信息等。因此,目前的系統(tǒng)很難在用戶(hù)空間獲取內(nèi)存的相關(guān)信,E、 o中國(guó)發(fā)明專(zhuān)利說(shuō)明書(shū)CN14780878A (公告日2004年03月10日)公 開(kāi)了一種使用/proc/meminfo文件來(lái)獲取內(nèi)存信息的方法,但是這種方法 只能夠提供內(nèi)存總體的使用和空閑信息,但是對(duì)于各種裝載Linux操作平 臺(tái)的硬件系統(tǒng),尤其是各種存儲(chǔ)資源首先但需要提供復(fù)雜內(nèi)存操作的嵌入 式Linux平臺(tái),如第三代移動(dòng)通信系統(tǒng)WCDMA手機(jī)平臺(tái)來(lái)說(shuō),通過(guò) /proc/meminfo文件獲取的這些內(nèi)存信息是不夠的。由于內(nèi)核模塊屬于運(yùn)行時(shí)向內(nèi)核添加的代碼,主要提供了用戶(hù)干預(yù)內(nèi)核行為的一種手段,因此本領(lǐng)域中的一般技術(shù)人員通常還會(huì)通過(guò)內(nèi)核模塊 的方式來(lái)獲取當(dāng)前內(nèi)核中己經(jīng)存在的一些信息。但是,對(duì)于目前內(nèi)核不存 在的一些信息,通過(guò)所述內(nèi)核模塊的方式是沒(méi)法獲取的,因此僅僅通過(guò)內(nèi) 核模塊的方式來(lái)獲取內(nèi)存信息的方法也存在著一定的局限性,無(wú)法獲取詳 細(xì)的物理內(nèi)存信息。 發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問(wèn)題是提供一種Linux平臺(tái)物理內(nèi)存信息監(jiān) 測(cè)系統(tǒng),可靜態(tài)或動(dòng)態(tài)地監(jiān)測(cè)Linux平臺(tái)下物理內(nèi)存的使用狀況,以?xún)?yōu)化 Linux平臺(tái)物理內(nèi)存資源的使用。為解決上述技術(shù)問(wèn)題,本發(fā)明提供一種Linux平臺(tái)物理內(nèi)存信息監(jiān)測(cè) 系統(tǒng),包括內(nèi)核補(bǔ)丁 (12)、內(nèi)核監(jiān)測(cè)處理模塊(13)和輸入/輸出端 口 (18);所述內(nèi)核補(bǔ)丁 (12)用于對(duì)Linux內(nèi)核(11)進(jìn)行改造,截獲和登記 相應(yīng)的物理內(nèi)存(10)信息;所述內(nèi)核監(jiān)測(cè)處理模塊(13)用于分析內(nèi)存監(jiān)測(cè)處理程序(19)通過(guò) 所述輸入/輸出端口 (18)發(fā)送的指令,執(zhí)行所述指令,及將通過(guò)所述內(nèi) 核補(bǔ)丁獲取的相應(yīng)內(nèi)存信息回送到所述內(nèi)存監(jiān)測(cè)處理程序(19);所述輸入/輸出端口 (18)用于實(shí)現(xiàn)Linux內(nèi)核空間和用戶(hù)空間的內(nèi) 存信息交互。本發(fā)明由于采用了上述技術(shù)方案,具有這樣的有益效果,通過(guò)對(duì) Linux內(nèi)核添加補(bǔ)丁的方式改造Linux內(nèi)核,以截獲和登記相應(yīng)的物理內(nèi) 存信息,及使用內(nèi)核監(jiān)測(cè)處理模塊作為橋梁來(lái)分析用戶(hù)的指令、執(zhí)行用戶(hù)的操作和向用戶(hù)回送內(nèi)核信息的方法,來(lái)對(duì)Linux平臺(tái)下物理內(nèi)存的使用 狀況進(jìn)行靜態(tài)監(jiān)測(cè)或動(dòng)態(tài)監(jiān)測(cè),從而實(shí)現(xiàn)了對(duì)Linux平臺(tái)下各種物理內(nèi)存 信息的監(jiān)測(cè),如獲取可分配的指定階內(nèi)存塊數(shù)目,獲取內(nèi)存詳細(xì)情況以計(jì) 算內(nèi)存外部碎片率等,具有較好的兼容性和適應(yīng)性;因此本發(fā)明所述系統(tǒng) 尤其適合于各種存儲(chǔ)資源受限但需要提供復(fù)雜內(nèi)存操作的嵌入式Linux 平臺(tái),如第三代移動(dòng)通信系統(tǒng)WCDMA手機(jī)平臺(tái)等,而且適用于各種類(lèi)型的 硬件系統(tǒng),如各種類(lèi)型的處理器(ARM、 X86等)及各種類(lèi)型的內(nèi)存設(shè)備 (SDRAM、 DDR閃存等)。
下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說(shuō)明 圖1為本發(fā)明所述Linux平臺(tái)物理內(nèi)存信息監(jiān)測(cè)系統(tǒng)的結(jié)構(gòu)框圖; 圖2為本發(fā)明所述靜態(tài)獲取方法時(shí)輸入控制模塊的結(jié)構(gòu)示意圖; 圖3為本發(fā)明所述動(dòng)態(tài)獲取方法時(shí)輸入控制模塊的結(jié)構(gòu)示意圖;圖4為本發(fā)明所述輸入/輸出端口模塊的結(jié)構(gòu)示意圖。
具體實(shí)施方式
如圖1所示,本發(fā)明所述內(nèi)存信息監(jiān)測(cè)系統(tǒng)主要包括內(nèi)核補(bǔ)丁 12、 內(nèi)核監(jiān)測(cè)處理模塊13和輸入/輸出端口 18。其中,所述內(nèi)核補(bǔ)丁 12用于對(duì)Limix內(nèi)核11進(jìn)行改造,截獲和登記 相應(yīng)的物理內(nèi)存10信息。本發(fā)明所述內(nèi)核補(bǔ)丁 12主要包括內(nèi)存信息記錄 模塊,用于對(duì)Linux內(nèi)核11進(jìn)行擴(kuò)展,以實(shí)現(xiàn)在Linux系統(tǒng)啟動(dòng)時(shí)開(kāi)始 對(duì)物理內(nèi)存10的使用情況進(jìn)行記錄,在本發(fā)明中這是通過(guò)一個(gè)全局變量 來(lái)進(jìn)行控制的。本發(fā)明所述內(nèi)存信息記錄模塊主要采用以下兩種方式來(lái)對(duì)所述全局變量加以控制內(nèi)核命令行方式和內(nèi)核配置方式?,F(xiàn)有技術(shù)中一 般都是通過(guò)直接修改內(nèi)核代碼的方式來(lái)控制內(nèi)存信息的記錄的,這種方式 下內(nèi)核的每次修改都必須通過(guò)源代碼修改和重新編譯的方式來(lái)實(shí)現(xiàn),因此 比較麻煩。而通過(guò)所述內(nèi)核命令行方式來(lái)實(shí)現(xiàn)內(nèi)存信息的記錄無(wú)需對(duì)內(nèi)核 進(jìn)行修改,因此也不需要對(duì)內(nèi)核進(jìn)行重新編譯,因而控制起來(lái)更為方便和 靈活。當(dāng)然,也可通過(guò)內(nèi)核所提供的配置選項(xiàng)的方式對(duì)全局變量進(jìn)行控制。 所述內(nèi)核監(jiān)測(cè)處理模塊13是Linux系統(tǒng)下通過(guò)內(nèi)核空間裝載并具有 物理內(nèi)存監(jiān)測(cè)功能的內(nèi)核模塊,用于分析內(nèi)存監(jiān)測(cè)處理程序19通過(guò)所述 輸入/輸出端口 18發(fā)送的指令,并執(zhí)行所述內(nèi)存監(jiān)測(cè)處理程序19的命令, 及將通過(guò)所述內(nèi)核補(bǔ)丁 12獲取的相應(yīng)內(nèi)存信息回送到所述內(nèi)存監(jiān)測(cè)處理 程序19。該內(nèi)核監(jiān)測(cè)處理模塊13進(jìn)一步包括內(nèi)存信息獲取模塊14、內(nèi)存信 息處理模塊15、輸入控制模塊16和輸出控制模塊17。所述內(nèi)存信息獲取 模塊14用于根據(jù)輸入控制模塊16接收到的指令,去査詢(xún)相應(yīng)的內(nèi)存信息。 所述內(nèi)存信息處理模塊15用于對(duì)査詢(xún)到的內(nèi)存信息進(jìn)行相應(yīng)的處理,如 當(dāng)外部需要獲取內(nèi)存的碎片率時(shí),所述內(nèi)存信息處理模塊15可在所獲取 的內(nèi)存詳細(xì)狀況的基礎(chǔ)上,對(duì)碎片率進(jìn)行計(jì)算;又如,當(dāng)需要獲取當(dāng)前系 統(tǒng)內(nèi)的可分配的連續(xù)32頁(yè)(5階)內(nèi)存塊數(shù)量時(shí),所述內(nèi)存信息處理模 塊15可用于對(duì)高于5階內(nèi)存的數(shù)量進(jìn)行計(jì)算,得到當(dāng)前系統(tǒng)內(nèi)的可分配 的連續(xù)32頁(yè)(5階)內(nèi)存塊數(shù)量。所述輸入控制模塊16用于接收內(nèi)存監(jiān) 測(cè)處理程序19通過(guò)輸入/輸出端口 18發(fā)出的指令并對(duì)該指令進(jìn)行解析;所述輸出控制模塊17用于將所取得的內(nèi)存信息通過(guò)所述輸入/輸出端口18發(fā)送給用戶(hù)態(tài)的內(nèi)存監(jiān)測(cè)處理程序19。如圖2所示,所述輸入控制模塊16主要包括輸入端口控制模塊21 和輸入?yún)?shù)解析模塊22。其中,輸入端口控制模塊21負(fù)責(zé)接收內(nèi)存監(jiān)測(cè) 處理程序19通過(guò)輸入/輸出端口 18發(fā)出的指令;輸入?yún)?shù)解析模塊22 負(fù)責(zé)將接收到的指令進(jìn)行解析。這時(shí)就可實(shí)現(xiàn)對(duì)Linux物理內(nèi)存信息的靜 態(tài)監(jiān)測(cè),所述靜態(tài)監(jiān)測(cè)的具體實(shí)現(xiàn)步驟如下用戶(hù)態(tài)的內(nèi)存監(jiān)測(cè)處理程序 通過(guò)輸入/輸出端口 18向內(nèi)核空間發(fā)出獲取內(nèi)存信息的指令,內(nèi)核空間的 輸入控制模塊16在對(duì)接收到用戶(hù)的指令進(jìn)行解析后,將會(huì)調(diào)用內(nèi)存信息 獲取模塊14進(jìn)行查詢(xún)內(nèi)存信息;當(dāng)查詢(xún)結(jié)束后,就會(huì)調(diào)用內(nèi)存信息處理 模塊15進(jìn)行相應(yīng)的處理,然后調(diào)用輸出控制模塊17把信息通過(guò)輸入/輸 出端口 18再返回給用戶(hù)態(tài)的內(nèi)存監(jiān)測(cè)處理程序19,然后再由該內(nèi)存監(jiān)測(cè) 處理程序19將其獲取的物理內(nèi)存信息經(jīng)過(guò)加工處理后通過(guò)不同的方式呈 現(xiàn)給用戶(hù),比如通過(guò)在控制臺(tái)輸出信息,或者把內(nèi)存信息存儲(chǔ)到指定文件 中等方式來(lái)呈現(xiàn)給用戶(hù)。如圖3所示,所述輸入端口控制模塊16除包括輸入端口控制模塊21 和輸入?yún)?shù)解析模塊22外,還包括定時(shí)觸發(fā)模塊31,用于定時(shí)的把內(nèi)存 信息輸出到磁盤(pán)或者其它非易失性存儲(chǔ)介質(zhì)上的文件中以實(shí)現(xiàn)對(duì)內(nèi)存信 息進(jìn)行定時(shí)存儲(chǔ)的動(dòng)態(tài)監(jiān)測(cè)方法。所述定時(shí)存儲(chǔ)的動(dòng)態(tài)監(jiān)測(cè)方法指通過(guò) 預(yù)先定義所述定時(shí)觸發(fā)模塊31中的定時(shí)器來(lái)定時(shí)地將內(nèi)存信息輸出到磁 盤(pán)或者其它非易失性存儲(chǔ)介質(zhì)上(比如Nand Flash或者NOR Flash)的 文件中,這樣用戶(hù)通過(guò)査看保存在文件中的內(nèi)存信息就可以來(lái)判斷內(nèi)存的詳細(xì)情況,因此也就有可能采取某種具體的措施來(lái)改進(jìn)內(nèi)存管理器。比如, 通過(guò)該方法可發(fā)現(xiàn)大容量的連續(xù)內(nèi)存的分配經(jīng)常不成功,那么就意味著需 要改善內(nèi)存管理器的分配機(jī)制,使得系統(tǒng)能更多的分配大容量的連續(xù)內(nèi)存。所述輸入/輸出端口 18用于實(shí)現(xiàn)內(nèi)核空間和用戶(hù)空間的內(nèi)存信息交互,具體體現(xiàn)為所述內(nèi)存監(jiān)測(cè)處理程序19指令或預(yù)先的配置來(lái)確定在 用戶(hù)空間通過(guò)所述輸入/輸出端口 18對(duì)內(nèi)存信息的獲取方式,并且用于將通過(guò)所述內(nèi)核監(jiān)測(cè)處理模塊13獲取和處理的內(nèi)存信息從內(nèi)核空間傳輸至用戶(hù)空間。如圖4所示,在本發(fā)明所述物理內(nèi)存信息監(jiān)測(cè)系統(tǒng)中,所述輸入/輸出端口 18實(shí)現(xiàn)內(nèi)核空間和用戶(hù)空間的內(nèi)存信息交互的方式包括可讀寫(xiě) 的proc接口方式41、設(shè)備文件方式42、普通文件方式43、系統(tǒng)調(diào)用方 式44及內(nèi)存映射方式45等,本發(fā)明中這些獲取方式可在內(nèi)存監(jiān)測(cè)處理程 序19的控制下進(jìn)行切換。由于proc文件系統(tǒng)是有Linux操作系統(tǒng)內(nèi)核提供的標(biāo)準(zhǔn)接口 ,所有 的Linux操作系統(tǒng)都以/proc的形式向用戶(hù)空間開(kāi)放proc文件系統(tǒng),所 以通過(guò)該文件系統(tǒng)獲取內(nèi)存信息可以不依賴(lài)于所使用的Linux平臺(tái)的發(fā) 行版本。因此,基于proc文件系統(tǒng)的上述特性,本發(fā)明使用其作為內(nèi)存 監(jiān)測(cè)處理程序19和內(nèi)存監(jiān)測(cè)處理模塊13之間信息交互的輸入/輸出端口 之一。因此,在本發(fā)明中,通過(guò)所述proc接口方式41用戶(hù)可以向內(nèi)核中 的輸入控制模塊16發(fā)送指令,而Linux內(nèi)核也可以把輸出信息反映在/proc目錄下的某個(gè)文件中,然后用戶(hù)空間就可以對(duì)proc下的文件進(jìn)行 分析或者轉(zhuǎn)存操作了。設(shè)備文件的目的是允許進(jìn)程和內(nèi)核中的設(shè)備驅(qū)動(dòng)程序通過(guò)設(shè)備文件 和實(shí)際的物理設(shè)備進(jìn)行通信,但實(shí)際上我們也可以創(chuàng)建虛擬的設(shè)備和內(nèi)核 模塊進(jìn)行通信。因?yàn)長(zhǎng)inux的設(shè)備驅(qū)動(dòng)程序本來(lái)就是一個(gè)軟件抽象,它可 以結(jié)合硬件提供服務(wù),也完全可以作為純軟件提供服務(wù)。在驅(qū)動(dòng)程序中, 可以用open來(lái)啟動(dòng)服務(wù),用read()返回處理好的記錄,用ioctl()進(jìn)行 控制設(shè)備的行為(比如發(fā)起監(jiān)測(cè)請(qǐng)求),用close()停止服務(wù)等。當(dāng)內(nèi)核 模塊被插入到內(nèi)核后,就可以在/dev/目錄下建立一個(gè)設(shè)備文件和內(nèi)核模 塊進(jìn)行關(guān)聯(lián)。然后,可以在用戶(hù)空間通過(guò)對(duì)設(shè)備文件的操作來(lái)對(duì)內(nèi)核模塊 進(jìn)行控制和信息交互。在本發(fā)明中,利用設(shè)備文件方式42,用戶(hù)可以通 過(guò)創(chuàng)建字符設(shè)備或者塊設(shè)備的方式(指定主設(shè)備號(hào))和內(nèi)核模塊進(jìn)行通信, 只要內(nèi)核模塊在初始化程序中對(duì)相同的主設(shè)備號(hào)進(jìn)行注冊(cè)就可以和現(xiàn)存 的設(shè)備進(jìn)行關(guān)聯(lián);然后,用戶(hù)就可以通過(guò)新創(chuàng)建的設(shè)備和內(nèi)核模塊進(jìn)行數(shù) 據(jù)的輸入和輸出操作。所述普通文件方式43即內(nèi)核可以通過(guò)讀取文件的方式來(lái)決定操作行 為,再把內(nèi)存信息保存在指定的文件中和用戶(hù)進(jìn)行通信。系統(tǒng)調(diào)用是另一種用戶(hù)程序和內(nèi)核進(jìn)行通信的方法。目前Linux大致 提供了二百多個(gè)標(biāo)準(zhǔn)的系統(tǒng)調(diào)用以獲取內(nèi)核相關(guān)的信息或者干預(yù)內(nèi)核的 行為。而且,Linux系統(tǒng)允許用戶(hù)通過(guò)修改內(nèi)核添加自己的系統(tǒng)調(diào)用的方 式來(lái)實(shí)現(xiàn)和內(nèi)核的信息交換。因此,為了監(jiān)測(cè)物理內(nèi)存的相關(guān)信息,可以 通過(guò)在Linux內(nèi)核中實(shí)現(xiàn)一些新的系統(tǒng)調(diào)用。用戶(hù)通過(guò)這些新增的系統(tǒng)調(diào)用來(lái)獲取內(nèi)存的信息并提取到用戶(hù)空間。當(dāng)內(nèi)核服務(wù)程序和新系統(tǒng)調(diào)用都 實(shí)現(xiàn)后,就可以在用戶(hù)空間里編寫(xiě)用戶(hù)程序進(jìn)行內(nèi)存監(jiān)測(cè)任務(wù)。因此在本發(fā)明中通過(guò)利用系統(tǒng)調(diào)用方式44,在Linux內(nèi)核中實(shí)現(xiàn)一些新的系統(tǒng)調(diào) 用來(lái)監(jiān)測(cè)物理內(nèi)存的相關(guān)信息,用戶(hù)可通過(guò)這些新增的系統(tǒng)調(diào)用44來(lái)獲 取內(nèi)存的信息。Linux也可以通過(guò)內(nèi)存映射機(jī)制來(lái)提供用戶(hù)程序?qū)?nèi)核空間的內(nèi)存 直接訪(fǎng)問(wèn)的能力。內(nèi)存映射是把內(nèi)核中特定部分的內(nèi)存空間映射到用戶(hù)空 間。即用戶(hù)空間和內(nèi)核空間共享一塊相同的內(nèi)存。因此,內(nèi)核在共享內(nèi)上 的數(shù)據(jù),用戶(hù)可以立即發(fā)現(xiàn)和使用,根本無(wú)須數(shù)據(jù)拷貝,反之亦然。對(duì)于 許多數(shù)據(jù)傳輸量大、時(shí)間要求高的應(yīng)用,內(nèi)存映射機(jī)制可以節(jié)省數(shù)據(jù)拷貝 所耗費(fèi)的時(shí)間和資源。因此,在本發(fā)明中也可通過(guò)內(nèi)存映射方式45來(lái)保 證用戶(hù)空間與內(nèi)核空間信息的交互操作。通過(guò)本發(fā)明所述物理內(nèi)存信息監(jiān)測(cè)系統(tǒng),可獲取不同階空閑內(nèi)存的信 息、獲取當(dāng)前系統(tǒng)的內(nèi)存外部碎片率等,因此本發(fā)明所述物理內(nèi)存信息監(jiān) 測(cè)系統(tǒng)和監(jiān)測(cè)方法具有很好的適用性和兼容性。如下所述為關(guān)于獲取當(dāng)前系統(tǒng)內(nèi)的可分配的連續(xù)32頁(yè)(5階)內(nèi)存 塊數(shù)量的一個(gè)實(shí)施例,其具體步驟為(1) 以?xún)?nèi)核補(bǔ)丁方式對(duì)Linux內(nèi)核11進(jìn)行擴(kuò)展的內(nèi)存信息記錄模塊 對(duì)物理內(nèi)存10的使用情況進(jìn)行記錄。當(dāng)內(nèi)存分配和釋放操作發(fā)生時(shí),需 要更新內(nèi)核中相應(yīng)的各階內(nèi)存計(jì)數(shù)器。(2) 內(nèi)存監(jiān)測(cè)處理程序19通過(guò)輸入/輸出端口 17發(fā)出獲取當(dāng)前系統(tǒng) 內(nèi)的可分配的連續(xù)32頁(yè)(5階)內(nèi)存塊數(shù)量的指令。(3) 內(nèi)核空間輸入控制模塊16對(duì)接收到用戶(hù)的指令進(jìn)行解析。(4) 調(diào)用內(nèi)存信息獲取模塊14查詢(xún)當(dāng)前系統(tǒng)內(nèi)5階以上的內(nèi)存塊數(shù) 量-,由于當(dāng)前系統(tǒng)內(nèi)僅僅維護(hù)了各階內(nèi)存的數(shù)量,因此需要通過(guò)內(nèi)存信息 處理模塊15把高于5階內(nèi)存的數(shù)量進(jìn)行計(jì)算后才能得到當(dāng)前系統(tǒng)內(nèi)的可 分配的連續(xù)32頁(yè)(5階)內(nèi)存塊數(shù)量,比如一個(gè)空閑的6階內(nèi)存實(shí)際上 對(duì)應(yīng)于2個(gè)可分配的5階空閑內(nèi)存。(5) 當(dāng)內(nèi)存信息處理模塊15進(jìn)行相應(yīng)處理后,調(diào)用輸出控制模塊 17把信息通過(guò)輸入/輸出端口18再返回給用戶(hù)態(tài)的內(nèi)存監(jiān)測(cè)處理程序19。(6) 由所述內(nèi)存監(jiān)測(cè)處理程序19通過(guò)各種的方式呈現(xiàn)給用戶(hù)。 利用本發(fā)明所述Linux平臺(tái)物理內(nèi)存信息監(jiān)測(cè)系統(tǒng)還可獲取系統(tǒng)的內(nèi)存外部碎片率,在一個(gè)實(shí)施例中,其具體步驟如下(1) 以?xún)?nèi)核補(bǔ)丁方式對(duì)Limix內(nèi)核11進(jìn)行擴(kuò)展的內(nèi)存信息記錄模塊 對(duì)物理內(nèi)存10的使用情況進(jìn)行記錄。先分配一塊內(nèi)存用以保存所有的內(nèi) 存頁(yè)的信息。當(dāng)內(nèi)存分配和釋放操作發(fā)生時(shí),需要更新內(nèi)核中相應(yīng)的各階 內(nèi)存計(jì)數(shù)器。(2) 內(nèi)存檢測(cè)處理程序19向輸入/輸出端口 17發(fā)出獲取系統(tǒng)的內(nèi)存 外部碎片率的指令。(3) 內(nèi)核空間的輸入控制模塊16在對(duì)接收到用戶(hù)的指令進(jìn)行解析。(4) 輸入控制模塊16調(diào)用內(nèi)存信息獲取模塊14去査詢(xún)當(dāng)前系統(tǒng)內(nèi) 的詳細(xì)內(nèi)存情況,以確定當(dāng)前系統(tǒng)內(nèi)存的最大空閑內(nèi)存塊的頁(yè)數(shù)。(5) 通過(guò)所述內(nèi)存信息獲取模塊14査詢(xún)系統(tǒng)內(nèi)的空閑內(nèi)存的總體數(shù)(6) 査詢(xún)結(jié)束后,內(nèi)存信息處理模塊15根據(jù)如下公式計(jì)算出內(nèi)存外 部碎片率,即內(nèi)存外部碎片率=1一最大的空閑內(nèi)存塊頁(yè)數(shù)/系統(tǒng)的空閑內(nèi) 存頁(yè)數(shù)。(7) 內(nèi)存信息處理模塊15進(jìn)行相應(yīng)的處理后,然后調(diào)用輸出控制模 塊17把系統(tǒng)的外部碎片率信息通過(guò)輸入/輸出端口 18再返回給用戶(hù)態(tài)的 內(nèi)存監(jiān)測(cè)處理程序19。(8) 由該內(nèi)存監(jiān)測(cè)處理程序19通過(guò)不同的方式呈現(xiàn)給用戶(hù)。 本發(fā)明適合于各種裝載Lirmx操作平臺(tái)的硬件系統(tǒng),尤其適用于各種存儲(chǔ)資源受限但需要提供復(fù)雜內(nèi)存操作的嵌入式Linux平臺(tái),例如第三代 移動(dòng)通信系統(tǒng)WCDMA手機(jī)平臺(tái)。由于嵌入式Linux平臺(tái)的存儲(chǔ)資源非常有 限(特別是物理內(nèi)存容量),因此非常有必要通過(guò)本發(fā)明提供的方法監(jiān)測(cè) Linux平臺(tái)的物理內(nèi)存使用狀況,以?xún)?yōu)化Linux平臺(tái)物理內(nèi)存資源的使用。
權(quán)利要求
1. 一種Linux平臺(tái)物理內(nèi)存信息監(jiān)測(cè)系統(tǒng),其特征在于,包括內(nèi)核補(bǔ)丁(12)、內(nèi)核監(jiān)測(cè)處理模塊(13)和輸入/輸出端口(18);所述內(nèi)核補(bǔ)丁(12)用于對(duì)Linux內(nèi)核(11)進(jìn)行改造,截獲和登記相應(yīng)的物理內(nèi)存(10)信息;所述內(nèi)核監(jiān)測(cè)處理模塊(13)用于分析內(nèi)存監(jiān)測(cè)處理程序(19)通過(guò)所述輸入/輸出端口(18)發(fā)送的指令,執(zhí)行所述指令,及將通過(guò)所述內(nèi)核補(bǔ)丁獲取的相應(yīng)內(nèi)存信息回送到所述內(nèi)存監(jiān)測(cè)處理程序(19);所述輸入/輸出端口(18)用于實(shí)現(xiàn)Linux內(nèi)核空間和用戶(hù)空間的內(nèi)存信息交互。
2、 根據(jù)權(quán)利要求l所述的Linux平臺(tái)物理內(nèi)存信息監(jiān)測(cè)系統(tǒng),其特 征在于,所述內(nèi)核補(bǔ)丁 (12)主要包括內(nèi)存信息記錄模塊,用于對(duì)Linux 內(nèi)核(11)進(jìn)行擴(kuò)展,以在Linux系統(tǒng)啟動(dòng)時(shí)開(kāi)始對(duì)物理內(nèi)存(10)的使 用情況進(jìn)行記錄。
3、 根據(jù)權(quán)利要求2所述的Linux平臺(tái)物理內(nèi)存信息監(jiān)測(cè)系統(tǒng),其特 征在于,所述信息記錄模塊是通過(guò)一個(gè)全局變量來(lái)進(jìn)行控制的。
4、 根據(jù)權(quán)利要求3所述的Linux平臺(tái)物理內(nèi)存信息監(jiān)測(cè)系統(tǒng),其特 征在于,所述內(nèi)存信息記錄模塊主要采用以下兩種方式對(duì)所述全局變量進(jìn) 行控制內(nèi)核命令行方式和內(nèi)核配置方式。
5、 根據(jù)權(quán)利要求1所述的Linux平臺(tái)物理內(nèi)存信息監(jiān)測(cè)系統(tǒng),其特 征在于,所述內(nèi)核監(jiān)測(cè)處理模塊(13)進(jìn)一步包括內(nèi)存信息獲取模塊(14)、內(nèi)存信息處理模塊(15)、輸入控制模塊(16)和輸出控制模塊(17);其中,所述內(nèi)存信息獲取模塊(14)用于根據(jù)所述輸入控制模塊(16) 接收到的指令,去査詢(xún)相應(yīng)的內(nèi)存信息;所述內(nèi)存信息處理模塊(15)用于對(duì)査詢(xún)到的內(nèi)存信息進(jìn)行相應(yīng)的處理;所述輸入控制模塊(16)用于接收所述內(nèi)存監(jiān)測(cè)處理程序(19)通過(guò) 所述輸入/輸出端口 (18)發(fā)出的指令并對(duì)該指令進(jìn)行解析;所述輸出控制模塊(17)用于將所取得的內(nèi)存信息通過(guò)所述輸入/輸 出端口 (18)發(fā)送給用戶(hù)態(tài)的內(nèi)存監(jiān)測(cè)處理程序(19)。
6、 根據(jù)權(quán)利要求5所述的Linux平臺(tái)物理內(nèi)存信息監(jiān)測(cè)系統(tǒng),其特 征在于,所述輸入控制模塊(16)主要包括輸入端口控制模塊(21)和輸 入?yún)?shù)解析模塊(22);其中,所述輸入端口控制模塊(21)負(fù)責(zé)控制接 收用戶(hù)態(tài)的內(nèi)存監(jiān)測(cè)處理程序(19)通過(guò)所述輸入/輸出端口 (18)發(fā)出 的指令;所述輸入?yún)?shù)解析模塊(22)負(fù)責(zé)將接收到的指令進(jìn)行解析。
7、 根據(jù)權(quán)利要求6所述的Linux平臺(tái)物理內(nèi)存信息監(jiān)測(cè)系統(tǒng),其特 征在于,所述輸入控制模塊(16)還包括定時(shí)觸發(fā)模塊(31),該定時(shí)觸 發(fā)模塊(31)主要包括一定時(shí)器,用于定時(shí)的把內(nèi)存信息輸出到磁盤(pán)或者 其它非易失性存儲(chǔ)介質(zhì)上的文件中,對(duì)物理內(nèi)存進(jìn)行定時(shí)存儲(chǔ)的動(dòng)態(tài)監(jiān)
8、 根據(jù)權(quán)利要求l所述的Linux平臺(tái)物理內(nèi)存信息監(jiān)測(cè)系統(tǒng),其特 征在于,所述輸入/輸出端口 (18)實(shí)現(xiàn)Linux內(nèi)核空間和用戶(hù)空間的內(nèi)存信息交互具體體現(xiàn)為內(nèi)存監(jiān)測(cè)處理程序(19)指令或預(yù)先的配置來(lái)確 定在用戶(hù)空間通過(guò)所述輸入/輸出端口 (18)對(duì)內(nèi)存信息的獲取方式,及 將通過(guò)所述內(nèi)核監(jiān)測(cè)處理模塊(13)獲取和處理的內(nèi)存信息從內(nèi)核空間傳 輸至用戶(hù)空間。
9、根據(jù)權(quán)利要求1或8所述的Linux平臺(tái)物理內(nèi)存信息監(jiān)測(cè)系統(tǒng), 其特征在于,所述輸入/輸出端口 (18)實(shí)現(xiàn)Linux內(nèi)核空間和用戶(hù)空間 的內(nèi)存信息交互的方式包括可讀寫(xiě)的proc接口方式(41)、設(shè)備文件 方式(42)、普通文件方式(43)、系統(tǒng)調(diào)用方式(44)及內(nèi)存映射方式 (45),這些方式可在所述內(nèi)存監(jiān)測(cè)處理程序(19)的控制下進(jìn)行切換。
全文摘要
本發(fā)明公開(kāi)了一種Linux平臺(tái)物理內(nèi)存信息監(jiān)測(cè)系統(tǒng),可在Linux平臺(tái)下監(jiān)測(cè)物理內(nèi)存的使用狀況,優(yōu)化Linux平臺(tái)物理內(nèi)存資源的使用。本發(fā)明通過(guò)內(nèi)核補(bǔ)丁加內(nèi)存監(jiān)測(cè)處理模塊的方式,可對(duì)Linux平臺(tái)中物理內(nèi)存的總體情況和詳細(xì)使用狀況進(jìn)行靜態(tài)監(jiān)測(cè)和動(dòng)態(tài)監(jiān)測(cè),實(shí)現(xiàn)對(duì)Linux平臺(tái)中如下物理內(nèi)存信息的監(jiān)測(cè),如獲取可分配的指定階內(nèi)存塊數(shù)目,獲取內(nèi)存詳細(xì)情況以計(jì)算內(nèi)存外部碎片率等,因此具有較好的兼容性和適應(yīng)性。該系統(tǒng)尤其適合于各種存儲(chǔ)資源受限但需要提供復(fù)雜內(nèi)存操作的嵌入式Linux平臺(tái)。
文檔編號(hào)G06F11/34GK101221527SQ200710036249
公開(kāi)日2008年7月16日 申請(qǐng)日期2007年1月8日 優(yōu)先權(quán)日2007年1月8日
發(fā)明者劉通平, 濤 韓 申請(qǐng)人:上海宇夢(mèng)通信科技有限公司