訊號是事件發生時對程序的通知機制,有時也稱為軟體中斷。訊號與硬體中斷的相似之處在於打斷了程式執行的正常流程,大多數情況下,無法**訊號到達的準確時間。
乙個(具有合適許可權的)程序能夠向另一程序傳送訊號。這一做法可作為一種同步技術,甚至是程序間通訊(ipc)的原始形式。
程序也可以向自身傳送訊號。但是發往程序的諸多訊號,通常都是源於核心。
有時需要確保一段**不被傳遞來的訊號中斷,為了做到這點,可將訊號新增到程序的訊號掩碼中——目前會阻塞該組訊號的到達。如果所產生的訊號屬於阻塞之列,那麼訊號將保持等待狀態,直至稍後對其解除阻塞(從掩碼訊號中移除)。程序可使用各種系統呼叫對其訊號掩碼新增和移除訊號。
以下時間可引發核心為程序產生訊號:
(1)硬體異常。硬體檢測到乙個錯誤條件並通知核心,隨機再由核心傳送相應訊號給相關程序。硬體異常的例子包括執行一條異常的機器語言指令。例如:被0除,或者引用了無法訪問的記憶體區域。
(2)使用者鍵入了能夠產生訊號的終端特殊字元。其中包括中斷字元(ctrl+c)、暫停字元(ctrl+z)。
(3)發生了軟體事件。例如,針對檔案描述符的輸出變為有效,調整了終端視窗大小,定時器到期,程序執行的cpu時間超限,或者該程序的某個子程序退出。
針對每個訊號都定義了乙個唯一的(小)整數,從一開始順序展開。為了可移植性,一般都用在中定義的符號名(形如sig***x)而不是用數字。例如,當使用者鍵入中斷字元時,將傳遞給程序sigint訊號(訊號編號為2)。
訊號有兩大類:
(1)用於核心向程序通知事件,構成所謂傳統或標準訊號。標準訊號範圍:1~31。
(2)由實時訊號構成。
訊號因某些事件而產生後,會於稍後被傳遞給某一程序,程序也會採取某些措施來相應訊號。在產生和到達期間,訊號處於等待狀態(pending)。
訊號到達後,程序視具體訊號執行如下預設操作之一。
(1)忽略訊號:核心將訊號丟棄,訊號對程序沒有任何影響(程序永遠不知道曾經出現過該訊號)。
(2)終止(殺死)程序:這有時是指程序異常終止,而不是程序因呼叫exit()而發生的正常終止。
(3)產生核心轉儲檔案,同時程序終止:核心轉儲檔案包含對程序虛擬記憶體的映象,可將其載入到偵錯程式中以檢查程序終止時的狀態。
(4)停止(不是終止)程序:使程序暫停執行。
(5)執行之前被暫停的程序。
除了根據特定訊號而採取預設行為之外,程式也能改變訊號到達時的響應行為。也將次稱之為對訊號的處置(disposition)設定。程式可以將對訊號的處置設定為如下之一。
(1)採取預設行為。
(2)忽略訊號。
(3)執行訊號處理器程式。
訊號處理其是由程式設計師編寫的函式,用於為響應傳遞來的訊號而執行適當任務。例如shell為sigint訊號提供了乙個處理器程式,令其停止當前正在執行的工作,並返回到(shell的)主輸入迴圈,並再次向使用者呈現shell提示符。
除了預設處置外,無法將訊號處置設定為終止程序或者轉儲核心。
作業系統基本概念
一.程序的基本狀態 1.初始態 2.就緒態 3.執行態 4.等待態 5.終止 相互轉換關係如下 二.執行緒和程序區別 程序 是作業系統分配資源的最小單位 執行緒 是排程的基本單元,共享所在程序的檔案資料 有自己的棧和程式計數器 一般對於許多相同或相似的任務,傾向於將他們設計為多執行緒模型。因為程序占...
作業系統 基本概念
本文為自己學習 unix環境高階程式設計 而來的學習記錄 我的學習方 是將此書作為工具書來使用,當實際工作中遇到相關的問題針對性地學習知識圓點。基礎概念從嚴格意義上說,可講作業系統定義為一種軟體,它控制計算機硬體資源,提供程式執行環境。系統呼叫 共用函式庫 shell 應用程式 unix系統登陸 a...
作業系統基本概念
1 桌面作業系統 macos linux 2 伺服器作業系統 windows server 3 嵌入式作業系統 linux 4 移動裝置作業系統 iosandroid 基於linux 1965 年之前的時候,電腦並不像現在一樣普遍,它可不是一般人能碰的起的,除非是軍事或者學院的研究機構,而且當時大型...