專利名稱:嵌入式點(diǎn)對(duì)點(diǎn)下載系統(tǒng)的內(nèi)存分配方法
技術(shù)領(lǐng)域:
本發(fā)明涉及到嵌入式技術(shù)領(lǐng)域以及網(wǎng)絡(luò)下載技術(shù)領(lǐng)域,其中特別涉及到一種嵌入式點(diǎn)對(duì) 點(diǎn)(BitTorrent, BT)下載系統(tǒng)的內(nèi)存分配技術(shù)。
背景技術(shù):
隨著信息技術(shù)的發(fā)展嵌入式技術(shù)也不斷的發(fā)展壯大,嵌入式技術(shù)針對(duì)特有的應(yīng)用而設(shè)計(jì) ,具有功耗小,體積小和使用方便的特點(diǎn)。然而也正是由于這些特點(diǎn)限制了嵌入式系統(tǒng)的某 些功能,比如嵌入式系統(tǒng)的處理器功能不夠強(qiáng)大,嵌入式系統(tǒng)的內(nèi)存資源比較小,從而限制 了比較大型的較占內(nèi)存資源的應(yīng)用程序在其上的應(yīng)用。
BT下載技術(shù)是超文本傳輸協(xié)議(Hyper Text Transfer Protocol, HTTP)下載技術(shù)和文 件傳輸協(xié)議(File Transfer Protocol, FTP)下載技術(shù)之后出現(xiàn)的另一種網(wǎng)絡(luò)資源共享技 術(shù)。將BT下載應(yīng)用于嵌入式系統(tǒng)中存在一些技術(shù)難點(diǎn),比如BT下載技術(shù)需要占用比較大的內(nèi) 存開銷和處理器資源,而嵌入式系統(tǒng)的內(nèi)存資源很有限。另外,BT下載過程中需要不斷地動(dòng) 態(tài)地向系統(tǒng)申請(qǐng)內(nèi)存和釋放內(nèi)存資源,這樣的內(nèi)存操作會(huì)造成嵌入式系統(tǒng)產(chǎn)生較多的內(nèi)存碎 片。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是,提出一種嵌入式BT下載系統(tǒng)的內(nèi)存分配方法,能有效分 配嵌入式系統(tǒng)中有限的內(nèi)存資源,使BT下載這種較占內(nèi)存資源的應(yīng)用能在嵌入式系統(tǒng)中穩(wěn)定 運(yùn)行;進(jìn)一步的,還能降低內(nèi)存碎片的產(chǎn)生。
本發(fā)明為解決上述技術(shù)問題所采用的技術(shù)方案是,嵌入式點(diǎn)對(duì)點(diǎn)下載系統(tǒng)的內(nèi)存分配方 法,下載系統(tǒng)為節(jié)點(diǎn)分配一段內(nèi)存鏈表作為下載分配內(nèi)存;所述內(nèi)存鏈表指向下載系統(tǒng)中若 干小塊內(nèi)存區(qū)域。
在所述節(jié)點(diǎn)使用過程中,下載系統(tǒng)將該節(jié)點(diǎn)標(biāo)識(shí)為使用中狀態(tài);所述使用中狀態(tài)表示其 它節(jié)點(diǎn)無法復(fù)用該節(jié)點(diǎn)所對(duì)應(yīng)的該段內(nèi)存鏈表所指向的小塊內(nèi)存區(qū)域;在所述節(jié)點(diǎn)使用完畢 后,下載系統(tǒng)將該節(jié)點(diǎn)標(biāo)識(shí)為空閑狀態(tài);所述空閑狀態(tài)表示其它節(jié)點(diǎn)可復(fù)用該節(jié)點(diǎn)所對(duì)應(yīng)的 該段內(nèi)存鏈表所指向的小塊內(nèi)存區(qū)域。
具體包括以下步驟
a、下載系統(tǒng)獲得節(jié)點(diǎn)信息,并創(chuàng)建該節(jié)點(diǎn)為新節(jié)點(diǎn);b、 下載系統(tǒng)遍歷節(jié)點(diǎn)鏈表,査找是否有被標(biāo)識(shí)為空閑狀態(tài)的節(jié)點(diǎn);若是,進(jìn)入步驟c; 若否,進(jìn)入步驟d;
c、 下載系統(tǒng)控制新節(jié)點(diǎn)復(fù)用査找到的空閑狀態(tài)的節(jié)點(diǎn)所對(duì)應(yīng)的一段內(nèi)存鏈表所指向的 小塊內(nèi)存區(qū)域,并重新標(biāo)識(shí)所述空閑狀態(tài)的節(jié)點(diǎn)為使用中狀態(tài);進(jìn)入步驟e;
d、 下載系統(tǒng)為新節(jié)點(diǎn)重新分配一段內(nèi)存鏈表作為下載分配內(nèi)存;并將所述新節(jié)點(diǎn)添加 至節(jié)點(diǎn)鏈表,并標(biāo)識(shí)該新節(jié)點(diǎn)為使用中狀態(tài);進(jìn)入步驟e;
e、 下載系統(tǒng)與新節(jié)點(diǎn)數(shù)據(jù)傳輸完畢,將該處于使用中狀態(tài)的節(jié)點(diǎn)標(biāo)識(shí)為空閑狀態(tài)。 本發(fā)明的有益效果是,使用一連串小塊的內(nèi)存來代替一大塊連續(xù)內(nèi)存,解決了嵌入式系
統(tǒng)內(nèi)存資源有限,大塊連續(xù)內(nèi)存申請(qǐng)難度大,而BT下載需要較大的內(nèi)存消耗的矛盾;進(jìn)一步 的,通過對(duì)已分配的內(nèi)存資源復(fù)用,最大程度的降低了內(nèi)存碎片的產(chǎn)生。
圖1為現(xiàn)有的BT下載系統(tǒng)中對(duì)節(jié)點(diǎn)的內(nèi)存分配和釋放流程圖; 圖2為本發(fā)明的內(nèi)存分配方法流程圖。
具體實(shí)施例方式
本發(fā)明主要是要解決了現(xiàn)有技術(shù)的兩大矛盾,矛盾一是嵌入式系統(tǒng)內(nèi)存資源有限,而 BT下載是需要較大的內(nèi)存消耗,并有時(shí)需要向系統(tǒng)申請(qǐng)較大塊連續(xù)內(nèi)存區(qū)域;
矛盾二是嵌入式系統(tǒng)通存的問題,因而在進(jìn)行嵌入式軟件開發(fā)的時(shí)候需要特別留意,而 BT下載應(yīng)用對(duì)內(nèi)存使用的特點(diǎn)使得內(nèi)存碎片問題日益突出,如附圖1所示是傳統(tǒng)BT下載方法 中Peer的內(nèi)存分配和釋放示意圖,在傳統(tǒng)的BT下載方法中,每一個(gè)Peer先后經(jīng)歷獲取Peer、 創(chuàng)建Peer、為Peer分配內(nèi)存、傳輸數(shù)據(jù)、完成傳輸和釋放內(nèi)存等六個(gè)階段,如此反復(fù)直到下 載完成。通過下載系統(tǒng)不斷的獲取Peer,創(chuàng)建新Peer并為新Peer分配內(nèi)存,最后釋放Peer所 占用內(nèi)存,如此一直循環(huán)導(dǎo)致內(nèi)存碎片產(chǎn)生,可供分配的較大塊內(nèi)存越來越少,最后導(dǎo)致大 塊內(nèi)存分配失敗,系統(tǒng)出現(xiàn)死機(jī)的嚴(yán)重后果。
本發(fā)明通過將大塊連續(xù)內(nèi)存化整為零,以一個(gè)內(nèi)存鏈表來代替大塊連續(xù)內(nèi)存,內(nèi)存鏈表 指向下載系統(tǒng)中若干小塊內(nèi)存區(qū)域。因?yàn)榇髩K連續(xù)內(nèi)存可能申請(qǐng)不到,但是一連串小塊的內(nèi) 存是可以分配到的,從而解決了上文提到的矛盾一。
本方法通過內(nèi)存復(fù)用的方式來解決矛盾二。具體方法如下
當(dāng)新Peer創(chuàng)建時(shí),系統(tǒng)為其分配內(nèi)存,并將該P(yáng)eer添加入一個(gè)Peer鏈表中,當(dāng)該P(yáng)eer使 用完畢后其所占用的內(nèi)存資源不被釋放,而只是在Peer鏈表中標(biāo)識(shí)該節(jié)點(diǎn)區(qū)域內(nèi)存資源處于 空閑狀態(tài);空閑狀態(tài)表示其它節(jié)點(diǎn)可復(fù)用該節(jié)點(diǎn)所對(duì)應(yīng)的該段內(nèi)存鏈表所指向的小塊內(nèi)存區(qū) 域。
當(dāng)再有Peer創(chuàng)建時(shí),系統(tǒng)首先去Peer鏈表中搜尋是否有處于空閑狀態(tài)的節(jié)點(diǎn)可以用,如 有,則該P(yáng)eer復(fù)用該段內(nèi)存區(qū)域,并將該P(yáng)eer標(biāo)識(shí)為使用中狀態(tài);使用中狀態(tài)表示其它 Peer無法復(fù)用該節(jié)點(diǎn)所對(duì)應(yīng)的該段內(nèi)存鏈表所指向的小塊內(nèi)存區(qū)域;若沒有則系統(tǒng)對(duì)其重新 分配內(nèi)存資源,并將該P(yáng)eer也加入Peer鏈表中。如此重復(fù),由于不斷的有Peer產(chǎn)生和消除, 而其所使用的內(nèi)存資源不需要重復(fù)的向系統(tǒng)申請(qǐng),也不需要重復(fù)的去釋放所占有的內(nèi)存資源 ,最大程度的降低了內(nèi)存碎片的產(chǎn)生。
如附圖2所示是本發(fā)明提出了基于嵌入式系統(tǒng)的BT下載內(nèi)存分配方法示意圖,該方法的 流程說明如下
1. 系統(tǒng)通過與軌道(Tracker)通信或通過動(dòng)態(tài)哈希表(DHT, Distribute Hash Table)方式獲取到Peer集,Peer集中主要包含Peer的IP地址和端口號(hào)(Port)信息;
2. 系統(tǒng)利用獲取到的Peer相關(guān)信息創(chuàng)建新的Peer;
3. 系統(tǒng)創(chuàng)建了新Peer,系統(tǒng)遍歷節(jié)點(diǎn)鏈表(PeerList),尋找PeerList中是否有空閑 的Peer可供使用;
4. 步驟3中,若PeerList中無空閑的Peer可供使用,則系統(tǒng)為該新Peer申請(qǐng)新的內(nèi)存 資源;
5. 在步驟4中,系統(tǒng)已經(jīng)為新Peer分配了新的內(nèi)存空間,然后系統(tǒng)將此新Peer添加入 PeerList尾;
6. 標(biāo)識(shí)該新Peer的狀態(tài)為使用中狀態(tài),也就是其他的Peer無法復(fù)用其內(nèi)存資源;
7. 創(chuàng)建了Peer之后,系統(tǒng)與該P(yáng)eer進(jìn)行通信并進(jìn)行數(shù)據(jù)的交換與傳輸;
8. 系統(tǒng)與該P(yáng)eer數(shù)據(jù)傳輸完畢;
9. 系統(tǒng)將該處于使用中狀態(tài)的Peer標(biāo)識(shí)為空閑狀態(tài),使得后來的新創(chuàng)建的Peer能復(fù)用 其內(nèi)存資源,系統(tǒng)進(jìn)入下一次獲取Peer階段;
10. 在步驟3中,若系統(tǒng)遍歷PeerList鏈表時(shí)獲取到鏈表中存在空閑的Peer,那個(gè)新創(chuàng) 建的Peer將復(fù)用空閑Peer的內(nèi)存資源,而無需再向系統(tǒng)申請(qǐng)新的內(nèi)存空間;
11. 系統(tǒng)將空閑Peer的狀態(tài)標(biāo)識(shí)為使用中狀態(tài);
12. 系統(tǒng)與新建的Peer創(chuàng)建連接,建立通信并交換數(shù)據(jù);
13. 系統(tǒng)與新建的Peer完成數(shù)據(jù)的交換與傳輸;
14. 系統(tǒng)將處于使用中狀態(tài)的Peer的標(biāo)識(shí)為空閑狀態(tài),使得后來新創(chuàng)建的Peer能復(fù)用其
內(nèi)存資源,然后系統(tǒng)進(jìn)入下一次獲取Peer階段。
權(quán)利要求
1.嵌入式點(diǎn)對(duì)點(diǎn)下載系統(tǒng)的內(nèi)存分配方法,其特征在于,下載系統(tǒng)為節(jié)點(diǎn)分配一段內(nèi)存鏈表作為下載分配內(nèi)存;所述內(nèi)存鏈表指向下載系統(tǒng)中若干小塊內(nèi)存區(qū)域。
2.如權(quán)利要求l所述嵌入式點(diǎn)對(duì)點(diǎn)下載系統(tǒng)的內(nèi)存分配方法,其特征 在于,在所述節(jié)點(diǎn)使用過程中,下載系統(tǒng)將該節(jié)點(diǎn)標(biāo)識(shí)為使用中狀態(tài);所述使用中狀態(tài)表示 其它節(jié)點(diǎn)無法復(fù)用該節(jié)點(diǎn)所對(duì)應(yīng)的該段內(nèi)存鏈表所指向的小塊內(nèi)存區(qū)域;在所述節(jié)點(diǎn)使用完畢后,下載系統(tǒng)將該節(jié)點(diǎn)標(biāo)識(shí)為空閑狀態(tài);所述空閑狀態(tài)表示其它 節(jié)點(diǎn)可復(fù)用該節(jié)點(diǎn)所對(duì)應(yīng)的該段內(nèi)存鏈表所指向的小塊內(nèi)存區(qū)域。
3.如權(quán)利要求2所述嵌入式點(diǎn)對(duì)點(diǎn)下載系統(tǒng)的內(nèi)存分配方法,其特征 在于,具體包括以下步驟a、 下載系統(tǒng)獲得節(jié)點(diǎn)信息,并創(chuàng)建該節(jié)點(diǎn)為新節(jié)點(diǎn);b、 下載系統(tǒng)遍歷節(jié)點(diǎn)鏈表,査找是否有被標(biāo)識(shí)為空閑狀態(tài)的節(jié)點(diǎn);若是,進(jìn)入步驟c ;若否,進(jìn)入步驟d;c、 下載系統(tǒng)控制新節(jié)點(diǎn)復(fù)用査找到的空閑狀態(tài)的節(jié)點(diǎn)所對(duì)應(yīng)的一段內(nèi)存鏈表所指向的 小塊內(nèi)存區(qū)域,并重新標(biāo)識(shí)所述空閑狀態(tài)的節(jié)點(diǎn)為使用中狀態(tài);進(jìn)入步驟e;d、 下載系統(tǒng)為新節(jié)點(diǎn)重新分配一段內(nèi)存鏈表作為下載分配內(nèi)存;并將所述新節(jié)點(diǎn)添加 至節(jié)點(diǎn)鏈表,并標(biāo)識(shí)該新節(jié)點(diǎn)為使用中狀態(tài);進(jìn)入步驟e;e、 下載系統(tǒng)與新節(jié)點(diǎn)數(shù)據(jù)傳輸完畢,將該處于使用中狀態(tài)的節(jié)點(diǎn)標(biāo)識(shí)為空閑狀態(tài)。
全文摘要
本發(fā)明涉及嵌入式網(wǎng)絡(luò)下載領(lǐng)域。本發(fā)明提出一種有效分配內(nèi)存資源的嵌入式BT下載系統(tǒng)的內(nèi)存分配方法。嵌入式點(diǎn)對(duì)點(diǎn)下載系統(tǒng)的內(nèi)存分配方法下載系統(tǒng)為節(jié)點(diǎn)分配一段內(nèi)存鏈表作為下載分配內(nèi)存;所述內(nèi)存鏈表指向下載系統(tǒng)中若干小塊內(nèi)存區(qū)域。節(jié)點(diǎn)使用過程中,將該節(jié)點(diǎn)標(biāo)識(shí)為使用中狀態(tài);其它節(jié)點(diǎn)無法復(fù)用該節(jié)點(diǎn)所對(duì)應(yīng)的該段內(nèi)存鏈表所指向的小塊內(nèi)存區(qū)域;節(jié)點(diǎn)使用完畢后,將該節(jié)點(diǎn)標(biāo)識(shí)為空閑狀態(tài);其它節(jié)點(diǎn)可復(fù)用該節(jié)點(diǎn)所對(duì)應(yīng)的該段內(nèi)存鏈表所指向的小塊內(nèi)存區(qū)域。本發(fā)明解決了嵌入式系統(tǒng)內(nèi)存資源有限,大塊連續(xù)內(nèi)存申請(qǐng)難度大,而BT下載需要較大的內(nèi)存消耗的矛盾;進(jìn)一步的,通過對(duì)已分配的內(nèi)存資源復(fù)用,最大程度的降低了內(nèi)存碎片的產(chǎn)生。
文檔編號(hào)G06F12/02GK101354679SQ200810304240
公開日2009年1月28日 申請(qǐng)日期2008年8月27日 優(yōu)先權(quán)日2008年8月27日
發(fā)明者尤金剛, 居文軍, 彭世偉, 梁應(yīng)龍, 琳 蔡 申請(qǐng)人:四川長虹電器股份有限公司