0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux信號事件發(fā)生的兩個來源

FPGA之家 ? 來源:嵌入式軟件開發(fā)交流 ? 作者:young ? 2021-06-18 15:09 ? 次閱讀

什么是信號

信號可以理解為軟件中斷,是在軟件層次上對中斷機(jī)制的一種模擬,在原理上,一個進(jìn)程收到一個信號與處理器收到一個中斷請求可以說是差不多的。信號是異步的,一個進(jìn)程不必通過任何操作來等待信號的到達(dá)。信號可以直接進(jìn)行用戶空間進(jìn)程和內(nèi)核進(jìn)程之間的交互,內(nèi)核進(jìn)程也可以利用它來通知用戶空間進(jìn)程發(fā)生了哪些系統(tǒng)事件。

誰來產(chǎn)生信號

信號事件的發(fā)生有兩個來源:

(1) 硬件來源,比如我們按下ctrl+c,會產(chǎn)生SIGINT信號。

(2) 軟件來源,比如我們調(diào)用alarm函數(shù)來產(chǎn)生SIGALRM信號。

常用信號

Linux信號的編號是從1-64,其中32和33空缺,沒有對應(yīng)的信號。通過kill -l 可查看所有的信號。

1~31之間的信號叫做不可靠信號, 信號可能會丟失, 也叫做非實(shí)時信號。

34~64之間的信號叫做可靠信號, 信號不會丟失, 也叫做實(shí)時信號。

信號響應(yīng)方式

信號有如下三種響應(yīng)方式:

(1) 忽略信號,即對信號不做任何處理,但是有兩個信號不能忽略,即 SIGKILL 及 SIGSTOP。

(2) 捕捉信號,定義信號處理函數(shù),當(dāng)信號發(fā)生時,執(zhí)行相應(yīng)的自定義處理函數(shù)。

(3) 執(zhí)行缺省操作,Linux 對每種信號都規(guī)定了默認(rèn)操作。

信號處理過程

信號處理的大致流程如下:

信號產(chǎn)生 -》 信號注冊 -》 信號在進(jìn)程中注銷 -》 信號處理函數(shù)執(zhí)行完畢

我們主要講一下“信號注冊” 和“信號在進(jìn)程中注銷”。其他兩個都比較好理解。

信號注冊指的是在目標(biāo)進(jìn)程中注冊,該目標(biāo)進(jìn)程中有未決信號的信息。啥叫未決信號呢,實(shí)際執(zhí)行信號的處理動作稱為信號遞達(dá),信號從產(chǎn)生到遞達(dá)之間的狀態(tài),稱為信號未決。

先來看一下對應(yīng)的結(jié)構(gòu)體:

struct sigpending{ //未決信號鏈的頭部與尾部 struct sigqueue *head, *tail; //未決信號集 sigset_t signal;};

struct sigqueue{ struct sigqueue *next; //信號所攜帶的信息 siginfo_t info;}

信號注冊的過程就是將信號值加入到未決信號集siginfo_t中,將信號所攜帶的信息加入到未決信號鏈的某一個sigqueue中去。

因此,對于可靠的信號,可能存在多個未決信號的sigqueue結(jié)構(gòu),對于每次信號到來都會注冊。而不可靠信號只注冊一次,只有一個sigqueue結(jié)構(gòu)。

只要信號在進(jìn)程的未決信號集中,表明進(jìn)程已經(jīng)知道這些信號了,還沒來得及處理,或者是這些信號被阻塞。

信號在進(jìn)程中注銷是指進(jìn)程已經(jīng)接收到信號了,會在鏈表中移除。在進(jìn)程的執(zhí)行過程中,每次從系統(tǒng)調(diào)用或中斷返回用戶空間的時候,都會檢查是否有信號沒有被處理。如果這些信號沒有被阻塞,那么就調(diào)用相應(yīng)的信號處理函數(shù)來處理這些信號??煽啃盘柡筒豢煽啃盘柕奶幚碛兴煌?/p>

不可靠信號:由于不可靠信號在未決信號鏈中只有一個sigqueue結(jié)構(gòu),因此將它刪除的同時,也會將信號從未決信號集中刪除。

可靠信號:由于可靠信號在未決信號鏈中可能有多個sigqueue結(jié)構(gòu),如果只有一個,也將信號從未決信號集中刪除掉。如果有多個則不從未決信號集中刪除信號,注銷完畢。

原文標(biāo)題:Linux信號及工作原理

文章出處:【微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11182

    瀏覽量

    208538
  • 信號
    +關(guān)注

    關(guān)注

    11

    文章

    2767

    瀏覽量

    76476

原文標(biāo)題:Linux信號及工作原理

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    單穩(wěn)態(tài)觸發(fā)器的兩個工作狀態(tài)是什么

    單穩(wěn)態(tài)觸發(fā)器是一種數(shù)字邏輯電路,廣泛應(yīng)用于各種電子設(shè)備和系統(tǒng)中。它具有兩個工作狀態(tài):穩(wěn)定狀態(tài)和暫態(tài)狀態(tài)。 單穩(wěn)態(tài)觸發(fā)器的工作原理 單穩(wěn)態(tài)觸發(fā)器是一種具有兩個穩(wěn)定狀態(tài)的觸發(fā)器,其中一狀態(tài)是穩(wěn)定狀態(tài)
    的頭像 發(fā)表于 08-22 10:11 ?275次閱讀

    雙穩(wěn)態(tài)電路的兩個穩(wěn)定狀態(tài)是什么

    雙穩(wěn)態(tài)電路是一種具有兩個穩(wěn)定狀態(tài)的電子電路,廣泛應(yīng)用于數(shù)字電路、通信系統(tǒng)、存儲器等領(lǐng)域。 雙穩(wěn)態(tài)電路的基本概念 雙穩(wěn)態(tài)電路是一種具有兩個穩(wěn)定狀態(tài)的電路,即在沒有外部輸入信號的情況下,電路可以保持在
    的頭像 發(fā)表于 08-11 15:00 ?626次閱讀

    雙穩(wěn)態(tài)觸發(fā)器的兩個基本性質(zhì)是什么

    的定義 雙穩(wěn)態(tài)觸發(fā)器是一種具有兩個穩(wěn)定狀態(tài)的邏輯電路,通常由兩個交叉耦合的反相器或門電路構(gòu)成。在沒有外部輸入信號的情況下,雙穩(wěn)態(tài)觸發(fā)器可以保持在兩個穩(wěn)定狀態(tài)之一,即“0”狀態(tài)或“1”狀
    的頭像 發(fā)表于 08-11 10:08 ?450次閱讀

    兩個PLC之間如何交互信號

    在工業(yè)自動化系統(tǒng)中,PLC(Programmable Logic Controller,可編程邏輯控制器)是核心的控制設(shè)備。在許多復(fù)雜的應(yīng)用場景中,需要兩個或多個PLC之間進(jìn)行信號交互,以實(shí)現(xiàn)更高
    的頭像 發(fā)表于 06-14 16:57 ?3080次閱讀

    AD4938正負(fù)輸入端分別輸入兩個信號,對這兩個信號做減法輸出 ,這種輸入是非差分信號嗎?

    AD4938全差分放大器 ,正負(fù)輸入端分別輸入兩個信號(非差分關(guān)系),對這兩個信號做減法輸出 ,這種輸入是非差分信號,可以這樣應(yīng)用嗎 ?
    發(fā)表于 05-29 08:07

    請問ad9171的兩個輸出端口是否支持同時輸出兩個不同的頻率?

    你好,關(guān)于AD9171芯片我有一問題 ,數(shù)據(jù)手冊顯示該芯片具有兩個輸出通道,芯片內(nèi)部有DAC0和DAC1共兩個DAC通道,那么這兩個通道是否支持同時輸出
    發(fā)表于 05-28 06:20

    藍(lán)牙Mesh模塊組網(wǎng)時是一信號還是兩個信號

    隨著科技的不斷發(fā)展,智能家居、物聯(lián)網(wǎng)等新興領(lǐng)域越來越受到人們的關(guān)注。在這個領(lǐng)域中,藍(lán)牙Mesh組網(wǎng)模塊作為一種關(guān)鍵技術(shù),其性能和作用備受矚目。那么,藍(lán)牙Mesh組網(wǎng)模塊究竟是一信號還是兩個
    的頭像 發(fā)表于 05-24 15:14 ?726次閱讀

    兩個銅片可以形成原電池嗎

    兩個銅片本身不能形成原電池,因?yàn)樵姵氐墓ぷ髟硪蕾囉?b class='flag-5'>兩個不同電位的電極材料之間的氧化還原反應(yīng)。
    的頭像 發(fā)表于 05-21 16:23 ?690次閱讀

    arcgis中如何關(guān)聯(lián)兩個屬性表

    在ArcGIS中,關(guān)聯(lián)兩個屬性表是一重要的操作,可以通過此操作將兩個表中的數(shù)據(jù)關(guān)聯(lián)起來,以便進(jìn)行分析和查詢。下面是詳細(xì)介紹如何在ArcGIS中實(shí)現(xiàn)屬性表的關(guān)聯(lián)。 首先,我們需要明確兩個
    的頭像 發(fā)表于 02-25 11:01 ?3695次閱讀

    proteus信號發(fā)生器怎么設(shè)置方波

    ,用于模擬和調(diào)試電子電路。它具有豐富的虛擬儀器庫,包括示波器、信號發(fā)生器、函數(shù)發(fā)生器等。Proteus信號發(fā)生器是其中之一,可以模擬各種類型
    的頭像 發(fā)表于 02-23 16:44 ?8171次閱讀

    信號發(fā)生器如何發(fā)出雙脈沖?

    信號發(fā)生器如何發(fā)出雙脈沖? 信號發(fā)生器是一種用于產(chǎn)生各種信號波形的儀器。雙脈沖信號是一種特殊的
    的頭像 發(fā)表于 12-21 15:03 ?1825次閱讀

    如何給C語言中的函數(shù)定義兩個不同的名字?

    最近有位哥問我,如何給C語言中的函數(shù)定義兩個不同的名字?就是這兩個名字都是指向同一函數(shù),同一地址,而且兩個名字都可以當(dāng)做函數(shù)來用的那種。
    的頭像 發(fā)表于 12-19 16:21 ?673次閱讀

    AD9269在AD兩個通道的入口輸入峰值相同的差分信號,為什么AD兩個通道的輸出不同?

    在AD兩個通道的入口輸入峰值相同的差分信號,為什么AD兩個通道的輸出不同,最高位的符號位為什么不同
    發(fā)表于 12-12 06:55

    CAN總線為什么有兩個終端電阻,作用是什么?

    。這兩個終端電阻在CAN總線中的作用十分重要,下面將詳細(xì)解釋。 1. 起到信號匹配的作用:CAN總線是一種差分信號線,其通信中傳輸?shù)氖遣罘?b class='flag-5'>信號。而終端電阻的阻值與總線的特性阻抗相等,起
    的頭像 發(fā)表于 12-07 11:15 ?2711次閱讀

    兩個硬盤2系統(tǒng)開機(jī)切換

    切換兩個硬盤上的系統(tǒng)是一種常見的行為,可以讓用戶在不同的操作系統(tǒng)之間進(jìn)行切換,以滿足不同的需求。在本文中,我們將詳細(xì)介紹如何配置和使用兩個硬盤上的系統(tǒng)進(jìn)行切換。本文將分為以下幾個部分進(jìn)行討論:硬件
    的頭像 發(fā)表于 11-28 15:08 ?6852次閱讀