信號(一)基本概念

一、很多事物或者是說很多系統的設計都是從生活中啓發的,信號在生活中常見的是“信號彈”和“摔杯爲號”,而我們可以從中總結出來信號有三個主要特性:①簡單 ②不能攜帶大量數據 ③滿足某個特定條件才發送 。

二、Linux中信號執行的機制:進程A給進程B發送信號,進程B收到信號前執行自己的相應指令;收到信號後,不管進程B執行到什麼位置,都必須要暫停執行;去處理信號,當信號處理完後再回去執行原來的指令。從信號執行機制拓展到幾個概念:

1、異步執行模式:類似上面描述,打斷原來的程序執行,先處理中斷,再回到執行原來程序。

2、硬件中斷:時鐘中斷,通過硬件來實現。

3、軟件中斷:信號就是軟件中斷。但是呢,對於CPU來說,軟件中斷是有較大延時性的;不過對於用戶來說不可察覺。

每個進程收到的所有信號,都是由內核負責發送,內核處理的!

三、與信號相關的事件和狀態

1、信號產生的方式(5種)

    ①按鍵產生:如 Ctrl+c、Ctrl+z 、Ctrl+\

    ②系統調用產生:如 kill、raise、abort 

    ③軟件產生:如 定時器alarm、setitimer

    ④硬件異常產生:如 非法內存訪問(段錯誤)    、除0錯誤(浮點數例外)、內存對齊出錯(總線錯誤)

    ⑤命令產生:如 kill命令

2、信號的狀態(3種)

    ①產生:信號產生

    ②遞達:遞送併到達進程

    ③未決:在產生和遞達之間的狀態,信號產生了,而在遞送過程中被阻塞(屏蔽),就會變成未決信號。

3、信號的處理方式(3種)

    ①執行默認動作(每個信號都有默認執行動作)

    ②忽略(丟棄)

    ③捕捉(調用處理函數)

四、信號屏蔽字(阻塞信號集)和未決信號集

    Linux內核的進程控制塊PCB是一個結構體(task_struct),除了包含進程ID、狀態、工作目錄、用戶ID、組ID、文件描述符表;還包含了信號相關的信息,主要是阻塞信號集和未決信號集。

    阻塞信號集(信號屏蔽字):將某些信號加入該集合,對這些信號設置屏蔽;當屏蔽了11號信號,再收到11號信號,這個信號的處理將被延遲到解除屏蔽後。

    未決信號集:

        ①信號產生,未決信號集中描述該信號的位立即置爲1,表示信號處於未決的狀態。當信號被處理了,該位又被置爲0。

        ②信號產生後由於某些原因不能遞達(主要由於阻塞),這類信號的集合被稱爲未決信號集;在屏蔽解除前,信號會一直處於未決狀態。

    信號屏蔽字和未決信號及可以看成是一個存儲bool值的數組,數組中的值爲1,即設置了阻塞或者信號處於未決狀態。信號屏蔽字直接影響未決信號集!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章