比選擇操作系統(tǒng)更重要的是用好選定的操作系統(tǒng)
清華大學(xué)邵貝貝
回想過去,用過或多少了解一點兒的操作系統(tǒng)確有一些。20世紀(jì)80年代,一個叫做VMS的操作系統(tǒng)風(fēng)靡全球,是DEC公司小型機上用的,我國也引進了不少DEC計算機。VMS功能齊全、用戶界面友好,比Unix好用很多,微機的DOS系統(tǒng)根本無法與之相比,1986年最先讓我們接入因特網(wǎng)的便是VMS。然而曾幾何時,VMS被Unix取代了,接著是Linux。VMS消失主要因為其不開源。后來世界公認(rèn)最牛、想用卻用不起的VxWorks實時操作系統(tǒng)(RTOS)也不得不開源了。那時蘋果公司的Mac視窗操作系統(tǒng)比PC的Windows好用得多,在操作系統(tǒng)技術(shù)方面蘋果至少領(lǐng)先Intel五年,也是由于不開放,Mac輸給了PC。20世紀(jì)90年代以后,操作系統(tǒng)不再神秘,開源成為趨勢。
在國外工作期間也接觸過一些RTOS,例如OS-9、QNX等,都是不錯的RTOS,還有Nuclus,多年前開發(fā)Motorola的68K時有所接觸,感覺還不錯,是最早開放源碼的RTOS(如今如何就不了解了)。當(dāng)年在歐洲,由于是客人,只能用主人選定的RTOS。然而,人家認(rèn)為很好的未必適合你。曾經(jīng)不得不用到一個歐洲很流行的RTOS,可文檔和程序注解中,英語夾雜著法語,讓我這個對法語一竅不通的人恨死那個操作系統(tǒng)了,盡管有法國朋友熱情幫忙。Freescale曾經(jīng)力推MQX,很多事情集成開發(fā)環(huán)境中都已經(jīng)做好了,也有不少朋友推薦。讀過其部分文檔和代碼后,就是感覺喜歡不起來。選擇操作系統(tǒng)的過程中也走過一段彎路,嘗試過將那個著名的非實時操作系統(tǒng)實時化成RTOS,結(jié)果事倍功半,只得放棄了。
目前可選用的操作系統(tǒng)的確很多,哪個好哪個不好,由于知識范圍所限,實在不敢妄加評論。存在的就是合理的。一些生存多年、有業(yè)績、口碑好、有團隊支持的操作系統(tǒng)肯定都是可選用的。不同操作系統(tǒng)有各自不同的定位,選擇時首先應(yīng)考慮本行業(yè)認(rèn)可的操作系統(tǒng),比選擇操作系統(tǒng)更重要的似乎是如何用好選定的操作系統(tǒng)。
嵌入式RTOS通常僅指系統(tǒng)內(nèi)核(Kernel),內(nèi)核是操作系統(tǒng)的核心,用于建立多任務(wù)運行環(huán)境,管理任務(wù)及系統(tǒng)的共享資源。操作系統(tǒng)間的差異主要體現(xiàn)在任務(wù)調(diào)度策略與算法上,不同操作系統(tǒng)以各自的任務(wù)管理方式提供必要的實時性保證,解決多任務(wù)環(huán)境下可能出現(xiàn)的競爭與死鎖等問題,是嵌入式系統(tǒng)應(yīng)用工程師開發(fā)嵌入式應(yīng)用的有力工具。任務(wù)調(diào)度算法也有很多種,如時間片調(diào)度法、保證調(diào)度算法、最短任務(wù)優(yōu)先、隨機調(diào)度法(也稱擲骰子)、多重隊列法、二級調(diào)度法等。這些算法基本上可分為兩大類:基于時間片的分時系統(tǒng)和基于優(yōu)先級的實時系統(tǒng)?;跁r間片的多為非實時系統(tǒng),而嵌入式應(yīng)用多使用基于優(yōu)先級的RTOS。除內(nèi)核外,操作系統(tǒng)通常還需提供與之配套的文件系統(tǒng)、圖形界面、互聯(lián)網(wǎng)協(xié)議棧、主從USB協(xié)議棧、CAN總線協(xié)議棧、系統(tǒng)調(diào)試工具等,供用戶選配使用。嵌入式RTOS應(yīng)滿足可裁剪、可固化、可移植等基本要求。
行業(yè)認(rèn)可并推薦的操作系統(tǒng)應(yīng)該是首選。例如汽車行業(yè),首選自然是符合OSEK標(biāo)準(zhǔn)的操作系統(tǒng)(OSEK-OS)。OSEK源自德國的汽車電子類開放系統(tǒng)和對應(yīng)接口標(biāo)準(zhǔn),除實時操作系統(tǒng)OSEK-OS外,還有通信子系統(tǒng)(OSEK-COM)和網(wǎng)絡(luò)管理系統(tǒng)(OSEK-NM)。若開發(fā)手機應(yīng)用軟件,在我國自然首選以Java為編程語言的、基于Linux的Android操作系統(tǒng)。
需要自選操作系統(tǒng)的工程師,首先得對各種不同操作系統(tǒng)的內(nèi)核調(diào)度策略有所了解,看看是否適合自己的項目應(yīng)用。若這方面的知識不夠,建議精讀一兩本關(guān)于操作系統(tǒng)的經(jīng)典教材,以加深對操作系統(tǒng)原理的理解。對于準(zhǔn)備使用Linux類型的、有復(fù)雜文件系統(tǒng)的、需要MMU硬件支持的非RTOS,建議首先認(rèn)真讀懂Andrew S. Tanenbaum所著的《操作系統(tǒng)設(shè)計與實現(xiàn)》一書。該書自1987年問世以來,至今已出到第3版,講的是一個專門用于教學(xué)的、由Unix簡化而來的Minix范例操作系統(tǒng)。正是這本書觸發(fā)了LinusB. Torvalds的靈感,寫成了Linux內(nèi)核,從而被稱作Linux之父。故該教材被公認(rèn)為Linux原理的權(quán)威教材,非常值得細(xì)讀。
順便提一句,Linux是當(dāng)前最好的非實時開源操作系統(tǒng),似乎沒有之一。非要把它改成實時的所謂RT-Linux,我不認(rèn)為是一個好的做法,不如直接選用那些本來就是為實時系統(tǒng)設(shè)計的RTOS。
對于擬選用嵌入式RTOS的工程師,有必要精讀一本Jean J.Labrosse 所著的《嵌入式RTOS μC/OS-II》或《嵌入式RTOS μC/OS-III》,這兩個操作系統(tǒng)都可以直接拿來使用。對于ARM Cortex-M單片機,如果使用Cortex-M3及以上,應(yīng)使用μC/OS-III,而對于精簡掉CLZ指令的Cortex-M0/M1/M0+等,則仍建議使用μC/OS-II。Cortex-M單片機中的CLZ指令就是專門為優(yōu)先級算法提供的硬件指令,所用單片機是否帶有專門為操作系統(tǒng)設(shè)計的硬件指令,也是選擇操作系統(tǒng)時要考慮的。讀書的同時,特別要注意閱讀并欣賞一下書中所附源代碼,至少是代碼的核心部分。上述推薦讀物中的源碼寫作風(fēng)格經(jīng)典規(guī)范,注釋清晰易懂,非常漂亮,值得學(xué)習(xí)。操作系統(tǒng)要選好,更要用好。
既然選了開源系統(tǒng),就要讀一讀該操作系統(tǒng)的核心代碼,弄清楚該操作系統(tǒng)的特點、大致結(jié)構(gòu),以判斷任務(wù)調(diào)度算法是否符合自己的任務(wù)要求。讀代碼是對代碼可讀性、代碼質(zhì)量的最好檢驗。你或許會喜歡上這個操作系統(tǒng)的代碼風(fēng)格,或許對其感到厭惡而棄之。我的體會,個人感覺也很重要。
所選操作系統(tǒng)必須能和項目的硬件匹配。對于手機類應(yīng)用,系統(tǒng)偶爾死機未必不可接受。但對于嵌入式應(yīng)用,若系統(tǒng)死機可能造成難以預(yù)料的嚴(yán)重后果,那么選擇操作系統(tǒng)和寫開發(fā)及測試程序等就要格外小心了。這類系統(tǒng)被稱作安全緊要系統(tǒng)(Safety Critical System),要確保系統(tǒng)安全,不死機或者有故障也能安全,是對這類系統(tǒng)的最低要求。理論上,計算機總是能被“搞死”的,如果操作系統(tǒng)能有什么措施,使系統(tǒng)被搞死的幾率低于硬件損壞的幾率,那就足夠好了。但實踐證明,單靠操作系統(tǒng)和應(yīng)用軟件并不能保證系統(tǒng)不死機。硬件的可靠性是需要硬件工程師來保證的。那些自稱面向多核單片機的操作系統(tǒng),在解決系統(tǒng)受到強電磁干擾而出錯的問題上,顯然不及兩套獨立供電的單核系統(tǒng)更為可靠。
2017-08-02)