iT邦幫忙

2021 iThome 鐵人賽

DAY 12
1
Arm Platforms

ARM 組合語言:30天學習心得分享系列 第 12

Day 12 多工等待跟號誌同步與信用追蹤同步

我們在本篇來說一下,號誌使用的第二種方式:多工等待跟號誌同步

如果說,有三個優先任務在執行多工處理,當某一個任務完成時,會暫時把完成的任務給凍結住,此時,就會給訊號任務(signal task)一個機會去完成它的任務,所以變成訊號任務暫時優先去處理他的工作,但是因為等待中優先的任務其實還是有優先權,所以他有可能隨時去搶占訊號任務的位置,所以必須用flush沖洗的方式,盡速把訊號任務給完成,再把優先權回到等待任務上去執行他的任務。

換個方式來說,如果有三輛自強號的列車進入竹南站,那麼可能到竹南站時要分山海線,雖然都有優先通行的權利,可是還是要先確認旅客都有上車,並且到底哪輛自強號列車要先發車,因為有載客跟分線行駛的問題,所以自強號的任務上會有暫時凍結的情況,此時,區間車就取得一個優先通行機會,如果現場有多輛區間車,就可以趁這個凍結時間內,優先通過停止號誌,駛離竹南站,但是自強號本來就是優先,所以當確認後的自強號開始行駛後,區間車就給要立刻把優先權還給還給自強號,進入等待的狀態,而這個還優先權的功能就是flush。

然而有沒有訊號任務(singal task)的優先權跟等待任務(wait task)的優先權相同呢?

其實是有的,假設等待的任務等級沒那麼高的情況下,還是會出現無法辨識的情況,這種就需要利用號誌追蹤的方式去控制,我們假設,如果訊號任務突然大量的被釋放出,此時等待任務有可能會因此而被凍結住,但是因為等待任務畢竟還是優先層級較高,所以此時就要去追蹤訊號任務的號誌,根據狀況適時的阻斷訊號任務,讓優先的等待任務先行。這個方式可以稱做:信用追蹤同步

我們一樣換個方式來說明,如果莒光號跟區間車,正常的情況下,莒光號的優先權的確高於區間車,但有時也並非如此明顯,可是如果區間車較多要先行,此時,就會影響到莒光號通過的速度,所以此時就要去追蹤區間車的狀況,避免莒光號誤點,大致上,就是為了要處理這種狀況,所以才會有信用追蹤同步的應用。


上一篇
Day 11 號誌如何使用-等待與號誌同步
下一篇
Day 13 同步、多個任務或者迴圈存取同步
系列文
ARM 組合語言:30天學習心得分享30

尚未有邦友留言

立即登入留言