宋睿
【摘要】 嵌入式系統(tǒng)功能的提高,占用了較大內(nèi)存空間,繼而時(shí)常出現(xiàn)運(yùn)行無響應(yīng)?;谟脩舴矫婵?,由于系統(tǒng)內(nèi)存問題影響運(yùn)行,針對系統(tǒng)內(nèi)存與進(jìn)程應(yīng)用狀態(tài)研究,可以調(diào)整系統(tǒng)數(shù)值與執(zhí)行文件elf分析,進(jìn)行系統(tǒng)優(yōu)化進(jìn)而確保響應(yīng)運(yùn)行。并且經(jīng)過實(shí)踐證明,嵌入式系統(tǒng)內(nèi)存優(yōu)化使用,能夠提升系統(tǒng)空間5%內(nèi)存,確保系統(tǒng)順利運(yùn)行。
【關(guān)鍵詞】 嵌入式 Linux系統(tǒng) 內(nèi)存優(yōu)化 使用方法研究
現(xiàn)如今,嵌入式系統(tǒng)軟件被廣泛應(yīng)用于各行業(yè)發(fā)展中,小至人們生活,大到科技軍事。隨著智能設(shè)備功能的增加,造成嵌入式系統(tǒng)時(shí)常出現(xiàn)內(nèi)存不足問題,繼而降低系統(tǒng)運(yùn)行。怎樣降低軟件所占空間,成為軟件設(shè)計(jì)中的重要課題。
一、內(nèi)存應(yīng)用
1.1內(nèi)存存在形式
嵌入式系統(tǒng)中,內(nèi)存主要分為幾種形式:Kernel bootstrapping時(shí)期,主要為臨時(shí)內(nèi)存。在系統(tǒng)啟動(dòng)后,內(nèi)存能夠自動(dòng)回收為今后系統(tǒng)應(yīng)用。在系統(tǒng)正常運(yùn)行時(shí)期,內(nèi)存分為幾種存在形式:系統(tǒng)作為代碼,數(shù)據(jù)信息劃分永久內(nèi)存,在系統(tǒng)中無法變化,一些硬件I/O將有關(guān)文件映射在固定空間中。
動(dòng)態(tài)內(nèi)存分配:其內(nèi)存無法固定劃分,需要結(jié)合系統(tǒng)進(jìn)行劃分。若通過非虛擬空間管理體制,通常變化動(dòng)態(tài)為內(nèi)存劃分體制,進(jìn)而提升性能。
1.2檢查內(nèi)存運(yùn)行狀態(tài)
/proc目錄內(nèi)主要為一些系統(tǒng)核心與運(yùn)行內(nèi)容,其內(nèi)容在空間中根據(jù)系統(tǒng)運(yùn)行生成。在目錄文件中,能夠看到目前空間內(nèi)存狀態(tài),以及不同程序應(yīng)用狀態(tài)。
在meminfo文件內(nèi),標(biāo)記了當(dāng)下系統(tǒng)空間全部應(yīng)用狀態(tài)。在文件中利用不同參數(shù)能夠得出當(dāng)下系統(tǒng)已用內(nèi)存和空間內(nèi)存占用。
/proc目錄中,不同程序都能夠建立相應(yīng)的文件,在文件中記錄相關(guān)文件,利用一些文件查找系統(tǒng)應(yīng)用內(nèi)存狀態(tài)。
1.3空間內(nèi)存回收
Kswapd作為Linux后臺(tái)關(guān)鍵程序,內(nèi)核初始化過程中通過init構(gòu)成。在系統(tǒng)內(nèi)存在無運(yùn)行狀態(tài)下小于某一個(gè)閥值后,kswapd被起動(dòng)進(jìn)行系統(tǒng)掃描并通過有效機(jī)制,釋放空閑頁。
二、嵌入式Linux系統(tǒng)內(nèi)存優(yōu)化使用方法
2.1系統(tǒng)總體優(yōu)化
更改Linux內(nèi)核數(shù)值。在proc/sys/vm文件中儲(chǔ)存著不同Linux數(shù)值,這其中一些與磁盤緩存關(guān)聯(lián),通過參數(shù)優(yōu)化系統(tǒng)內(nèi)存。比如:dirty ratio數(shù)值控制系統(tǒng)緩沖大小,單位為百分比,說明使用系統(tǒng)內(nèi)存的百分比,其概念為在緩沖應(yīng)用在系統(tǒng)空間多少時(shí),逐漸向磁盤寫出數(shù)值。
定制守護(hù)進(jìn)程。Linux在運(yùn)行過程中要起動(dòng)較多系統(tǒng),為本地與網(wǎng)絡(luò)用戶創(chuàng)造了Linux系統(tǒng)功能窗口,進(jìn)而直接應(yīng)對程序與用戶。其服務(wù)程序主要通過守護(hù)進(jìn)程運(yùn)行。守護(hù)進(jìn)程命名形式為xxxd,生存時(shí)間較長并長留于空間中,具有穩(wěn)定高的特點(diǎn)。相對于開放源代碼的Linux為用戶創(chuàng)造了另一種模式,能夠結(jié)合自身軟件條件,制定與管理Linux守護(hù)進(jìn)程。因?yàn)槭刈o(hù)進(jìn)程具有一定的特殊性,所以需要降低數(shù)量。
2.2一般進(jìn)程內(nèi)存優(yōu)化
Linux系統(tǒng)中,ELF是其二進(jìn)制文件格式。ELF文件能夠進(jìn)行文件的關(guān)聯(lián)與運(yùn)行,編譯器與連接器視為section集合,加載器將其視為segment集合。從elf文件中能夠得出segmen是通過多個(gè)構(gòu)成。在其執(zhí)行時(shí)可以將無用的文件進(jìn)行刪除,進(jìn)而增加儲(chǔ)存空間。
第一,內(nèi)存池優(yōu)化。嵌入式系統(tǒng)中,內(nèi)存池內(nèi)trunk最小容納字節(jié)為16bytes,從系統(tǒng)自身來說有些多余。怎樣能夠有效的應(yīng)用內(nèi)存池,可以重組內(nèi)存池,根據(jù)應(yīng)用大小,多分配有關(guān)trunk進(jìn)而實(shí)現(xiàn)優(yōu)化。
內(nèi)存泄漏檢查其主要在于攔截分配內(nèi)存與釋放空間函數(shù)調(diào)用。所以,想要檢測堆內(nèi)存泄漏,可以攔截free即可,進(jìn)而了解動(dòng)態(tài)運(yùn)行應(yīng)用狀態(tài)??梢酝ㄟ^虛擬化平臺(tái)進(jìn)行檢測,這樣一來無需進(jìn)行變更,并且其性能消耗只有10%。
第二,代碼和數(shù)據(jù)段。兩端和系統(tǒng)源代碼有著直接聯(lián)系,通常優(yōu)化方法為:通過有效數(shù)據(jù)結(jié)構(gòu)進(jìn)行優(yōu)化。科學(xué)設(shè)計(jì)編譯選項(xiàng),應(yīng)用相關(guān)軟件進(jìn)行優(yōu)化。在代碼優(yōu)化過程中,如無法與系統(tǒng)要求相符,則可以通過有關(guān)代碼修改。嵌入式系統(tǒng)Neri,代碼位置只讀儲(chǔ)存器,數(shù)據(jù)去與棧區(qū)在RAM內(nèi),能夠?qū)?shù)據(jù)移動(dòng)到代碼位置。降低運(yùn)算強(qiáng)度、循環(huán)處理。
第三、優(yōu)化檢驗(yàn)。檢測條件為RHEL5系統(tǒng),編譯器是arm-linux-gcc4.3.2。編寫代碼,代碼需要包含讀寫內(nèi)存,同時(shí)形成多個(gè)進(jìn)程;利用參數(shù)進(jìn)行優(yōu)化。及經(jīng)過實(shí)驗(yàn)數(shù)據(jù)顯示,優(yōu)化程序相對于修改前減少了5%。
三、結(jié)語
嵌入式系統(tǒng)優(yōu)化,還需要從內(nèi)存管理、應(yīng)用等多方面入手,以及軟件自身,掌握軟件在運(yùn)行時(shí)占用內(nèi)存狀態(tài),通過有關(guān)方法減少內(nèi)存應(yīng)用,提升系統(tǒng)運(yùn)行效果。
參 考 文 獻(xiàn)
[1]郭翠娟,盛雨晴,武志剛.基于DaVinci技術(shù)的嵌入式Web視頻監(jiān)控系統(tǒng)的設(shè)計(jì)[J].天津工業(yè)大學(xué)學(xué)報(bào),2016(02).
[2]孫明剛.基于嵌入式Linux的用電信息采集終端存儲(chǔ)數(shù)據(jù)的方法[J].中國新技術(shù)新產(chǎn)品,2016(12).
[3]葛吳超,周亦敏.基于ARM9體系架構(gòu)的編譯優(yōu)化研究[J].電子科技,2016(09).