作者
李宇
過去很多嵌入式系統不是一個操作系統
或者是提供商的專有核心
或者是DOS操作系統的擴展
顯然這些方法並不能適應今天嵌入式系統開發的要求!現有的一些商業實時操作系統
盡管提供了很小的核心和多任務開發環境
但性能並不理想
也不符合現在實時嵌入式市場的需求
因此
人們把目光投向了通用操作系統(例如Windows
Solaris
Linux)
希望把它們
改造
為實時操作系統
通常這些操作系統功能強大
結構復雜
易於軟件的二次開發
實用性強
並且提供編程人員熟悉的標准API
此外
這些操作系統也提供了一些對實時軟件開發的支持
然而
這些操作系統用於嵌入式系統的開發還存在不足
嵌入式系統要求具備高可靠性
滿足應用需求的可剪裁性
以及比通用操作系統要求更高的實時性
做為嵌入式系統開發的解決方案
Linux在眾多通用操作系統中具有獨一無二的優勢
首先
Windows和Solaris等專有商業操作系統的剪裁受到商家的嚴格控制
這大大限制了開發者的剪裁深度
而Linux遵循GPL協議
開放所有系統源代碼
非常易於剪裁
其次
同其它開放源碼的通用操作系統(如FreeBSD)相比
Linux在多種處理器
開發板支持和軟件開發工具支持上有很強的優勢
Linux最初也是作為通用操作系統而設計開發的
但提供了一些實時處理的支持
這包括支持大部分POSIX標准中的實時功能
支持多任務
多線程
具有豐富的通信機制等
Linux還提供符合了POSIX標准的調度策略
包括FIFO調度策略
時間片輪轉調度策略和靜態優先級搶占式調度策略
其默認的調度策略是第三種
Linux還提供了內存鎖定功能
以避免在實時處理中存儲頁被換出
也提供了符合POSIX 標准的實時信號機制
一個致命問題是
Linux在用戶態支持可搶占調度策略
而在核心態卻不支持搶占式調度策略
這樣運行在Linux核心態的任務(或系統調用)是不能被其它優先級更高的任務所搶占的
這樣就會引起優先級逆轉問題
另外
Linux操作系統的中斷處理句柄是不可調度的
不能依優先級高低調度
而在實時系統中
卻希望中斷處理句柄同實時任務一樣
可以有優先級來被系統的調度程序所調度
此外
我們還關心和任務響應時間相關的時鐘精度
以及由於資源共享而帶來的優先級逆轉問題
Linux中硬件時鐘中斷的默認時間間隔是
ms
所有的軟件時鐘都是靠硬件來觸發的
而簡單同步機制(互斥)不支持優先級繼承又很可能導致優先級逆轉
獨立核方法
Linux作為實時系統的獨立核方法是指設計一種完全獨立的實時核心
但其API 與Linux核心相兼容
這種方法的理論基礎是一款優秀的實時操作系統必須在其設計之初就充分考慮到系統實時性的要求
並能夠提供符合標准的API
這種實現方法對很多與POSIX 兼容的專有實時系統提供商很有吸引力
這種方法的局限性是由於設計了一個完全獨立的實時核心而沒有使用原有Linux核心
導致Linux系統的一些優勢難以繼承
尤其是與Linux核心相關的一些優勢無法獲得
比如Linux核心對大量硬件的廣泛支持
Linux核心超群的可靠性
穩定性等
另外
由於這種方法並沒有通過修改Linux核心代碼來開發實時核心
而是在Linux系統之上重新設計了一個實時核心
這樣的開發並不要求源代碼開放
因此
Linux一些基於開放源代碼的優勢也勢必受損
最後一點
任何基於Linux核心的開發成果也無法方便地應用到實時核心中
當然這種實現方法也從Linux系統中得到了很多好處
由於Linux系統的支撐
實時核心就並不需要
真
的去實現
而且熟悉Linux系統的開發人員也可以很快地熟悉這種方法開發出的實時系統
人們也會自然地想到用Linux系統做嵌入式系統的開發平台
此外
如果這種實時系統的API是Linux系統API子集的話
我們還可以只在Linux主機上仿真
進行應用程序的開發和調試
免去了遠程調試之苦!
From:http://tw.wingwit.com/Article/program/Oracle/201311/17377.html