iT邦幫忙

2021 iThome 鐵人賽

DAY 10
1

在Kernel裡面有一項功能,就是所謂的號誌(semaphore)的功能,裡面包括:
1.號誌控制區塊(semaphore control block)
2.ID名稱
3.Value數值
4.任務等待列

這個信號機制,主要是方便Kernel追蹤用的,號誌發送的方式是,當一個任務獲取一個號誌時,號誌裡的數值就會因為發送號誌,而少掉一個;反之,當任務完成之後,號誌就會送回號誌控制區塊內,號誌的數值就收回,加回一個。

一個Kernel能夠支援不同的號誌,大致分成下列三種:二進位號誌、計數號誌以及互斥號誌

A.二進位的號誌binary semaphore:

在二進位的Kernel裡面,通常都是0與1的存在,所以號誌的產生,就是二進位的號誌(binary semaphore)。
如果二進位的號誌是0的狀態底下,Kernel就會認為這個號誌是不能用的(unavailable),或是空的(empty),反之,如果二進位號誌的值是1的狀態底下,Kernel就會認為這個號誌是有用的(available),或是滿的(full)。

B.計數號誌Counting semaphore:

如果遇到多工的任務的時,通常會一次要求提供多個號誌,此時,就會出現大於1個數值的情況發生,也就是其實它是一連串的給1這個值的數量,或許是一個多工任務,一次給4個1,1111這樣形態,這樣就會一次發出四個號誌,這就稱做記數號誌。

C.互斥號誌(mutual exclusion semaphore)

這種互斥信號,跟上述兩種號誌不同的地方,在於它是一種開關(lock and unlock)的狀態,這個互斥的號誌主要保證任務不會被刪除,通常會有很多任務產生,如果沒有這個機制,讓Kernel裡面有一堆號誌互相混雜處在一個即時作業系統內,可能就會意外的剔除或收回,所以如果有這個互斥號誌,就能避免過於混亂,而造成被作業系統給剔除的結果,此外,有標示互斥信號情況下,也可以避免優先順訊任意倒置的狀況發生。


上一篇
Day 9 任務的形式
下一篇
Day 11 號誌如何使用-等待與號誌同步
系列文
ARM 組合語言:30天學習心得分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言