linux下的訊號機制

2021-07-16 12:43:01 字數 1035 閱讀 6282

訊號機制的詳細講解

訊號機制的生動講解

訊號的本質是在軟體層次上對中斷的模擬,所以又稱軟中斷。乙個程序收到乙個訊號就像處理器收到中斷請求一樣。

訊號的作用,使程序可對外界做出(非實時)反應,也可向外界傳送自己的一些資訊。這樣可以通過訊號實現程序間的非同步通訊機制。      

訊號的實現原理

從cpu是否 正在執行使用者程序的命令的角度,可將使用者程序狀態分為2個:

使用者態:cpu正在執行使用者程序命令

核心態:cpu不在執行使用者程序命令

程序對訊號的處理發生在程序從核心態進入使用者態之前。

使用者程序進入核心態(休息中)僅有3種情況:

系統呼叫:cpu轉去執行核心中的命令,由使用者程序引起,如printf (先呼叫庫,庫呼叫底層核心函式)等

cpu處理中斷:cpu轉去執行中斷處理,由中斷引起

程序排程:單核cpu在程序間高速切換實現巨集觀上的多工併發執行,微觀上還是依次執行

在核心裡的程序檔案(task_struct)裡面儲存了程序的一套資訊,其中就有儲存程序未處理訊號的地方。

1)在早期,訊號機制簡單,對那32個訊號有確定含義,有預設處理,對同類訊號,檔案只記錄乙個(後續的已記錄訊號會丟失),稱之為非實時訊號,不可靠訊號

2)後來,對訊號種類進行了擴充,這些訊號即使同類也都排隊記錄下來,稱之為實時訊號,可靠訊號。

處理訊號時,可以:

由核心執行預設操作:忽略訊號,阻塞訊號,停止程序等

執行程序設定的訊號響應函式:執行完後程序回到核心態繼續處理未處理訊號

綜上,訊號來了,根據訊號種類將其登記在核心裡,當程序從核心態進入使用者態之前,先將未處理訊號執行完,接著去執行程序命令。

由於程序間的不停高速切換,程序也不停在核心態和使用者態之間不停轉換,程序對訊號的響應在巨集觀上就像是立即響應一樣,實則不然。

這也是筆記類文章,我也是邊學邊總結,不免有淺漏的地方。我致力於將發生的事情用盡量簡單的語言描繪下來,並沒涉及到具體的訊號處理函式,連線裡面有詳細講解。

Linux 信 號 機 制

前面介紹了訊號的基本概念,在這一節中,我們將介紹核心如何實現訊號機制。即核心如何向乙個程序傳送訊號 程序如何接收乙個訊號 程序怎樣控制自己對訊號的反應 核心在什麼時機處理和怎樣處理程序收到的訊號。還要介紹一下setjmp和longjmp在訊號中起到的作用。1 核心對訊號的基本處理方法 核心給乙個程序...

linux 訊號機制

本文旨在弄懂linux中的訊號工作原理 kill l 命令可以檢視linux下所有訊號 2.1 使用者在終端按下某些鍵時,終端驅動程式會傳送訊號給前台程序 例如ctrl c產生sigint訊號,ctrl 產生sigquit訊號,ctrl z產生sigtstp訊號 2.2 硬體異常產生訊號,這些條件由...

LINUX訊號機制

在電腦科學中,訊號是unix 類unix以及其他posix相容的作業系統中程序間通訊的一種有限制的方式。它是一種非同步的通知機制,用來提醒程序乙個事件已經發生。當乙個訊號傳送給乙個程序,作業系統中斷了程序正常的控制流程,此時,任何非原子操作都將被中斷。如果程序定義了訊號的處理函式,那麼它將被執行,否...