2010年7月15日 星期四

即時作業系統是如何演進的

在小型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

2 則留言:

  1. Bee:
    學位修到了沒有?是不是可以開始大搞發展了?很高興見到你把多工方法自己分析一遍,這是軟體定性分析,下一步在FORTH上動手,將各種方法都分別實現一次,就能完成實質比較,就是定量分析,結論寫成論文,絕對能在國際舞台展示成果,這不是一般人都有本事做得到的事情,我一直對你期望很高,動腦自創一個最有效率的,你將來必不同凡響,我講的不是玩笑話。
    20年前我們就設計過Round-Robin、分時式中斷(time-sharing)、事件觸發式中斷的多工,這些資料有資源可參考,現行作業系統比較傾向於搞先佔式(preemptive)多工,FORTH少見,何不試一試,也積極練習一下FORTH,你不須要人教,自己會看書上進,這樣的社會青年現在沒幾個了。
    曾慶潭久別問候
    [版主回覆07/16/2010 15:36:25]這是我的舊資料再整理,主因是最近老師在逼畢業。所以就把未發表的報告整理為部落格文章。
    也找到之前報告的文章,會在空閒(公司開會時偷做)時再整理為部落格文章。

    回覆刪除
  2. Bee大你寫的真清楚,我幾乎都是在不知不覺中接觸這些程式,除了RTOS沒玩過以外,第4項在這一年才在新公司發現這個系統的存在,利用指標指向函數,以註冊以移除的方式來更換函數增加彈性,其中是利用一個1MS的TIMER來檢查,每一個函數的設定時間是否結束,如果結束則設定旗標再由主程式中執行,而主程式則是由一個狀態機器+上述的函數執行所組成.
    雖然我接觸到很多這方面的資訊卻沒辨法有效組織起來做一個分析,我想是我接觸的還不夠多,只好繼續找您解決疑惑,希望能找到好的出路.
    [版主回覆11/07/2012 13:15:10]這是舊版的。我又找到二個新模型。
    每個模型合適場合不同,特性也不同。
    收集整理起來才不會忘了。所以這是方便自己查的。
    其中一個新模型是我自己設計的簡單多工,自己設計卻沒想到無法歸類。
    後來才找到名字為Function Queue。
    你所說的系統應該也是function Queue的一種。

    回覆刪除