Vxworks訊號量分析

2021-04-25 08:35:14 字數 2067 閱讀 8112

vxworks訊號量分析

wind

核心中有二進位制訊號量、計數訊號量和互斥訊號量三種型別,為了使應用程式具有可移植性,還提供了

posix

(可移植作業系統介面)訊號量。在

vxorks

作業系統中,訊號量是實現任務同步的主要手段,也是解決任務同步問題的最佳選擇。

關於互斥的實現:

使用二進位制訊號量可以很方便的實現互斥,互斥是指多工在訪問臨界資源時具有排他性。為使多個任務互斥訪問臨界資源,只需要為該資源設定乙個訊號量,相當於乙個令牌,哪個任務拿到這個令牌即有權使用該資源。把訊號量設為可用,然後將需要資源的任務的臨界**置於

semtake()

和semgive

()之間即可。

註明:

1.互斥中的訊號量與任務優先順序的關係:任務的排程還是按照任務優先順序進行,但是在使用臨界資源的時候只有乙個任務獲得訊號量,也就是說還是按照任務優先順序來獲得訊號量從而訪問資源。只有當前使用資源的任務釋放訊號量

semgive

(),其他任務按照優先順序獲得訊號量。 2.

訊號量屬性中的引數為:

sem_q_priority

。而且在建立訊號量的時候必須把訊號量置為滿的

sem_full

。即訊號量可用。

基本實現互斥模型:

sem_id  semmutex;

semmutex = sembcreate(sem_q_priority, sem_full);

task(void)

關於任務同步的實現:

同步即任務按照一定順序先後執行

,為了實現任務a和

b的同步

,只需要讓任務a和

b共享乙個訊號量

,並設初始值為空

,即不可用,將

semgive()

置於任務a之後

,而在任務

b之前插入

semtake()即可.

說明: 1.

還是討論和優先順序的關係。由於訊號量初始化為空,不可用,所以可能使得優先順序反轉,即高優先順序任務

b在等待低優先順序任務

a釋放訊號量。只有執行了訊號量釋放語句

semgive

()後任務

b得到訊號量才能執行。 2.

屬性引數的設定為

sem_q_fifo

,sem_empty;

實現模式參考:

sem_id semsync;

semsync = sembcreate(sem_q_fifo,sem_empty);

taska(void)

taskb(void)

使用訊號量注意事項:1.

用途不同,訊號量屬性和初始值不同; 2.

互斥訪問資源使,

semtake()

和semgive()

必須成對出現,且先後順序不能顛倒; 3.

避免刪除那些其他任務正在請求的訊號量。

應用: 1

、確保任務優先順序不反**

sem_id  semfs;

sem_id  semfss;

sem_id  semfex;

semfs = sembcreate (sem_q_fifo , sem_empty);

semfss = sembcreate (sem_q_fifo , sem_empty);

semfex = sembcreate (sem_q_fifo , sem_empty);  //

建立三個訊號量

void t_imaget(void)

void t_imajud(void)

void t_imapro(void)

void t_imaexc(void)

void start(void)

以上例子雖然定了各個任務的優先順序,但加上訊號量可以實現同步,而且防止優先順序反轉出現。

vxworks訊號量分析

vxworks的訊號量機制分析 vxworks訊號量是提供任務間通訊 同步和互斥的最優選擇,提供任務間最快速的通訊。也是提供任務間同步和互斥的主要手段。vxworks提供3種訊號量來解決不同的問題。二進位制訊號量 最快的最常用的訊號量,可用於同步或互斥。互斥訊號量 為了解決內在的互斥問題如優先順序繼...

VxWorks訊號量分析 轉貼

wind核心中有二進位制訊號量 計數訊號量和互斥訊號量三種型別,為了是運用程式具有可移植性,還提供了posix 可移植作業系統介面 訊號量 在vxworks中,訊號量是實現任務同步的主要手段,也是解決任務同步的最佳選擇。關於互斥的實現 使用二進位制訊號量可以很方便的實現互斥,互斥是指多工在訪問臨界資...

VxWorks學習筆記 訊號量

是實現任務互斥 同步操作的主要機制。vxworks 提供的訊號量經過了高度優化,在所有任務間通訊機制中,速度最快。二 訊號量的分類 binary semaphores 二進位制 完成互斥 同步操作的最佳方式 速度最快,最常用。mutual exclusion semaphores 互斥 一種特殊的二...