核心概述linux核心提供了應用程式可以執行的執行環境。因此,核心必須提供一組服務及相應的介面。核心可以說是有乙個個驅動模組和一些公用模組組成的。核心響應使用者空間的請求,驅動硬體
提供相應的服務。更進一步可以說核心是由一系列函式和一些全域性資料結構組成。系統的執行系統的執行是以乙個個程序的方式進行的。核心本身並不是程序,而是程序的管理者。當程序
需要用到核心提供的服務是,它通過呼叫系統呼叫轉到核心執行。linux核心包括幾個所謂的內
核執行緒。在單處理器系統中任何時候只有乙個程序執行。如果程序執行在核心態,處理器就執
一些核心例程。
linux核心的各個部分並不是嚴格按照順序依次執行的,而是採用交錯執行的方式。啟用核心例程的方式1 程序呼叫系統呼叫
2 排程程式排程
3 中斷產生可重入核心linux核心是可重入的。提供可重入的一種方式是編寫函式,以便這些函式只能修改區域性變數,而
不能改變全域性資料結構,這樣的函式叫可重入函式-- 可以重複進入的函式,一般而言是不含static
資料結構,不訪問全域性變數,如果訪問全域性變數要用鎖/訊號量等加於保護。可搶占核心可搶占核心要保護臨界區。臨界區保護的方式1 禁止中斷: 在進入臨界區之前禁止所有中斷,離開時再重新啟用所有中斷。這種技術不適用於大粒度
保護。也不適用於多處理器的保護。
2 訊號量:對於小粒度的保護,訊號量可能是低效的。
3 自旋鎖:在單處理器環境下 -- 表示不可搶占但可被中斷。在多處理器環境下,忙等待。
spin_lock()宣告禁止核心搶占。
用spin_lock的上下文不能睡眠,因為睡眠表示讓出cpu,這與用spin_lock的目的矛盾。
根據spin_lock的語意考慮為什麼不用乙個全域性的spin_lock: 假設a 呼叫lock後被中斷了,
進入b,這時候b申請鎖,但鎖被a占有,那麼就發生死鎖了。
核心物件 互斥體
使用核心物件互斥體可以實現跨程序的執行緒控制,原因就是因為互斥體是在核心裡面建立的,所有程序都可以訪問到 handle createmutex lpsecurity attributes lpmutexattributes,bool binitialowner,lpctstr lpname 使用cr...
Unix 核心概述
核心本身並不是乙個程序,而是程序的管理者。程序 核心模式假定 請求核心服務的程序使用所謂系統調 system call 的特殊程式設計機制。每個系統呼叫都設定了乙個組識別程序請求的引數,然後執行與硬體相關的cpu指令完成從使用者態到核心態的轉換。unix系統還包括幾個所謂核心執行緒 kernel t...
linux Unix核心概述
cpu既可以在執行在使用者態下,也可以執行在核心態下。實際上,一些cpu可以有兩種以上的執行狀態。例如,intel 80 86微處理器有四種不同的執行狀態。但是,所有標準的unix核心都僅僅利用了核心態和使用者態。當乙個程式在使用者態下執行時,它不能直接訪問核心資料結構或者核心的程式。然而,當應用程...