操作系统原理:进程间通信 IPC
? ? ?操作系統通信方式可以分為兩種方式直接通信和間接通信,對于直接通信進程A將通知進程B ,進程必須指明發送方或者接收方來發送/獲取消息。對于間接通信進程A將通知消息發送操作系統內存種的某個區域,由進程B從該區域獲取消息,發送消息方只負責把消息放到指定位置,接收方只負責在對應的位置不斷地檢查是否有新消息進入,從而觸發事件。消息傳遞可以是阻塞/同步的。A確認完B接收到了消息才會繼續執行A的任務,也可以是非阻塞/異步的A發送消息給B 可以繼續執行A的任務。
目錄
? ? ?一、信號 Signal
? ? 二、管道
? ? 三、消息隊列 按FIFO來管理消息
? ? 四、共享內存
? ? ?一、信號 Signal
? ? ?信號是一個很小的一個bit,不能傳遞數據。通過通知應用程序有一個緊急的事情需要處理,中斷應用程序,這個中斷不是硬件中斷而是軟件意義上的信號中斷。信號有多種類型例如進程終止相關的信號,異常信號,kill 信號,鍵盤中斷信號等。接收該信號的進程B可以使用操作系統的默認操作,也可以用catch捕捉信號等。進程A通過操作系統給B發送信號的過程中。操作系統確認PCB和信號處理函數,找到進程B,修改進程B的??臻g,退出對應棧幀執行信號處理函數。由于要修改別的進程的??臻g,通常正常的應用程序不允許這么操作,除了木馬和病毒。
? ? 二、管道
? ?在Unix設計過程中,一個小的應用程序完成一個小的功能,但是Unix科學家想要把這些小的功能靈活地組合起來,把前面一個功能的輸出,定向程下一個功能的輸入。之后才有了Unix和Linux的管道符“|”。例如Linux命令? ?history | grep java?
? 管道實際上是一個緩存區。每一個功能之間有一個管道。上一個功能負責往管道里傳消息,不關心下一個功能要怎么做,下一個功能負責從管道里讀數據,不關系上一個功能是怎么做的。管道傳輸的是一群字節流。管道的讀寫需要對字節流進行解析。
?
? ? 三、消息隊列 按FIFO來管理消息
? 消息隊列也是一個內存區,只不過是先進先出進行管理消息,消息隊列可以傳遞有意義的數據結構。
? ??
? ? 四、共享內存
? ? 共享內存是一種直接的通信方式,共享內存是指兩個或多個進程都有權訪問的相同內存塊。通過讀進程里的共享空間的數據進行進程間通信。沒有數據復制,沒有系統調用,能夠快速、方便地訪問共享資源,但是這個訪問需要程序員提供同步機制。
總結
以上是生活随笔為你收集整理的操作系统原理:进程间通信 IPC的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统原理:死锁的特征,预防,避免,恢
- 下一篇: 转:ext2文件系统详解