第六章學習筆記

2022-09-10 03:12:15 字數 1742 閱讀 8120

人員中斷

程序中斷

硬體中斷

程序的陷阱錯誤

按「ctrl+c」組合鍵通常會導致當前執行的程序終止。原因如下:ctrl+c組合鍵會生成乙個鍵盤硬體中斷。鍵盤中斷處理程式將ctrl+c組合鍵轉換為sigint(2)訊號,傳送給終端上的所有程序,並喚醒等待鍵盤輸入的程序。在核心模式下,每個程序都要檢查和處理未完成的訊號。程序對大多數訊號的預設操作是呼叫核心的kexit(exitvalue)函式來終止。在linux中,exitvalue的低位位元組是導致程序終止的訊號編號。

使用者可使用nohup a.out &命令在後台執行乙個程式。即使在使用者退出後,程序仍將繼續執行。

使用者再次登入時也許會發現(通過ps-u ltd)後台程序仍在執行。使用者可以使用sh命令kill pid (or kill -s 9 pid)殺死該程序。之所以是9個訊號是因為在最初的unix中,只有9個訊號。9號訊號被保留為終止程序的終極手段。雖然後來的unix/linux系統將訊號編號擴充套件到了31,但是訊號編號9的含義仍然保留了下來。

當某程序處於核心模式時,會檢查訊號並處理未完成的訊號。如果某訊號有使用者安裝的捕捉函式,該程序會先清除訊號,獲取捕捉函式位址,對於大多數陷阱訊號,則將已安裝的捕捉函式重置為default。然後,它會在使用者模式下返回,以執行捕捉函式,以這種方式篡改返回路徑。當捕捉函式結束時,它會返回到最初的中斷點,即它最後進入核心模式的地方。因此,該程序會先遷回執行捕捉函式,然後再恢復正常執行。

重置使用者安裝的訊號捕捉函式:使用者安裝的陷阱相關訊號捕捉函式用於處理使用者**中的陷阱錯誤。由於捕捉函式也在使用者模式下執行,因此可能會再次出現同樣的錯誤。如果是這樣,該程序最終會陷入無限迴圈,一直在使用者模式和核心模式之間跳躍。為了防止這種情況,unix核心通常會在允許程序執行捕捉函式之前先將處理函式重置為 default。這意味著使用者安裝的捕捉函式只對首次出現的訊號有效。若要捕捉再次出現的同一訊號,則必須重新安裝捕捉函式。但是,使用者安裝的訊號捕捉函式的處理方法並不都一樣,在不同unix版本中會有所不同。例如,在 bsd unix中,訊號處理函式不會被重置,但是該訊號在執行訊號捕捉函式時會被阻塞。

訊號和喚醒:在unix/lintx核心中有兩種sleep程序;深度休眠程序和淺度休眠程序。前一種程序不可中斷,而後一種程序可由訊號中斷。如果某程序處於不可中斷的sleep狀態,到達的訊號(必須來自硬體中斷或其他程序)不會喚醒程序。如果它處於可中斷的sleep狀態,到達的訊號將會喚醒它。例如,當某程序等待終端輸入時,它會以低優先順序休眠,這種休眠是可中斷的,sigint這類訊號即可喚醒它。

unix訊號最初設計用於以下用途。

itimer_real: 實時減少,在到期時生成乙個sigalrm(14)訊號。

itimer_virtual: 僅當程序在使用者模式下執行時減少,在到期時生成乙個si**talrm(26)訊號。

itimer_prof: 當程序正在使用者模式和系統模式下執行時減少。在到期時生成乙個sigprof(27)訊號。

第六章 學習筆記

1.引數分為位置引數和關鍵字引數。def func positional para x,y,z passdef func keyword para kwd1 1,kwd2 4,kwd3 9 pass2.1 當有多個位置引數時,可以用乙個星號來收集引數,函式內使用這些位置引數時可以通過for 迴圈依次...

第六章筆記

頂層const與底層const的區別 頂層const是指標物件本身是乙個常量,而底層const是指標所指的物件是乙個常量,理解起來就相當於前者是直接,後者是間接。宣告函式可以多次,但是每個形參只能用實參預設初始化一次,即後續宣告只可以為未預設初始化的形參新增預設實參,而且其形參右側的所有形參必須都有...

20191302第六章學習筆記

按照緊急程度,中斷可分為以下幾類 程序中斷 硬體中斷 毎個中斷都有唯一的中斷向量號。動作函式是中斷向量表中的中斷處理程式。程序的陷阱錯誤 define sighup define sigint define sigquit define sigill define sigtrap define si...