OS 關於訊號量處理中的忙等待問題

2021-10-07 06:47:15 字數 685 閱讀 2071

直接看圖:

下面這張圖堪稱神奇:

問題描述–>套娃行為

訊號量為了時臨界區問題不發生忙等待,使用臨界區mutex進行處理。臨界區mutux的value需要被p1和p2的wait()指令進行操作,然而能否保證對mutex.value進行互斥的操作是乙個問題。wait()操作理論上是需要原子的(atomically),實際上是有一些**構成,實現起來並不能保證互斥。這就產生了mutex.value訪問控制的問題。也就產生了cs1』和cs2『。

保證互斥的演算法有以下:

1、硬體指令 testandset swap會發生忙等待

2、開關中斷忙等待切只適用於單處理系統

3、paterson演算法 麵包店bakery演算法等也有忙等待

由此可見 ,訊號量解決程序互斥的時候忙等待不可避免。

使用訊號量的目的乙個時因為方便簡單,另乙個就是能夠解決忙等待問題

那麼為什麼使用訊號量,是因為圖中對使用者程序p1和p2的共享資料s進行忙等待處理的效率比較低,而作業系統的臨界區的忙等待的時間比較短,效率高。而且適當的忙等待並非無益(多處理機下,和程序的context上下文切換有關)。

ucosii等待訊號量函式中pend前後怎樣執行

1 key等於0 1 2時,mun 還執行嗎?2 key 3時,mun 還執行嗎?void task1 task void p arg lcd showxnum 150,111,sync sem.ctr,3,16,0 ostimedlyhmsm 0,0,0,499,os opt time perio...

關於訊號量的理解

參考文件 訊號量的工作原理 由於訊號量只能進行兩種操作等待和傳送訊號,即p sv 和v sv 他們的行為是這樣的 p sv 如果sv的值大於零,就給它減1 如果它的值為零,就掛起該程序的執行 v sv 如果有其他程序因等待sv而被掛起,就讓它恢復執行,如果沒有程序因等待sv而掛起,就給它加1.舉個例...

訊號量中的PV操作

一 訊號量的概念 1 訊號量的型別定義 訊號量 semaphore 的資料結構為乙個值和乙個指標,指標指向等待該訊號量的下乙個程序。訊號量的值與相應資源的使用情況有關。當它的值大於0時,表示當前可用資源的數量 當它的值小於0時,其絕對值表示等待使用該資源的程序個數。注意,訊號量的值僅能由pv操作來改...