蔣林林,劉 峰
(1.重慶郵電大學(xué)光通信與網(wǎng)絡(luò)重點(diǎn)實(shí)驗(yàn)室,重慶400065;2.工業(yè)和信息化部電信研究院西部分院,重慶401336)
無線傳感網(wǎng)絡(luò)節(jié)點(diǎn)內(nèi)存管理機(jī)制的研究與設(shè)計(jì)
蔣林林1,劉峰2*
(1.重慶郵電大學(xué)光通信與網(wǎng)絡(luò)重點(diǎn)實(shí)驗(yàn)室,重慶400065;2.工業(yè)和信息化部電信研究院西部分院,重慶401336)
針對現(xiàn)有無線傳感器網(wǎng)絡(luò)WSNs(Wireless Sensor Networks)節(jié)點(diǎn)片上RAM(隨機(jī)存儲(chǔ)器)利用率低的特點(diǎn),設(shè)計(jì)了一種基于鏈表的改進(jìn)型內(nèi)存管理方案。該方案以事件驅(qū)動(dòng)開發(fā)模式為程序運(yùn)行的前提,在將RAM劃分為靜態(tài)內(nèi)存空間和動(dòng)態(tài)內(nèi)存空間之后,通過內(nèi)存隔離技術(shù),實(shí)現(xiàn)內(nèi)存管理結(jié)構(gòu)與內(nèi)存空間在實(shí)體內(nèi)存中的分離,從而達(dá)到提高節(jié)點(diǎn)內(nèi)存利用率的目的。經(jīng)測試,寫內(nèi)存的平均速率能夠達(dá)到500 kbit/s,而在開啟內(nèi)存交換功能時(shí),實(shí)際內(nèi)存的使用率接近80%。最終為提高節(jié)點(diǎn)內(nèi)存利用率提供了一種良好的解決方案。
無線傳感器網(wǎng)絡(luò);內(nèi)存管理;內(nèi)存隔離;事件驅(qū)動(dòng);內(nèi)存交換
內(nèi)存分配策略總體可分為靜態(tài)內(nèi)存分配和動(dòng)態(tài)內(nèi)存分配兩大類[1]。系統(tǒng)采用靜態(tài)內(nèi)存分配方式時(shí),由于程序在編譯和鏈接時(shí)已分配好所需的內(nèi)存空間,因此采用這種內(nèi)存分配方式的系統(tǒng)具有實(shí)時(shí)響應(yīng)快和內(nèi)存管理結(jié)構(gòu)簡單的特點(diǎn)。但是這種分配方式是按照在最壞情況下進(jìn)行的內(nèi)存分配,因此內(nèi)存利用率通常都很低。采用動(dòng)態(tài)內(nèi)存分配方式的系統(tǒng)則是將按照用戶的實(shí)際需求進(jìn)行內(nèi)存分配。由于內(nèi)存的按需分配方式,使得使用該內(nèi)存分配方式的系統(tǒng)的內(nèi)存利用率比前者高得多[2]。實(shí)際應(yīng)用中,為兼顧內(nèi)存分配效率和利用率,無線傳感器網(wǎng)絡(luò)操作系統(tǒng)[3-4]的內(nèi)存分配方式同時(shí)采用了這兩類??墒鞘褂眠@種混合式的內(nèi)存分配方式的系統(tǒng),其內(nèi)存利用率還是沒能達(dá)到令人滿意的程度。
因此,設(shè)計(jì)本內(nèi)存管理方案的目的是進(jìn)一步提高內(nèi)存的利用率。該方案以無線傳感器網(wǎng)絡(luò)操作系統(tǒng)基于事件驅(qū)動(dòng)[5-10]為前提,使用片上Flash存儲(chǔ)內(nèi)存數(shù)據(jù),以此進(jìn)一步提高了內(nèi)存的利用率。
基于鏈表的改進(jìn)型內(nèi)存管理機(jī)制的整體架構(gòu)如圖1所示??傮w上,節(jié)點(diǎn)的內(nèi)存被劃分為靜態(tài)內(nèi)存和動(dòng)態(tài)內(nèi)存。對于靜態(tài)內(nèi)存,內(nèi)存管理單元在節(jié)點(diǎn)的初始化階段就以系統(tǒng)預(yù)定義的內(nèi)存分配“粒度[11]”進(jìn)行內(nèi)存分配;對于動(dòng)態(tài)內(nèi)存,存管理單元在收到用戶的動(dòng)態(tài)內(nèi)存分配請求時(shí)才進(jìn)行內(nèi)存分配。為方便管理內(nèi)存管理結(jié)構(gòu),我們將內(nèi)存管理單元分配的首個(gè)內(nèi)存管理結(jié)構(gòu)的地址保存在與其對應(yīng)的類型和地址查找表中。系統(tǒng)的內(nèi)存管理結(jié)構(gòu)被內(nèi)存管理單元作為管理節(jié)點(diǎn)內(nèi)存的操作對象,因此內(nèi)存管理單元對節(jié)點(diǎn)內(nèi)存的管理實(shí)際上就是對內(nèi)存管理結(jié)構(gòu)的管理。為了反向標(biāo)記內(nèi)存數(shù)據(jù)對應(yīng)的內(nèi)存管理結(jié)構(gòu),我們在該管理機(jī)制中將引入一種被稱為“內(nèi)存地址反向映射[12]”的機(jī)制。該機(jī)制使得內(nèi)存管理單元在實(shí)現(xiàn)逆向查找內(nèi)存數(shù)據(jù)對應(yīng)的管理結(jié)構(gòu)的的同時(shí)還能為實(shí)體內(nèi)存空間的操作提供一定的合法性檢測。為簡化內(nèi)存管理,我們借鑒了現(xiàn)代操作系統(tǒng)中使用的“頁面[13]”劃分技術(shù),實(shí)現(xiàn)一種被稱為“類頁面”的機(jī)制。
圖1 內(nèi)存管理整體架構(gòu)
2.1類型與地址查找表
該表格被用來保存與其表示類型相對應(yīng)的管理結(jié)構(gòu)的地址,其定義的結(jié)構(gòu)與內(nèi)存管理結(jié)構(gòu)的關(guān)系如圖2所示。
圖2 類型與地址查找表與管理結(jié)構(gòu)關(guān)系圖
查找表成員 type表示管理結(jié)構(gòu)的類型;default_num表示與type對應(yīng)的管理結(jié)構(gòu)的數(shù)量;adr_offset保存著管理結(jié)構(gòu)的地址。在該內(nèi)存管理機(jī)制中,管理結(jié)構(gòu)主要包括靜態(tài)內(nèi)存管理結(jié)構(gòu)、動(dòng)態(tài)內(nèi)存管理結(jié)構(gòu)和“類頁面”管理結(jié)構(gòu)。
2.2內(nèi)存管理結(jié)構(gòu)
動(dòng)態(tài)內(nèi)存管理結(jié)構(gòu)和靜態(tài)內(nèi)存管理結(jié)構(gòu)的共有屬性memCommAttr與實(shí)體內(nèi)存數(shù)據(jù)的關(guān)系如圖3所示。
圖3 內(nèi)存管理結(jié)構(gòu)共同屬性
結(jié)構(gòu)成員type指示該管理結(jié)構(gòu)所管理內(nèi)存的類型,next保存著同類型的內(nèi)存管理結(jié)構(gòu)的地址,memptr保存著該管理結(jié)構(gòu)所管理的內(nèi)存地址,size表示內(nèi)存的容量。
我們以圖3定義的內(nèi)存管理結(jié)構(gòu)為基礎(chǔ),設(shè)計(jì)了靜態(tài)內(nèi)存管理結(jié)構(gòu)和動(dòng)態(tài)內(nèi)存管理結(jié)構(gòu)。
圖4 靜態(tài)內(nèi)存管理結(jié)構(gòu)與靜態(tài)內(nèi)存空間的關(guān)系
靜態(tài)內(nèi)存管理結(jié)構(gòu)包括它與動(dòng)態(tài)內(nèi)存管理的公共屬性;num表示靜態(tài)內(nèi)存塊的數(shù)量;count被用來記錄靜態(tài)內(nèi)存塊的分配情況。
為進(jìn)一步提高節(jié)點(diǎn)內(nèi)存利用率,我們實(shí)現(xiàn)了一種被稱為“類內(nèi)存交換”的功能。而為了兼顧內(nèi)存的分配效率和內(nèi)存的利用率,我們規(guī)定只有被劃分為動(dòng)態(tài)內(nèi)存區(qū)的內(nèi)存空間才支持“類內(nèi)存交換”功能。
圖5 動(dòng)態(tài)內(nèi)存管理結(jié)構(gòu)
由圖5可看出,動(dòng)態(tài)內(nèi)存管理結(jié)構(gòu)就是由“類內(nèi)存交換”結(jié)構(gòu)和內(nèi)存管理結(jié)構(gòu)的共有屬性構(gòu)成。
2.3地址逆向映射
為實(shí)現(xiàn)內(nèi)存數(shù)據(jù)與其對應(yīng)內(nèi)存管理結(jié)構(gòu)的映射,我們在內(nèi)存管理機(jī)制中設(shè)計(jì)了“內(nèi)存逆向映射”機(jī)制。
圖6 內(nèi)存反向映射結(jié)構(gòu)與動(dòng)態(tài)內(nèi)存空間的關(guān)系
地址逆向映射結(jié)構(gòu)的成員type用來標(biāo)識(shí)該內(nèi)存的類型;id保存著該內(nèi)存空間的區(qū)域id號(hào),內(nèi)存管理單元就是通過分配區(qū)域id號(hào)的方式實(shí)現(xiàn)了內(nèi)存數(shù)據(jù)與內(nèi)存管理結(jié)構(gòu)關(guān)系的逆向映射;check保存的數(shù)據(jù)被用來進(jìn)行用戶操作的合法性檢測,其值計(jì)算方式如式(1)。
2.4類頁面
提高內(nèi)存分配效率和降低內(nèi)存管理復(fù)雜性,這也是該內(nèi)存管理機(jī)制追求的目標(biāo)。因此我們特定引入了“類頁面[11]”功能,通過將節(jié)點(diǎn)內(nèi)存按照系統(tǒng)預(yù)定義的大小劃分為內(nèi)存塊,使得內(nèi)存管理單元只需要保證其分配的id號(hào)在“類頁面”內(nèi)的局部唯一性,而且也使得內(nèi)存管理單元能夠快速而有效了解任意“類頁面”中節(jié)點(diǎn)動(dòng)態(tài)內(nèi)存的分配情況。
圖7 類頁面管理結(jié)構(gòu)
內(nèi)存管理單元將“類頁面”中的首個(gè)被系統(tǒng)分配的動(dòng)態(tài)內(nèi)存管理結(jié)構(gòu)通過該next和prev成員組織起來?!邦愴撁妗惫芾斫Y(jié)構(gòu)成員occup和count分別表示頁面中已被分配的內(nèi)存大小和當(dāng)前在類頁面中存在的動(dòng)態(tài)內(nèi)存管理結(jié)構(gòu)的數(shù)量。
2.5內(nèi)存交換
為兼顧節(jié)點(diǎn)內(nèi)存利用率和分配效率,節(jié)點(diǎn)的動(dòng)態(tài)內(nèi)存空間被設(shè)定為唯一支持“內(nèi)存交換”機(jī)制的內(nèi)存區(qū)域。
圖8 內(nèi)存交換結(jié)構(gòu)
next和prev被內(nèi)存管理單元用來保存“類頁面”中被交換出數(shù)據(jù)的內(nèi)存管理單元的地址,而動(dòng)態(tài)內(nèi)存交換結(jié)構(gòu)的成員id和memptr被內(nèi)存管理單元組合起來使用,用來標(biāo)識(shí)當(dāng)前內(nèi)存數(shù)據(jù)被保存的位置,具體含義如表1所示。
表1 保存數(shù)據(jù)的位置或狀態(tài)
3.1節(jié)點(diǎn)內(nèi)存初始化
節(jié)點(diǎn)內(nèi)存管理單元進(jìn)行初始化操作時(shí),首先它從節(jié)點(diǎn)的非易失性存儲(chǔ)器(Flash或EEPROM)的扇區(qū)中讀取與節(jié)點(diǎn)內(nèi)存配置相關(guān)的參數(shù),其次依據(jù)讀取的配置參數(shù)進(jìn)行節(jié)點(diǎn)靜態(tài)內(nèi)存和動(dòng)態(tài)內(nèi)存空間的劃分,最后分配靜態(tài)內(nèi)存塊。
圖9 初始化后系統(tǒng)靜態(tài)內(nèi)存分布
由于分配的靜態(tài)內(nèi)存容量是系統(tǒng)設(shè)計(jì)者考慮最壞的情形下,用戶線程可能用到的內(nèi)存容量,因此這種分配方式無疑會(huì)降低靜態(tài)內(nèi)存的利用率。為提高節(jié)點(diǎn)靜態(tài)內(nèi)存的利用率,我們將系統(tǒng)設(shè)定為在默認(rèn)情況下系統(tǒng)只分配default_num一半數(shù)量的靜態(tài)內(nèi)存給用戶,而在內(nèi)存管理單元檢測到靜態(tài)內(nèi)存的使用率達(dá)到系統(tǒng)閾值時(shí),它將自動(dòng)分配余下的靜態(tài)內(nèi)存空間。
3.2內(nèi)存申請
內(nèi)存管理單元為用戶提供的內(nèi)存分配接口為mmem_alloc,用戶在使用該接口時(shí)必須提供兩個(gè)參數(shù):申請內(nèi)存空間的容量與類型。由于節(jié)點(diǎn)的內(nèi)存空間被內(nèi)存管理單元?jiǎng)澐譃椴煌念愋?,因此在分配不同類型的?nèi)存時(shí),內(nèi)存管理單元將執(zhí)行不同的流程。3.2.1靜態(tài)內(nèi)存申請
用戶程序向mem_alloc接口函數(shù)傳遞參數(shù)后,內(nèi)存管理單元首先將進(jìn)行傳入?yún)?shù)的合法性檢測。如果參數(shù)不合法,那么函數(shù)通過設(shè)置全局變量merrno指明內(nèi)存分配失敗的具體原因之后將自動(dòng)返回;如果參數(shù)合法且還有未分配的靜態(tài)內(nèi)存,那么接口函數(shù)在完成相關(guān)靜態(tài)內(nèi)存管理結(jié)構(gòu)的設(shè)置后將返回靜態(tài)內(nèi)存塊的首地址。
圖10 靜態(tài)內(nèi)存空間分配
接口函數(shù)對參數(shù)合法性的判定依據(jù)主要是檢查用戶程序傳入的是否是系統(tǒng)預(yù)定義的type類型,同時(shí)檢查靜態(tài)內(nèi)存管理結(jié)構(gòu)是否支撐其申請的內(nèi)存空間的容量size。如果同時(shí)滿足上述兩個(gè)條件,那么傳入的參數(shù)合法,否則為非法。
3.2.2動(dòng)態(tài)內(nèi)存申請
由于節(jié)點(diǎn)的動(dòng)態(tài)內(nèi)存空間支持“內(nèi)存交換”功能,所以當(dāng)內(nèi)存管理單元遇到無法分配足夠的空閑動(dòng)態(tài)內(nèi)存時(shí),它將激活系統(tǒng)的“內(nèi)存交換”功能模塊。該功能模塊在完成內(nèi)存交換之后,它將自動(dòng)調(diào)用系統(tǒng)的內(nèi)存分配函數(shù)。
圖11 動(dòng)態(tài)內(nèi)存申請程序執(zhí)行流程
3.3內(nèi)存釋放
內(nèi)存管理單元為用戶提供的內(nèi)存釋放的接口函數(shù)為mmem_free,用戶在調(diào)用該接口時(shí),必須提供需要釋放的內(nèi)存的地址。內(nèi)存管理單元在接收到用戶傳遞的內(nèi)存地址后,將進(jìn)行傳入?yún)?shù)的合法性判定。如果參數(shù)合法且釋放的內(nèi)存空間地址屬于動(dòng)態(tài)內(nèi)存空間,那么內(nèi)存管理單元將依據(jù)“地址反射”機(jī)制查找與該內(nèi)存空間對應(yīng)的內(nèi)存管理結(jié)構(gòu),然后通過對該結(jié)構(gòu)進(jìn)行操作完成內(nèi)存的釋放。
圖12 內(nèi)存釋放流程
由于函數(shù)對參數(shù)合法性的判定將根據(jù)釋放內(nèi)存類型的不同而變化,所以接口函數(shù)在進(jìn)行參數(shù)合法性判定之前,必須先進(jìn)行內(nèi)存類型的判定。接口函數(shù)的判定是通過比較參數(shù)address與指示靜態(tài)內(nèi)存區(qū)容量的變量memStaticSize的大小,如果address小于memStaticSize那么內(nèi)存屬于靜態(tài)類型;如果address大于memStaticSize,那么內(nèi)存屬于動(dòng)態(tài)類型。當(dāng)釋放的內(nèi)存空間屬于靜態(tài)內(nèi)存空間時(shí),系統(tǒng)對于參數(shù)address合法性的判定依據(jù)是能否找到管理該空間的靜態(tài)內(nèi)存管理結(jié)構(gòu);當(dāng)釋放的內(nèi)存空間屬于動(dòng)態(tài)內(nèi)存空間時(shí),式(2)的計(jì)算結(jié)果作為釋放地址合法性的判定依據(jù)。
如果result為零,那么函數(shù)判定參數(shù)address合法,接口函數(shù)將繼續(xù)進(jìn)行內(nèi)存的釋放操作;如果result等于一個(gè)非零值,函數(shù)判定參數(shù)address非法,接口函數(shù)將在設(shè)置全局變量merror之后返回。
靜態(tài)內(nèi)存管理結(jié)構(gòu)和動(dòng)態(tài)內(nèi)存管理結(jié)構(gòu)屬性的差異造成內(nèi)存管理單元在執(zhí)行內(nèi)存釋放時(shí),對內(nèi)存管理結(jié)構(gòu)將執(zhí)行差異化的操作,其具體體現(xiàn)在:
(1)靜態(tài)內(nèi)存釋放:系統(tǒng)將內(nèi)存管理結(jié)構(gòu)中與釋放內(nèi)存地址對應(yīng)的標(biāo)志位置為無效即完成了靜態(tài)內(nèi)存的釋放。
(2)動(dòng)態(tài)內(nèi)存釋放:系統(tǒng)通過內(nèi)存管理結(jié)構(gòu)成員memptr和id的組合來判定內(nèi)存數(shù)據(jù)的當(dāng)前保存位置。如果數(shù)據(jù)保存在Flash,那么系統(tǒng)在完成Flash的擦除后,將把內(nèi)存管理結(jié)構(gòu)從類頁面中刪除;如果數(shù)據(jù)保存在節(jié)點(diǎn)動(dòng)態(tài)內(nèi)存區(qū),那么系統(tǒng)直接從“類頁面”中刪除該內(nèi)存管理結(jié)構(gòu)之后。在完成動(dòng)態(tài)內(nèi)存的釋放后,系統(tǒng)都會(huì)執(zhí)行空閑動(dòng)態(tài)內(nèi)存的合并。
3.4內(nèi)存交換
當(dāng)前情況下,我們將“內(nèi)存交換”機(jī)制的激活條件定為如下兩種:
(1)內(nèi)存管理單元檢測到無線傳感網(wǎng)絡(luò)節(jié)點(diǎn)空閑的動(dòng)態(tài)內(nèi)存容量小于系統(tǒng)設(shè)定的閾值;
(2)內(nèi)存管理單元執(zhí)行動(dòng)態(tài)內(nèi)存分配時(shí)發(fā)現(xiàn)無法滿足用戶的需求。
當(dāng)內(nèi)存交換功能模塊被激活時(shí),它將按照系統(tǒng)預(yù)設(shè)的算法將內(nèi)存數(shù)據(jù)保存到節(jié)點(diǎn)Flash中。而為了識(shí)別Flash中存儲(chǔ)的內(nèi)存數(shù)據(jù),內(nèi)存交換模塊將把動(dòng)態(tài)內(nèi)存管理結(jié)構(gòu)相關(guān)的type、memptr、id和check這四個(gè)成員與內(nèi)存數(shù)據(jù)同時(shí)保存于節(jié)點(diǎn)Flash。由此也可看出,“內(nèi)存交換”將涉及到兩類操作:內(nèi)存數(shù)據(jù)換出和換入,其實(shí)現(xiàn)算法如下:
Algorithm 1 Memory data swap out require_size←user_require_size largest_in_memory←0 for all empty_memory_space∈PAGES do s←get_max_empty_space(empty_memory_space)if|neighbor_space_mergeable(s)|!=0∧|merge_space_size(s)|>require_size then largest_in_memory←memory_swap(s)return address_after_merge else largest_in_memory←s end if end for return null Algorithm 2 Memory data swap in sectors_type←type sectors_id←id sectors_memptr←memptr sectors_check←check for all sector∈SECTORS do s←get_sector_metadata(sector)if|extract_type(s)|=sectors_type∧|extract_id(s)|=sectors_id∧|extract_memptr(s)|=sectors_memptr∧|extract_check(s)|=check then data_size←extract_size(s)data_address←extract_address(s)memory_address←memalloc(mem_dynamic,datasize)if|address|!=0 then data_swap_in(address,data_address,datasize)return 0 end if end if end for return-1
整個(gè)內(nèi)存管理機(jī)制的性能測試分為內(nèi)存分配性能測試和內(nèi)存利用率測試。由于該內(nèi)存管理機(jī)制涉及Flash數(shù)據(jù)讀寫操作,因此我們測試平臺(tái)的核心芯片采用具有DMA[15]功能的TI公司生產(chǎn)的CC2530F256。該芯片基于2.4 GHz IEEE 802.15.4、ZigBee和RF4CE上的一個(gè)片上系統(tǒng)解決方案,片上資源包括8 kbyte SRAM、256 kbyte片上Flash。為了方便對該內(nèi)存管理機(jī)制性能的測試,我們使用該芯片的5 kbyte SRAM作為系統(tǒng)的內(nèi)存管理區(qū)和10 kbyte Flash作為內(nèi)存交換區(qū)。
4.1內(nèi)存分配性能測試
內(nèi)存分配性能測試主要是測試節(jié)點(diǎn)內(nèi)存管理單元寫數(shù)據(jù)的速率。為減小測量的誤差,我們將系統(tǒng)寫數(shù)據(jù)的時(shí)間定為系統(tǒng)執(zhí)行100次相同操作的總共用時(shí)。由于節(jié)點(diǎn)的動(dòng)態(tài)內(nèi)存分配方案可能使得系統(tǒng)的“內(nèi)存交換”功能被激活,而內(nèi)存交換的用時(shí)與系統(tǒng)自身設(shè)計(jì)的本地?cái)?shù)據(jù)存儲(chǔ)方式和內(nèi)存交換的算法有密切關(guān)系,因此我們將從總的測試用時(shí)中減去這部分額外操作的時(shí)間。
測試方法:我們利用系統(tǒng)隨機(jī)函數(shù),隨機(jī)生成數(shù)值大小在特定范圍內(nèi)的數(shù)字,并將該數(shù)字作為向內(nèi)存管理單元申請內(nèi)存空間大小的依據(jù)。當(dāng)系統(tǒng)無法滿足的內(nèi)存的申請需求時(shí),測試結(jié)束。
圖13 內(nèi)存分配性能測試
4.2內(nèi)存利用率測試
我們將內(nèi)存利用率測試定義為:測試成功寫入內(nèi)存空間的數(shù)據(jù)量(包括被交換到Flash的數(shù)據(jù))與整個(gè)內(nèi)存容量的百分比。
圖14 內(nèi)存利用率測試
本文介紹了一種基于鏈表的改進(jìn)型內(nèi)存管理機(jī)制,該機(jī)制通過隔離內(nèi)存的數(shù)據(jù)空間和管理結(jié)構(gòu),實(shí)現(xiàn)了“內(nèi)存交換”的目的。本設(shè)計(jì)需要改進(jìn)的地方為設(shè)計(jì)更加有效的內(nèi)存交換預(yù)測算法,該算法能夠更準(zhǔn)確的選擇出將來一段時(shí)間內(nèi)不會(huì)被用戶線程使用的內(nèi)存數(shù)據(jù)塊。該內(nèi)存管理方案為提高無線傳感網(wǎng)絡(luò)節(jié)點(diǎn)的內(nèi)存利用率和外部內(nèi)存碎片的問題提供了一種可行的解決方案。
[1]William Stallings.操作系統(tǒng)精髓與設(shè)計(jì)原理[M].第7版.陳向群,陳渝,譯.機(jī)械工業(yè)出版社,2012:210-264.
[2]朱升林.LwIP協(xié)議深度剖析與實(shí)戰(zhàn)演練[M].水利水電出版社,2012:205-226.
[3]Han C,Rengaswamy R K,Shea R.A Dynamic Operating System for Sensor Nodes[C]//MobiSys:Proceedings of the 3rd International Conference on Mobile Systems,Applications,and Services. New York:ACM Press,2005:163-176.
[4]Adam Dunkels,Bj?rn Gr?nvall,Thiemo Voigt.Contiki-A Lightweight and Flexible Operating System for Tiny Networked Sensors[C]//29th Annual IEEE International Conference on Local Computer Networks.New York:IEEE,2004:455-462.
[5]Cheong E,Liebman J,Liu J.Tiny GALS:A Programming Model for Event-Driven Embedded Systems[C]//Proc of the 18th Annual ACM Symposium on Applied Computing(SAC'03).New York:ACM Press,2003:698-704:126-128.
[6]Simpson Z B.State Machines:Cooperative Mini-Kernels with Yielding[C]//Computer Game Developer's Conference.Austin:1999.
[7]Kasten O,R?mer K.Beyond Event Handlers:Programming Wireless Sensors with Attributed State Machines[C]//Proceedings of the 4th International Symposium on Information Processing in Sensor Networks.New York:IEEE Press,2005:768-772.
[8]Tsiftes Nicolas,Adam Dunkels,Zhitao He.Enabling Large-Scale Storage in Sensor Networks with the Coffee File System[C]//International Conference on Information Processing in Sensor Networks.San Francisco:IEEE Computer Society,2009:349-360.
[9]Dunkels A,Schmid O,Voigt T.Protothreads:Simplifying Event-Driven Programming of Memory-Constrained Embedded Systems[C]//Proceedings of the 4th International Conference on Embedded Networked Sensor Systems.New York:ACM Press,2006:29-42.
[10]Adya A,Howell J,Theimer M.Cooperative Task Management Without Manual Stack Management[C]//Proceedings of the USENIX Annual Technical Conference.Monterey:2002.
[11]Shih E,Cho S,Nickes,et al.Physical Layer Driven Protocol and Algorithm Design for Energy-Efficient Wireless Sensor Networks[C]//Proceedings of ACM MobiCom.Rome:2001:272-286.
[12]田輝.基于IP的物聯(lián)網(wǎng)架構(gòu)技術(shù)與應(yīng)用[M].人民郵電出版社,2011:138-148
[13]操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[M].第3版.陳渝,諶衛(wèi)軍,譯.電子工業(yè)出版社,2007:255-259.
[14]Welsh M,Mainland G.Programming Sensor Networks Using Abstract Regions[C]//Proc USENIX/ACM NSDI.San Francisco:2004:29-42.
[15]曹宗凱,胡晨,姚國良.DMA在內(nèi)存間數(shù)據(jù)拷貝中的應(yīng)用及其性能分析[J].電子器件,2007(30):311-317.
蔣林林(1989-),男,漢族,四川人,重慶郵電大學(xué)通信學(xué)院,碩士研究生,主要研究方向?yàn)闊o線傳感器網(wǎng)絡(luò)資源管理技術(shù),David_Jiangll@foxmail.com;
劉峰(1987-),漢族,重慶人,工業(yè)和信息化部電信研究院西部分院,助理工程師,主要研究方向?yàn)槲锫?lián)網(wǎng)應(yīng)用技術(shù),liufeng@chinattl.com。
Research and Design on Memory Management Mechanism in Wireless Sensor Networks
JIANG Linlin1,LIU Feng2*
(1.Chongqing University of Posts and Telecommunications,Key Laboratory of Optical Communications and Networks,Chongqing 400065,China;2.West Institute of China Academy of Telecommunication Research,Chongqing 401336,China)
At present,the usage of the on-chip RAM of wireless sensor networks node is really very low,which has driven us to have designed an improved memory management mechanism based on linked list.In this mechanism,we assume that all the programs were developed under the event-driven model.After that,RAM memory of the node is divided into static and dynamic memory space.At the same time,we have imported the memory isolation technology,which separates the memory management structure and memory space in the memory entity.In this way,we have achieved the purpose of managing the memory.The function test shows that the average writing speed is 500 kbit/s,if we had opened the memory swap mechanism,the usage of the RAM can almost reach 80%.Ultimately,the memory management mechanism proposed by us is an efficient solution to improve memory usage.
wireless sensor networks;memory management;memory isolation;event-driven;memory swap
TP302.1
A
1005-9490(2016)05-1118-06
2015-10-07修改日期:2015-11-10
EEACC:6150P10.3969/j.issn.1005-9490.2016.05.020