這文章跟大家分享的是協同工作,比較算是討論嵌入式系統的軟體設計部份。這種性質的工作在一個嵌入式系統內是非常必要的一種機制。 如果你想要減少你系統中開thread的數量、如果你想要在8051中妥善的使用CPU資源,那你絕對需要知道如何設計Cooperative Task。
嵌入式系統是一個使用微電腦的軟硬體緊密結合以及其他領域共同開發的系統,而這個系統是用來滿足某一個功能。由於中大型的嵌入式系統所使用的硬體效能足以加入作業系統,讓不同領域的工程師得以自由的撰寫程式,而不必處理太低階的軟硬體資源分配,因為作業系統都有很好的機制來管理這些資源。
過去開發小型嵌入式系統的時候,也許是因為處理器的效能以及記憶體的容量過小,通常是由一個人使用組合語言完成,雖然使用組合語言能夠發揮處理器的最高效能,但可讀性非常的差,導致系統無法由另一個人維護。相當於開發完以後,這個機器就是一個能力很強的深宮怨婦。而現在的微控制器不論速度以及容量都提升不少,但價格卻是越來越便宜。當嵌入式系統的市場需求越來高,很難再由一個人來完成整個系統的時候,就算是小型的嵌入式系統,也需要一個有架構的設計,讓開發團隊參與並且互相合作。在小型嵌入式系統中,通常使用微控制器來開發,若是在上面跑正規的作業系統,將會變成一個龐大的負擔。但是又要讓各個開發人員共同使用有限的資源。這時就非常需要有一個Schedular來管理很多的Cooperative Task。
Cooperative Schedular在一個系統中,就像是一個德國的高速公路,每一台車都要以最快的速度通過高速公路。如果只有單線道,而且有任何一台車停下來,將會導致塞車。如果塞車的時間並沒有嚴重到任何一台車到達目的的時間,那就沒問題。如果太嚴重,則會發生一種叫做jitter的現象。而jitter也就是Cooperative Schedular最需要改善、探討的議題。但在一般的情況下可以將軟即時的Task放在Cooperative Schedular裡面,而需要即時的工作則是利用thread(有OS)或是ISR(無OS)裡面來執行。所以如果把高速公路比喻成Cooperative Schedular來使用CPU,則可以看成:
一般的單晶片就是單線道,如果是在有支援平行處理的OS上,一個Cooperative Schedular跑的thread就是一條線道。而沒有跑Cooperative Schedular的thread可以看作是交流道外的道路。這個比喻各位看倌有feel了嗎?
沒有留言:
張貼留言