操作系统(十)进程通信
2.1.4 進程通信
? 顧名思義,進程通信就是指進程之間的信息交換。進程是分配系統資源的單位(包括內存地址空間),因此各進程擁有的內存地址空間相互獨立。同時為了保證安全,一個進程不能隨意的訪問另一進程的資源,但有時進程通信又是必要的,所以操作系統提供了共享存儲、消息傳遞、管道通信三種方式來實現進程之間的通信。
目錄
2.1.4 進程通信
2.1.4.1 共享存儲
2.1.4.2 消息傳遞
2.1.4.3 管道通信
2.1.4.1 共享存儲
? 在共享存儲這一形式中,兩個進程對于某一共享內存的訪問必須是互斥(不能同時訪問)的。共享存儲又可以進一步分為基于數據結構的共享以及基于存儲區的共享。
???基于數據結構的共享:在這種通信方式中,要求諸進程公用某些數據結構,借以實現諸進程間的信息交換。比如共享空間里只能放一個長度為10的數組。這種共享方式速度慢、限制多,是一種低級通信方式。
? 基于存儲器的共享:為了傳輸大量數據,在存儲器中劃出了一塊共享存儲區,諸進程可通過對共享存儲區中數據的讀或寫來實現通信,數據的形式、存放位置都由進程控制,而不是操作系統。相比之下,這種共享方式速度更快,是一種高級通信方式。
2.1.4.2 消息傳遞
? 消息傳遞的方式是現在應用最廣泛的一種進程通信方式,進程間的數據交換以格式化的消息(Message)為單位。進程通過操作系統提供的“發送消息/接收消息”兩個原語進行數據交換。運用這種方式不僅實現了大量數據的傳遞而且向用戶透明,隱藏了其中的實現細節,因此應用較為廣泛。消息傳遞又可以分為直接通信方式和間接通信方式。
? 直接通信方式:消息直接掛到接收進程的消息緩沖隊列上。
? 間接通信方式:消息要先發送到中間實體(信箱)中,因此也稱“信箱通信方式”。
2.1.4.3 管道通信
??所謂“管道”,是指用于連接一個讀進程和一個寫進程以實現它們之間通信的一個共享文件,又名 pipe 文件。其實就是在內存中開辟一個大小固定的緩沖區。
? 1. 管道只能采用半雙工通信,某一時間段內只能實現單向的傳輸。如果要實現雙向同時通信,則需要設置兩個管道。
? 2. 各進程要互斥地訪問管道。
? 3. 數據以字符流的形式寫入管道,當管道寫滿時,寫進程的write()系統調用將被阻塞,等待讀進程將數據取走。當讀進程將數據全部取走后,管道變空,此時讀進程的read()系統調用將被阻塞。
? 4. 如果沒寫滿,就不允許讀。如果沒讀空,就不允許寫。
? 5. 數據一旦被讀出,就從管道中被拋棄,這就意味著讀進程最多只能有一個,否則可能會有讀錯數據的情況。
總結
以上是生活随笔為你收集整理的操作系统(十)进程通信的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 产品经理如何培养气场
- 下一篇: 2021年科技赋能中医药产业发展报告