經(jīng)典再續:μC/OS-III
μC/OS-III相比于μC/OS-II做了很多的改進(jìn),是一款全新的內核,在效率方面有了很大提升,并且支持任務(wù)的時(shí)間片輪轉調度,摒棄了一些不必要的內容,如消息郵箱,對于熟悉μC/OS-II的工程師來(lái)說(shuō),上手μC/OS-III還是比較容易的,先來(lái)了解一下μC/OS-III做了哪些具體的改進(jìn)。
本文引用地址:http://dyxdggzs.com/article/268018.htm一、時(shí)鐘節拍的改進(jìn)
在RTOS中,任務(wù)可通過(guò)調用延時(shí)函數(如OSTimeDly( )函數)將自己延時(shí)掛起一段時(shí)間,任務(wù)在延時(shí)的過(guò)程中會(huì )釋放CPU,延時(shí)的任務(wù)不占用寶貴的CPU資源,而是由時(shí)鐘節拍服務(wù)統一管理,時(shí)鐘節拍服務(wù)是一個(gè)周期性運行的任務(wù),由周期的時(shí)鐘節拍中斷觸發(fā),而時(shí)鐘節拍中斷可由硬件定時(shí)器產(chǎn)生,以此來(lái)分擔CPU的工作量。
在μC/OS-II中,時(shí)鐘節拍服務(wù)是在時(shí)鐘節拍中斷服務(wù)程序中完成的,每次時(shí)鐘節拍服務(wù)都會(huì )遍歷整個(gè)任務(wù)鏈表,依次處理每個(gè)任務(wù),如果該任務(wù)的延時(shí)計數為0,則跳過(guò)該任務(wù),如果計數非0,則進(jìn)行減1操作,并判斷減1后是否為0,為0則表明延時(shí)時(shí)間已到,使相關(guān)任務(wù)進(jìn)入就緒態(tài)。如果系統的任務(wù)數目較多的話(huà),時(shí)鐘節拍服務(wù)遍歷整個(gè)任務(wù)鏈表的時(shí)間較長(cháng),而且該服務(wù)函數在中斷中被調用,因此也會(huì )導致中斷執行的時(shí)間過(guò)長(cháng),不符合實(shí)時(shí)操作系統的設計理念。
在μC/OS-III中,周期性的硬件定時(shí)器通過(guò)中斷觸發(fā)中斷服務(wù)函數,在中斷服務(wù)函數中調用時(shí)鐘節拍服務(wù)函數,但是該時(shí)鐘節拍服務(wù)函數不需要遍歷整個(gè)任務(wù)鏈表,只是發(fā)送一個(gè)信號量,即可結束中斷,時(shí)鐘節拍任務(wù)接收該信號量,恢復運行,處理延時(shí)函數,為了提高時(shí)鐘節拍的處理速度,還采用了哈希散列表機制來(lái)管理任務(wù),使得查找速度更加高效合理。
二、任務(wù)調度的改進(jìn)
在μC/OS-II中,任務(wù)調度是完全基于優(yōu)先級的,每個(gè)任務(wù)都有不同的優(yōu)先級,不允許2個(gè)任務(wù)具有相同的優(yōu)先級,并且支持的任務(wù)數量是有限制的。
在μC/OS-III中,可以支持任意數目的任務(wù)和優(yōu)先級,用戶(hù)根據實(shí)際情況來(lái)定,當然在實(shí)時(shí)操作系統中,要盡可能的精簡(jiǎn)任務(wù)數目,在μC/OS-III中,增加了任務(wù)的時(shí)間片輪轉調度算法,也就是說(shuō)不同的任務(wù)允許具有相同的優(yōu)先級,因此,任務(wù)的數量就可以不受優(yōu)先級數量的限制了,每一個(gè)優(yōu)先級的任務(wù)數量可以有多個(gè),同一優(yōu)先級的任務(wù)根據實(shí)際需要分配執行時(shí)間,時(shí)間到時(shí)釋放CPU,使得其它任務(wù)得以執行,如此循環(huán)往復。除此之外,還對任務(wù)優(yōu)先級查找算法進(jìn)行了改進(jìn),在此不再詳述。
三、信號量的改進(jìn)
在多任務(wù)實(shí)時(shí)操作系統中,信號量是最基本最常用的機制,用來(lái)實(shí)現任務(wù)之間的通信和同步、任務(wù)和中斷之間的通信和同步以及對共享資源的訪(fǎng)問(wèn),在μC/OS-II中,提供了基本的信號量創(chuàng )建、等待和釋放等操作。
在μC/OS-III中,對信號量的使用增加了一些可選參數,如非阻塞等待、釋放但不進(jìn)行任務(wù)調度等操作,具有較高的靈活性。更為方便和重要的是,在μC/OS-III中增加了任務(wù)內嵌的信號量,用戶(hù)無(wú)需創(chuàng )建信號量便可和其它任務(wù)通信,使用起來(lái)比普通信號量更加簡(jiǎn)單高效。比如兩個(gè)任務(wù)之間的數據傳送很明確,任務(wù)A接收數據完成后,只有任務(wù)B來(lái)執行數據的處理,也就是說(shuō)只有一個(gè)任務(wù)等待任務(wù)A的信號量,而且任務(wù)A知道要將信號量發(fā)送給哪個(gè)任務(wù),便可以使用內嵌信號量來(lái)進(jìn)行通信和同步。
四、小結
以上僅列舉了幾點(diǎn)在μC/OS-III中比較重要的改進(jìn),μC/OS-III實(shí)時(shí)內核無(wú)論在效率、穩定性、用戶(hù)使用靈活性方面都做了重要的改進(jìn),是一款全新的實(shí)時(shí)內核,詳見(jiàn)書(shū)籍《嵌入式實(shí)時(shí)操作系統μC/OS-III》。
評論