嵌入式Web訪問(wèn)時(shí)的內(nèi)存丟失問(wèn)題
4 內(nèi)存丟失問(wèn)題的解決
由于系統(tǒng)的內(nèi)存管理默認(rèn)采用“2的冪”的分配方法,這就造成了內(nèi)存空間的巨大浪費(fèi),當(dāng)某些應(yīng)用程序要申請(qǐng)較大的連續(xù)空間時(shí),卻不能滿足。為了解決這個(gè)問(wèn)題,專門為uClinux內(nèi)核設(shè)計(jì)了可選的內(nèi)存分配器。不同的內(nèi)核版本,這個(gè)可選的內(nèi)存分配器不同,一般是page_alloc2和kmalloc2。
page_alloc2能解決缺省的分配方法造成的浪費(fèi)問(wèn)題。雖然它也是使用“2的冪”的分配方法,但它是按頁(yè)(每頁(yè)4 096B,即4 KB)分配的,分配的內(nèi)存大小如果已經(jīng)滿足了要求,則只是將當(dāng)前的一頁(yè)分配出去,其他的就不再分配。還是一個(gè)65 KB的應(yīng)用程序,如果使用這種方法,就只是分配68 KB(≥65 KB,且為整頁(yè))即可,這樣就能節(jié)省60 KB的空間。
page_alloc2還采取了一些避免內(nèi)存碎片的方法。它將所有的兩頁(yè)(8 KB)或更少的內(nèi)存需求從空閑內(nèi)存開(kāi)始部分向上分配,所有大的內(nèi)存需求從剩余內(nèi)存的末尾部分開(kāi)始向下分配。這樣防止了網(wǎng)絡(luò)緩存等的臨時(shí)分配,避免了內(nèi)存碎片的出現(xiàn)。同時(shí),它支持一次申請(qǐng)超過(guò)1 MB的內(nèi)存空間,這對(duì)一些大的應(yīng)用程序是很好的支持。采用此方法后,在系統(tǒng)運(yùn)行過(guò)程中,并未出現(xiàn)過(guò)頁(yè)面訪問(wèn)出錯(cuò)問(wèn)題。通過(guò)free命令查看內(nèi)存分配如表2所列。本文引用地址:http://www.biyoush.com/article/152276.htm
結(jié) 語(yǔ)
在嵌入式系統(tǒng)應(yīng)用日益廣泛的情況下,本文結(jié)合嵌入式Web在多支點(diǎn)觸發(fā)系統(tǒng)中的應(yīng)用,介紹了Web訪問(wèn)出現(xiàn)的問(wèn)題以及它的解決方法。在實(shí)際應(yīng)用中,新的內(nèi)存分配方法能讓系統(tǒng)穩(wěn)定地工作,但是從表2可以發(fā)現(xiàn):采用“page_alloc2'’的內(nèi)存分配方法時(shí),系統(tǒng)的Cache較小,這就造成了頁(yè)面訪問(wèn)有一定的延時(shí)。而“2的冪”的分配方法,系統(tǒng)的Cache較大,訪問(wèn)速度較快。從這個(gè)對(duì)比得知,在反應(yīng)時(shí)間要求不是很高的情況下,“page_alloc2”的內(nèi)存分配方法更適合小內(nèi)存的嵌入式系統(tǒng);而“2的冪”的分配方法更合適那些內(nèi)存足夠大的嵌入式系統(tǒng)。系統(tǒng)開(kāi)發(fā)者可以根據(jù)實(shí)際情況采用不同的方案。
評(píng)論