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

2010年7月11日 星期日

過時的工程師

前些時候Bee遇到了一位自製CPU的工程師,今年則是遇到開CPU的工程師。
Bee是曾經想自製CPU,所以要聊CPU可能可以找的人也不多,所以會談到一些市場的問題。
對他們來說,Bee算是自製CPU的逃兵。可是Bee早在數年前就覺得這個領域是不能再待的。因為市場快要過時了。
只是不到十年,就已成真。未來可以遇到的CPU可能不多了。

二個人我都問過一樣的問題:為何不改走別條路。回答的原因很多,但有一個共同的是,已投入十年以上的技術,不能放棄。
不過技術本來就會過時,科技業本就是如此!即使學有專精,還是有過時的一天。
但舊技術是不會消失,只是看人如何去用,如何加入新元素,找到新市場。

不過可以肯定的是,硬體為主的時代已過,現在走的是軟體服務時代。
現代軟體工程師也和以前不同,以前的軟體工程師會熟讀原始碼才使用,甚至改寫。現代的則是找Open Source直接用。
有些軟體開發環境已經和以前不同了。網路發達是主因,但軟體環境也變了許多。
除錯工具的精進,也改變了寫程式的生態。
有許多的函式庫可以用,不用再去做非常深入的了解。

不同時代,環境不同,所以生存機制不同。藉由以往成功的經驗是不一定能在新的環境下成功。
而且使用不對,反而會走向失敗。
人生沒有幾個十年,要如何走才是要好好考量的。