複製鏈接
請複製以下鏈接發送給好友

進程同步

鎖定
進程同步:在多道程序環境下,進程是併發執行的,不同進程之間存在着不同的相互制約關係。 [1] 
中文名
進程同步
外文名
Process Synchronization
所屬範圍
計算機技術

進程同步同步的概念

我們把異步環境下的一組併發進程因直接制約而互相發送消息、進行互相合作、互相等待,使得各進程按一定的速度執行的過程稱為進程間的同步。具有同步關係的一組併發進程稱為合作進程,合作進程間互相發送的信號稱為消息或事件。 如果我們對一個消息或事件賦以唯一的消息名,則我們可用過程 wait (消息名)  表示進程等待合作進程發來的消息,而用過程 signal (消息名) 表示向合作進程發送消息。 [2] 

進程同步私用信號量

上面我們用wait(消息名)與signal(消息名)的方式,描述了進程同步的一種實現方法。事實上,使用信號量的方法也可實現進程間的同步。 一般來説,我們也可以把各進程之間發送的消息作為信號量看待。與進程互斥時不同的是,這裏的信號量只與制約進程及被制約進程有關而不是與整組併發進程有關。因此,我們稱該信號量為私用信號量(Private Semaphore)。一個進程Pi的私用信號量Semi是從制約進程發送來的進程Pi的執行條件所需要的消息。與私用信號量相對應,我們稱互斥時使用的信號量為公用信號量。

進程同步用P,V原語操作實現同步

步驟:
1. 為各併發進程設置私用信號量
2. 為私用信號量賦初值 3. 利用P、v原語和私用信號量規定各進程的執行順序。 實例:
例:設進程PA和PB通過緩衝區隊列傳遞數據。PA為發送進程、PB為接收 進程。PA發送數據時調用發送過程deposit(data),PB接收數據時調用過程remove(data)。且數據的發送和接收過程滿足如下條件: 1)在PA至少送一塊數據入一個緩衝區之前,PB不可能從緩衝區中取出數據(假定數據塊長等於緩衝區長度), 2)PA往緩衝隊列發送數據時,至少有一個緩衝區是空的; 3)由PA發送的數據塊在緩衝隊列中按先進先出(FIFO)方式排列。 描述發送過程deposit(data)和接收過程remove(data)。 [2] 

進程同步進程間制約關係

在多道程序環境下,系統中各進程以不可預測的速度向前推進,進程的異步性會給系統造成混亂,造成了結果的不可再現性。為防止這種現象,異步的進程間推進受到二種限制:
(1)資源共享關係
多進程共享資源,例如各進程爭用一台計算機,這時各進程使用這台打印機時有一定的限制。如各進程隨意使用打印機,會造成打印機結果交織在一起難以區分。所以必須由系統統一分配,每次只允許一個進程使用一段時間打印機,等該進程使用完畢後再將打印機分配給其它進程。這種使用原則稱為互斥使用。 [2] 
(2)相互合作關係
在某些進程之間還存在合作關係,例如圖2-2程序併發執行圖中一個程序的輸入、計算、打印三個程序段作為三個進程併發執行,由於這三個進程間存在着相互合作的關係,即先輸入再計算、最後再打印的關係,所以這三個進程在併發執行時推進序列受到限制,要保證其合作關係正確,進程間這種關係稱為同步關係。 [2] 

進程同步臨界資源

上面分析了進程間共享打印機這類資源時要受到限制,象打印機這類資源一次只允許一個進程使用的資源稱為臨界資源。屬於臨界資源有硬件打印機、磁帶機等,軟件在消息緩衝隊列、變量、數組、緩衝區等。當然還有一類象磁盤等資源,它允許進程間共享,即可交替使用,所以它稱為共享資源,而臨界資源又稱獨享資源。 [1] 

進程同步臨界區

多個進程共享臨界資源時必須互斥使用,例如在二個進程A和B它們的程序如下: [3] 
A: begin
Input data 1 form I/O 1 ;
Computer……;
Print results 1 by printer ;臨界區A
End
B: begin
Input a data 2 form I/O 2 ;
Computer……;
Print results 2 by printer ;臨界區B
End
A和B兩個進程都需要使用打印機,它們必須互斥使用。如果為了保證結果的正確性限制A、B二進程推進序列,規定進程A執行好再執行進程B,或進程B執行好再執行進程A,這樣的限制就顯得過死,因為它已不能保證進程A、B能併發執行,所以必須把限制減少到最少,以儘可能支持併發執行。為此把各進程代碼分解,把訪問臨界資源的那段代碼(稱為臨界區)與其它段代碼分割開來,只對各種進程進入自己的臨界區加以限制,即各進程互斥地進入自己的臨界區。在上述A、B兩程序中我們分別把A和B的使用打印機的二段程序print result 1 by printer和print result 2 by printer稱為A和B進程使用打印機的臨界區A和臨界區B,進程A和B必須互斥地分別進入各自的臨界區A和B。 [3] 
參考資料