信號的概念與機制

信號的共性:1. 簡單(開銷小,且在用或者不用的情況下,開銷是一樣的);2. 不能攜帶大量信息(如程序執行過程中,出現段錯誤時, 就會發送一個相關的信號(編號為11)終止該進程的運行);3. 滿足某個特定條件才發送。

信號是信息的載體,Linux/UNIX 環境下,古老、經典的通信方式,現在依然是主要的通信手段。

Unix早期版本就提供了信號機制,但不可靠,信號可能丟失。Berkeley 和 AT&T都對信號模型做了更改,增加了可靠信號機制。但彼此不兼容。POSIX.1對可靠信號例程進行了標準化。

A給B發送信號,B收到信號之前執行自己的代碼,收到信號后,不管執行到程序的什么位置,都要暫停運行,去處理信號,處理完畢再繼續執行。與硬件中斷類似——異步模式。但信號是軟件層面上實現的中斷,早期常被稱為“軟中斷”。信號屬于軟中斷(通過軟件實現);而時鐘中斷屬于硬中斷(由硬件實現),其實現進程占用CPU時間片大小,到時讓出CPU。軟中斷是執行中斷指令產生的,硬中斷由于外設引起。

信號的特質:由于信號是通過軟件方法(執行幾條指令)實現,其實現手段導致信號有很強的延時性。但對于用戶來說,這個延遲時間非常短,不易察覺。對于CPU來說是非常明顯的,因此可能會更改進程之間執行的順序,引起異常(競態條件)。

每個進程收到的所有信號,都是由內核負責發送的,且都是由內核進行處理處理。進程A通過內核向進程B發送信號。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/385337.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385337.shtml
英文地址,請注明出處:http://en.pswp.cn/news/385337.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

信號的產生和狀態

信號的產生:1.按鍵產生,如:Ctrlc(內核向進程發送信號,殺死該進程)、Ctrlz、Ctrl\;2.系統調用產生,如:kill、raise、abort;3.軟件條件產生,如&…

【C++ Priemr | 15】虛函數常見問題

1. 在成員函數中調用虛函數&#xff1a; #include <iostream> using namespace std; class CBase { public:void func1(){func2();}virtual void func2() { cout << "CBase::func2()" << endl; } }; class CDerived : public CBase { public:virt…

965. 單值二叉樹

如果二叉樹每個節點都具有相同的值&#xff0c;那么該二叉樹就是單值二叉樹。 只有給定的樹是單值二叉樹時&#xff0c;才返回 true&#xff1b;否則返回 false。 示例 1&#xff1a; 輸入&#xff1a;[1,1,1,1,1,null,1] 輸出&#xff1a;true示例 2&#xff1a; 輸入&#…

信號四要素

與變量三要素&#xff08;類型、名字、值&#xff09;類似的&#xff0c;每個信號也有其必備4要素&#xff0c;分別是&#xff1a;1.編號&#xff1b;2.名稱&#xff08;即編號的宏定義&#xff09; &#xff1b;3.事件&#xff08;引起信號產生的事件&#xff0c;如段錯誤&…

958. 二叉樹的完全性檢驗

給定一個二叉樹&#xff0c;確定它是否是一個完全二叉樹。 百度百科中對完全二叉樹的定義如下&#xff1a; 若設二叉樹的深度為 h&#xff0c;除第 h 層外&#xff0c;其它各層 (1&#xff5e;h-1) 的結點數都達到最大個數&#xff0c;第 h 層所有的結點都連續集中在最左邊&a…

信號的產生

&#xff08;1&#xff09;終端按鍵產生信號&#xff08;與終端交互的進程&#xff09; Ctrl c → 2) SIGINT&#xff08;終止/中斷&#xff09; "INT" ----Interrupt Ctrl z → 20) SIGTSTP&#xff08;暫停/停止&#xff09; "T" ----Termin…

897. 遞增順序查找樹

給定一個樹&#xff0c;按中序遍歷重新排列樹&#xff0c;使樹中最左邊的結點現在是樹的根&#xff0c;并且每個結點沒有左子結點&#xff0c;只有一個右子結點。 示例 &#xff1a; 輸入&#xff1a;[5,3,6,2,4,null,8,1,null,null,null,7,9]5/ \3 6/ \ \2 4 8/ …

信號集操作函數

內核通過讀取未決信號集來判斷信號是否應被處理。信號屏蔽字mask可以影響未決信號集。而我們可以在應用程序中自定義set來改變mask。已達到屏蔽指定信號的目的。綜上&#xff1a;自定義信號集set&#xff08;也為一個字&#xff0c;64位&#xff09;通過信號集操作函數來改變信…

信號捕捉(signal、sigaction)

信號的基本屬性&#xff1a;軟中斷&#xff0c;由內核發送&#xff0c;內核處理。某個進程通過內核向另一個進程發送信號時&#xff08;引起信號產生的五個因素&#xff09;&#xff0c;另一個進程將會陷入內核進行中斷處理&#xff0c;未決信號集中相應信號置1&#xff0c;當遞…

1090 Highest Price in Supply Chain (25)(25 分)

A supply chain is a network of retailers&#xff08;零售商&#xff09;, distributors&#xff08;經銷商&#xff09;, and suppliers&#xff08;供應商&#xff09;-- everyone involved in moving a product from supplier to customer. Starting from one root suppli…

時序競態(競態條件)

產生原因&#xff1a;仍然以前文實現的sleep函數為例&#xff0c;如果進程在執行完alarm函數后&#xff0c;突然失去CPU&#xff0c;被阻塞等待&#xff08;這是有可能的&#xff0c;進程在執行過程中&#xff0c;若非原子操作&#xff0c;都有可能隨時失去CPU&#xff09;&…

1106 Lowest Price in Supply Chain (25)

A supply chain is a network of retailers&#xff08;零售商&#xff09;, distributors&#xff08;經銷商&#xff09;, and suppliers&#xff08;供應商&#xff09;-- everyone involved in moving a product from supplier to customer. Starting from one root suppli…

【Leetcode | 順序刷題 】二分查找目錄

二分查找序號題號129. 兩數相除 50. Pow(x, n) 69. x 的平方根

sigsuspend函數(mysleep函數的改進)

可以通過設置屏蔽SIGALRM的方法來控制程序執行邏輯&#xff0c;但無論如何設置&#xff0c;程序都有可能在“解除信號屏蔽”與“掛起等待信號”這個兩個操作間隙失去cpu資源。除非將這兩步驟合并成一個“原子操作”。sigsuspend函數具備這個功能。在對時序要求嚴格的場合下都應…

【Leetcode | 順序刷題】數學目錄

序號題號1 7. 整數反轉 28. 字符串轉換整數 (atoi)39. 回文數443. 字符串相乘

全局變量的異步I/O問題

全局變量的異步I/O問題同樣屬于時序競態問題&#xff0c;其本質就是多個進程或者同一個進程中的多個時序&#xff08;如主控程序和信號捕捉時的用戶處理函數&#xff09;對同一個變量進行修改時&#xff0c;它們的執行順序不一樣就會導致該變量最終的值不一樣&#xff0c;從而產…

【Leetcode | 03】String

字符串目錄序號題號33. 無重復字符的最長子串 151. 翻轉字符串里的單詞

可/不可重入函數

一個函數在被調用執行期間&#xff08;尚未調用結束&#xff09;&#xff0c;由于某種時序&#xff08;遞歸或者處理信號捕捉時等情況&#xff09;又被重復調用&#xff0c;稱之為“重入”。根據函數實現的方法可分為“可重入函數”和“不可重入函數”兩種。看如下程序。 可以看…

【Leetcode | 順序刷題】雜項目錄

序號題號類別1136. 只出現一次的數字位運算2137. 只出現一次的數字 II位運算3 260. 只出現一次的數字 III 位運算4191. 位1的個數位運算5231. 2的冪位運算6342. 4的冪位運算7 338. 比特位計數 位運算8405. 數字轉換為十六進制數位運算9371. 兩整數之和位運算10401. 二進制手表位…

SIGCHLD信號

&#xff08;1&#xff09;SIGCHLD信號產生的條件 1.子進程終止時會向父進程發送SIGCHLD信號&#xff0c;告知父進程回收自己&#xff0c;但該信號的默認處理動作為忽略&#xff0c;因此父進程仍然不會去回收子進程&#xff0c;需要捕捉處理實現子進程的回收&#xff1b; 2.子…