最古老的作業系統是單程序的。後來出現了多工作業系統,因為多程序在核心態中資源都是共享的,所以容易造成破壞,早期的程序排程器在核心態是不能被搶占的,在進入核心態的時候程序排程器停止排程,這樣降低了核心的複雜程度。穩定性也相對較高,伺服器中常用。更先進的核心,能夠在核心態搶占,這就需要鎖來保證核心執行緒間的同步
以下用兩段**說明
第一種 非競態核心
static int test_init(void)
module_init(test_init);
提示符下輸入:
$insmod test.ko &
test_init
當模組載入時進入死迴圈,進入核心態時程序排程器停止工作,其他程序不會被呼叫到,所以機器就徹底死掉了
static int test_init(void)
module_init(test_init);
提示符下輸入:
$insmod test.ko &
test_init
當模組載入時進入死迴圈,但是程序排程器仍然在工作,所以後台程序依然可以繼續工作
說明:preempt_enable 允許搶占。
preempt_disable禁止搶占。
請參閱《深入理解linux核心》第5章
具體配置核心搶占方式
核心特性->
搶占模式->
三種搶占模式,核心態禁止搶占,自搶占核心,允許搶占核心
併發與競態
linux是乙個多工的作業系統,在多個程序同時執行時,就有可能為了競爭同乙個資源發生堵塞。以下是解決的幾種方法 1 訊號量 declare mutex sem if down interruptible sem critical section up sem 2 完成量 declare comple...
12 競態條件 時序競態
sleep函式幾點說明 1 sleep函式作用,讓程序睡眠。2 能被訊號打斷,然後處理訊號函式以後,就不再睡眠了。直接向下執行 3 sleep函式的返回值,是剩餘的秒數 sleep是可被中斷的睡眠,但不一定睡夠100s sleep是可中斷的睡眠 void handler int num if 1 v...
核心搶占與preempt count
1 相關資料結構 struct thread info how to get the thread information struct from c static inline struct thread info current thread info void define preempt c...