micro c/os II的方式:
進行delay的安排時,只把task移出ready queue、在TCB內記錄要delay多久,最後重新呼叫scheduler。
對於delay的處理方式則是每tick都線性的去找所有TCB,去扣除時間紀錄,如果扣完則放入ready queue,並在最後要求排程。
BSD的方式:
利用一個linked list做delay的安排,每個節點都記錄與前一個節點的相對delay時間,如果要新加一個delay的process,則必須線性的去追那個linked list,找到相應的時間區段,如果該區段已有node,則將node分割。
對於delay的處理方式則是去處理linked list的開頭就好,把delay時間扣完就移除node並重新排程。
想法:
因為進行TickISR的頻率比OSTimeDly還要來的高,因此BSD的這種在TickISR節省時間的方式其實相對的划算,不過由於micro c/os II的task只有64個,這種時間上的浪費也不會明顯,因此大概還在可以接受的範圍。