程序通訊
訊號通訊
硬體**,包括硬體異常,除零,越界訪問,這些訊號由核心產生,併發送到相關程序;
軟體**,某些軟體事件如alarm()函式產生sigalrm訊號,管道通訊產生sigpipe;程序使用kill() raise()等函式。
訊號的相應方式:
忽略訊號,但是有兩個訊號不能忽略,sigkill sigstop
捕捉訊號,定義訊號處理函式
執行預設操作
訊號傳送的限制
核心和超級使用者和可發訊號給任何乙個程序
普通使用者只能向與自己具有相同uid和gid的程序,或者在同意程序組中的程序傳送訊號
可靠訊號和不可靠訊號
linux繼承unix系統中的訊號機制,早期unix為了避免訊號頻繁到達而引起程序堆疊溢位,就將對訊號的的相應在每次處理訊號後設定為預設動作,因此在訊號處理函式裡需要每次安裝訊號處理函式,而由於訊號的到來是隨機的,如果乙個訊號到來後,系統呼叫我們註冊的訊號處理函式,而此時我們還沒有來得及作「安裝訊號處理函式」(singal())的操作,這時再到達乙個訊號,系統就會採取預設操作,因此這種訊號不可靠。linux支援unix的不可靠訊號,並做了修改,也就是在呼叫完訊號處理函式後,系統不會把對該訊號的處理恢復為預設動作,使用者也不必在訊號處理函式裡安裝訊號處理函式。因此,linux下的不可靠主要是指訊號可能丟失。0-31是不可靠訊號,32-63是可靠訊號,可靠訊號支援排隊。
現在的linux的signal函式通過sigaction() 函式實現,在訊號處理函式裡不必安裝訊號處理函式,而且由signal()函式安裝的訊號都支援排隊。signal() sigaction()的區別是後者可以傳遞資訊給訊號處理函式。
程序通訊與程序同步
多個程序可以共享系統中的各種資源,但其中許多資源一次只能為乙個程序使用,我們把一次僅允許乙個程序使用的資源稱為臨界資源。許多物理裝置都屬於臨界資源,如印表機等 對臨界資源的訪問必須互斥進行,在每個程序中,訪問臨界資源的那段 稱為臨界區。程序通訊與同步的目的主要有下面 1 資料傳輸 乙個程序需要將他的...
程序同步與互斥
程序同步與互斥 首先,我們看乙個例子 程序p1 p2公用乙個變數count,初始值為0 p1 p2兩個程序的執行順序是隨機的,p1 p2可能順序執行或交錯執行。由圖可見,不同的執行順序,count值會不同,這是不允許的。在多道程式系統中,由於資源共享或程序合作,使程序間形成間接相互制約和直接相互制約...
程序同步與互斥
為什麼要引入程序同步的概念?多道程式環境下的程序併發執行,它們相互之間存在著不同的制約關係,為了理解和協調這種制約的關係,引入了程序同步的概念。臨界資源是一次只能為乙個程序使用的資源。由於臨界資源的特性,就決定了 對它的訪問必須是互斥的。在每個程序中,訪問臨界資源的那段 稱為臨界區。為了保證臨界資源...