進程間通信方式預習1

1.linux進程間通信的目的是什麼?

1.數據傳輸,一個進程將它的數據發送給另一個進程,發送的數據量在一個字節到幾兆字節之間。

2.共享數據,多個進程想要操作共享數據,一個進程對共享數據的修改,別的進程立刻看到。

3.通知事件,一個進程通知另一個或一組進程發生了某件事。

4.資源共享,多個進程之間共享同樣的資源。需要內核提供鎖和同步機制。

5.進程控制,有些進程希望完全控制另一個進程的執行,控制進程希望能夠攔截另一個進程的信息和異常。

 

2.管道通信的特點是什麼

1.管道是半雙工的,數據只能向一個方向流動,需要雙方通信時,需要建立兩個管道。

2.只能同於父子進程或兄弟進程之間

3.單獨構成一種文件系統,管道對於兩端的進程而言,就是一個文件,但他不是普通的文件,不屬於某種文件系統,而是自立門戶,並且只存在於內存中。

4.數據的讀入和寫入,一個進程寫的內容被另一端的進程讀出,寫入的內容每次都添加在管道緩衝區的末尾,並且每次都是從緩存區的頭部讀出數據。

 

3.有名管道與普通管道的區別優缺點

管道只能用於具有親緣關係的進程間通信,在有名管道提出後,該限制可以突破,FIFO不同於管道之處在於,它提供一個路徑名與之關聯,以FIFO的文件形式存在於文件系統中,這樣,即使與FIFO的創建進程不存在血緣關係的進程,只要可以訪問該路勁,就能彼此通過FIFO相互通信,因此,不相關的進程也能通過FIFO交互數據,FIFO嚴格遵循先進先出,對管道及FIFO的讀總是從開始處返回數據的,對它們的寫則把數據添加到末尾,不支持lseek等文件定位操作。

 

4.信號處理方式有哪些

1.忽略信號,即對信號不做任何處理,其中,有兩個信號不能忽略,即SIGKILL,SIGSTOP

2.捕捉信號,定義信號處理函數,當信號發生時,執行相應的處理函數

3.執行默認操作,linux對每種信號都規定了默認操作,注意,進程對實時信號的默認反應是進程終止。

 

5.消息隊列的使用方法

1.打開或創建消息隊列,消息隊列的內核持續性要求每個消息隊列都在系統範圍內對應唯一的鍵值,所以要獲得一個消息隊列的描述字,只需要提供該消息隊列的鍵值(消息隊列描述字實在有系統範圍內唯一的鍵值生成的,而鍵值可以看作對應系統內的一條路徑。

2.讀寫操作,消息讀寫操作很簡單,每個消息都類似於如下數據結構:

Struct msgbuf

{

long mtype;

char mtext[1];

};

mtype成員代表消息類型,從消息隊列中讀取消息的一個重要依據就是消息的類型,mtext是消息的內容,當然長度不一定爲1,因此,對於發送消息來說,首先預置一個msgbuf的緩衝區並寫入消息類型和內容,調用相應的發送函數即可,對讀取消息來說,首先分配這樣一個msgbuf緩衝區,然後把消息讀入該緩存區即可。

3.獲得或設置消息隊列屬性,消息隊列的信息基本上都保存在消息隊列頭中,因此可以分配一個類似於消息隊列頭的結構,來返回消息隊列的屬性,同樣可以設置該數據結構。

 

 

6.消息隊列與管道、有名管道相比的優缺點

消息隊列具有更大的靈活性,首先它提供格式字節流,有利於減少開發人員的工作量,其次消息具有類型,在實際應用中,可以作爲優先級使用,這兩點是管道和有名管道所不能比的。同樣,消息隊列可以在幾個進程間複用,而不管這幾個進程是否具有血緣關係,這一點與有名管道相似,但消息隊列是隨內核持續的,與有名管道相比(隨進程持續),生命力更強,應用空間更大。

 

7.信號燈與其他通信方式的不同之處

信號燈主要提供對進程間共享資源訪問控制機制,相當於內存中的標誌,進程可以根據它判斷是否能夠訪問某些共享資源,同時,進程也可以修改該標誌,除了用於訪問控制外,還可以用於進程同步。

 

8.信號燈的兩種類型含義

1.二值信號燈,最簡單的信號燈形式,其值只能取01,類似於互斥鎖。

二值信號燈能夠實現互斥鎖功能,但兩者關注內容不同,信號的強調共享資源,只要共享資源可用,其他進程同樣可以修改信號燈的值,互斥鎖更強調進程,佔用資源的進程用完資源後,必須由進程本身來解鎖。

 

2.計算信號燈,信號燈的值可以取任意非負值。

 

9.對信號燈的幾種操作

1.打開或創建信號燈,與消息隊列類似。

2.信號燈值操作,linux可以增加或減小信號燈的值,相應於對共享資源的釋放和佔有,

3.獲得或設置信號燈屬性,系統中的每一個信號燈集都對應一個struct sem_array結構,該結構記錄了信號燈集的各種信息,存在於系統空間,爲了設置,獲得該信號燈的各種信息及屬性,在用戶空間有一個重要的聯合機構與之對應,即union semun

 

10.什麼叫共享內存

共享內存是最有用的進程間通信方式,也是最快的IPC形式,兩個不同進程AB共享內存的意思是,同一塊物理內存被映射到進程A,B個字的進程地址空間,進程A可以即時看到進程B對共享內存中數據的更新,反之亦然,由於多個進程共享同一塊內存區域,必須要某種同步機制,互斥鎖和信號量都可以。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章