搶占時伴隨著schedule()的執行。核心提供了乙個tif_need_resched標誌來表明是否要用schedule()排程一次。
根據搶占發生的時機分為使用者搶占和核心搶占。使用者搶占發生在核心即將返回到使用者空間的時候。核心搶占發生在返回核心空間的時候。
1、使用者搶占:核心在即將返回使用者空間時檢查程序是否設定了tif_need_resched標誌,如果設定了,就會發生使用者搶占。使用者搶占發生的時機:從
系統 呼叫或中斷處理程式返回使用者空間的時候。
2、 核心搶占:在不支援核心搶占的核心中,核心程序如果自己不主動停止,就會一直的執行下去。無法響應實時程序。搶占核心雖然犧牲了上下文切換的開銷,但獲得 了更大的吞吐量和響應時間。2.6的核心新增了核心搶占,同時為了某些地方不被搶占,又新增了自旋鎖。在程序的thread_info結構中新增了 preempt_count該數值為0,當程序使用乙個自旋鎖時就加1,釋放乙個自旋鎖時就減1.為0時表示核心可以搶占。
核心發生搶占的 時機:1、從中斷處理程式返回核心空間時,核心會檢查preempt_count和tif_need_resched標誌,如果程序設定了 tif_need_resched標誌,並且preempt_count為0,發生核心搶占。2、當核心再次用於可搶占性的時候,當程序所有的自旋鎖都釋 放了,釋放程式會檢查tif_need_resched標誌,如果設定了就會呼叫schedule。3、顯示呼叫schedule時4、核心中的程序被堵 塞的時候。
Linux 核心搶占
核心搶占 kernel preemption 是一種有效的降低系統響應延時的方法。在核心裡,有三個相關的配置選項。顧名思義,不開啟核心搶占。這是很多伺服器的預設配置選項。在沒有開啟核心搶占的時候,程序的排程時機僅僅發生在非常有限的幾處 程序自己主動觸發排程,例如 通過sleep schedule y...
搶占程序排程的原則
1 時間片原則 各程序按系統分配給的乙個時間片執行,當該時間片用完或由於該程序等待某事件發生而被阻塞時,系統就停止該程序的執行而重新進行排程。2 優先順序原則 每個程序均賦於乙個排程優先順序,通常一些重要和緊急的程序賦於較高的優先順序。當乙個新的緊迫程序到達時,或者乙個優先順序高的程序從阻塞狀態變成...
Linux核心搶占 2
早期的linux核心是不可搶占的。它的排程方法是 乙個程序可以通過schedule 函式自願地啟動一次排程。非自願的強制性排程只能發生在每次從系統呼叫返回的前夕以及每次從中斷或異常處理返回到使用者空間的前夕。但是,如果在系統空間發生中斷或異常是不會引起排程的。這種方式使核心實現得以簡化。但常存在下面...