所有的unix核心都是可重入的,這意味著若干個程序可以同時在核心態下執行
提供可重入的一種方式是編寫函式,以編寫這些函式只能修改區域性變數,而不能修改全域性資料結構,這樣的函式叫可重入函式。
但是可重入核心不僅僅侷限於這樣的可重入函式。相反,可重入核心可以包含非重入函式,並且利用鎖機制保證一次只有乙個程序執行乙個非重入函式。
如果乙個硬體中斷發生,可重入核心掛起當前正在執行的程序,即使這個程序處於核心態。這種能力是非常重要的,
因為這能提高發出中斷的裝置控制器的吞吐量。一旦裝置已發出乙個中斷,它就一直等待直到cpu響應。如果核心快速響應,裝置控制器在cpu處理中斷時就能執行其他任務
核心控制路徑表示核心處理系統呼叫、異常、或中斷所執行的指令序列
在最簡單的情況下,cpu從第一條指令到最後一條指令順序的執行核心控制路徑。然而,當下述時間發生之一時,cpu交錯執行核心控制路徑:
1,執行在使用者態下的程序呼叫乙個系統呼叫,而相應的核心控制路徑證實這個請求無法立即得到滿足;然後,核心控制路徑呼叫排程程式選擇乙個新的程序投入執行。結果,程序切換發生。第乙個核心控制路徑還沒有完成,而cpu又重新開始執行其他核心控制路徑。在這種情況下,兩條控制路徑代表了兩個不同的程序在執行
2,當執行乙個核心控制路徑時,cpu檢測到乙個異常。第乙個控制路徑被掛起,而cpu開始執行合適的例程。當這個過程結束時,第乙個控制路徑可以恢復執行。在這種情況下,兩個控制路徑代表同乙個程序在執行
3,當cpu正在執行乙個啟用了中斷的核心控制路徑時,乙個硬體中斷發生,第乙個核心控制路徑還沒喲執行完,cpu開始執行另乙個核心控制路徑來處理這個中斷。當這個中斷處理程式終止時,第乙個核心控制路徑恢復。在這種情況下,兩個核心控制路徑執行在同乙個程序的可執行上下文,所花費的系統cpu時間都算給這個程序。然而,中斷處理程式無需代表這個程序執行
4,在支援搶占式排程的核心中,cpu正在執行,而乙個更高階的程序加入就緒佇列,則 中斷發生。在這種情況下,第乙個核心控制路徑還沒有執行完,cpu代表高優先順序程序又開始執行另乙個核心控制路徑。只有把核心編譯成支援搶占式排程之後,才可能出現這種情況
可重入函式 可重入核心
可重入函式這一概念早有接觸,但一直未有系統的理解,最近閱讀 apue 訊號一章時,其中講解很到位,故總結如下。訊號作為一種軟中斷,能夠被程序給捕獲,因而也就中斷程序的正常執行,轉而去執行訊號處理程式,最後再返回到原程序繼續正常執行。然而,當程序正在執行 malloc 動態記憶體分配時,訊號產生從而轉...
可重入核心 可重入函式
可重入核心在ulk 深入理解linux核心 中的定義是指若干個程序可以同時在核心態下執行,也就是說多個程序可以在核心態下併發執行核心 在單處理器上,只能實現 微觀上的序列,巨集觀上的並行,即任意時刻,只有乙個進 正執行,其他程序處於阻塞或者等待狀態。這裡的可重入,是指可以多個程序進入核心,並不是重複...
Linux 可重入核心
linux核心是可重入的,這意味著幾個程序可能同時在核心模式下執行。當然單處理器系統,在某一時間只會有乙個程序執行,但許多會阻塞在核心模式 這些程序會分時共享cpu i o裝置等系統資源,給使用者的感覺就像是在同時執行。提供可重入 的方法 編寫的函式都只會影響到區域性變數,而不能改變全域性的資料結構...