天才教育網(wǎng)合作機構 > 培訓機構 >

                                                                                        東莞電工培訓網(wǎng)

                                                                                        歡迎您!
                                                                                        朋友圈

                                                                                        全國統一學(xué)習專(zhuān)線(xiàn) 9:00-21:00

                                                                                        位置:培訓資訊 > 嵌入式Web訪(fǎng)問(wèn)時(shí)的內存丟失問(wèn)題

                                                                                        嵌入式Web訪(fǎng)問(wèn)時(shí)的內存丟失問(wèn)題

                                                                                        日期:2021-07-09 03:26:30     瀏覽:397    來(lái)源:東莞電工培訓網(wǎng)
                                                                                        由于嵌入式技術(shù)的發(fā)展,嵌入式Web服務(wù)器軟件越來(lái)越大,對硬件的要求也相應地提高,但在工業(yè)現場(chǎng)的底層控制中,一般嵌入式系統的硬件配置都不是很高,導致了軟件和硬件的沖突。本文就是對實(shí)際應用過(guò)程中,偶爾出現的Web頁(yè)面訪(fǎng)問(wèn)出錯問(wèn)題進(jìn)行深入的研究。


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

                                                                                        2 Boa的運行流程及出現的問(wèn)題
                                                                                            Boa是單任務(wù)的http服務(wù)器,源碼開(kāi)放,性能高。與傳統的Web服務(wù)器不同,它并不對每個(gè)進(jìn)入服務(wù)器的連接開(kāi)辟新的進(jìn)程,所有活動(dòng)的http連接都在內部進(jìn)行處理,而只為每個(gè)CGI連接啟動(dòng)新進(jìn)程。在已進(jìn)行的測試中,Boa服務(wù)器比其他的Web服務(wù)器要快,所以它應用在嵌入式系統中是具有良好前景的。圖2是Boa基本的運行流程。

                                                                                        在Boa運行過(guò)程中,用戶(hù)請求初始Lo-gin頁(yè)面時(shí),系統能正常響應操作。當用戶(hù)輸入正確的Login信息,要實(shí)現頁(yè)面跳轉時(shí),PC機上的瀏覽器里面不能正確瀏覽,提示錯誤:“502 bad gate-way The CGI was notCGI/1.1 compliant”。由于運行的是CGI程序,通過(guò)調試和查看錯誤日志,發(fā)現系統停留在步驟⑤~⑦間。在排除CGI程序錯誤后,通過(guò)串口調試終端打印出的錯誤信息發(fā)現:在執行CGI程序時(shí),內核申請內存時(shí)出錯,提示申請的內存塊不能得到,即內存丟失。


                                                                                        3 系統內存丟失分析
                                                                                        3.1 uClinux的內存管理
                                                                                            uClinux不能使用處理器的虛擬內存管理技術(shù),它仍然采用存儲器的分頁(yè)管理。系統啟動(dòng)時(shí)對存儲器分頁(yè),加載應用程序對程序分頁(yè)加載。由于沒(méi)有MMU管理,所以uClinux采用實(shí)存儲器管理。uClinux系統對內存的訪(fǎng)問(wèn)是直接的(它對地址的訪(fǎng)問(wèn)不經(jīng)MMU,而是直接送到地址線(xiàn)上輸出),所有程序訪(fǎng)問(wèn)的地址是物理地址。那些比物理內存還大的程序將無(wú)法執行

                                                                                        uClinux將整個(gè)物理內存劃分成為4 KB的頁(yè)面。由數據結構page管理,有多少頁(yè)面就有多少page結構,它們又作為元素組成數組men_map[]。物理頁(yè)面可作為進(jìn)程代碼、數據和堆棧的一部分,還可存儲裝入的文件,也可作緩沖區。
                                                                                            uClinux用標準Linux內核變型BuddySystem機制管理空閑物理頁(yè)面。
                                                                                        3.2 內存丟失原因
                                                                                            由于uClinux提供了跟普通Linux一樣的內存分配器,普通Linux中缺省的內存分配器是使用“2的冪”的分配方法,這樣可以快速找到符合要求的內存區域。在系統開(kāi)發(fā)過(guò)程初期,采用的就是“2的冪”的分配方法。如果一個(gè)應用程序要求(X)KB內存空間進(jìn)行裝載,則實(shí)際使用占用的內存空間大小為Y=2m(Y≥X)。試想一個(gè)65 KB應用程序,如果按照“2的冪”的分配方法,就必須分配128 KB(2的7次方)的內存空間,這樣就有63 KB的內存空間不能被利用上。這對于小內存的嵌入式系統來(lái)說(shuō)是相當大的浪費。
                                                                                            多支點(diǎn)觸發(fā)系統運行時(shí),嵌入式操作系統uClinux使用“2的冪”的內存分配方法,大多數情況下都能正常工作。但在不斷反復測試中,偶爾會(huì )出現上述頁(yè)面出錯問(wèn)題。錯誤的原因是不能獲得足夠的內存加載程序。通過(guò)調試終端,用free命令查看系統內存分配情況如表1所列。

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

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

                                                                                        4 內存丟失問(wèn)題的解決
                                                                                            由于系統的內存管理默認采用“2的冪”的分配方法,這就造成了內存空間的巨大浪費,當某些應用程序要申請較大的連續空間時(shí),卻不能滿(mǎn)足。為了解決這個(gè)問(wèn)題,專(zhuān)門(mén)為uClinux內核設計了可選的內存分配器。不同的內核版本,這個(gè)可選的內存分配器不同,一般是page_alloc2和kmalloc2。
                                                                                            page_alloc2能解決缺省的分配方法造成的浪費問(wèn)題。雖然它也是使用“2的冪”的分配方法,但它是按頁(yè)(每頁(yè)4 096B,即4 KB)分配的,分配的內存大小如果已經(jīng)滿(mǎn)足了要求,則只是將當前的一頁(yè)分配出去,其他的就不再分配。還是一個(gè)65 KB的應用程序,如果使用這種方法,就只是分配68 KB(≥65 KB,且為整頁(yè))即可,這樣就能節省60 KB的空間。
                                                                                            page_alloc2還采取了一些避免內存碎片的方法。它將所有的兩頁(yè)(8 KB)或更少的內存需求從空閑內存開(kāi)始部分向上分配,所有大的內存需求從剩余內存的末尾部分開(kāi)始

                                                                                        如果本頁(yè)不是您要找的課程,您也可以百度查找一下:

                                                                                        奇米在线7777在线精品|国产成人精品免费视|精品无码不卡一区二区三区|国内综合精品午夜久久资源|亚洲视频在线观看..