作業系統 - 進程間通信

2020-09-14 吃泡菜的魚

在作業系統中並發的執行進程可以是獨立的進程,也可以是合作進程。如果進程不需要與系統中其他進程共享數據的的進程是獨立的independent。需要與系統中其他進程相互有影響的進程是合作的cooperating。很明顯與其他進程共享數據的任意進程都是一個cooperationg進程。

提供一個允許進程合作的環境理由如下:

  • 信息共享:因為可能好幾個應用都對相同的信息感興趣(比如說,需要複製粘帖),我們必須提供一種環境允許並發的訪問這新信息
  • 加速計算:如果我們想讓特定的任務運行的更快,我們必須分拆成子任務,每個都將並行執行。需要注意的是這樣的加速只能在有多個處理器的計算機上才能實現。
  • 模塊化:我們可能想以模塊化的方式構建i系統,把系統功能劃分為及一個不同的進程或線程

進程的合作需要一種進程間通信interprocess communication(IPC)的機制來使得他們可以交換數據,也就是說互相發送數據和接受數據。進程間通信有兩個基本模型:

  • 共享內存
  • 消息傳遞

在共享內存模型中,內存中的一塊用來共享的數據被cooperating進程建立。然後進程就可通過讀取和寫入共享區域內的數據來交換信息。在消息傳遞模型中,通信通過在cooperating進程間以交換消息的方式來發生。兩種模型的對比如下圖:

這兩種模型在常見的作業系統中都是很常見的,並且需要系統都同時實現了這兩種模型。消息傳遞對於交換小數據來說是很有用的,因為沒有衝突需要避免。消息傳遞在分布式系統中也比共享內存容易實現。共享內存比消息傳遞更快,因為消息傳遞系統一般使用系統調用實現,因此需要更耗時的內核幹預任務。在共享內存中,系統調用只在創建共享區域時被調用。一旦共享區域建立後,所有的訪問就像程序訪問內存一樣,不再需要內核的幫助。

相關焦點

  • 作業系統 - 消息傳遞系統中的進程間通信
    這要求了進程間共享一塊內存區域,並且可以讓應用編程人員通過代碼訪問和操縱這塊共享內存。達到相同效果的另一種方法是,作業系統提供用於進程之間通過消息傳遞的工具來實現相互通信的。消息傳遞提供了一種機制,這種機制允許進程在不分享相同地址空間的情況下,通訊和同步他們的行為。這在分布式系統中特別有用,因為通訊的進程為了連結在網絡中的不同計算機上。
  • 你未必知道 Linux作業系統進程間通信
    (一)無名管道,它具有幾個特點:  1) 管道是半雙工的,只能支持數據的單向流動;兩進程間需要通信時需要建立起兩個管道;  2) 無名管道使用pipe()函數創建,只能用於父子進程或者兄弟進程之間;  3) 管道對於通信的兩端進程而言,實質上是一種獨立的文件,只存在於內存中;  4) 數據的讀寫操作:一個進程向管道中寫數據,所寫的數據添加在管道緩衝區的尾部
  • 作業系統 - 共享內存系統中的進程間通信
    通過使用共享內存來進程進程間通信需要相互通訊的進程創建一個共享內存區域。一般而言,共享內存的區域位於創建這個共享內存的進程的地址空間中。其他想要使用這個共享內存來通訊的進程把這段地址附加到他們的地址空間中。回想一下,一般來說,作業系統會阻止一個進程訪問另一個進程的內存地址空間。
  • 6種Linux進程間的通信方式
    進程的概念進程是作業系統的概念,每當我們執行一個程序時,對於作業系統來講就創建了一個進程,在這個過程中,伴隨著資源的分配和釋放。可以認為進程是一個程序的一次執行過程。進程通信的概念進程用戶空間是相互獨立的,一般而言是不能相互訪問的。
  • Linux內核-進程間通信組件的實現
    ,進程間通信,虛擬文件系統和網絡接口。由於不用的用戶進程擁有不同的進程空間,因此進程間的通信要藉助於內核的中轉來實現。一般情況下,當一個進程等待硬體操作完成時,會被掛起。當硬體操作完成,進程被恢復執行,而協調這個過程的就是進程間的通信機制。三、進程間通信進程間通信主要用於控制不同進程之間在用戶空間的同步、數據共享和交換。
  • 進程間的五種通信方式介紹
    進程間通信又叫IPC (InterProcess Communication)是指在不同進程之間傳播或交換信息。IPC的方式通常有管道(包括無名管道和命名管道)、消息隊列、信號量、共享存儲、Socket。 Socket支持不同主機上的兩個進程IPC。
  • 作業系統原理之進程管理
    失去封閉性:系統的狀態不再只對正在執行的程序可見不可再現性:同一個程序在輸入相同的情況下多次運,可能出現同的結果3、進程與程序:正文段:存放被執的機指令用戶數據段:存放用戶數據進程控制塊:存放進程的運環境4、進程的特徵並發性:多個進程實體能在一段時間間隔內同時運行;並發性是進程和現代作業系統的重要特徵動態性:進程是實體的執行過程(執程序—>創建進程 獲得CPU—>
  • 一文詳解作業系統進程管理
    線程間通信的效率會高於進程間通信。一般進程間通信需要內核介入,而同一進程內的線程間共享該進程的內存和文件,不需要調用內核就可以實現通信。5.進程間通信進程間通信目的一般有共享數據,數據傳輸,消息通知,進程控制等。
  • 一篇快速入門作業系統的進程管理
    線程間通信的效率會高於進程間通信。一般進程間通信需要內核介入,而同一進程內的線程間共享該進程的內存和文件,不需要調用內核就可以實現通信。5.進程間通信進程間通信目的一般有共享數據,數據傳輸,消息通知,進程控制等。
  • Linux後臺伺服器開發——Linux下進程間通信的方式有哪些?
    Linux下進程間通信的方式有:管道消息隊列信號信號量共享存儲套接字一、管道管道是半雙工的,數據只能向一個方向流動;需要雙方通信時,需要建立起兩個管道>FIFO命名管道詳情參閱:https://blog.csdn.net/qq_41453285/article/details/89472561匿名管道,由於沒有名字,只能用於親緣關係的進程間通信。
  • python核心編程之linux系統進程間通信-Queue
    進程間通信-QueueProcess之間有時需要通信,作業系統提供了很多機制來實現進程間的通信。1.Queue實例我們以Queue為例,在父進程中創建兩個子進程,一個往Queue裡寫數據,一個從Queue裡讀數據:from multiprocessing import Process, Queueimport os, time, random# 寫數據進程執行的代碼:def write(q):for value in
  • 基於VxWorks的全IP開發平臺進程通信處理機制
    模塊主要實現相同處理器內和不同處理器之間進程間通信功能,進程間的通信主要依靠調度任務從郵箱中接收消息,並把消息派發到各個進程的消息隊列來實現,底層協議類型包括可靠通信協議(TCP)和不可靠通信協議(UDP)。關鍵詞:嵌入式作業系統;網絡處理器單元;消息隊列;Vxworks引言 隨著IP技術的迅速發展,「Everything over IP」的觀念已深入人心。
  • 作業系統 - 對進程的操作
    一個子進程可以從作業系統直接獲取資源,或者可以被限制為父進程資源的一個子集。父進程可以把資源分片給子進程,或者也可以在子進程間共享資源(比如共享內存或文件)。將子進程限制為父級資源的子集可防止任何進程通過創建太多子進程而使系統超載。除了提供各種物理和邏輯上的資源,父進程也可以傳遞初始化數據給子進程。比方說,如果一個進程的功能是展示文件的內容在屏幕或終端上,比如說hw1.c。
  • 讓進程間通信更容易 - Pandora.js 的 IPC-Hub
    我們前面的兩篇介紹了怎麼定義多個進程,怎麼利用進程這一資源。
  • python筆記44:進程間通信機制-消息隊列
    主要內容:小目標:掌握進程間通信方式主要內容:消息隊列一個問題:父子進程之間變量不共享,他們之間如何進行通信?1.消息隊列消息隊列是進程間通信的一種方式,它基於系統提供的機制實現;使用方式:from multiprocessing import Queue方法說明:
  • 作業系統基礎:進程知識筆記(一)
    3、進程的狀態及其狀態間的切換3.1 三態模型進程分為三種基本狀態:作業系統控制機構功能主要包括:創建一個進程、撤銷一個已完成的進程、改變進程的狀態、實現進程間的通信。5、進程間的通信在多道程序環境的系統中存在多個可以並發執行的進程,進程間必然存在資源共享、互相合作的問題。需要通過進程通信實現進程間的信息交換。
  • linux環境高級編程-高級IO和進程間通信詳解
    進程間通信介紹了基本進程間通信機制,包括兩大類:進程間數據共享:管道,FIFO,消息隊列和共享存儲進程間數據同步:信號量網絡進程間通信介紹網絡間的進程通信機制:套接字。高級進程間通信高級進程間通信提供一種可以在進程間傳遞文件描述符的機制,包括STREAMS管道和unix域套接字需要C/C++ Linux伺服器架構師學習資料後臺私信「資料」(資料包括C/C++,Linux,
  • linux進程間通信——深入理解linux信號量
    信號燈信號燈與其他進程間通信方式不大相同,它主要提供對進程間共享資源訪問控制機制。相當於內存中的標誌,進程可以根據它判定是否能夠訪問某些共享資源(臨界區,類似於互斥鎖),同時,進程也可以修改該標誌。除了用於訪問控制外,還可用於進程同步。1.
  • python筆記45:進程間通信機制-共享內存
    主要內容:小目標:掌握進程間通信方式主要內容:共享內存一個問題:有沒有一種方式,多個進程可以同時訪問修改同一個變量? 回到:有的,共享內存;共享內存:多個進程可以直接讀寫一塊公共內存,不需要數據拷貝。實現原理:為了在多個進程間交換信息,內核提供一種映射機制;多個進程就可以直接讀寫一塊公共內存地址而不需要進行數據的拷貝;優點:速度快,使用方便缺點:同步問題
  • 作業系統基礎8-進程及進程控制
    (Process Control Block PCB) 是作業系統核心中一種數據結構,用來表示進程狀態,記錄進程的外部特徵,描述進程的運動變化過程。棧指針內容:核心棧與用戶棧指針控制信息:用於存放與管理、調度進程相關的信息。調度相關信息:狀態、等待事件/原因、優先級。進程組成信息:代碼/數據地址、外存映像地址。進程隊列指引元:進程隊列指針、父子兄弟進程指針。進程通信相關信息:消息隊列、信號量、鎖。