操作系統學習筆記(十九)~信號量在互斥問題和同步問題中的應用

一、什麼是臨界區?對臨界區的訪問應該遵循什麼準則?

        臨界區:訪問臨界資源的那段代碼。

        準則:

  • 互斥,如果有進程在某個臨界區執行,其他進程將被排斥在臨界區外,有相同臨界資源的臨界區都需要互斥,無相同臨界資源的臨界區不需要互斥。
  • 有空讓進,臨界區內無進程執行,應允許一個請求進入臨界區的進程立即進入自己的臨界區,以有效利用臨界資源。
  • 有限等待,每個進程進入臨界區前的等待時間必須有限,以免陷入“死等”狀態。

二、請談談同步信號量的值有什麼含義。

        同步信號量的值大於0時,表示這一資源沒有被使用的數量,或者釋放的數量,可分配請求使用這個資源的進程。
        同步信號量的值等於0時,表示這一資源分配完畢,或者沒有被釋放,如果現在有進程申請這個資源,必須等待。
        同步信號量的值小於0時,表示請求這一資源沒有得到而正在等待這一資源的數目。

三、有四個進程S1、R1、R2和R3,其中S1向緩衝區BUFF發送消息,R1、R2和R3從緩衝區中接收消息。發送和接收的規則如下:

  1. 緩衝區BUFF任何時候只能存放1個消息;
  2. R1、R2和R3每次可取S1存放在緩衝區中的消息;
  3. 每個存放在緩衝區中的消息必須被R1、R2和R3均接收後才能清除。

請用信號量機制來實現這4個進程間的同步。

信號量初值S1=1,S2=0,S3=0,S4=0,MUTEX=1;
int Count=0;
S1                        R1                  R2                      R3 
repeat                    repeat               repeat                   repeat 
P(S1)                    P(S2)                P(S3)                    P(S4)
Send message           get message          get message              get message
P(MUTEX)               P(MUTEX)            P(MUTEX)               P(MUTEX)
Count=0                 Count=Count+1       Count=Count+1           Count=Count+1
V(S2)                    if(Count=3)           if(Count=3)               if(Count=3)
V(S3)                    V(S1)                V(S1)                    V(S1)
V(S4)                    V(MUTEX)           V(MUTEX)               V(MUTEX)
V(MUTEX)             until false             until false                 until false
until false   

四、桌上有一個空的水果盤,且盤中一次只能放一個水果。爸爸專向盤中放蘋果,媽媽專向盤中放桔子,一個兒子專等吃盤子中的桔子,一個女兒專等吃盤子中的蘋果。固定每次當盤子空時爸爸或媽媽可向盤中放一個水果,僅當盤中有自己需要的水果時,兒子或女兒可從中取出。請用PV操作實現爸爸、媽媽、兒子和女兒四個進程的同步。

信號量初值apple=0,orange=0,plate=1

Dad(){
 while(1){
  準備蘋果;
  P(plate);
  放蘋果;
  V(apple);
  }
 }
 
Daughter(){
 while(1){
  P(apple);
  拿蘋果;
  V(plate);
  吃蘋果;
  }
 }
 
 Mom){
 while(1){
  準備桔子;
  P(plate);
  放桔子;
  V(orange);
  }
 }
 
 Son(){
 while(1){
  P(orange);
  拿桔子;
  V(plate);
  吃桔子;
 }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章