計(jì)算機(jī)系統(tǒng)由硬件和軟件組成,在發(fā)展初期沒有操作系統(tǒng)這個(gè)概念,用戶使用監(jiān)控程序來使用計(jì)算機(jī)。隨著計(jì)算機(jī)技術(shù)的發(fā)展,計(jì)算機(jī)系統(tǒng)的硬件、軟件資源也愈來愈豐富,監(jiān)控程序已不能適應(yīng)計(jì)算機(jī)應(yīng)用的要求。于是在六十年代中期監(jiān)控程序又進(jìn)一步發(fā)展形成了操作系統(tǒng)(operating system)。發(fā)展到現(xiàn)在,廣泛使用的有三種操作系統(tǒng)即多道批處理操作系統(tǒng)、分時(shí)操作系統(tǒng)以及實(shí)時(shí)操作系統(tǒng)。
下面,我們說說“實(shí)時(shí)操作系統(tǒng)的特點(diǎn)”:
ieee 的實(shí)時(shí)unix分委會(huì)認(rèn)為實(shí)時(shí)操作系統(tǒng)應(yīng)具備以下的幾點(diǎn):
(1)異步的事件響應(yīng)
(2)切換時(shí)間和中斷延遲時(shí)間確定
(3)優(yōu)先級(jí)中斷和調(diào)度
(4)搶占式調(diào)度
(5)內(nèi)存鎖定
(6)連續(xù)文件
(7)同步
總的來說實(shí)時(shí)操作系統(tǒng)是事件驅(qū)動(dòng)的,能對(duì)來自外界的作用和信號(hào)在限定的時(shí)間范圍內(nèi)作出響應(yīng)。它強(qiáng)調(diào)的是實(shí)時(shí)性、可靠性和靈活性, 與實(shí)時(shí)應(yīng)用軟件相結(jié)合成為有機(jī)的整體起著核心作用,由它來管理和協(xié)調(diào)各項(xiàng)工作,為應(yīng)用軟件提供良好的運(yùn)行軟件環(huán)境及開發(fā)環(huán)境。
從實(shí)時(shí)系統(tǒng)的應(yīng)用特點(diǎn)來看實(shí)時(shí)操作系統(tǒng)可以分為兩種:“一般實(shí)時(shí)操作系統(tǒng)”和“嵌入式實(shí)時(shí)操作系統(tǒng)”。
(1)“一般實(shí)時(shí)操作系統(tǒng)”它是應(yīng)用于實(shí)時(shí)處理系統(tǒng)的上位機(jī)和實(shí)時(shí)查詢系統(tǒng)等實(shí)時(shí)性較弱的實(shí)時(shí)系統(tǒng),并且提供了開發(fā)、調(diào)試、運(yùn)用一致的環(huán)境。
(2)“嵌入式實(shí)時(shí)操作系統(tǒng)”則是應(yīng)用于實(shí)時(shí)性要求高的實(shí)時(shí)控制系統(tǒng),而且應(yīng)用程序的開發(fā)過程是通過交叉開發(fā)來完成的,即開發(fā)環(huán)境與運(yùn)行環(huán)境是不一致。嵌入式實(shí)時(shí)操作系統(tǒng)具有規(guī)模小(一般在幾k~幾十k 內(nèi))、可固化使用實(shí)時(shí)性強(qiáng)(在毫秒或微秒數(shù)量級(jí)上)的特點(diǎn) 。
——下面我講一下什么是“前后臺(tái)系統(tǒng)”:
對(duì)基于芯片的開發(fā)來說,應(yīng)用程序一般是一個(gè)無限的循環(huán),可稱為前后臺(tái)系統(tǒng)或超循環(huán)系統(tǒng)。
很多基于微處理器的產(chǎn)品采用前后臺(tái)系統(tǒng)設(shè)計(jì),例如微波爐、電話機(jī)、玩具等。在另外一些基于微處理器應(yīng)用中,從省電的角度出發(fā),平時(shí)微處理器處在停機(jī)狀態(tài),所有事都靠中斷服務(wù)來完成。
——下面講“操作系統(tǒng)”的概念:
操作系統(tǒng)是計(jì)算機(jī)中最基本的程序。操作系統(tǒng)負(fù)責(zé)計(jì)算機(jī)系統(tǒng)中全部軟硬資源的分配與回收、控制與協(xié)調(diào)等并發(fā)的活動(dòng);操作系統(tǒng)提供用戶接口,使用戶獲得良好的工作環(huán)境;操作系統(tǒng)為用戶擴(kuò)展新的系統(tǒng)功能提供軟件平臺(tái)。
——實(shí)時(shí)操作系統(tǒng)(rtos)
實(shí)時(shí)操作系統(tǒng)是一段在嵌入式系統(tǒng)啟動(dòng)后首先執(zhí)行的背景程序,用戶的應(yīng)用程序是運(yùn)行于rtos之上的各個(gè)任務(wù),rtos根據(jù)各個(gè)任務(wù)的要求,進(jìn)行資源(包括存儲(chǔ)器、外設(shè)等)管理、消息管理、任務(wù)調(diào)度、異常處理等工作。在rtos支持的系統(tǒng)中, 每個(gè)任務(wù)均有一個(gè)優(yōu)先級(jí),rtos根據(jù)各個(gè)任務(wù)的優(yōu)先級(jí),動(dòng)態(tài)地切換各個(gè)任務(wù),保證對(duì)實(shí)時(shí)性的要求。
——代碼的臨界區(qū)
代碼的臨界區(qū)也稱為臨界區(qū),指處理時(shí)不可分割的代碼,運(yùn)行這些代碼不允許被打斷。一旦這部分代碼開始執(zhí)行,則不允許任何中斷打入(這不是絕對(duì)的,如果中斷不調(diào)用任何包含臨界區(qū)的代碼,也不訪問任何臨界區(qū)使用的共享資源,這個(gè)中斷可能可以執(zhí)行)。為確保臨界區(qū)代碼的執(zhí)行,在進(jìn)入臨界區(qū)之前要關(guān)中斷,而臨界區(qū)代碼執(zhí)行完成以后要立即開中斷。
——資源
程序運(yùn)行時(shí)可使用的軟、硬件環(huán)境統(tǒng)稱為資源。資源可以是輸入輸出設(shè)備,例如打印機(jī)、鍵盤、顯示器。資源也可以是一個(gè)變量、一個(gè)結(jié)構(gòu)或一個(gè)數(shù)組等。
——共享資源
可以被一個(gè)以上任務(wù)使用的資源叫做共享資源。為了防止數(shù)據(jù)被破壞,每個(gè)任務(wù)在與共享資源打交道時(shí),必須獨(dú)占該資源,這叫做互斥。
——任務(wù)
一個(gè)任務(wù),也稱作一個(gè)線程,是一個(gè)簡(jiǎn)單的程序,該程序可以認(rèn)為cpu完全屬于該程序自己。實(shí)時(shí)應(yīng)用程序的設(shè)計(jì)過程,包括如何把問題分割成多個(gè)任務(wù),每個(gè)任務(wù)都是整個(gè)應(yīng)用的某一部分,每個(gè)任務(wù)被賦予一定的優(yōu)先級(jí),有它自己的一套cpu寄存器和自己的??臻g。
——任務(wù)切換
當(dāng)多任務(wù)內(nèi)核決定運(yùn)行另外的任務(wù)時(shí),它保存正在運(yùn)行任務(wù)的當(dāng)前狀態(tài),即cpu寄存器中的全部?jī)?nèi)容。這些內(nèi)容保存在任務(wù)的當(dāng)前狀態(tài)保存區(qū),也就是任務(wù)自已的棧區(qū)之中。入棧工作完成以后,就把下一個(gè)將要運(yùn)行的任務(wù)的當(dāng)前狀態(tài)從任務(wù)的棧中重新裝入cpu的寄存器,并開始下一個(gè)任務(wù)的運(yùn)行。這個(gè)過程就稱為“任務(wù)切換”。這個(gè)過程增加了應(yīng)用程序的額外負(fù)荷。cpu的內(nèi)部寄存器越多,額外負(fù)荷就越重。做任務(wù)切換所需要的時(shí)間取決于cpu有多少寄存器要入棧。
——內(nèi)核
多任務(wù)系統(tǒng)中,內(nèi)核負(fù)責(zé)管理各個(gè)任務(wù),或者說為每個(gè)任務(wù)分配cpu時(shí)間,并且負(fù)責(zé)任務(wù)之間的通信。內(nèi)核提供的基本服務(wù)是任務(wù)切換。使用實(shí)時(shí)內(nèi)核可以大大簡(jiǎn)化應(yīng)用系統(tǒng)的設(shè)計(jì),是因?yàn)閷?shí)時(shí)內(nèi)核允許將應(yīng)用分成若干個(gè)任務(wù),由實(shí)時(shí)內(nèi)核來管理它們。內(nèi)核需要消耗一定的系統(tǒng)資源,比如2%~5%的cpu運(yùn)行時(shí)間、ram和rom等。
內(nèi)核提供了必不可少的系統(tǒng)服務(wù),如:“信號(hào)量“、“消息隊(duì)列”、“延時(shí)”等。
——調(diào)度,下面我們講一下什么是“調(diào)度”:
調(diào)度是內(nèi)核的主要職責(zé)之一。調(diào)度就是決定該輪到哪個(gè)任務(wù)運(yùn)行了。多數(shù)的“實(shí)時(shí)內(nèi)核”是基于優(yōu)先級(jí)調(diào)度法的。每個(gè)任務(wù)根據(jù)其重要程序的不同被賦予一定的優(yōu)先級(jí)。基于優(yōu)先級(jí)的調(diào)度法指cpu總是讓處在就緒態(tài)的優(yōu)先級(jí)最高的任務(wù)先運(yùn)行。然而,究竟何時(shí)讓高優(yōu)先級(jí)任務(wù)掌握cpu的使用權(quán),有兩種不同的情況,這要看用的是什么類型的內(nèi)核,是“非占先式”的還是“占先式”的內(nèi)核。
——非占先式內(nèi)核
“非占先式內(nèi)核”要求每個(gè)任務(wù)自我放棄cpu 的所有權(quán)。非占先式調(diào)度法也稱作合作型多任務(wù),各個(gè)任務(wù)彼此合作共享一個(gè)cpu。異步事件還是由中斷服務(wù)來處理。中斷服務(wù)可以使一個(gè)高優(yōu)先級(jí)的任務(wù)由掛起狀態(tài)變?yōu)榫途w狀態(tài)。但中斷服務(wù)以后的控制權(quán)還是回到原來被中斷了的那個(gè)任務(wù),直到該任務(wù)主動(dòng)放棄cpu的使用權(quán)的時(shí)候,那個(gè)高優(yōu)先級(jí)的任務(wù)才能獲得cpu的使用權(quán)。
——占先式內(nèi)核
當(dāng)系統(tǒng)響應(yīng)時(shí)間很重要時(shí),要使用“占先式內(nèi)核”。因此絕大多數(shù)商業(yè)上銷售的實(shí)時(shí)內(nèi)核都是占先式內(nèi)核。最高優(yōu)先級(jí)的任務(wù)一旦就緒,總能得到cpu的控制權(quán)。當(dāng)一個(gè)運(yùn)行著的任務(wù)使一個(gè)比它優(yōu)先級(jí)高的任務(wù)進(jìn)入了就緒狀態(tài),當(dāng)前任務(wù)的cpu使用權(quán)就被剝奪了,或者說被掛起了,那個(gè)高優(yōu)先級(jí)的任務(wù)立刻得到了cpu的控制權(quán)。如果是中斷服務(wù)子程序使一個(gè)高優(yōu)先級(jí)的任務(wù)進(jìn)入就緒態(tài),中斷完成時(shí),中斷了的任務(wù)被掛起,優(yōu)先級(jí)高的那個(gè)任務(wù)開始運(yùn)行。
——任務(wù)優(yōu)先級(jí)
任務(wù)的優(yōu)先級(jí)是表示任務(wù)被調(diào)度的優(yōu)先程度。每個(gè)任務(wù)都具有優(yōu)先級(jí)。任務(wù)越重要,賦予的優(yōu)先級(jí)應(yīng)越高,越容易被調(diào)度而進(jìn)入運(yùn)行態(tài)。
——中斷
中斷是一種硬件機(jī)制,用于通知cpu有個(gè)異步事件發(fā)生了。中斷一旦被識(shí)別,cpu保存部分或全部寄存器的值,跳轉(zhuǎn)到專門的子程序,稱為中斷服務(wù)子程序(isr)。中斷服務(wù)子程序做事件處理,處理完成后,程序回到:
1. 在前后臺(tái)系統(tǒng)中,程序回到后臺(tái)程序;
2. 對(duì)非占先式內(nèi)核而言,程序回到被中斷了的任務(wù);
3. 對(duì)占先式內(nèi)核而言,讓進(jìn)入就緒態(tài)的優(yōu)先級(jí)最高的任務(wù)開始運(yùn)行。
——中斷
——時(shí)鐘節(jié)拍
時(shí)鐘節(jié)拍是特定的周期性中斷。這個(gè)中斷可以看作是系統(tǒng)心臟的脈動(dòng)。中斷之間的時(shí)間間隔取決于不同應(yīng)用,一般在10ms到200ms之間。時(shí)鐘的節(jié)拍式中斷使得內(nèi)核可以將任務(wù)延時(shí)若干個(gè)整數(shù)時(shí)鐘節(jié)拍,以及當(dāng)任務(wù)等待事件發(fā)生時(shí),提供等待超時(shí)的依據(jù)。時(shí)鐘節(jié)拍率越快,系統(tǒng)的額外開銷就越大。
下面,我們講講“使用實(shí)時(shí)操作系統(tǒng)的必要性”:
嵌入式實(shí)時(shí)操作系統(tǒng)在目前的嵌入式應(yīng)用中用得越來越廣泛,尤其在功能復(fù)雜、系統(tǒng)龐大的應(yīng)用中顯得愈來愈重要。在嵌入式應(yīng)用中,只有把cpu嵌入到系統(tǒng)中,同時(shí)又把操作系統(tǒng)嵌入進(jìn)去,才是真正的計(jì)算機(jī)嵌入式應(yīng)用。使用實(shí)時(shí)操作系統(tǒng)主要有以下幾個(gè)因素:
(1)嵌入式實(shí)時(shí)操作系統(tǒng)提高了系統(tǒng)的可靠性。
(2)提高了開發(fā)效率,縮短了開發(fā)周期。
(3)嵌入式實(shí)時(shí)操作系統(tǒng)充分發(fā)揮了32位cpu的多任務(wù)潛力。
那么,“實(shí)時(shí)操作系統(tǒng)的優(yōu)點(diǎn)是什么,缺點(diǎn)又是什么呢?”
優(yōu)點(diǎn):在嵌入式實(shí)時(shí)操作系統(tǒng)環(huán)境下開發(fā)實(shí)時(shí)應(yīng)用程序使程序的設(shè)計(jì)和擴(kuò)展變得容易,不需要大的改動(dòng)就可以增加新的功能。通過將應(yīng)用程序分割成若干獨(dú)立的任務(wù)模塊,使應(yīng)用程序的設(shè)計(jì)過程大為簡(jiǎn)化;而且對(duì)實(shí)時(shí)性要求苛刻的事件都得到了快速、可靠的處理。通過有效的系統(tǒng)服務(wù), 嵌入式實(shí)時(shí)操作系統(tǒng)使得系統(tǒng)資源得到更好的利用。
缺點(diǎn):但是,使用嵌入式實(shí)時(shí)操作系統(tǒng)還需要額外的rom/ram開銷,2~5%的cpu額外負(fù)荷,以及內(nèi)核的費(fèi)用。
下面我們簡(jiǎn)要介紹幾種常見的“嵌入式操作系統(tǒng)”:
——那么,首先介紹的是“嵌入式linux”:
uclinux是一個(gè)完全符合gnu/gpl公約的操作系統(tǒng),完全開放代碼。uclinux從linux 2.0/2.4內(nèi)核派生而來,沿襲了主流linux的絕大部分特性。它是專門針對(duì)沒有mmu的cpu,并且為嵌入式系統(tǒng)做了許多小型化的工作。適用于沒有虛擬內(nèi)存或內(nèi)存管理單元(mmu)的處理器,例如arm7tdmi。它通常用于具有很少內(nèi)存或flash的嵌入式系統(tǒng)。它保留了linux的大部分優(yōu)點(diǎn):穩(wěn)定、良好的移植性、優(yōu)秀的網(wǎng)絡(luò)功能、完備的對(duì)各種文件系統(tǒng)的支持、以及標(biāo)準(zhǔn)豐富的api等。
——win ce
windows ce是微軟開發(fā)的一個(gè)開放的、可升級(jí)的32位嵌入式操作系統(tǒng),是基于掌上型電腦類的電子設(shè)備操作,它是精簡(jiǎn)的windows 95。windows ce的圖形用戶界面相當(dāng)出色。win ce具有模塊化、結(jié)構(gòu)化和基于win32應(yīng)用程序接口以及與處理器無關(guān)等特點(diǎn)。win ce不僅繼承了傳統(tǒng)的windows圖形界面,并且在win ce平臺(tái)上可以使用windows 95/98上的編程工具(如visual basic、visual c++等)、使絕大多數(shù)的應(yīng)用軟件只需簡(jiǎn)單的修改和移植就可以在windows ce平臺(tái)上繼續(xù)使用。
——vxworks
vxworks操作系統(tǒng)是美國(guó)“wind river”公司于1983年設(shè)計(jì)開發(fā)的一種嵌入式實(shí)時(shí)操作系統(tǒng)(rtos),是嵌入式開發(fā)環(huán)境的關(guān)鍵組成部分。良好的持續(xù)發(fā)展能力、高性能的內(nèi)核以及友好的用戶開發(fā)環(huán)境,在嵌入式實(shí)時(shí)操作系統(tǒng)領(lǐng)域占據(jù)一席之地。它以其良好的可靠性和卓越的實(shí)時(shí)性被廣泛地應(yīng)用在通信、軍事、航空、航天等高精尖技術(shù)及實(shí)時(shí)性要求極高的領(lǐng)域中,如衛(wèi)星通訊、軍事演習(xí)、彈道制導(dǎo)、飛機(jī)導(dǎo)航等,甚至在1997年4月登陸火星表面的火星探測(cè)器上也使用到了vxworks。
——ose
ose主要是由enea data ab 下屬的enea ose systems ab負(fù)責(zé)開發(fā)和技術(shù)服務(wù)的,一直以來都充當(dāng)著實(shí)時(shí)操作系統(tǒng)以及分布式和容錯(cuò)性應(yīng)用的先鋒,并保持良好的發(fā)展態(tài)勢(shì)。
ose的客戶深入到電信,數(shù)據(jù),工控,航空等領(lǐng)域,尤其在電信方面,該公司已經(jīng)有了十余年的開發(fā)經(jīng)驗(yàn),同諸如愛立信,諾基亞,西門子等知名公司確定了良好的關(guān)系。
——nucleus
nucleus plus是為實(shí)時(shí)嵌入式應(yīng)用而設(shè)計(jì)的一個(gè)搶先式多任務(wù)操作系統(tǒng)內(nèi)核,其95%的代碼是用ansic寫成的,因此非常便于移植并能夠支持大多數(shù)類型的處理器。
nucleus plus采用了軟件組件的方法。每個(gè)組件具有單一而明確的目的,通常由幾個(gè)c及匯編語言模塊構(gòu)成,提供清晰的外部接口,對(duì)組件的引用就是通過這些接口完成的。由于采用了軟件組件的方法,使nucleus plus 的各個(gè)組件非常易于替換和復(fù)用。
——ecos
ecos是redhat公司開發(fā)的源代碼開放的嵌入式rtos產(chǎn)品,是一個(gè)可配置、可移植的嵌入式實(shí)時(shí)操作系統(tǒng),設(shè)計(jì)的運(yùn)行環(huán)境為redhat的gnupro和gnu開發(fā)環(huán)境。ecos的所有部分都開放源代碼,可以按照需要自由修改和添加。ecos的關(guān)鍵技術(shù)是操作系統(tǒng)可配置性,允許用戶組和自己的實(shí)時(shí)組件和函數(shù)以及實(shí)現(xiàn)方式,特別允許ecos的開發(fā)則定制自己的面向應(yīng)用的操作系統(tǒng),使ecos能有更廣泛的應(yīng)用范圍。
——μc/os-ii
μc/os-ii是一個(gè)源碼公開、可移植、可固化、可裁剪、占先式的實(shí)時(shí)多任務(wù)操作系統(tǒng)。其絕大部分源碼是用ansi c寫的,使其可以方便的移植并支持大多數(shù)類型的處理器。μc/os-ii通過了聯(lián)邦航空局(faa)商用航行器認(rèn)證。自1992年問世以來,μc/os-ii已經(jīng)被應(yīng)用到數(shù)以百計(jì)的產(chǎn)品中。μc/os-ii占用很少的系統(tǒng)資源,并且在高校教學(xué)使用是不需要申請(qǐng)?jiān)S可證。
——uitron
tron是指“實(shí)時(shí)操作系統(tǒng)內(nèi)核(the real-time operating system nucleux)”,它是在1984年由東京大學(xué)的sakamura博士提出的,目的是為了建立一個(gè)理想的計(jì)算機(jī)體系結(jié)構(gòu)。通過工業(yè)界和大學(xué)院校的合作,tron方案正被逐步用到全新概念的計(jì)算機(jī)體系結(jié)構(gòu)中。
uitron是tron的一個(gè)子方案,它具有標(biāo)準(zhǔn)的實(shí)時(shí)內(nèi)核,適用于任何小規(guī)模的嵌入式系統(tǒng),日本國(guó)內(nèi)現(xiàn)有很多基于該內(nèi)核的產(chǎn)品,其中消費(fèi)電器較多。目前已成為日本事實(shí)上的工業(yè)標(biāo)準(zhǔn)。
tron明確的設(shè)計(jì)目標(biāo)使其甚至比linux更適合于做嵌入式應(yīng)用,內(nèi)核小,啟動(dòng)速度快,即時(shí)性能好,也很適合漢字系統(tǒng)的開發(fā)。另外,tron的成功還來源于如下兩個(gè)重要的條件:
(1)它是免費(fèi)的
(2)它已經(jīng)建立了開放的標(biāo)準(zhǔn),形成了較完善的軟硬件配套開發(fā)環(huán)境,較好地形成了產(chǎn)業(yè)化。