關(guān)于實(shí)時(shí)操作系統(tǒng)的RTOS模式

姓名:劉哲寧

學(xué)號(hào):16020520053

【嵌牛導(dǎo)讀】: 很多朋友和同事都問我末患,在實(shí)際中如何選擇 RTOS研叫。這個(gè)問題好難回答啊锤窑,非常復(fù)雜璧针。實(shí)際中至少有三種情況:

1.有些地方根本不需要 RTOS,可能系統(tǒng)設(shè)計(jì)者是愛好 RTOS 的人渊啰,:-)探橱,硬上了RTOS;

2.有些地方需要 RTOS, 但因?yàn)楦鞣N原因绘证,沒有使用 RTOS隧膏;

3.最糟糕的情況是,選擇的錯(cuò)誤的 RTOS 進(jìn)行開發(fā)嚷那,要了開發(fā)團(tuán)隊(duì)的命……

【嵌牛鼻子】:操作系統(tǒng)胞枕,RTOS

【嵌牛提問】:是否需要RTOS?

在選擇之前可以問問以下幾個(gè)問題:

1.系統(tǒng)對(duì)一些事件的響應(yīng)延遲時(shí)間有要求嗎魏宽?該時(shí)限在微秒級(jí)腐泻。

2.系統(tǒng)對(duì)一些事件的處理有時(shí)限要求? 該時(shí)限接近 CPU 全速處理該事件一次需要的時(shí)間队询,相差不過毫秒級(jí)別派桩。

3.系統(tǒng)中這些事件的處理代碼復(fù)雜嗎(平均每個(gè)事件的處理代碼不超過100行標(biāo)準(zhǔn)C代碼,無函數(shù)調(diào)用)蚌斩?這種事件超過5個(gè)以上铆惑?

4.系統(tǒng)有RAM、ROM的限制,使得大多數(shù)操作系統(tǒng)如 Linux员魏、uClinux丑蛤、WinCE 無法正常工作嗎?

5.系統(tǒng)有一定的規(guī)模撕阎,超過 2W 行標(biāo)準(zhǔn)C/C++代碼嗎盏阶?系統(tǒng)中有多個(gè)邏輯事務(wù),邏輯事務(wù)之間有同步或數(shù)據(jù)交換嗎闻书?

6.產(chǎn)品或系統(tǒng)生命周期長名斟,有后續(xù)升級(jí)、發(fā)展的要求嗎?

7.團(tuán)隊(duì)對(duì)選擇的 RTOS 了解嗎魄眉?有 RTOS 實(shí)施方面的專家嗎砰盐?

如果上面有超過 2 個(gè)問題回答是的朋友們注意了,您很可能需要 RTOS 進(jìn)行您系統(tǒng)的開發(fā)坑律。如果超過 4 個(gè)問題回答是的朋友岩梳,您必須使用 RTOS 了。

【嵌牛正文】:如何選擇RTOS晃择?

? ? ? ? 當(dāng)您決定使用 RTOS冀值,下面的問題就是選擇什么 RTOS 了。市面上的RTOS實(shí)在是太多宫屠,各種各樣的都有列疗,我們選擇一個(gè)RTOS的時(shí)候,可能要權(quán)衡以下因素:

1.成本

2.可靠性

3.實(shí)時(shí)性

4.工具鏈

5.模塊豐富

6.RTOS 內(nèi)核 RAM浪蹂、ROM 占用量

7.支持

成本主要是 RTOS 的版費(fèi)抵栈、學(xué)習(xí)成本。這個(gè)差別可大了坤次,有些操作系統(tǒng)古劲,如商業(yè)的VxWorks、QNX缰猴、Lynx产艾、uC/OS,貴啊滑绒,但拍了銀子闷堡,人家肯定會(huì)教您上手的。但很多操作系統(tǒng)蹬挤,如 FreeRTOS缚窿、 RTEMS、ecos焰扳、RT-Thread倦零,商業(yè)使用幾乎是沒有成本的误续,也沒有任何的版權(quán)問題。撇開這些商業(yè)收費(fèi)的 RTOS 不談扫茅,就談這些開源免費(fèi)的 RTOS蹋嵌,成本主要是學(xué)習(xí)成本了。如RTEMS這種操作系統(tǒng)就不太好學(xué)葫隙,資料少栽烂,本身的復(fù)雜度也高;如 FreeRTOS恋脚,小巧腺办,研究的人也多,本身代碼也不復(fù)雜糟描,學(xué)習(xí)曲線不陡峭怀喉,很容易爬上去。

可靠性是靠時(shí)間沉淀的船响。市場(chǎng)上不乏一些后起之秀躬拢,如rt-thread,相比 rtems 這種鼻祖類的 rtos见间,還稍顯稚嫩聊闯。這并不意味這我們什么都選擇 rtems, 那 rt-thread 怎么發(fā)展米诉?對(duì)于小型的項(xiàng)目菱蔬,可以試一試。大型項(xiàng)目荒辕,為了減少技術(shù)上的風(fēng)險(xiǎn)汗销,還是謹(jǐn)慎為妙犹褒。

實(shí)時(shí)性抵窒,這個(gè)應(yīng)該是 RTOS 的看家本領(lǐng),我初學(xué) rtos 的時(shí)候叠骑,好喜歡看牛人搞得 RTOS 對(duì)比表格李皇。上下文切換時(shí)間啊,中斷響應(yīng)時(shí)延啊……總喜歡挑那些時(shí)間最小的系統(tǒng)……但后來我知道了宙枷,事實(shí)上不是幾個(gè)對(duì)比表格就能說清楚問題的掉房。下面會(huì)詳細(xì)說到這些問題。

工具鏈慰丛,它往往決定我們開發(fā)的效率卓囚,和最終產(chǎn)品交付的質(zhì)量。有一些 RTOS 沒那么幸運(yùn)诅病,沒有讓你選擇工具鏈的權(quán)利哪亿,就算有粥烁,也需要付出很大的代價(jià)。如 RTEMS 采用GNU的工具鏈蝇棉,gnu 的工具鏈不好用讨阻,我就嘗試過把 rtems 移到 iar ewarm 下。后來篡殷,搞到一半的時(shí)候钝吮,不得不放棄,付出的精力已經(jīng)超出了我的承受范圍板辽。但 freeRTOS奇瘦、uC/OS 這類小 RTOS,只要編譯器支持編譯可重入代碼就可以劲弦,這條只有老掉牙的編譯器不行链患。所以基本上是個(gè)C編譯器都可以做Free RTOS、uC/OS的編譯瓶您。

模塊豐富麻捻,有沒有TCP/IP協(xié)議棧、文件系統(tǒng)呀袱、CAN協(xié)議棧贸毕、圖形界面等。當(dāng)然這個(gè)都不是必須的夜赵,對(duì)于簡單的產(chǎn)品明棍,可能這些模塊都用不到。對(duì)于復(fù)雜的系統(tǒng)寇僧,這些集成好的模塊摊腋,會(huì)大大節(jié)省開發(fā)時(shí)間。自己也可以移植相關(guān)的模塊嘁傀,可能會(huì)有幾個(gè)切實(shí)的問題不好解決:模塊因?yàn)椴环?rtos 的設(shè)計(jì)思想兴蒸,會(huì)對(duì)整體的實(shí)時(shí)性造成損害;也可能因?yàn)槟K使用的庫细办,和 rtos 使用的庫相沖突……

內(nèi)核 RAM橙凳、ROM 的占用量實(shí)際上要求 Rtos 高度可裁剪。不是所有內(nèi)核裁剪到最后都能滿足要求笑撞,RTOS 都有個(gè)最低的 RAM岛啸、ROM 要求,只剩一些最基本的服務(wù)茴肥。每加一個(gè)特性會(huì)增加一些資源坚踩,可以查閱相關(guān)資料得到這方面信息,確定系統(tǒng)資源可以保證順暢的使用該 RTOS瓤狐。

支持瞬铸,如果是商業(yè)系統(tǒng)卧晓,那不用擔(dān)心,既然付了銀子赴捞,人家肯定保證實(shí)施過程的順暢逼裆。如果是開源系統(tǒng),開發(fā)團(tuán)隊(duì)沒有像樣的 rtos 專家可不行赦政。雖然 rtos 系統(tǒng)都是相通的胜宇,了解另外一個(gè) rtos 很快,但有時(shí)候也不盡然恢着。RTEMS 這么復(fù)雜的 RTOS 搞懂了桐愉,去弄 freeRTOS、uC/OS掰派、rt-Thread 小麻雀从诲,自然沒問題;要是弄 QNX靡羡、VxWorks系洛、Lynx,還是要費(fèi)點(diǎn)功夫略步。 RTOS 在開發(fā)過程中會(huì)遇到很多問題描扯,比如棧的估算、任務(wù)優(yōu)先級(jí)的設(shè)計(jì)趟薄、內(nèi)存的設(shè)計(jì)绽诚、實(shí)時(shí)性的設(shè)計(jì)等,都是很不好弄的問題杭煎。最好團(tuán)隊(duì)內(nèi)有相關(guān) RTOS 的專家恩够,要是學(xué)習(xí)的話無所謂,研發(fā)產(chǎn)品和系統(tǒng)的話羡铲,那就是大問題了侨舆。

(4)幾種嵌入式RTOS的分析與比較

? ? ? ? ?

1). 4種操作系統(tǒng)的介紹

1.1? ? VxWorks

? ? ? VxWorks是美國WindRiver公司的產(chǎn)品几晤,是目前嵌入式系統(tǒng)領(lǐng)域中應(yīng)用很廣泛走诞,市場(chǎng)占有率比較高的嵌入式操作系統(tǒng)会油。VxWorks實(shí)時(shí)操作系統(tǒng)由400多個(gè)相對(duì)獨(dú)立、短小精悍的目標(biāo)模塊組成贾费,用戶可根據(jù)需要選擇適當(dāng)?shù)哪K來裁剪和配置系統(tǒng);提供基于優(yōu)先級(jí)的任務(wù)調(diào)度檐盟、任務(wù)間同步與通信褂萧、中斷處理、定時(shí)器和內(nèi)存管理等功能葵萎,內(nèi)建符合POSIX(可移植操作系統(tǒng)接口)規(guī)范的內(nèi)存管理导犹,以及多處理器控制程序唱凯;并且具有簡明易懂的用戶接口,在核心方面甚至可以微縮到8 KB谎痢。

1.2? ? μC/OS-II

μC/OS-II是美國嵌入式系統(tǒng)專家Jean J.Labrosse用C語言編寫的一個(gè)結(jié)構(gòu)小巧磕昼、搶占式的多任務(wù)實(shí)時(shí)內(nèi)核。μC/OS-II能管理64個(gè)任務(wù)节猿,并提供任務(wù)調(diào)度與管理票从、內(nèi)存管理、任務(wù)間同步與通信滨嘱、時(shí)間管理和中斷服務(wù)等功能峰鄙,具有執(zhí)行效率高、占用空間小太雨、實(shí)時(shí)性能優(yōu)良和可擴(kuò)展性強(qiáng)等特點(diǎn)吟榴。

1.3? ? μClinux

μClinux是一種優(yōu)秀的嵌入式Linux版本,其全稱為micro-control Linux囊扳,從字面意思看是指微控制Linux吩翻。同標(biāo)準(zhǔn)的Linux相比,μClinux的內(nèi)核非常小锥咸,但是它仍然繼承了Linux操作系統(tǒng)的主要特性仿野,包括良好的穩(wěn)定性和移植性、強(qiáng)大的網(wǎng)絡(luò)功能她君、出色的文件系統(tǒng)支持脚作、標(biāo)準(zhǔn)豐富的API,以及TCP/IP網(wǎng)絡(luò)協(xié)議等缔刹。因?yàn)闆]有MMU內(nèi)存管理單元球涛,所以其多任務(wù)的實(shí)現(xiàn)需要一定技巧。

1.4? ? eCos

eCos(embedded Configurable operating system)校镐,即嵌入式可配置操作系統(tǒng)亿扁。它是一個(gè)源代碼開放的可配置、可移植鸟廓、面向深度嵌入式應(yīng)用的實(shí)時(shí)操作系統(tǒng)从祝。最大特點(diǎn)是配置靈活,采用模塊化設(shè)計(jì)引谜,核心部分由小的組件構(gòu)成牍陌,包括內(nèi)核、C語言庫和底層運(yùn)行包等员咽。每個(gè)組件可提供大量的配置選項(xiàng)(實(shí)時(shí)內(nèi)核也可作為可選配置)毒涧,使用eCos提供的配置工具可以很方便地配置,并通過不同的配置使得eCos能夠滿足不同的嵌入式應(yīng)用要求贝室。

1.5? ? FreeRTOS:

? ? ? ? 以前對(duì)FreeRTOS的印象還不錯(cuò)契讲,就因?yàn)槊赓M(fèi)仿吞,最近上官網(wǎng)仔細(xì)看過以后發(fā)現(xiàn)它用的是修改版GPL2,商用確實(shí)是免費(fèi)的捡偏,但是必須告知用戶你的產(chǎn)品用了FreeRTOS唤冈,并且如果用戶要求就必須提供源代碼。

? ? ? ? 如果要不談我用的什么系統(tǒng)银伟,也不想提供源代碼你虹,就的付費(fèi)給它,改授權(quán)變成OpenRTOS枣申。

? ? ? ? 還有更好的呢售葡!如果想要更多的功能,更全的協(xié)議棧忠藤,更完善完整的安全性挟伙,請(qǐng)付更多的錢得到SafeRTOS!看個(gè)API文檔都要收錢模孩,要其他模塊也要收錢(FS尖阔,TCP)。要不就自己費(fèi)點(diǎn)勁移植吧榨咐。另外介却,功能也比較簡單,只能支持:隊(duì)列块茁,信號(hào)量和互斥齿坷。但是收費(fèi)版SafeRTOS應(yīng)該不錯(cuò),只是不拿錢就見不著(流明的CM3部分型號(hào)內(nèi)建了SafeRTOS的API数焊,出廠就有可以直接用永淌,這個(gè)不錯(cuò)。)

? ? 最小系統(tǒng):ROM 6K RAM 2K

/*補(bǔ)充內(nèi)容*/

FreeRTOS和OpenRTOS

? FreeRTOS和OpenRTOS的共享相同的源碼佩耳,只是 OpenRTOS 為 FreeRTOS 披上’commercial and legal wrapper’‘

用戶從FreeRTOS更新到OpenRTOS主要有兩個(gè)原因:

(1)為了克服FreeRTOS修改版的GPL許可證限制遂蛀。

(2)為了獲得額外的服務(wù),如專業(yè)的技術(shù)支持干厚,高質(zhì)量的中間件李滴,培訓(xùn),咨詢和相應(yīng)的工具

FreeRTOS修改版的GPL許可證限制

修改版的GPL許可證有如下幾個(gè)缺陷(There are several reasons why developers may find the FreeRTOS modified GPL licence restrictive.)

(1)公司可能有一個(gè)全面禁止在他們的項(xiàng)目中使用GPL授權(quán)的軟件蛮瞄。

(2)他們可能需要IP賠償所坯。

(3)他們可能更愿意在他們的產(chǎn)品中,避免FreeRTOS的許可證要求承認(rèn)他們使用FreeRTOS的裕坊。

一個(gè)OPENRTOS許可證刪除了 修改后的GPL的限制包竹,提供知識(shí)產(chǎn)權(quán)保障,并允許開發(fā)者保持匿名籍凝。

FreeRTOS和SafeRTOS

? ? ? SafeRTOS也是基于FreeRTOS的周瞎,但是和FreeRTOS不同,被安全方面的專家做了重新設(shè)計(jì)饵蒂。

SAFERTOS was initially certified in 2007 by TüV SüD to IEC 61508-3 SIL 3, the highest level possible for a software only component.

? ? ? Today SAFERTOS has grown to be a leading safety critical RTOS solution supporting a wide range of international design safety standards, including:

Industrial IEC 61508 (2010)

Railway EN 50128

Medical IEC 62304/FDA 510K

Nuclear IEC 61513, IEC 62138, ASME NQA-1 2008

Process IEC 61511

Automotive ISO 26262

Aerospace DO178B

2)? ? ? 性能分析與比較

任務(wù)管理声诸、任務(wù)及中斷間的同步與通信機(jī)制、內(nèi)存管理退盯、中斷管理彼乌、文件系統(tǒng)、對(duì)硬件的支持和系統(tǒng)移植這幾方面是實(shí)時(shí)操作系統(tǒng)的主要性能渊迁。下面就從這幾個(gè)方面著手對(duì)上述4種操作系統(tǒng)進(jìn)行分析與比較慰照。

2.1? ? 任務(wù)管理

任務(wù)管理是嵌入式實(shí)時(shí)操作系統(tǒng)的核心和靈魂,決定了操作系統(tǒng)的實(shí)時(shí)性能琉朽。它通常包含優(yōu)先級(jí)設(shè)置毒租、多任務(wù)調(diào)度機(jī)制和時(shí)間確定性等部分。

優(yōu)先級(jí)設(shè)置

嵌入式操作系統(tǒng)支持多任務(wù)箱叁,每個(gè)任務(wù)都具有優(yōu)先級(jí)墅垮,任務(wù)越重要,賦予的優(yōu)先級(jí)應(yīng)越高耕漱。優(yōu)先級(jí)的設(shè)置分為靜態(tài)優(yōu)先級(jí)和動(dòng)態(tài)優(yōu)先級(jí)兩種算色。靜態(tài)優(yōu)先級(jí)指的是每個(gè)任務(wù)在運(yùn)行前都被賦予一個(gè)優(yōu)先級(jí),而且這個(gè)優(yōu)先級(jí)在系統(tǒng)運(yùn)行期間正常情況下是不能改變的螟够,但允許通過系統(tǒng)調(diào)函函數(shù)改變?nèi)蝿?wù)的優(yōu)先級(jí)灾梦;動(dòng)態(tài)優(yōu)先級(jí)則是指每個(gè)任務(wù)的優(yōu)先級(jí)(特別是應(yīng)用程序的優(yōu)先級(jí))在系統(tǒng)運(yùn)行時(shí)可以動(dòng)態(tài)地改變,這種改變是調(diào)度算法決定的妓笙,而非通過系統(tǒng)調(diào)用人為改變的若河。

多任務(wù)調(diào)度機(jī)制

任務(wù)調(diào)度主要是協(xié)調(diào)任務(wù)對(duì)CPU資源的爭奪使用。對(duì)系統(tǒng)資源非常匱乏的嵌入式系統(tǒng)來說给郊,任務(wù)調(diào)度尤為重要牡肉,它直接影響到系統(tǒng)的實(shí)時(shí)性能。通常淆九,多任務(wù)調(diào)度機(jī)制分為基于優(yōu)先級(jí)搶占式調(diào)度和時(shí)間片輪轉(zhuǎn)調(diào)度统锤。

基于優(yōu)先級(jí)搶占式調(diào)度(PBP,Priority Based and Preemptive):系統(tǒng)中每個(gè)任務(wù)都有一個(gè)優(yōu)先級(jí)炭庙,內(nèi)核總是將CPU分配給處于就緒態(tài)的優(yōu)先級(jí)最高的任務(wù)運(yùn)行饲窿。如果系統(tǒng)發(fā)現(xiàn)就緒隊(duì)列中有比當(dāng)前運(yùn)行任務(wù)更高的優(yōu)先級(jí)任務(wù),就把當(dāng)前運(yùn)行任務(wù)置于就緒隊(duì)列中焕蹄,調(diào)入高優(yōu)先級(jí)任務(wù)運(yùn)行逾雄。系統(tǒng)采用優(yōu)先級(jí)搶占方式進(jìn)行調(diào)度,可以保證重要的突發(fā)事件及時(shí)得到處理。

時(shí)間片輪轉(zhuǎn)調(diào)度(RR鸦泳,Round Robin) :讓優(yōu)先級(jí)相同的處于就緒狀態(tài)的任務(wù)按時(shí)間片使用CPU银锻,以防止同優(yōu)先級(jí)的某一任務(wù)長時(shí)間獨(dú)占CPU。

在一般情況下做鹰,嵌入式實(shí)時(shí)操作系統(tǒng)采用基于優(yōu)先級(jí)搶占式調(diào)度與時(shí)間片輪轉(zhuǎn)調(diào)度相結(jié)合的調(diào)度機(jī)制击纬。

時(shí)間的可確定性

嵌入式實(shí)時(shí)操作系統(tǒng)函數(shù)調(diào)用與服務(wù)的執(zhí)行時(shí)間應(yīng)具有可確定性。系統(tǒng)服務(wù)的執(zhí)行時(shí)間不依賴于應(yīng)用程序任務(wù)的多少钾麸「瘢基于此特征,系統(tǒng)完成某個(gè)確定任務(wù)的時(shí)間是可預(yù)測(cè)的饭尝。表1具體列出了4種操作系統(tǒng)的調(diào)度機(jī)制肯腕。

4種嵌入式實(shí)時(shí)操作系統(tǒng)都支持多任務(wù),只是在支持任務(wù)數(shù)量上和任務(wù)調(diào)度機(jī)制上有所不同钥平。VxWorks具有高效的任務(wù)管理功能实撒,它支持多任務(wù),可分配256個(gè)優(yōu)先級(jí)帖池,支持優(yōu)先級(jí)搶占式調(diào)試和時(shí)間片輪轉(zhuǎn)調(diào)度奈惑,實(shí)時(shí)性最好。μC/OS-II內(nèi)核是針對(duì)實(shí)時(shí)系統(tǒng)的要求設(shè)計(jì)實(shí)現(xiàn)的睡汹,只支持基于固定優(yōu)先級(jí)搶占式調(diào)度肴甸;調(diào)度方法簡單,可以滿足較高的實(shí)時(shí)性要求囚巴。μClinux在結(jié)構(gòu)上繼承了標(biāo)準(zhǔn)Linux的多任務(wù)實(shí)現(xiàn)方式原在,分為實(shí)時(shí)進(jìn)程和普通進(jìn)程,分別采用先來先服務(wù)和時(shí)間片輪轉(zhuǎn)調(diào)度彤叉;僅針對(duì)中低檔嵌入式CPU特點(diǎn)進(jìn)行改良庶柿,且不支持內(nèi)核搶占。eCos調(diào)度方法豐富秽浇,提供了兩種基于優(yōu)先級(jí)的調(diào)度器(即位圖調(diào)度器和多級(jí)隊(duì)列調(diào)度器)浮庐,允許用戶在進(jìn)行配置時(shí)選擇其中一個(gè)凋度器,適應(yīng)性好柬焕。

2.2? ? 任務(wù)及中斷間的同步與通信機(jī)制

實(shí)時(shí)操作系統(tǒng)的功能一般要通過若干任務(wù)和中斷服務(wù)程序共同完成审残。任務(wù)與任務(wù)之間、任務(wù)與中斷間任務(wù)及中斷服務(wù)程序之間必須協(xié)調(diào)動(dòng)作斑举,互相配合搅轿,這就涉及任務(wù)間的同步與通信問題。嵌入式實(shí)時(shí)操作系統(tǒng)通常是通過信號(hào)量Semaphere富玷、互斥信號(hào)量Mutex璧坟、事件標(biāo)志Event和異步信號(hào)Signal來實(shí)現(xiàn)同步既穆,通過消息郵箱MailBox、消息隊(duì)列沒Message雀鹃、管道Pipe和共享內(nèi)存Share Mem來提供通信服務(wù)幻工。由于互斥信號(hào)量的使用,帶來了實(shí)時(shí)操作系統(tǒng)中常見的優(yōu)先級(jí)反轉(zhuǎn)問題褐澎。優(yōu)先級(jí)反轉(zhuǎn)是一種不確定的延遲形式会钝,當(dāng)高優(yōu)先級(jí)任務(wù)企圖訪問已被低優(yōu)先級(jí)占有的共享資源時(shí)伐蒋,必須等待低優(yōu)先級(jí)任務(wù)釋放共享資源工三;如果這時(shí)低優(yōu)先級(jí)任務(wù)被一個(gè)或多個(gè)中優(yōu)先級(jí)任務(wù)搶占,那么高優(yōu)先級(jí)任務(wù)被延遲的時(shí)間將更進(jìn)一步延長先鱼,實(shí)時(shí)性難以保證俭正。因此,應(yīng)采取相關(guān)措施以盡鼉避免出現(xiàn)優(yōu)先級(jí)反轉(zhuǎn)問題焙畔。實(shí)時(shí)系統(tǒng)通常采用優(yōu)先級(jí)繼承和優(yōu)先級(jí)置頂機(jī)制掸读。

優(yōu)先級(jí)繼承是指擁有互斥信號(hào)量的任務(wù)被提升到與下一個(gè)在等待該互斥信號(hào)量的最高優(yōu)先級(jí)任務(wù)相同的優(yōu)先級(jí);優(yōu)先級(jí)置頂是指獲得互斥量的任務(wù)將其優(yōu)先級(jí)提升到一個(gè)事先規(guī)定好的值宏多。表2為4種操作系統(tǒng)的同步與通信機(jī)制的比較儿惫。

4種系統(tǒng)都具有靈話的任務(wù)間同步與通信機(jī)制,都可以通過信號(hào)量伸但、消息隊(duì)列來實(shí)現(xiàn)同步與通信肾请,但是VxWorks與μClinux都不支持郵箱和事件標(biāo)志,而且除了μClinux和eCos中的位圖調(diào)度器更胖,其他操作系統(tǒng)都采取了措施抑制優(yōu)先級(jí)反轉(zhuǎn)铛铁。

2.3? ? 內(nèi)存管理

內(nèi)存管理主要包括:內(nèi)存分配原則,存儲(chǔ)保護(hù)和內(nèi)存分配方式却妨。

內(nèi)存分配原則

內(nèi)存分配原則包括快速性饵逐、可靠性和高效性。其中彪标,快速性要求內(nèi)存分配過程要盡可能快倍权,所以一般采用簡單、快速的分配算法捞烟;可靠性指的是內(nèi)存分配的請(qǐng)求必須得到滿足薄声;系統(tǒng)強(qiáng)調(diào)高效性的要求,不僅僅是對(duì)系統(tǒng)成本的要求坷襟,而且由于系統(tǒng)本身可配置的內(nèi)存容量也是很有限的奸柬,所以要盡可能地避免浪費(fèi)。嵌入式系統(tǒng)通常會(huì)根據(jù)特定的需求對(duì)內(nèi)存分配方案進(jìn)行規(guī)劃婴程,從而避免內(nèi)存碎片廓奕。

存儲(chǔ)保護(hù)

通常在操作系統(tǒng)的內(nèi)存中既有系統(tǒng)程序也有用戶程序,為了使兩者都能正常運(yùn)行,避免程序間相互干擾桌粉,需要對(duì)內(nèi)存中的程序和數(shù)據(jù)進(jìn)行保護(hù)蒸绩。存儲(chǔ)保護(hù)通常需要硬件支持,在很多系統(tǒng)中都采用MMU铃肯,并結(jié)合軟件實(shí)現(xiàn)患亿;但由于嵌入式系統(tǒng)的成本限制內(nèi)核和用戶程序通常都在相同的內(nèi)存空間中。因此是否支持存儲(chǔ)保護(hù)一方面取決于CPU是否支持MMU及不同的運(yùn)行級(jí)別押逼,如ARM7TDMI核不支持MMU步藕,大多數(shù)DSP都不支持MMU和運(yùn)行級(jí)別;另一方面依賴于操作系統(tǒng)是否在軟件上進(jìn)行支持挑格,uC/OS咙冗、eCos等本身就不支持虛擬內(nèi)存管理。VxWorks也有不同的版本漂彤,6.0版本以下就不支持MMU雾消。

內(nèi)存分配方式

內(nèi)存分配方式可分為靜態(tài)分配和動(dòng)態(tài)分配。靜態(tài)分配是在程序運(yùn)行前一次性分配給相應(yīng)內(nèi)存挫望,并且在程序運(yùn)行期間中不允許再申請(qǐng)或在內(nèi)存中移動(dòng)立润;動(dòng)態(tài)分配則允許在程序運(yùn)行整個(gè)過程中進(jìn)行內(nèi)存分配。靜態(tài)分配使系統(tǒng)失去了靈活性媳板,但對(duì)于實(shí)時(shí)性要求比較高的系統(tǒng)是必需的桑腮,通常情況下這些系統(tǒng)的內(nèi)存有限,用戶的全局?jǐn)?shù)據(jù)都會(huì)精心規(guī)劃拷肌,只有內(nèi)核本身會(huì)使用一些動(dòng)態(tài)內(nèi)存到旦;而動(dòng)態(tài)分配賦予了系統(tǒng)設(shè)計(jì)者更多自主性,可以靈活地調(diào)整系統(tǒng)的功能巨缘。

VxWorks對(duì)內(nèi)存的使用采用的是Flat Mode添忘,可被靜態(tài)或動(dòng)態(tài)鏈接。VxWorks為用戶提供了兩種內(nèi)存區(qū)域Region和Partition若锁。Region是變長的內(nèi)存區(qū)搁骑,用戶可以從創(chuàng)建的Region中分配Segment,其特點(diǎn)是容易產(chǎn)生碎片又固,但靈活并且不浪費(fèi)仲器;Partition是定長的內(nèi)存區(qū),用戶可以從刨建的Partition中分配Buffer仰冠,其特點(diǎn)是不會(huì)產(chǎn)生碎片乏冀,效率高但是易浪費(fèi)。VxWorks采用最先算法分配內(nèi)存洋只。

μC/OS-II把連續(xù)的大塊內(nèi)存按分區(qū)來管理辆沦,每個(gè)分區(qū)中都包含整數(shù)個(gè)大小相同的內(nèi)存塊昼捍,但不同分區(qū)之間內(nèi)存的太小可以不同。用戶動(dòng)態(tài)分配內(nèi)存時(shí)肢扯,只須選擇一個(gè)適當(dāng)?shù)姆謪^(qū)妒茬,按塊來分配內(nèi)存,釋放時(shí)將該塊放回到以前所屬的分區(qū)蔚晨,這樣就消除了因多次動(dòng)態(tài)分配和釋放內(nèi)存所引起的碎片問題乍钻。

μClinux是針對(duì)沒有MMU的處理器設(shè)計(jì)的,不能使用處理器的虛擬內(nèi)存管理技術(shù)铭腕,只能采用實(shí)存儲(chǔ)器管理策略银择。系統(tǒng)使用分頁內(nèi)存分配方式,在啟動(dòng)時(shí)對(duì)實(shí)際存儲(chǔ)器進(jìn)行分頁谨履。系統(tǒng)對(duì)內(nèi)存的訪問是直接的欢摄,操作系統(tǒng)對(duì)內(nèi)存空間沒有保護(hù),多個(gè)進(jìn)程可共享一個(gè)運(yùn)行空間笋粟,所以,即使是一個(gè)無特權(quán)進(jìn)程調(diào)用一個(gè)無效指針也會(huì)觸發(fā)一個(gè)地址錯(cuò)誤析蝴,并有可能引起程序崩潰甚至系統(tǒng)崩潰害捕。

eCos對(duì)內(nèi)存分配既不分段也不分頁,而是采用一種基于內(nèi)存池的動(dòng)態(tài)內(nèi)存分配機(jī)制闷畸。通過兩種內(nèi)存池來實(shí)現(xiàn)兩種內(nèi)存管理方法:一種是變長的內(nèi)存池尝盼;另一種是定長的內(nèi)存池,類似于VxWorb的管理方案佑菩。表3為4種操作系統(tǒng)內(nèi)存管理的比較盾沫。

2.4? ? 中斷管理

中斷管理是實(shí)時(shí)系統(tǒng)中一個(gè)很重要的部分,系統(tǒng)經(jīng)常通過中斷與外部事件交互殿漠。主要考慮是否支持中斷嵌套赴精、中斷處理機(jī)制、中斷延時(shí)等绞幌。

VxWorks的中斷管理

VxWorks操作系統(tǒng)中斷管理采用中斷處理與普通任務(wù)分別在不同棧中處理的中斷處理機(jī)制蕾哟,使得中斷只會(huì)引發(fā)一些關(guān)鍵寄存器的存儲(chǔ),而不會(huì)導(dǎo)致任務(wù)的上下文切換莲蜘,從而極大地縮短了中斷延時(shí)谭确。同時(shí),VxWorks的中斷處理程序一般在最短時(shí)間內(nèi)通告中斷的發(fā)生票渠,而將其他的非實(shí)時(shí)處理盡量放入被引發(fā)的中斷服務(wù)任務(wù)中來完成逐哈,這也縮短了中斷處理的時(shí)間,可有效減少中斷延時(shí)问顷。所有中斷處理程序使用相同的中斷堆棧昂秃。為了能處理最壞情況下的中斷嵌套薯鼠,必須分配足夠大的中斷堆棧空間械蹋。

μC/OS-II的中斷管理

μC/OS-II中斷處理比較簡單出皇。一個(gè)中斷向量上只能掛一個(gè)中斷服務(wù)子程序ISR,而且用戶代碼必須都在ISR中完成哗戈。ISR需要做的事情越多郊艘,中斷延時(shí)也就越長。是否支持中斷嵌套取決于具體實(shí)現(xiàn)唯咬,如在ARM處理器上當(dāng)選擇中斷嵌套時(shí)需要切換不同的處理器模式纱注,實(shí)現(xiàn)起來也比較麻煩。

μClinux的中斷管理

μClinux操作系統(tǒng)將中斷處理分為兩部分:頂半處理和底半處理胆胰。在頂半處理中狞贱,必須關(guān)中斷運(yùn)行,且僅進(jìn)行必要的蜀涨、非常少瞎嬉、速度快的處理,其他處理交給底半處理厚柳;底半處理執(zhí)行那些復(fù)雜氧枣、耗時(shí)的處理,而且允許被中斷别垮。通常在硬件中斷返回的時(shí)候會(huì)執(zhí)行底半部的軟中斷便监,若軟中斷太多則會(huì)交給專門的內(nèi)核處理任務(wù)處理,此時(shí)中斷返回碳想,避免由于中斷運(yùn)行時(shí)間過長影響其它其他進(jìn)程烧董。因此在頂半部中斷是不會(huì)嵌套的。所有的中斷服務(wù)下半部將順序執(zhí)行胧奔。所有的中斷處理程序共用系統(tǒng)堆棧逊移。

eCos的中斷管理

eCos使用了分層式中斷處理機(jī)制,把中斷處理分為傳統(tǒng)的ISR和滯后中斷服務(wù)程序DSR葡盗。類似于μClinux的處理機(jī)制螟左,這種機(jī)制可以在中斷允許時(shí)運(yùn)行DSR,因此在處理較低優(yōu)先級(jí)中斷時(shí)允許高優(yōu)先級(jí)的中斷和處理觅够。為了極大地縮短中斷延時(shí)胶背,ISR應(yīng)當(dāng)可以快速運(yùn)行。如果中斷引起的服務(wù)量少喘先,則ISR可以單獨(dú)處理中斷钳吟;如果中斷服務(wù)復(fù)雜,則ISR只屏蔽中斷源窘拯,然后交由DSR處理红且。

2.5? ? 文件系統(tǒng)

所謂"文件系統(tǒng)"是指負(fù)責(zé)存取和管理文件信息的機(jī)構(gòu)坝茎,也可以說是負(fù)責(zé)文件的建立、撤銷暇番、組織嗤放、讀寫、修改壁酬、復(fù)制次酌,以及對(duì)文件管理所需的其他資源實(shí)施管理的軟件部分。

VxWorks操作系統(tǒng)在文件系統(tǒng)與設(shè)備驅(qū)動(dòng)程序之間使用一種標(biāo)準(zhǔn)的I/O口操作接口舆乔,且支持MS-DOS岳服、RT-11、RFS希俩、CD-ROM吊宋、RAW等文件系統(tǒng)。這樣颜武,在單個(gè)VxWorks操作系統(tǒng)中可以運(yùn)行多個(gè)相同或不同種類的文件系統(tǒng)璃搜。

μC/OS-II是面向中小型嵌入式系統(tǒng)的,即使包含全部功能盒刚,編譯后內(nèi)核也不到10 KB腺劣,所以系統(tǒng)本身并沒有提供對(duì)文件系統(tǒng)的支持。但是μC/OS-II具有良好的擴(kuò)展性能因块,如果需要也可自行加入文件系統(tǒng)的內(nèi)容。

μClinux繼承了Linux完善的文件系統(tǒng)性能籍铁,采用VFS機(jī)制涡上,可以支持ROMFS、NFS拒名、ext2吩愧、MS-DOS、JFFS等文件系統(tǒng)增显。但一般采用ROMFS文件系統(tǒng)雁佳,這種文件系統(tǒng)相對(duì)于一般的文件系統(tǒng)(如ext2)占用更少的空間。但是ROMFS文件系統(tǒng)不支持動(dòng)態(tài)擦寫保存同云,對(duì)于系統(tǒng)需要?jiǎng)討B(tài)保存的數(shù)據(jù)須采用虛擬RAM盤/JFFS的方法進(jìn)行處理糖权。

eCos操作系統(tǒng)的可配置性非常強(qiáng)大,用戶可以自己加入所需的文件系統(tǒng)炸站。

2.6? ? 對(duì)硬件的支持

VxWorks星澳、μC/OS-II、μClinux和eCos這4種操作系統(tǒng)都支持當(dāng)前流行的大部分嵌入式CPU旱易。μC/OS-II支持從8位到32位的CPU禁偎,VxWorks腿堤、μClinux和eCos可以在16位、32位和64位等不同體系結(jié)構(gòu)之間移植如暖。

由于μClinux繼承了Linux的大部分性能笆檀,所以至少需要512KB的RAM空間,lMB的ROM/Flash空間盒至;而μC/OS-II和eCos由于本身內(nèi)核就很小酗洒,經(jīng)過裁剪后的代碼最小可以分別為2 KB和10 KB,所需的最小數(shù)據(jù)RAM空間分別為4 KB和10 KB妄迁∏薜福總的來說,4種系統(tǒng)對(duì)硬件的要求比較低登淘,比較經(jīng)濟(jì)箫老。具體比較如表4所列。

2.7? ? 系統(tǒng)移植

嵌入式操作系統(tǒng)移植的目的是使嵌入式操作系統(tǒng)能在某個(gè)微處理器或微控制器上運(yùn)行黔州。4種系統(tǒng)中VxWorks是商用操作系統(tǒng)的有很多API函數(shù)及相關(guān)技術(shù)支持耍鬓,所以移植和二次開發(fā)比較容易,但是移植成本較高流妻。其他3種系統(tǒng)的結(jié)構(gòu)化設(shè)計(jì)便于把與處理器相關(guān)的部分分離出來牲蜀,所以被移植到新的處理器上也是可能的。μC/OS-II的移植相對(duì)比較簡單绅这,只需要修改與處理器相關(guān)的代碼就可以了涣达。μClinux是Linux針對(duì)嵌入式系統(tǒng)的一種改良,其結(jié)構(gòu)比較復(fù)雜证薇。移植μClinux度苔,目標(biāo)處理器除了應(yīng)滿足μC/OS-II移植所需的條件外,還需要足夠容量的外部ROM和RAM浑度。eCos系統(tǒng)的可移植性明顯比μC/OS-II和μClinux好寇窑。在eCos系統(tǒng)中,每個(gè)硬件平臺(tái)都有一個(gè)單獨(dú)的目錄箩张,用于存放引對(duì)這一硬件平臺(tái)的硬件抽象層的代碼和配置信息甩骏;而μClinux的硬件抽象層的代碼則分布在好幾個(gè)目錄中,通過命令來選擇不同硬件平臺(tái)的代碼先慷。所以饮笛,修改eCos代碼相對(duì)簡單,移植也相對(duì)容易熟掂。

2.8? ? 結(jié)論

? ? ? 這4種嵌入式實(shí)時(shí)操作系統(tǒng)在嵌入式系統(tǒng)的應(yīng)用非常廣泛缎浇,但是又具有各自的特點(diǎn)。根據(jù)上述比較赴肚,歸納出各自的適用領(lǐng)域素跺。

? ? ? ? VxWorks是一套類似于Unix的實(shí)時(shí)操作系統(tǒng)二蓝,它內(nèi)建了符合POSIX規(guī)范的內(nèi)存管理,以及多處理器控制程序指厌,并且具有簡明易懂的用戶接口刊愚,在核心方面甚至可以微縮到8 KB。它由400多個(gè)相對(duì)獨(dú)立的踩验、短小精悍的目標(biāo)模塊組成鸥诽,用戶可根據(jù)需要選擇適當(dāng)模塊來裁剪和配置系統(tǒng),有效地保證了系統(tǒng)的安全性和可靠性箕憾。它被廣泛地應(yīng)用在通信牡借、軍事、航空袭异、航天等高尖技術(shù)及實(shí)時(shí)性要求極高的領(lǐng)域钠龙,尤其是在許多關(guān)鍵應(yīng)用方面,VxWorks還是一枝獨(dú)秀御铃。例如碴里,美國波音公司就在其最新的787客機(jī)中采用了此操作系統(tǒng);而在外層空間探索領(lǐng)域上真,VxWorks則一直是美國太空總署NASA的最愛咬腋。

? ? ? μC/OS-II是一個(gè)結(jié)構(gòu)簡單、功能完備和實(shí)時(shí)性很強(qiáng)的嵌入式操作系統(tǒng)內(nèi)核睡互,適合于廣大的嵌入式系統(tǒng)開發(fā)人員和愛好者入門學(xué)習(xí)根竿,以及高校教學(xué)和科研。μC/OS-II很適合開發(fā)那些對(duì)系統(tǒng)要求不是很苛刻就珠,且RAM和ROM有限的各種小型嵌入式系統(tǒng)設(shè)備犀填。

? ? ? ? μClinux最大特點(diǎn)在于針對(duì)無MMU處理器設(shè)計(jì),可以利用功能強(qiáng)大的Linux資源嗓违,因此適合開發(fā)對(duì)時(shí)間要求不高的小容量、低成本的各類產(chǎn)品图贸,特別適用于開發(fā)與網(wǎng)絡(luò)應(yīng)用密切相關(guān)的嵌入式設(shè)備或者PDA設(shè)備蹂季。例如,CISCO公司的2500/3000/4000路由器就是基于μClinux操作系統(tǒng)開發(fā)的疏日。

? ? ? ? eCos最大特點(diǎn)是配置靈活偿洁,而且是面向深度嵌入式應(yīng)用的,很適合用于一些商業(yè)級(jí)或工業(yè)級(jí)對(duì)成本敏感的嵌入式系統(tǒng)沟优,例如消費(fèi)電子類領(lǐng)域中的一些應(yīng)用涕滋。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市挠阁,隨后出現(xiàn)的幾起案子宾肺,更是在濱河造成了極大的恐慌溯饵,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锨用,死亡現(xiàn)場(chǎng)離奇詭異丰刊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)增拥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門啄巧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人掌栅,你說我怎么就攤上這事秩仆。” “怎么了猾封?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵澄耍,是天一觀的道長。 經(jīng)常有香客問我忘衍,道長逾苫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任枚钓,我火速辦了婚禮铅搓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘搀捷。我一直安慰自己星掰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布嫩舟。 她就那樣靜靜地躺著氢烘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪家厌。 梳的紋絲不亂的頭發(fā)上播玖,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音饭于,去河邊找鬼蜀踏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛掰吕,可吹牛的內(nèi)容都是我干的果覆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼殖熟,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼局待!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤钳榨,失蹤者是張志新(化名)和其女友劉穎舰罚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體重绷,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沸停,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了昭卓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片愤钾。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖候醒,靈堂內(nèi)的尸體忽然破棺而出能颁,到底是詐尸還是另有隱情,我是刑警寧澤倒淫,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布伙菊,位于F島的核電站,受9級(jí)特大地震影響敌土,放射性物質(zhì)發(fā)生泄漏镜硕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一返干、第九天 我趴在偏房一處隱蔽的房頂上張望兴枯。 院中可真熱鬧,春花似錦矩欠、人聲如沸财剖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽躺坟。三九已至,卻和暖如春乳蓄,著一層夾襖步出監(jiān)牢的瞬間咪橙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國打工虚倒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留匣摘,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓裹刮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親庞瘸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子捧弃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容