日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]內(nèi)存管理模塊通常是操作系統(tǒng)內(nèi)核的一部分,其主要任務(wù)是為操作系統(tǒng)內(nèi)核和各執(zhí)行程序組織內(nèi)存,跟蹤當(dāng)前內(nèi)存使用狀況,在需要時為進(jìn)程分配內(nèi)存,使用完畢后釋放并回收內(nèi)存。

1 概 述

內(nèi)存管理是操作系統(tǒng)的中心任務(wù)之一。內(nèi)存管理模塊通常是操作系統(tǒng)內(nèi)核的一部分,其主要任務(wù)是為操作系統(tǒng)內(nèi)核和各執(zhí)行程序組織內(nèi)存,跟蹤當(dāng)前內(nèi)存使用狀況,在需要時為進(jìn)程分配內(nèi)存,使用完畢后釋放并回收內(nèi)存。智能手機(jī)操作系統(tǒng)作為嵌入式操作系統(tǒng)的一種,較之普通桌面型操作系統(tǒng),其內(nèi)存管理有著獨特之處:受硬件成本、設(shè)備體積等因素制約,內(nèi)存容量一般相當(dāng)有限,需要高效地使用;電源管理尤為重要,一次充電要保證數(shù)小時以上的工作時間;手持設(shè)備內(nèi)程序一般幾天甚至幾個月不停運行,系統(tǒng)穩(wěn)定性要求高,需保證用戶數(shù)據(jù)的安全。此外,與傳統(tǒng)的嵌入式實時操作系統(tǒng)相比,如Vx-Works,μClinux等,智能手機(jī)嵌入式操作系統(tǒng)還是一個開放性的操作系統(tǒng),這意味著幾乎所有的智能手機(jī)嵌入式操作系統(tǒng)都允許用戶安裝第三方程序。因此,在操作系統(tǒng)設(shè)計時還要綜合考慮編程的易用性及接口的模塊化,以適應(yīng)終端用戶、制造商、操作系統(tǒng)軟件開發(fā)者和第三方軟件開發(fā)者的不同需求。

1.1 Symbian操作系統(tǒng)

Symbian操作系統(tǒng)是智能手機(jī)市場中的主要成員,其市場份額超過70%。該操作系統(tǒng)由英國Symbian公司負(fù)責(zé)研發(fā)和維護(hù),目前該公司由Nokia、SonyErisson、Panaso-nic、Samsung等公司共同所有。Symbian操作系統(tǒng)的前身是EPOC,這是一個多任務(wù)的32位軟實時操作系統(tǒng)。Symbian在設(shè)計之初就是專門針對高度內(nèi)存受限的系統(tǒng)的,因此其在內(nèi)存使用和電源管理上具有很多優(yōu)勢。Symbian操作系統(tǒng)具有完善的軟件開發(fā)包,供第三方應(yīng)用程序開發(fā)使用。目前最新版本的Symbian操作系統(tǒng)為Symbian OS 9.5。

1.2 WindOWS Mobile操作系統(tǒng)

Windows Mobile是微軟為手持設(shè)備推出的“移動版Windows”。使用Windows Mobile操作系統(tǒng)的設(shè)備主要有手機(jī)、PDA、隨身音樂播放器等。該操作系統(tǒng)是基于Windows CE內(nèi)核的一種嵌入式操作系統(tǒng)。由于與桌面Windows操作系統(tǒng)的兼容性,第三方開發(fā)者可以很方便地為Windows CE開發(fā)程序,但與桌面Windows開發(fā)仍存在較大區(qū)別。目前常用版本為Windows Mobile 6.1,最新版本6.5,均基于Windows CE 5.2內(nèi)核。為表述一致,下文中將Windows Mobile簡稱為WinCE。


2 內(nèi)存管理技術(shù)分析與比較

2.1 整體架構(gòu)

Symbian操作系統(tǒng)誕生之初,是針對掌上型資源高度受限設(shè)備開發(fā)的。為了追求極致的性能和最小的資源消耗,它從操作系統(tǒng)內(nèi)核到編程框架都進(jìn)行了嚴(yán)格的優(yōu)化,甚至對C++的不少基本機(jī)制也進(jìn)行了大刀闊斧的革新。因此軟件開發(fā)者和廠商需要掌握新的Symlbian C++語法及新的編程接口。Symbian操作系統(tǒng)兼容性較差,一般只支持ARM系列處理器。

WinCE系統(tǒng)在設(shè)計之初就充分考慮到對桌面操作系統(tǒng)組件和編程接口的兼容性,這樣給程序開發(fā)者帶來很大益處,并且方便廠商進(jìn)行設(shè)備升級及驅(qū)動維護(hù)。WinCE支持多種CPU,如ARM、MIPS、SH4、x86等。因此其在內(nèi)存管理模塊設(shè)計上的兼容性和接口的規(guī)范性更好。Symbian相對于WinCE的優(yōu)勢在于其針對指定處理器設(shè)計的內(nèi)存管理模塊更加高效,但是這也以犧牲兼容性為代價。出于對電源管理的考慮,Symbian系統(tǒng)的設(shè)備CPU頻率普遍較WinCE要低,一般為100~300 MHz(WinCE是300~800 MHz)。

2.2 ROM與RAM

(1)RAM

RAM全稱為隨機(jī)存取存儲器,通常作為操作系統(tǒng)或其他正在運行的程序的臨時存儲介質(zhì),速度較快,但是當(dāng)電源關(guān)閉時存儲的數(shù)據(jù)會丟失。

WinCE中RAM被分成兩塊區(qū)域,對象存儲和程序區(qū)(系統(tǒng)堆)。對象存儲可以被看作類似一個永久的虛擬RAM磁盤。在Pocket PC上,當(dāng)顯示屏關(guān)閉后,系統(tǒng)并沒有真正斷電,而是進(jìn)入低功耗的睡眠狀態(tài)(由主電池來供電)。當(dāng)按下Reset按鈕后,Windows CE內(nèi)核在RAM中尋找最近一次創(chuàng)建的對象存儲,如果找到,就用這個對象存儲重新啟動。

RAM的另一個區(qū)域是程序區(qū)。這個區(qū)域就像PC機(jī)的RAM一樣。它存放所運行程序的堆和棧的空間。對象存儲和程序區(qū)的界限是可移動的。在低內(nèi)存的情況下,系統(tǒng)會請求用戶把部分可用的存儲對象空間提供給運行程序使用,以滿足程序運行時對RAM的需要。在Symbian操作系統(tǒng)中,RAM不存在類似于對象存儲的區(qū)域,其RAM全部用于運行程序的臨時執(zhí)行和數(shù)據(jù)存儲器。因此一般Symbian操作系統(tǒng)上RAM大小為7~30 MB,小于winCE中的32~128 MB。

(2)ROM

ROM是只讀存儲器。在PC機(jī)上,ROM用來存儲BIOS,通常是64~128 KB。在WinCE系統(tǒng)中,ROM用來存儲整個操作系統(tǒng)以及和OS綁定的應(yīng)用程序。Symbian系統(tǒng)中ROM功能類似,也是用來存儲系統(tǒng)驅(qū)動程序及系統(tǒng)DLL和配置文件。對ROM進(jìn)行寫入需要指定的設(shè)備,普通用戶無法對ROM中的數(shù)據(jù)進(jìn)行操作。由于ROM中的代碼都是經(jīng)過特殊編譯,去除了重定位代碼段,因此可以在ROM上直接執(zhí)行(excute in place),不用加載到RAM中,從而提高了啟動速度并節(jié)省了RAM資源。

2.3 MMU

作為現(xiàn)代操作系統(tǒng)的一種,智能手機(jī)操作系統(tǒng)具有強(qiáng)大而高效的MMU,在這一點不同于其他實時嵌入式操作系統(tǒng),如μC/OS-II和μClinux。通過MMU提供的內(nèi)存映射和數(shù)據(jù)保護(hù),可以提高操作系統(tǒng)的運行效率和安全性。MMU運行于CPU和系統(tǒng)總線之間,負(fù)責(zé)在虛擬地址和物理地址之間進(jìn)行轉(zhuǎn)換,在任一次內(nèi)存訪問中都會進(jìn)行MMU的地址查找。

(1)虛擬內(nèi)存

Windows CE是32位操作系統(tǒng),支持4 GB的虛擬地址空間。高2 GB是系統(tǒng)內(nèi)存空間,用來存儲相應(yīng)的系統(tǒng)數(shù)據(jù)。低2 GB是用戶空間。所有的應(yīng)用程序均有2GB的虛擬地址,但是每個應(yīng)用程序的內(nèi)存空間都是受保護(hù)的,其他應(yīng)用程序不能訪問。從最低的虛擬地址空間開始,分為33個slot,每個slot為32 MB。每個slot被分配為當(dāng)前運行的進(jìn)程。slot 0中存放當(dāng)前激活的進(jìn)程。當(dāng)WinCE在進(jìn)程間切換時,它就重新映射地址空間,把原進(jìn)程移出,新進(jìn)程移進(jìn)slot 0。這個任務(wù)是通過操作微處理器的頁轉(zhuǎn)換表來迅速完成的。

WinCE定義了4種內(nèi)存狀態(tài):normal、limited、low、critical。這些狀態(tài)的劃分主要取決于當(dāng)前可用的內(nèi)存大小。在WinCE中,當(dāng)出現(xiàn)內(nèi)存不足的情況時,線程首先被掛起。這時系統(tǒng)如果沒有可用的物理RAM,需要??臻g的線程就會被掛起。系統(tǒng)首先發(fā)送WM_HIBERNATE消息,該消息會向所有的進(jìn)程請求。它們在不破壞各自內(nèi)在狀態(tài)的情況下盡量釋放內(nèi)存,比如釋放GDI對象、緩沖數(shù)據(jù)等,然后限制內(nèi)存申請的請求。如果在給定的一小段時間內(nèi),這個內(nèi)存需求不能得到響應(yīng),就會彈出系統(tǒng)異常。在低內(nèi)存情況下不應(yīng)該嘗試使用大量的棧空間。而在Symbian操作系統(tǒng)中,系統(tǒng)能運行的程序數(shù)量是由實際內(nèi)存大小決定的,而不限于32個。當(dāng)內(nèi)存不足時,運行新程序?qū)盏絻?nèi)存不足的警告,并終止進(jìn)程。

(2)虛擬地址映射

MMU一般將頁面分成4 KB大小的頁面。由于CPU不同,頁面大小也可以是1 KB或其他大小。內(nèi)核使用MMU,將物理內(nèi)存映射到塊的虛擬地址范圍內(nèi)。WinCE與Symbian的虛擬地址映射圖如圖1所示,其中WinCE內(nèi)核表現(xiàn)為NK.exe進(jìn)程。


在ARMv5中,最高層的頁表有4 096個條目,每個條目4字節(jié),因此整個目錄就有16 KB。由于WinCE支持多種不同的CPU,CPU設(shè)計結(jié)構(gòu)不同頁目錄也不同,但是計算方法與ARMv5類似。WinCE首先直接給每個進(jìn)程分配一個不同的頁表,在進(jìn)程切換中直接將不同進(jìn)程的頁表寫入MMU的基寄存器TTBR中來實現(xiàn)映射。而Sym-bian系統(tǒng)認(rèn)為每個進(jìn)程分配16 KB頁表會造成內(nèi)存的浪費,因此采用了另一種管理地址映射的方法。

該模型針對ARMv5結(jié)構(gòu)設(shè)計,被稱為移動內(nèi)存模型。其核心思想是對每個進(jìn)程都提供同樣的虛擬地址空間,但是被保護(hù)的內(nèi)存頁面卻不一樣。在頁面切換中,首先將原有進(jìn)程的內(nèi)存移出執(zhí)行地址空間,使其在用戶模式下不能訪問。接著將新進(jìn)程的數(shù)據(jù)移入執(zhí)行地址,并使其可以訪問。這一思想是在內(nèi)存模型上層通過Chunk實現(xiàn)的。通過ARMv5中提供的頁表訪問權(quán)限和域概念,通過改變MMU中寄存器指向的域,達(dá)到進(jìn)程間保護(hù)和內(nèi)存映射。這種設(shè)計方法帶來了內(nèi)核層的低內(nèi)存消耗,但是雖然在內(nèi)核層的安全性和內(nèi)存使用效率上有所改善,卻對其他進(jìn)程的運行帶來一定影響。當(dāng)映射到不同的虛擬地址空間,所有被修改的數(shù)據(jù)都要重新從主存中載入,并且緩存中的數(shù)據(jù)因為已經(jīng)被丟棄,必須重新載入。因此,該模式下的進(jìn)程上下文中很大一部分時間消耗在緩存的刷新上,一般情況下其速度是線程切換(同進(jìn)程)的1/100左右。盡管采取了其他措施,但是沒有從根本上改變運行時間。

在最新的ARMv6中,Symbian引入了多重內(nèi)存模型。該模型兼容性更強(qiáng),并可在主流處理器Intel x86和Re-nesas SuperH上使用。該模型建立在與設(shè)備和操作系統(tǒng)無關(guān)的基礎(chǔ)上,利用ARMv6中的應(yīng)用空間辨識器(ASID),并通過物理標(biāo)記緩存技術(shù)保證了在虛擬地址和物理地址間多重映射的正確性,很好地解決了移動內(nèi)存模型中的緩存刷新問題。

2.4 其他技術(shù)

(1)按需頁面調(diào)度

由于在系統(tǒng)中虛擬內(nèi)存遠(yuǎn)大于物理內(nèi)存,因此系統(tǒng)必須對內(nèi)存使用格外注意。一種節(jié)約物理內(nèi)存使用的方法是,只加載當(dāng)前運行程序使用的虛擬內(nèi)存所對應(yīng)的物理內(nèi)存,這種方法稱為按需頁面調(diào)度。當(dāng)一個進(jìn)程試圖訪問一個不在當(dāng)前內(nèi)存中的虛擬內(nèi)存地址時,系統(tǒng)這時會重新從磁盤上將該區(qū)域加載到內(nèi)存中去。桌面操作系統(tǒng)很久以來一直使用這一技術(shù),來加快系統(tǒng)啟動速度和優(yōu)化程序運行效率,WinCE也不例外。

WinCE中,可以通過使用Config.bib對整個系統(tǒng)的按需頁面調(diào)度進(jìn)行設(shè)置,或通過LoadDriver等函數(shù)對單個DLL的按需頁面調(diào)度進(jìn)行設(shè)置。Symbian操作系統(tǒng)卻不支持這一技術(shù)。這主要是由于系統(tǒng)本身內(nèi)存太小,采用這一技術(shù)會帶來性能大幅下降。不過隨著手機(jī)硬件的發(fā)展,在Symbian OS v9.3以后,系統(tǒng)開始支持按需頁面調(diào)度。這一技術(shù)優(yōu)化了內(nèi)存使用,在需要時加載只讀代碼,從而實現(xiàn)了對RAM的更高使用效率。這讓用戶可以更快地安裝應(yīng)用程序,并同時保持多個應(yīng)用程序的開放狀態(tài)。

(2)內(nèi)存碎片整理

在一個實時系統(tǒng)中,連續(xù)的頁面請求可能會帶來性能的下降。這是由于在小對象(小于1 KB的數(shù)據(jù)類型)對內(nèi)存的頻繁的動態(tài)申請和釋放過程中,由于釋放后留下的空洞不夠新對象分配,導(dǎo)致不連續(xù)的內(nèi)存可用空間無法被應(yīng)用程序獲得,造成可用內(nèi)存迅速耗盡。這種內(nèi)存空洞也叫內(nèi)存碎片。操作系統(tǒng)可能會對這種情況作一定程度的優(yōu)化,但是由于將內(nèi)存可用空間壓縮而導(dǎo)致的效率負(fù)擔(dān),并不是所有的操作系統(tǒng)都會對此優(yōu)化。
得益于Symbian操作系統(tǒng)本身優(yōu)化的內(nèi)存管理和高度受限的內(nèi)存使用原則,內(nèi)存碎片其實并不會對手機(jī)系統(tǒng)的性能和內(nèi)存使用率造成明顯影響,因此早期的Symbian版本并不支持內(nèi)存碎片整理,只提供簡單的手動內(nèi)存壓縮功能。Symbian 9.5之所以引入“自動”內(nèi)存碎片整理,一個重要的原因是:目前手機(jī)終端的內(nèi)存容量變得越來越大,內(nèi)存的能耗已經(jīng)不容忽視。在新版本中,借助內(nèi)存碎片整理,可以關(guān)閉連續(xù)的空閑物理內(nèi)存塊以節(jié)約能耗,當(dāng)然它同時也提供了其他在主流操作系統(tǒng)中體現(xiàn)的改進(jìn)一一更高效的內(nèi)存訪問和更大的空閑可用內(nèi)存。在WinCE中,雖然不存在自動內(nèi)存碎片處理,但是微軟推薦使用VirtualAlloc、LocalAlloc、HeapAlloc等函數(shù)直接操作虛擬內(nèi)存頁,本地堆和分離堆進(jìn)行內(nèi)存分配操作,而不是使用如malloc、new這類會導(dǎo)致內(nèi)存泄漏或異常的操作。


3 小 結(jié)

Symbian與WinCE在內(nèi)存管理模塊的設(shè)計上各有優(yōu)劣,這主要是由于兩個操作系統(tǒng)在設(shè)計之初的理念不同。Symbian設(shè)計之初是以高度受限的內(nèi)存為原則進(jìn)行設(shè)計,在硬件發(fā)展較為落后的時期取得了巨大的成功,但這也給第三方軟件開發(fā)者帶來很多困難。WinCE設(shè)計之初既要保持與Windows其他系統(tǒng)在編程接口上的兼容,又要盡可能地提高內(nèi)存使用效率,這樣不免對性能帶來一定程度的影響。隨著硬件的發(fā)展,智能手機(jī)的處理器速度和內(nèi)存大小都有了很大提高,WinCE由于對第三方開發(fā)者的友好性,其發(fā)展仍然不可限量。

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

在Linux系統(tǒng)性能優(yōu)化中,內(nèi)存管理與網(wǎng)絡(luò)連接處理是兩大核心領(lǐng)域。vm.swappiness與net.core.somaxconn作為關(guān)鍵內(nèi)核參數(shù),直接影響系統(tǒng)在高負(fù)載場景下的穩(wěn)定性與響應(yīng)速度。本文通過實戰(zhàn)案例解析這兩個...

關(guān)鍵字: Linux 內(nèi)存管理

C語言的內(nèi)存管理是程序性能的關(guān)鍵因素之一。標(biāo)準(zhǔn)庫提供的malloc、calloc、realloc和free函數(shù)雖能滿足基礎(chǔ)需求,但在高頻分配、實時性要求高或內(nèi)存碎片敏感的場景中,其開銷和不可控性成為瓶頸。自定義內(nèi)存池通過...

關(guān)鍵字: C語言 內(nèi)存管理

在C語言編程中,內(nèi)存管理是一項至關(guān)重要的技能。它直接關(guān)系到程序的性能和穩(wěn)定性,特別是在處理大型數(shù)據(jù)集或需要靈活內(nèi)存布局的場景下。其中,動態(tài)內(nèi)存分配是C語言內(nèi)存管理的一個重要組成部分,它允許程序在運行時根據(jù)需要請求和釋放內(nèi)...

關(guān)鍵字: C語言 內(nèi)存管理

在實時操作系統(tǒng)(RTOS)環(huán)境中,內(nèi)存管理是一項至關(guān)重要的任務(wù)。當(dāng)多個任務(wù)同時運行時,內(nèi)存分配問題可能會變得尤為復(fù)雜。本文將探討一個常見的內(nèi)存管理陷阱:在RTOS環(huán)境中,當(dāng)任務(wù)A成功調(diào)用malloc(512)而任務(wù)B的m...

關(guān)鍵字: 內(nèi)存管理 RTOS

在現(xiàn)代計算機(jī)系統(tǒng)中,內(nèi)存管理是一項至關(guān)重要的任務(wù),它直接關(guān)系到程序的執(zhí)行效率、穩(wěn)定性和安全性。為了滿足程序運行期間多樣化的內(nèi)存需求,內(nèi)存被巧妙地劃分為堆(Heap)和棧(Stack)兩大區(qū)域。這一劃分不僅體現(xiàn)了計算機(jī)系統(tǒng)...

關(guān)鍵字: 內(nèi)存管理 堆與棧

Linux系統(tǒng)中,內(nèi)存管理是一個復(fù)雜而關(guān)鍵的部分,它直接關(guān)系到系統(tǒng)的穩(wěn)定性和性能。Linux內(nèi)存管理子系統(tǒng)通過一系列精妙的機(jī)制,實現(xiàn)了對物理內(nèi)存和虛擬內(nèi)存的有效管理和調(diào)度。本文將深入探討Linux內(nèi)存管理的整體架構(gòu),包括...

關(guān)鍵字: Linux 內(nèi)存管理

關(guān)注「Linux大陸」,一起進(jìn)步!本文作者:度白嵌入式任何程序運行起來都需要分配內(nèi)存空間存放該進(jìn)程的資源信息的,C程序也不例外。C程序中的變量、常量、函數(shù)、代碼等等的信息所存放的區(qū)域都有所不同,不同的區(qū)域又有不同的特性。...

關(guān)鍵字: 嵌入式 內(nèi)存管理

摘 要:啟動裝載程序是嵌入式系統(tǒng)的重要組成部分。文章結(jié)合在ARM平臺上廣泛使用的U-Boot,詳細(xì)討論了Boot Loader開發(fā)中用到的主要技術(shù),分析引導(dǎo)程序的執(zhí)行流程,提出了WinCE和Linux在ARM平臺下...

關(guān)鍵字: 啟動裝載程序 U-Boot 嵌入式系統(tǒng) WinCE Linux

摘 要:火車貨運在高速發(fā)展的同時,也帶來了越來越多的不安全因素,貨運物資被盜是鐵路貨運事故的主要原因之一。 基于此,設(shè)計和實現(xiàn)了基于ZigBee和WinCE技術(shù)的火車貨運防盜預(yù)警系統(tǒng),用于解決站停、待編、待卸和運行途中...

關(guān)鍵字: 火車貨運 智能防盜 Zigbee WinCE PDA軟件

本次給大家分享一位大佬寫的應(yīng)用于單片機(jī)內(nèi)存管理模塊mem_malloc,這個mem_malloc的使用不會產(chǎn)生內(nèi)存碎片,可以高效利用單片機(jī)ram空間。mem_malloc代碼倉庫:?https://github.com/...

關(guān)鍵字: 單片機(jī) 內(nèi)存管理
關(guān)閉