上篇說到排程器的部分,有個地方需要注意的是,如果因為硬體要求中斷排程的優先權,此時就會有個中斷服務的處理機制(interrupt service routines;簡稱ISR)出現,當ISR服務出現時,每個任務(task)都要遵循排程來進行中斷的指示,等到下個排程時,在繼續進行排程的演算(scheduling algorithms)。
排程的演算,是由排程器來決定,kernel通常會有兩種排程演算法:
1.根據優先順序,如果有急迫性,就先排上去。
2.根據時間排序。
每一個排程演算過程中,決定下一步執行哪個任務,是由一個分配器(dispatcher)來決定的,如果拿生活上的例子來說,分配器就是調度人員,最常見的就是貨運公司出車的調度人員,由調度人員來指派發車順序,以便出車流程的順暢,物流業就最常見到此類邏輯運用的產業,大家可不要輕忽這個邏輯,假設你下訂單購物,此時預計三天內發貨,這個排程已經依時間順序排好了,那麼第三天是否有貨車幫你出貨,這就要由物流公司的調度來安排出車,如果沒有調度來分配,屆時可能會出現沒車出貨,或者好幾輛車同時要發一個貨品,此時就會出現大亂的情況。
所以,我們很清楚的了解,排程排好之後,是程序上的排序,而實際任務的指派,就要以調度的方式來做實際調度,這個邏輯也是協助及時作業系統(RTOS)能夠順利運作的關鍵所在。