進程互斥與同步
1.解釋並發與並行,並說明兩者關系。
2.進程間有哪幾種關系?分別要采取什麽策略?
3.為什麽說進程的互斥也是一種同步?
4.解釋死鎖與“饑餓”,並說明兩者關系。
5.什麽叫臨界區?如何解決進程對臨界資源的訪問沖突?
1.並發是一種機制,即指“同時有多個請求被發起,或另一種意義上說支持同時有多個線程存在”;支持並發即是要能夠包容同時來到的多個請求,或說包容同時存在的多個線程
並行是一種處理方式(或可以說是一種架構方式),即指“有多個計算核心,可以在同一時間同時處理多個任務 / 把一個任務分割成小塊,在同一時間同時處理多個部分”
關系:並行是並發的特例,並發是並行的擴展。
2.進程之間存在直接制約關系(進程間的同步)和間接制約關系(進程間的互斥)。直接制約關系是指兩個或多個進程為了合作完成同一個任務,間接制約關系是指兩個或多個進程為了競爭臨界資源。如分時系統中有兩個用戶進程分別編譯他們的PASCAL源程序,在單CPU系統中這兩個進程只能分時占用處理機編譯各自的源程序,它們間存在著間接制約關系。直接制約關系是多個協作進程之間存在的邏輯上·制約關系,即一個進程的執行依賴於另一個進程的消息,當一個進程沒有得到另一個進程的消息時應等待,直到消息到達被喚醒為止。如共享一緩沖器的讀進程和打印進程,它們間存在著直接制約關系,因為兩個進程必須同步才能完成共同的任務。
3.進程的互斥是指進程在推進時的相互制約關系,由於進程間存在制約關系,為了保證進程的正確運行以及相互合作進程間的信息交換,就需要進程之間進行通信,進程之間的互斥與同步也是一種通信。
4.如果在一個進程集合中的每個進程都在等待只能由該集合中的其他進程才能引發的事件,而無限期僵持的局面稱死鎖。一個可運行進程由於其他進程總是優先於它,而被無限期拖延而不能被執行的現象稱饑餓。死鎖進程必然處於饑餓狀態,但處於饑餓狀態的進程未必陷入死鎖。
5.把一次只允許一個進程使用的資源稱為臨界資源。把每個進程中訪問臨界資源的那段代碼從概念上分離出來,將其稱為臨界區。
(1)如果有若幹進程要求進入空閑的臨界區,一次僅允許一個進程進入;
(2)任何時候,處於臨界區內的進程不可多於一個。如已有進程進入自己的臨界區,則其它所有試圖進入臨界區的進程必須等待;
(3)進入臨界區的進程要在有限時間內退出,以便其它進程能及時進入自己的臨界區;
(4)如果進程不能進入自己的臨界區,則應讓出CPU,避免進程出現“忙等”現象。
進程互斥與同步