操作系統常考知識點總結(2)
進程間通信(IPC)方式
1.管道(pipe)
2.信號(signal)
3.消息隊列
4.共享內存
5.信號量
6.套接字(socket)
管道
無名管道有如下特點:
1、半雙工,數據在同一時刻只能在一個方向上流動。
2、數據只能從管道的一端寫入,從另一端讀出。
3、寫入管道中的數據遵循先入先出的規則。
4、管道所傳送的數據是無格式的,這要求管道的讀出方與寫入方必須事先約定好數據的格式,如多少字節算一個消息等。
5、管道不是普通的文件,不屬於某個文件系統,其只存在於內存中。
6、管道在內存中對應一個緩沖區。不同的系統其大小不一定相同。
7、從管道讀數據是一次性操作,數據一旦被讀走,它就從管道中被拋棄,釋放空間以便寫更多的數據。
8、管道沒有名字,只能在具有公共祖先的進程(父進程與子進程,或者兩個兄弟進程,具有親緣關系)之間使用。
註意:管道的訪問方式是典型的生產者--消費者模型,讀數據管道為空,或者寫數據時管道已滿會出現阻塞問題。如下圖所示
信號
詳情看:https://blog.csdn.net/ljianhui/article/details/10128731
消息隊列
消息隊列提供了一種從一個進程向另一個進程發送一個數據塊的方法。 每個數據塊都被認為含有一個類型,接收進程可以獨立地接收含有不同類型的數據結構。我們可以通過發送消息來避免命名管道的同步和阻塞問題。但是消息隊列與命名管道一樣,每個數據塊都有一個最大長度的限制。
詳情看:https://blog.csdn.net/ljianhui/article/details/10287879
註意:消息隊列與管道的區別
共享內存
詳情看:https://blog.csdn.net/ljianhui/article/details/10253345
信號量
為了防止出現因多個程序同時訪問一個共享資源而引發的一系列問題,我們需要一種方法,它可以通過生成並使用令牌來授權,在任一時刻只能有一個執行線程訪問代碼的臨界區域。臨界區域是指執行數據更新的代碼需要獨占式地執行。而信號量就可以提供這樣的一種訪問機制,讓一個臨界區同一時間只有一個線程在訪問它,也就是說信號量是用來調協進程對共享資源的訪問的。
詳情看:https://blog.csdn.net/ljianhui/article/details/10253345
套接字(跨機器)
詳情看:https://blog.csdn.net/ljianhui/article/details/10477427
註:詳細實現流程建議去看linux網絡編程
操作系統常考知識點總結(2)