<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 嵌入式Web訪問(wèn)時(shí)的內(nèi)存丟失問(wèn)題

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

          作者: 時(shí)間:2009-11-19 來(lái)源:網(wǎng)絡(luò) 收藏

          uClinux將整個(gè)物理劃分成為4 KB的頁(yè)面。由數(shù)據(jù)結(jié)構(gòu)page管理,有多少頁(yè)面就有多少page結(jié)構(gòu),它們又作為元素組成數(shù)組men_map[]。物理頁(yè)面可作為進(jìn)程代碼、數(shù)據(jù)和堆棧的一部分,還可存儲(chǔ)裝入的文件,也可作緩沖區(qū)。
          uClinux用標(biāo)準(zhǔn)Linux內(nèi)核變型BuddySystem機(jī)制管理空閑物理頁(yè)面。
          3.2 原因
          由于uClinux提供了跟普通Linux一樣的分配器,普通Linux中缺省的內(nèi)存分配器是使用“2的冪”的分配方法,這樣可以快速找到符合要求的內(nèi)存區(qū)域。在系統(tǒng)開發(fā)過(guò)程初期,采用的就是“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)存空間不能被利用上。這對(duì)于小內(nèi)存的系統(tǒng)來(lái)說(shuō)是相當(dāng)大的浪費(fèi)。
          多支點(diǎn)觸發(fā)系統(tǒng)運(yùn)行時(shí),操作系統(tǒng)uClinux使用“2的冪”的內(nèi)存分配方法,大多數(shù)情況下都能正常工作。但在不斷反復(fù)測(cè)試中,偶爾會(huì)出現(xiàn)上述頁(yè)面出錯(cuò)。錯(cuò)誤的原因是不能獲得足夠的內(nèi)存加載程序。通過(guò)調(diào)試終端,用free命令查看系統(tǒng)內(nèi)存分配情況如表1所列。

          本文引用地址:http://www.ex-cimer.com/article/152276.htm

          由表1可以看出,空閑的內(nèi)存空間還有1560 KB,而應(yīng)用程序所需的內(nèi)存空間為400多KB,但是內(nèi)核認(rèn)為并沒有足夠的內(nèi)存空間用來(lá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)中頁(yè)面出錯(cuò)的所在,雖然有足夠的空閑內(nèi)存空間,但是沒有應(yīng)用程序所需的連續(xù)內(nèi)存空間。

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

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();