當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]嵌入式Web訪問時(shí)的內(nèi)存丟失問題


    由于嵌入式技術(shù)的發(fā)展,嵌入式Web服務(wù)器軟件越來越大,對硬件的要求也相應(yīng)地提高,但在工業(yè)現(xiàn)場的底層控制中,一般嵌入式系統(tǒng)的硬件配置都不是很高,導(dǎo)致了軟件和硬件的沖突。本文就是對實(shí)際應(yīng)用過程中,偶爾出現(xiàn)的Web頁面訪問出錯(cuò)問題進(jìn)行深入的研究。


1 嵌入式Web在系統(tǒng)中的應(yīng)用
    多支點(diǎn)觸發(fā)系統(tǒng)包括以下幾個(gè)模塊:控制臺(tái)模塊、網(wǎng)絡(luò)觸發(fā)源模塊、被觸發(fā)設(shè)備模塊。其中,網(wǎng)絡(luò)觸發(fā)源和被觸發(fā)設(shè)備都是掛載在總線上的,通過現(xiàn)場總線可以將系統(tǒng)各個(gè)節(jié)點(diǎn)相互連接起來以方便管理。嵌入式web就是應(yīng)用于網(wǎng)絡(luò)觸發(fā)源模塊中,它負(fù)責(zé)控制臺(tái)和被觸發(fā)設(shè)備之間的通信??刂婆_(tái)通過瀏覽器訪問網(wǎng)絡(luò)觸發(fā)源,在Web頁面上完成相應(yīng)控制操作后,由網(wǎng)絡(luò)觸發(fā)源把操作命令發(fā)送到總線上,被觸發(fā)設(shè)備從總線上接收到命令后,完成相應(yīng)操作。在網(wǎng)絡(luò)觸發(fā)源模塊中,Web服務(wù)器采用的是Boa,嵌入式操作系統(tǒng)采用的是uClinux,處理器采用的是Sam-sung公司的S3C44BO。多支點(diǎn)觸發(fā)系統(tǒng)結(jié)構(gòu)如圖1所示。

2 Boa的運(yùn)行流程及出現(xiàn)的問題
    Boa是單任務(wù)的http服務(wù)器,源碼開放,性能高。與傳統(tǒng)的Web服務(wù)器不同,它并不對每個(gè)進(jìn)入服務(wù)器的連接開辟新的進(jìn)程,所有活動(dòng)的http連接都在內(nèi)部進(jìn)行處理,而只為每個(gè)CGI連接啟動(dòng)新進(jìn)程。在已進(jìn)行的測試中,Boa服務(wù)器比其他的Web服務(wù)器要快,所以它應(yīng)用在嵌入式系統(tǒng)中是具有良好前景的。圖2是Boa基本的運(yùn)行流程。[!--empirenews.page--]
    在Boa運(yùn)行過程中,用戶請求初始Lo-gin頁面時(shí),系統(tǒng)能正常響應(yīng)操作。當(dāng)用戶輸入正確的Login信息,要實(shí)現(xiàn)頁面跳轉(zhuǎn)時(shí),PC機(jī)上的瀏覽器里面不能正確瀏覽,提示錯(cuò)誤:“502 bad gate-way The CGI was notCGI/1.1 compliant”。由于運(yùn)行的是CGI程序,通過調(diào)試和查看錯(cuò)誤日志,發(fā)現(xiàn)系統(tǒng)停留在步驟⑤~⑦間。在排除CGI程序錯(cuò)誤后,通過串口調(diào)試終端打印出的錯(cuò)誤信息發(fā)現(xiàn):在執(zhí)行CGI程序時(shí),內(nèi)核申請內(nèi)存時(shí)出錯(cuò),提示申請的內(nèi)存塊不能得到,即內(nèi)存丟失。


3 系統(tǒng)內(nèi)存丟失分析
3.1 uClinux的內(nèi)存管理
    uClinux不能使用處理器的虛擬內(nèi)存管理技術(shù),它仍然采用存儲(chǔ)器的分頁管理。系統(tǒng)啟動(dòng)時(shí)對存儲(chǔ)器分頁,加載應(yīng)用程序?qū)Τ绦蚍猪摷虞d。由于沒有MMU管理,所以uClinux采用實(shí)存儲(chǔ)器管理。uClinux系統(tǒng)對內(nèi)存的訪問是直接的(它對地址的訪問不經(jīng)MMU,而是直接送到地址線上輸出),所有程序訪問的地址是物理地址。那些比物理內(nèi)存還大的程序?qū)o法執(zhí)行。[!--empirenews.page--]
    uClinux將整個(gè)物理內(nèi)存劃分成為4 KB的頁面。由數(shù)據(jù)結(jié)構(gòu)page管理,有多少頁面就有多少page結(jié)構(gòu),它們又作為元素組成數(shù)組men_map[]。物理頁面可作為進(jìn)程代碼、數(shù)據(jù)和堆棧的一部分,還可存儲(chǔ)裝入的文件,也可作緩沖區(qū)。
    uClinux用標(biāo)準(zhǔn)Linux內(nèi)核變型BuddySystem機(jī)制管理空閑物理頁面。
3.2 內(nèi)存丟失原因
    由于uClinux提供了跟普通Linux一樣的內(nèi)存分配器,普通Linux中缺省的內(nèi)存分配器是使用“2的冪”的分配方法,這樣可以快速找到符合要求的內(nèi)存區(qū)域。在系統(tǒng)開發(fā)過程初期,采用的就是“2的冪”的分配方法。如果一個(gè)應(yīng)用程序要求(X)KB內(nèi)存空間進(jìn)行裝載,則實(shí)際使用占用的內(nèi)存空間大小為Y=2m(Y≥X)。試想一個(gè)65 KB應(yīng)用程序,如果按照“2的冪”的分配方法,就必須分配128 KB(2的7次方)的內(nèi)存空間,這樣就有63 KB的內(nèi)存空間不能被利用上。這對于小內(nèi)存的嵌入式系統(tǒng)來說是相當(dāng)大的浪費(fèi)。
    多支點(diǎn)觸發(fā)系統(tǒng)運(yùn)行時(shí),嵌入式操作系統(tǒng)uClinux使用“2的冪”的內(nèi)存分配方法,大多數(shù)情況下都能正常工作。但在不斷反復(fù)測試中,偶爾會(huì)出現(xiàn)上述頁面出錯(cuò)問題。錯(cuò)誤的原因是不能獲得足夠的內(nèi)存加載程序。通過調(diào)試終端,用free命令查看系統(tǒng)內(nèi)存分配情況如表1所列。

    由表1可以看出,空閑的內(nèi)存空間還有1560 KB,而應(yīng)用程序所需的內(nèi)存空間為400多KB,但是內(nèi)核認(rèn)為并沒有足夠的內(nèi)存空間用來加載程序。例如一個(gè)系統(tǒng)內(nèi)存大小為1 MB,有400KB的空閑內(nèi)存,為了裝載一個(gè)應(yīng)用程序需要分配100 KB的空間。大家可能覺得這個(gè)需要肯定能得到滿足,然而,由于uClinux必須給應(yīng)用程序分配連續(xù)內(nèi)存空間的特性,所以必須有100KB連續(xù)的內(nèi)存空間才能滿足這個(gè)需要。而當(dāng)系統(tǒng)內(nèi)存分配如圖3所示時(shí),最大的連續(xù)內(nèi)存塊的大小只有80 KB,這樣是沒有辦法分配給這個(gè)應(yīng)用程序的。這就是系統(tǒng)中頁面訪問出錯(cuò)的問題所在,雖然有足夠的空閑內(nèi)存空間,但是沒有應(yīng)用程序所需的連續(xù)內(nèi)存空間。

    這就是內(nèi)存丟失問題。雖然系統(tǒng)會(huì)顯示大量的可用內(nèi)存,但是應(yīng)用程序卻不能得到。

[!--empirenews.page--]
4 內(nèi)存丟失問題的解決
    由于系統(tǒng)的內(nèi)存管理默認(rèn)采用“2的冪”的分配方法,這就造成了內(nèi)存空間的巨大浪費(fèi),當(dāng)某些應(yīng)用程序要申請較大的連續(xù)空間時(shí),卻不能滿足。為了解決這個(gè)問題,專門為uClinux內(nèi)核設(shè)計(jì)了可選的內(nèi)存分配器。不同的內(nèi)核版本,這個(gè)可選的內(nèi)存分配器不同,一般是page_alloc2和kmalloc2。
    page_alloc2能解決缺省的分配方法造成的浪費(fèi)問題。雖然它也是使用“2的冪”的分配方法,但它是按頁(每頁4 096B,即4 KB)分配的,分配的內(nèi)存大小如果已經(jīng)滿足了要求,則只是將當(dāng)前的一頁分配出去,其他的就不再分配。還是一個(gè)65 KB的應(yīng)用程序,如果使用這種方法,就只是分配68 KB(≥65 KB,且為整頁)即可,這樣就能節(jié)省60 KB的空間。
    page_alloc2還采取了一些避免內(nèi)存碎片的方法。它將所有的兩頁(8 KB)或更少的內(nèi)存需求從空閑內(nèi)存開始部分向上分配,所有大的內(nèi)存需求從剩余內(nèi)存的末尾部分開始向下分配。這樣防止了網(wǎng)絡(luò)緩存等的臨時(shí)分配,避免了內(nèi)存碎片的出現(xiàn)。同時(shí),它支持一次申請超過1 MB的內(nèi)存空間,這對一些大的應(yīng)用程序是很好的支持。采用此方法后,在系統(tǒng)運(yùn)行過程中,并未出現(xiàn)過頁面訪問出錯(cuò)問題。通過free命令查看內(nèi)存分配如表2所列。

結(jié) 語
    在嵌入式系統(tǒng)應(yīng)用日益廣泛的情況下,本文結(jié)合嵌入式Web在多支點(diǎn)觸發(fā)系統(tǒng)中的應(yīng)用,介紹了Web訪問出現(xiàn)的問題以及它的解決方法。在實(shí)際應(yīng)用中,新的內(nèi)存分配方法能讓系統(tǒng)穩(wěn)定地工作,但是從表2可以發(fā)現(xiàn):采用“page_alloc2‘’的內(nèi)存分配方法時(shí),系統(tǒng)的Cache較小,這就造成了頁面訪問有一定的延時(shí)。而“2的冪”的分配方法,系統(tǒng)的Cache較大,訪問速度較快。從這個(gè)對比得知,在反應(yīng)時(shí)間要求不是很高的情況下,“page_alloc2”的內(nèi)存分配方法更適合小內(nèi)存的嵌入式系統(tǒng);而“2的冪”的分配方法更合適那些內(nèi)存足夠大的嵌入式系統(tǒng)。系統(tǒng)開發(fā)者可以根據(jù)實(shí)際情況采用不同的方案。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉