實時操作系統(tǒng)到Linux系統(tǒng)的應用移植
POSIX
POSIX流行在基于UNIX的開源系統(tǒng)中、政府和軍事舞臺。然而POSIX對于傳統(tǒng)的嵌入式實時系統(tǒng)幾乎沒有影響。POSIX標準家族起源于美國國家標準與技術研究所,現(xiàn)在有被歸入IEEE、IEEE1003和其他標準的預兆。在過去的十年中,POSIX經(jīng)歷了多次的修訂,最近的一次是在2000年。
兼容性和一致性是兩個關于POSIX的重要觀點。兼容性意味著一個特定的操作系統(tǒng)平臺貫徹標準的一些子集,這種貫徹是備有文件證明的。甚至那些執(zhí)行微小子集的平臺能夠兼容于POSIX標準。POSIX的一致性,相反的,代表了更加嚴格的標準,意味著一個操作系統(tǒng)服從于過去的已證明測試。
SVR4,BSD和其他UNIX的API
事實上SVR4和UNIX的BSD版本是流行的系統(tǒng)標準,這些標準對于Linux的影響是巨大的。Linux貫徹了那些UNIX API的大的子集(舉個例子,對于共享內(nèi)存、隊列、信號量、BSD套接口和TCP/IP堆的Linux的ipc系統(tǒng)調(diào)用)。
熟悉SVR4、BSD,或者像AIX,HP-UX等其他通用的UNIX的開發(fā)人員對于Linux他們也能夠很快的掌握。
c語言庫
在嵌入式設計、RTOS或其他方面,很多API僅僅是標準c庫,這些庫或者是直接執(zhí)行函數(shù)或者是作為系統(tǒng)調(diào)用的包裝。Linux有熟悉的libc/glibc,盡管尺寸很大,但易于理解。
glibc的運行時間是對嵌入式應用程序內(nèi)存尺寸的挑戰(zhàn)。很多Linux的供應商為對于尺寸敏感的應用程序提供了經(jīng)過裁減了的庫。
RTOS接口層
RTOS的核心是對于進程間通訊調(diào)用的使用,這種調(diào)用提供了在任務中同步和通訊的機制。
表1提供了在典型的RTOS進程間通訊調(diào)用和同等的Linux調(diào)用之間的映射總結。
盡管在RTOS的調(diào)用和同等的Linux調(diào)用之間的映射是直接的,但是移植的工作量會被增加,如果使用仿真庫,這種仿真庫為其他RTOS移植過來的Linux應用程序提供了同樣的調(diào)用接口。
對于Xenomai開源項目,這樣的一個仿真技術是適用的。而這里,不同的仿真層提供給POSIX、VxWorks、VRTX和Itron這些被廣泛使用的RTOS。注意,像很多開源項目,Xenomai和它的外殼是正在進行的工作,他們可能還沒有完成或者還要進行修改。不過,它代表了一個在移植過程中潛在的高價值的出發(fā)點。
舉個例子,POSIX模塊主要是用來提供PSE51兼容的API.為了幫助移植其他PSE51兼容
API的應用程序,它包含了一些對于POSIX規(guī)范的擴展。
POSIX外殼已經(jīng)包含了以下這些基本的特色:
線程
互斥量
信號量
條件變量
實時信號的支持
放棄和放棄處理
特殊線程數(shù)據(jù)
消息隊列
定時器支持
共享內(nèi)存
POSIX外殼創(chuàng)建實時線程,他們或是運行在Linux內(nèi)核模塊或者在用戶空間的周期應用程序中。
實時內(nèi)核的API允許內(nèi)核和用戶空間的編程。開發(fā)人員通常更喜歡在用戶空間編程,因為他們之間的延遲小,特別是在硬件上,MMU的切換開銷很小。目前為止在用戶空間編程比直接從內(nèi)核空間運行應用程序更為容易。在用戶空間編程帶來了內(nèi)存保護和在這個環(huán)境中調(diào)試實時應用程序的GNU調(diào)試器的支持。
實時性能
也許對于嵌入式應用程序來說最重要的是滿足實時的要求。對于設計RTOS使得它們及時響應來滿足實時的要求,并且測量RTOS的系統(tǒng)調(diào)用,已經(jīng)做了相當大的努力加以實現(xiàn),因此開發(fā)人員能夠確定系統(tǒng)的性能滿足于實時的要求。RTOS的調(diào)用在一定意義上是循環(huán)的,應用程序和由RTOS提供的中斷是同步的。因此進行一個同步調(diào)用花費RTOS的時間是中斷處理時間的一部分。
在2002年以前,Linux的實時性比較差,而它的吞吐量特別是在網(wǎng)絡方面比較好。然而那是吞吐量而不是實時性。原因是基本的Linux內(nèi)核和unix應用框架。這些系統(tǒng)被設計成在應用程序開銷的時候,內(nèi)核執(zhí)行它所需要的。其原因就是如果開發(fā)人員知道內(nèi)核不會被一個異常中斷搶占,內(nèi)核的代碼就更容易編寫。
雖然這種方法被廣泛使用于unix和早期的Linux中,但是近來有一個下降的趨勢。它使得運行在多處理器體系的系統(tǒng)變得效率很低。同一時刻,非搶占式Linux使得Linux達到實時的標準變得困難,因為即使一個中斷發(fā)生并且中斷事件被調(diào)度運行,內(nèi)核還會完成當前的任務。為了解決在多處理器系統(tǒng)的運行效率問題,Linux內(nèi)核的開發(fā)人員開始侵入Linux內(nèi)核的內(nèi)部區(qū)域讓它非搶占區(qū)域變得更小,以至于更多的內(nèi)核區(qū)域在多處理器系統(tǒng)上能夠并行的執(zhí)行并且完成的更好。
那些對于改善Linux實時性有興趣的人使用搶占的Linux內(nèi)核來加速本地的實時響應。延遲減小到幾百微秒到1毫秒之間。更多的性能提高包括縮短非搶占區(qū)域來減小那些區(qū)域帶來的任何延遲。
自2002年以來,Linux已經(jīng)支持實時應用程序。從那時起,Linux開發(fā)人員開始加強它的實時性能,標準Linux的實時性能在不斷的提高?,F(xiàn)在Linux的實時性能相當于大多數(shù)特有的實時內(nèi)核。最近出現(xiàn)了對于Linux實時能力的重要推進,消耗CPU時間的同步機制的自旋鎖被繼承優(yōu)先級互斥這種更可靠的同步機制替代了?;コ鈾C制保證了cpu時間總是盡可能的分配給優(yōu)先級最高的應用程序,從而更縮短了從中斷到實時應用程序的過程。
最后一個主要的實時Linux的改進是將中斷處理作為一個應用程序的標準來執(zhí)行。以前Linux的設計賦予中斷處理比任何其他應用程序更高的優(yōu)先級。通過把中斷處理作為一個普通的應用程序處理,一旦優(yōu)先級更高的應用程序可以搶占比它優(yōu)先級低的中斷處理程序。
現(xiàn)在這些改變已經(jīng)完成,性能和穩(wěn)定性的改進使得Linux上的應用和以前基于傳統(tǒng)的實時操作系統(tǒng)擁有一樣的快速和穩(wěn)定。
邁步向前
現(xiàn)在開發(fā)者正在放棄第一代實時操作系統(tǒng),選擇更穩(wěn)定的一個開放式的嵌入式平臺比如像Linux。移植這些傳統(tǒng)的系統(tǒng)代表著挑戰(zhàn)同時又提供了非常豐厚的投資回報。真正的風險不是放棄熟悉的環(huán)境,工具和API,而是當嵌入式系統(tǒng)開發(fā)不斷前進時候,它卻停滯不前。
遵循這篇文章概括的步驟和RTOS的移植技術, 開發(fā)人員可以通過最少的時間和精力成功地移植以前的RTOS的代碼到一個現(xiàn)代化的Linux平臺上來。
評論