進程同步

進程同步

進程同步:在多道程式環境下,進程是並發執行的,不同進程之間存在著不同的相互制約關係。

同步的概念

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

私用信號量

上面我們用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)。

進程間制約關係

在多道程式環境下,系統中各進程以不可預測的速度向前推進,進程的異步性會給系統造成混亂,造成了結果的不可再現性。為防止這種現象,異步的進程間推進受到二種限制:

(1)資源共享關係

多進程共享資源,例如各進程爭用一台計算機,這時各進程使用這台印表機時有一定的限制。如各進程隨意使用印表機,會造成印表機結果交織在一起難以區分。所以必須由系統統一分配,每次只允許一個進程使用一段時間印表機,等該進程使用完畢後再將印表機分配給其它進程。這種使用原則稱為互斥使用。

(2)相互合作關係

在某些進程之間還存在合作關係,例如圖2-2程式並發執行圖中一個程式的輸入、計算、列印三個程式段作為三個進程並發執行,由於這三個進程間存在著相互合作的關係,即先輸入再計算、最後再列印的關係,所以這三個進程在並發執行時推進序列受到限制,要保證其合作關係正確,進程間這種關係稱為同步關係。

臨界資源

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

臨界區

多個進程共享臨界資源時必須互斥使用,例如在二個進程A和B它們的程式如下:

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。

相關詞條

相關搜尋

熱門詞條

聯絡我們