當(dāng)前位置: 首頁 > 工業(yè)控制產(chǎn)品 > 自動(dòng)化控制 > 導(dǎo)軌式開關(guān)電源
發(fā)布日期:2022-04-17 點(diǎn)擊率:117
引 言 內(nèi)存管理機(jī)制是嵌入式系統(tǒng)研究中的一個(gè)重點(diǎn)和難點(diǎn)的問題,它必須滿足以下幾個(gè)特性: ①實(shí)時(shí)性。從實(shí)時(shí)性的角度出發(fā),要求內(nèi)存分配過程要盡可能地快。因此,在嵌入式系統(tǒng)中,不可能采用通用操作系統(tǒng)的一些復(fù)雜而完善的內(nèi)存分配策略,一般沒有段頁式的虛存管理機(jī)制;而是采用簡單、快速的內(nèi)存分配方案,其分配方案也因程序?qū)?shí)時(shí)性的要求而異。例如,VxWorks系統(tǒng)采用簡單的“首次適應(yīng),立即聚合”方法;VRTX中采用多個(gè)固定尺寸存儲(chǔ)塊的binning方案。 ②可靠性。嵌入式系統(tǒng)應(yīng)用的環(huán)境千變?nèi)f化,在有些特定情況下,對(duì)系統(tǒng)的可靠性要求極高,內(nèi)存分配的請(qǐng)求必須得到滿足,如果分配失敗則可能會(huì)帶來災(zāi)難性的后果。比如,飛機(jī)的燃油檢測系統(tǒng)。在飛機(jī)飛行過程中,如果燃料發(fā)生泄漏,系統(tǒng)應(yīng)該立即檢測到,并發(fā)出相應(yīng)的警報(bào)等待飛行員及時(shí)處理。如果因?yàn)閮?nèi)存分配失敗而不能相應(yīng)地操作,就可能發(fā)生機(jī)毀人亡的事故。 ③高效性。內(nèi)存分配要盡可能地減少浪費(fèi)。不可能為了保證滿足所有的內(nèi)存分配請(qǐng)求而將內(nèi)存配置得很大。一方面,嵌入式系統(tǒng)對(duì)成本的要求使得內(nèi)存在其中只是一種很有限的資源;另一方面,即使不考慮成本的因素,系統(tǒng)硬件環(huán)境有限的空間和有限的板面積決定了可配置的內(nèi)存容量是很有限的。 針對(duì)以上三個(gè)約束條件,市場上主流的嵌入式操作系統(tǒng),如VxWorks、嵌入式Linux等均提出了一套有效的解決方案;但是,這些系統(tǒng)只提供了應(yīng)用開發(fā)的接口,其底層的實(shí)現(xiàn)方案不可見。本文以開源的嵌入式操作系統(tǒng)RTEMS為例,分析了嵌入式系統(tǒng)內(nèi)存管理所面臨的問題,研究了其底層實(shí)現(xiàn)的解決方案。一般的嵌入式系統(tǒng)中最基本的內(nèi)存管理方案有兩種——靜態(tài)分配和動(dòng)態(tài)分配。 1、靜態(tài)分配與動(dòng)態(tài)分配 靜態(tài)分配是指在編譯或鏈接時(shí)將程序所需的內(nèi)存空間分配好。采用這種分配方案的程序段,其大小一般在編譯時(shí)就能夠確定;而動(dòng)態(tài)分配是指系統(tǒng)運(yùn)行時(shí)根據(jù)需要?jiǎng)討B(tài)地分配內(nèi)存。這兩種策略的選取一直是嵌入式系統(tǒng)設(shè)計(jì)中一個(gè)令人頭痛的問題。 一般的嵌入式系統(tǒng)都支持靜態(tài)分配,因?yàn)橄裰袛嘞蛄勘怼⒉僮飨到y(tǒng)映像這類的程序段,其程序大小在編譯和鏈接時(shí)是可以確定的。而是否支持動(dòng)態(tài)分配主要基于兩個(gè)方面的考慮:首先是實(shí)時(shí)性和可靠性的要求,其次是成本的要求。對(duì)于實(shí)時(shí)性和可靠性要求極高的系統(tǒng)(硬實(shí)時(shí)系統(tǒng)),不允許延時(shí)或者分配失效,必須采用靜態(tài)內(nèi)存分配,如航天器上的嵌入式系統(tǒng)多采用靜態(tài)內(nèi)存分配。除了基于成本的考慮外,用于汽車電子和工業(yè)自動(dòng)化領(lǐng)域的一些系統(tǒng)也沒有動(dòng)態(tài)內(nèi)存分配,比如WindRiver著名的OSEKWorks系統(tǒng)。然而,僅僅采用靜態(tài)分配,使系統(tǒng)失去了靈活性。必須在設(shè)計(jì)階段就預(yù)先知道所需要的內(nèi)存并對(duì)之作出分配;必須在設(shè)計(jì)階段就預(yù)先考慮到所有可能的情況,因?yàn)橐坏┏霈F(xiàn)沒有考慮到的情況,正在運(yùn)行的系統(tǒng)就無法處理。這樣的分配方案必然導(dǎo)致很大的浪費(fèi)。因?yàn)閮?nèi)存分配必須按照最壞情況進(jìn)行最大的配置,而實(shí)際運(yùn)行時(shí)很可能只使用其中的一小部分;而且在硬件平臺(tái)不變的情況下,不可能靈活地為系統(tǒng)添加功能,從而使得系統(tǒng)的升級(jí)變得困難。 雖然動(dòng)態(tài)內(nèi)存分配會(huì)導(dǎo)致響應(yīng)和執(zhí)行時(shí)間不確定、內(nèi)存碎片等問題,但是它的實(shí)現(xiàn)機(jī)制靈活,給程序?qū)崿F(xiàn)帶來極大的方便,有的應(yīng)用環(huán)境中動(dòng)態(tài)內(nèi)存分配甚至最必不可少的。比如,嵌入式系統(tǒng)中使用的網(wǎng)絡(luò)協(xié)議棧,在特定的平臺(tái)下,為了比較靈活地調(diào)整系統(tǒng)的功能,在系統(tǒng)中各個(gè)功能之間作出權(quán)衡,必須支持動(dòng)態(tài)內(nèi)存分配。例如,為了使系統(tǒng)能夠及時(shí)地在支持的VLAN數(shù)和支持的路由條目數(shù)之間作出調(diào)整,或者為了使不同的版本支持不同的協(xié)議,類似于malloc和free這類的函數(shù)是必不可少的。
下一篇: PLC、DCS、FCS三大控
上一篇: 索爾維全系列Solef?PV