<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          RTOS的必備特性

          作者: 時間:2004-12-10 來源:網(wǎng)絡(luò) 收藏
          隨著信息家電的普及,智能化、網(wǎng)絡(luò)化將會無所不在,所有這些都離不開嵌入式軟件,而在嵌入式軟件只中最核心的莫過于(Real Time Operating System,實時操作系統(tǒng))。我們都非常熟悉Windows這樣的操作系統(tǒng),但卻不一定熟悉嵌入式系統(tǒng)中常用的。如今,微軟已經(jīng)推出了Windows的嵌入式版本――Windows CE。而風靡一時的Linux也在嵌入式系統(tǒng)中扮演著重要角色。這樣看來,傳統(tǒng)桌面操作系統(tǒng)和嵌入式操作系統(tǒng)的界線似乎也在淡化。事實究竟如何呢?讓我們來聽聽在嵌入式軟件領(lǐng)域頗有造詣的專家是怎么說的。

          用于嵌入式環(huán)境的操作系統(tǒng)與桌面操作系統(tǒng)有很多本質(zhì)的不同。這些不同的導(dǎo)致產(chǎn)品開發(fā)的不同結(jié)果。

          嵌入式環(huán)境給人的第一印象就是占用空間小。所以,普通的Linux或者Windows操作系統(tǒng)要變成嵌入式操作系統(tǒng),首先就是要進行裁剪。然而,與桌面環(huán)境相比,嵌入式環(huán)境對于操作系統(tǒng)系統(tǒng)要求不僅僅是“小”,二者在設(shè)計要求上有著本質(zhì)的不同。這些不同主要體現(xiàn)在可裁剪性、實時性和可靠性等三個方面。

          隨機應(yīng)變――可裁剪性

          從硬件環(huán)境來看,桌面操作系統(tǒng)具有標準化的CPU、存儲和I/O架構(gòu),而嵌入式環(huán)境中的RTOS的硬件環(huán)境只有標準化的CPU,沒有標準化的存儲、I/O和顯示器架構(gòu)。

          從應(yīng)用環(huán)境來看,桌面操作系統(tǒng)面向復(fù)雜多變的應(yīng)用,而RTOS面向單一設(shè)備的單一應(yīng)用。

          從開發(fā)界面來看,桌面操作系統(tǒng)試圖給開發(fā)人員提供一個“黑箱”,讓開發(fā)人員通過一系列標準的系統(tǒng)調(diào)用來使用操作系統(tǒng)中的功能,而嵌入式試圖為開發(fā)人員提供一個“白箱”,讓開發(fā)人員可以自主控制系統(tǒng)的所有資源。

          總之,桌面操作系統(tǒng)的研究開發(fā)指導(dǎo)思想是盡可能在不改變自身的前提下具有廣泛的適應(yīng)性。也就是說:不論應(yīng)用環(huán)境怎么變化,最好都不要對自身內(nèi)部產(chǎn)生什么影響,也不要求自身做太多的變化。反過來,應(yīng)用于嵌入式環(huán)境的RTOS,在研發(fā)的時候就必須立足于改變自身、開放自身,讓開發(fā)人員可以根據(jù)硬件環(huán)境和應(yīng)用環(huán)境的不同而對操作系統(tǒng)進行靈活的裁剪和配置,因為對于任何一個具體的嵌入式設(shè)備,它的功能是確定的,因此只要從原有操作系統(tǒng)中把這個特定應(yīng)用所需的功能拿進來即可。

          應(yīng)當指出的是:如果一個操作系統(tǒng)平臺只能依靠手工的方式去掉一些代碼,這根本就不是可裁剪性。所謂可裁剪性是在軟件工程階段利用軟件配置方法實現(xiàn)軟件構(gòu)件的“即插即用”。

          可裁剪性帶給用戶的一個最直接的好處是硬件成本降低,這對于成本敏感的應(yīng)用,如消費電子類設(shè)備,具有重要的現(xiàn)實意義。由于設(shè)備中只包含應(yīng)用程序用到的那部分操作系統(tǒng)功能,這就使得系統(tǒng)變得簡單、易把握,從而提高系統(tǒng)的可靠性。

          精確到位――實時性

          許多人都把實時性理解為速度快。那么,速度快到什么程度才算是達到實時性呢?其實,所謂實時性,其核心含義在于確定性,而不是單純的速度快。也就是說,RTOS所要求的是在規(guī)定的時間內(nèi)做完應(yīng)該做的事情,并且操作系統(tǒng)的行為(執(zhí)行線索)是確定的,這是寫出高可靠性程序的基礎(chǔ)。如果完成同樣的動作,有的時候快,有的時候慢,且執(zhí)行線索千差萬別,程序員無法把握,可靠性就無從保證。

          嵌入式系統(tǒng)為什么對實時性要求那么高呢?因為嵌入式系統(tǒng)主要是對儀器設(shè)備的動作進行監(jiān)測控制的,而一般的桌面操作系統(tǒng)基本上是根據(jù)人在鍵盤和鼠標發(fā)出的命令進行工作。相對而言,儀器設(shè)備的動作具有嚴格的、機械的時序要求,而人的動作和反應(yīng)在時序上并不那么嚴格。比如,用于控制火箭發(fā)動機的嵌入式系統(tǒng),它所發(fā)出的指令不僅要速度快,而且多個發(fā)動機之間的時序要求非常嚴格,否則就會差之毫厘、謬之千里。在這樣的應(yīng)用環(huán)境中,非實時的普通操作系統(tǒng)無論如何是無法適應(yīng)的。

          如果我們所開發(fā)的設(shè)備并不是像航空航天器那樣生命攸關(guān)或者生產(chǎn)控制那樣的關(guān)鍵任務(wù)系統(tǒng),而是像消費電子類那樣,即使出現(xiàn)錯誤也不會造成災(zāi)難性后果的設(shè)備,那么實時性(嚴格地講是確定性)是否還具有現(xiàn)實意義呢?答案是肯定的!設(shè)備的高可靠性可以有效地降低維護成本;軟件運行效率高也會降低對CPU的要求,從而降低硬件成本。對于消費電子產(chǎn)品這類價格十分敏感的產(chǎn)品,實時性、可靠性仍然是非常值得重視的問題。

          堅如磐石DD可靠性

          桌面操作系統(tǒng)與RTOS相比,另一個差別就是對于穩(wěn)定性、可靠性方面的設(shè)計思路。一方面,桌面操作系統(tǒng)比較龐大、復(fù)雜,而RTOS比較小巧、簡捷,而“越簡單、越可靠,越復(fù)雜、故障概率越大”這又是一個常理。另一方面,更重要的是:桌面操作環(huán)境與嵌入式環(huán)境在設(shè)計思路上有一個重大的不同――桌面環(huán)境假定應(yīng)用軟件與操作系統(tǒng)相比而言可以是不可靠的,而嵌入式環(huán)境假定應(yīng)用軟件與操作系統(tǒng)一樣可靠。

          運行于嵌入式環(huán)境中的RTOS要求應(yīng)用軟件具有與操作系統(tǒng)同樣的可靠性,這種設(shè)計思路對應(yīng)用開發(fā)人員提出了更高的要求,同時也要求操作系統(tǒng)自身足夠開放。

          著名的“木桶原理”告訴我們,局部的不足會導(dǎo)致整體的缺陷。要保證系統(tǒng)的可靠性,必須保證系統(tǒng)中每一個部分都是可靠的,任何部分的不可靠都會導(dǎo)致系統(tǒng)整體的不可靠。大多數(shù)桌面系統(tǒng)都是上千萬行代碼的龐大而復(fù)雜的系統(tǒng),即使有源代碼程序員也難以把握。而且對開發(fā)人員來說,桌面系統(tǒng)龐雜的細節(jié)是隱蔽在一個個的固定的接口下的,是一個黑箱,很難把握具體執(zhí)行的線索。即便其內(nèi)核是足夠可靠的,但它的應(yīng)用環(huán)境復(fù)雜多樣、千差萬別,其中常常有一些應(yīng)用并不是那么穩(wěn)定可靠,從而破壞了整體系統(tǒng)的可靠性。相反,RTOS對軟件開發(fā)人員來說是完全開放的,是一個白箱,允許開發(fā)人員非常清楚地了解和掌握操作系統(tǒng)內(nèi)部情況,對存儲器中的每一位和每一個I/O接口進行操作控制,從而可以設(shè)計出高效穩(wěn)定的應(yīng)用軟件。



          關(guān)鍵詞: 特性 必備 RTOS

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();