在小型MCU上面用的工作排程(Task Schedule)Bee整理了一下。
發現從使用硬體中斷,到即時作業系統(RTOS)之間有演進的程序。
1.Round-Robin:不使用中斷,只使用輪詢方式,做為排程。
2.Foreground/Background:只使用中斷,利用硬體排程。
3.Round-Robin with Interrupt:使用中斷及輪詢混合式排程。
4.Coroutine:將輪詢方式的排程改為經由軟體呼叫方式切換。並加入排程工作鏈,管理工作加入及移除。
5.Real-Time Operating System:現代即時作業系統,函式一下子增加了許多。工作切換可以利用設定事件(Event)方式,設定排程的條件。
前三種及RTOS在uCOS的書中有介紹,但Bee認為奇怪的是為何工作排程一下子變的如此複雜。
在使用中斷管理及現代作業系統之間,一定存在軟體可以管理,但又沒有強制切換的管理系統。
不幸的是,中間型式就像物種進化中的失落環節一樣,幾乎找不到資料。
後來才從Forth語言及Lua語言上找到Coroutine,Bee才確定有Coroutine這型排程管理系統存在。
以下就功能特性做一個比較:
1.Round-Robin:
特性:這是最簡單的排程系統,但時間控制不精準。
Task Control : Pulling
Time Function : Depend on assemble code or instruction delay
Data Exchange : Global variable
State Machine : Run on open loop,state control by data
2.Foreground/Background:
特性:將需要精準時間控制的工作放入中斷。
Task Control : Interrupt
Time Function : In interrupt using counter control function call
Data Exchange : User control with protected global variable
State Machine : Run on open loop,state control by data
要解決問題:變數保護問題,假設有一個函式如下。
int temp;
void swap( int *x, int *y)
{
temp = *x;
*x = *y;
*y = temp;
}
這個函式若由main()及中斷中都有使用到,則會發生變數衝突問題。這個問題則要由工程師自己注意。
3.Round-Robin with Interrupt:
特性:加入多種工作時,要改成這個結構。
Task Control : Interrupt/Pulling
Time Function : Interrupt Function/Interrupt Flag to Round-Robin Function
Data Exchange : User control with protected global variable/Global Variable
State Machine : Run on open loop,state control by data
4.Coroutine:
特性:加入工作管理,可以加入及移除工作項目
Task Control : O.S. Function/Interrupt
Time Function : Interrupt Function / O.S. Function
Data Exchange : Global Variable
State Machine : Program Structure Control
5.Real-Time Operating System:
特性:現在作業系統功能
Task Control : O.S. Function
Time Function : O.S. Function
Data Exchange : O.S. Function
State Machine : Program Structure Control
Bee:
回覆刪除學位修到了沒有?是不是可以開始大搞發展了?很高興見到你把多工方法自己分析一遍,這是軟體定性分析,下一步在FORTH上動手,將各種方法都分別實現一次,就能完成實質比較,就是定量分析,結論寫成論文,絕對能在國際舞台展示成果,這不是一般人都有本事做得到的事情,我一直對你期望很高,動腦自創一個最有效率的,你將來必不同凡響,我講的不是玩笑話。
20年前我們就設計過Round-Robin、分時式中斷(time-sharing)、事件觸發式中斷的多工,這些資料有資源可參考,現行作業系統比較傾向於搞先佔式(preemptive)多工,FORTH少見,何不試一試,也積極練習一下FORTH,你不須要人教,自己會看書上進,這樣的社會青年現在沒幾個了。
曾慶潭久別問候
[版主回覆07/16/2010 15:36:25]這是我的舊資料再整理,主因是最近老師在逼畢業。所以就把未發表的報告整理為部落格文章。
也找到之前報告的文章,會在空閒(公司開會時偷做)時再整理為部落格文章。
Bee大你寫的真清楚,我幾乎都是在不知不覺中接觸這些程式,除了RTOS沒玩過以外,第4項在這一年才在新公司發現這個系統的存在,利用指標指向函數,以註冊以移除的方式來更換函數增加彈性,其中是利用一個1MS的TIMER來檢查,每一個函數的設定時間是否結束,如果結束則設定旗標再由主程式中執行,而主程式則是由一個狀態機器+上述的函數執行所組成.
回覆刪除雖然我接觸到很多這方面的資訊卻沒辨法有效組織起來做一個分析,我想是我接觸的還不夠多,只好繼續找您解決疑惑,希望能找到好的出路.
[版主回覆11/07/2012 13:15:10]這是舊版的。我又找到二個新模型。
每個模型合適場合不同,特性也不同。
收集整理起來才不會忘了。所以這是方便自己查的。
其中一個新模型是我自己設計的簡單多工,自己設計卻沒想到無法歸類。
後來才找到名字為Function Queue。
你所說的系統應該也是function Queue的一種。