進程互斥與同步


1.解釋並發與並行,並說明兩者關系。

答:並發指的是一個處理器在同一時間段內執行多個進程,但注意不是同一時刻同時執行,只是以極快的速度進行進程的切換執行,從而形成並行的效果。

並行指的是多個處理器同時處理多個進程,即同一時刻同時執行多個進程。並發和並行在處理速度上基本相當,但在本質上有所區別。

例如吃飯的時候電話響了,並發指的是先停止吃飯,然后迅速去接聽電話,兩者是交替進行的;而並行則是在邊吃飯的同時邊接聽電話,兩者是同時進行的。

 

解釋一:並行是指兩個或者多個事件在同一時刻發生;而並發是指兩個或多個事件在同一時間間隔發生。

解釋二:並行是在不同實體上的多個事件,並發是在同一實體上的多個事件

解釋三:並行在多台處理器上同時處理多個任務,並發的是在一台處理器上“同時”處理多個任務。

 

2.進程間有哪幾種關系?分別要采取什么策略?

答:進程間存在競爭與和協作兩種基本關系。

當出現競爭關系時會引發兩個控制問題:死鎖與飢餓。解決方法:向並發進程提供鎖機制,在使用共享資源之前表達互斥要求,系統需要保證諸進程能互斥訪問共享資源,既要解決死鎖問題,又要解決飢餓問題。

當出現協作關系時,解決方法為:在未輸入完一塊數據之前不能加工處理,未加工處理完一塊數據之前不能打印輸出,每個進程都要接收到協作進程完成一次數據處理的消息之后,才能進行下一步工作。如雙方不知道對方名字的間接協作,可以通過訪問共享資源進行松散式協作;如知道對方名字,可以通過通信機制進行的緊密協作。

 

3.為什么說進程的互斥也是一種同步?

答:進程的互斥指的是在一個進程執行時,要求另一個進程需要進行等待,即需要兩個進程相互協調合作,這在一定程度上也是一種同步。

 

4.解釋死鎖與“飢餓”,並說明兩者關系。

答:死鎖:即一組進程因為爭奪資源而陷入永遠等待的狀態。

“飢餓”:即一個可運行的進程由於其他進程總是優先於它,而被調度程序無限期地拖延而導致不能被執行。

兩者的關系:死鎖和飢餓都最終都是導致進程因為進程之間的競爭而無法執行,但前者是由於競爭雙方的資源爭奪而導致雙方都無法繼續進行,后者則是個別進程因為優先級過低,而一直處於等待狀態無法進行。

 

5.什么叫做臨界區?如何解決進程對臨界資源的訪問沖突?

答:並發進程中與共享變量有關的程序段稱為臨界區;共享變量所代表的資源稱為臨界資源。

遵循臨界區調度的三個原則:

(1)一次至多只有一個進程進入臨界區內執行。

(2)如果已有進程在臨界區中,試圖進入臨界區的其他進程應等待。

(3)進入臨界區內的進程應在有限時間內退出,以便讓等待隊列中的一個進程進入。

即總結為:互斥使用,有空讓進;忙則要等,有限等待;擇一而入,算法可行。

 

6.信號量的物理意義是什么?

 信號量表示物理資源的實體,是一個與隊列有關的整型變量。主要用於封鎖臨界區、進程同步即維護資源計數。

 

7.理解五個哲學家吃面問題,並能盲寫出偽代碼。

semaphore fork[5];
for(int i=0;i<5;i++){
    fork[i]=1;      
}
begin{
    process philosophers_i(){ //i=1,2,3,4,5
        while(true){
            think();
            hungry();
            P(fork[i]);
            p(fork[(i+1)%5]);
            eat();
            V(fork[i]);
            V(fork[(i+1)%5]);
        }
    }
}end

 

8.一個超市有n個顧客購物,只有一個收銀員,試用信號量P、V操作描述顧客進程和收銀員之間的關系。寫偽代碼。

semaphore cashier;
cashier  = 1;  //收銀員作為信號量被占用,且只有一個
int length = n;
int []P = new int[length];  //完成購買用戶隊列,用戶排隊,且最大值為n
int []V = {};  //完成結賬用戶隊列,初值為空
begin
do{
  for(int i =0; i<length; i++ ){  //用戶排隊
    P.remove(i);  //用戶占用收銀員
    payment();  //用戶結賬
    V.add(i);  //用戶解除占用收銀員
    length --;  //待結賬用戶減一
  }
}while(length == 0)  //用戶結賬完畢,交易結束
end

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM