作業系統 – Process溝通方式(IPC)

為何Process之間需要溝通

因為在現代作業系統中,通常不會只有一個Process在OS內,一般會有好幾個Processes同時於系統中並行執行(concurrent execution)。

存在於系統中並行執行的Process可以分成兩大類:

  • 獨立行程(Independent process)–如果一個Process無法影響其它Process的執行,同時它也不受其他Process的影響,該Process即為獨立行程。這一類的Process之間不會有任何共享的資料。
  • 合作行程(Cooperating process)–如果一個Process能夠影響其它Process,或是受到其它Process的影響,它就是屬於合作行程。這些Process會共同完成一份工作,所以這一類的Process之間會有共享的資料 ,彼此之間需要有資訊交換與協調的管道。

也因此,我們需要考慮合作行程之間的溝通。

行程溝通方式

在電腦系統中讓兩個合作行程做溝通需要透過IPC(Interprocess communication),IPC有兩種模式設計:

Shared Memory

允許兩個不相關的程序訪問同一個邏輯記憶體,共享記憶體是兩個正在執行的程序之間共享和傳遞資料的一種非常有效的方式。不同程序之間共享的記憶體通常為同一段實體記憶體。程序可以將同一段實體記憶體連線到他們自己的地址空間中,所有的程序都可以訪問共享記憶體中的地址。如果某個程序向共享記憶體寫入資料,所做的改動將立即影響到可以訪問同一段共享記憶體的任何其他程序。

提供對共享記憶體之互斥存取控制的責任是由Programmer來負責;而O.S.只負責提供Share Memory Space,不提供任何額外的資源。
Programmer 負擔重;OS 負擔輕。

Message Passing

兩個Process要溝通,需遵守下列歩驟:

  • 建立Communication Link
  • 互傳訊息(Message)
  • 傳輸完畢,release link

此法需要OS提供額外支援(e.g., Link Management, Link Capacity 管控, Message Lost處理…etc),而Programmer不需額外負擔。

建立 Communication Link 時會分做傳送方(send)接收方(receive),並且通訊的方式分為:

  1. 直接傳遞(Direct)
  2. 間接傳遞(Indirect)

直接傳遞(Direct)

  • 建立link用send跟receive來傳送訊息。
  • 為自動建立。
  • 一個Link剛好連接一對Process。
  • 每個行程必須要明確地命名。

間接傳遞(Indirect)

  • 訊息是從 mailbox(port) 裡直接接收(只能共享mailbox資料)。
  • 每個mailbox都有個獨特的ID。
  • 一對process之間,可能存在多條Link。
  • 只有在共用信箱的行程間才能建立通訊鏈。
  • 一個通訊鏈可以和許多行程相結合。

基本運算定義如下︰

  • send(A, message) –將訊息(message)傳送至信箱A。
  • receive(A, message) –從信箱A接收一個訊息(message)。

同步

訊息傳遞過程中通訊的同步非常重要,訊息傳遞可以分為等待(blocking)或非等待(non-blocking):

等待(blocking)被視為同步(synchronous)

  • 等待傳送(blocking send) ︰傳送行程等待,直到訊息被接收。
  • 等待接收(blocking receive) ︰接收者等待,直到有訊息出現。

非等待(non-blocking)被視為非同步(asynchronous)

  • 非等待傳送(non-blocking send)︰傳送行程送出訊息後繼續執行。
  • 非等待接收(non-blocking receive)︰接收者取回有效訊息或無效資料。

可能有不同的組合,當接收與傳送都在等待時,則傳送者與接收者之間就有約會(rendezvous)

小結

Share Memory

  • 共享一部分的記憶體(透過共享變數存取資料)。
  • 共享變數所有process皆可存取。

Message Passing

  • Process 之間建立Communication Link。
  • process間有專屬的Link,不會隨意被其他Process共用。
0 0 評分數
Article Rating
訂閱
通知
guest

0 Comments
在線反饋
查看所有評論