linux
核心程序排程
linux 核心筆記 – 程序排程
linux 核心筆記 – 程序排程
4 程序排程示意圖
linux的程序排程如圖1所示。
5 smp系統的排程
smp系統中的排程演算法的不同主要表現在排程演算法的最後,對於被切換出當前cpu執行權的程序呼叫了schedule_tail函式,目的是看能夠將它轉移到另乙個cpu中執行。
6 問題與答案
q.在當前系統下,排程時間片的長度是多少?
a. 與2.2.x版的核心相比,kernel2.4.x的時間片長度縮短了,對於最高優先順序的程序來說,時間片的長度為100ms,預設優先順序程序的時間片長度為60ms,而最低優先順序程序的時間片長度為10ms。
q. linux如何保證對i/o事件相對比較快的響應速度,這個響應速度是否與排程時間片的長短有關?
a.當i/o事件發生的是時候,對應的中斷處理程式被啟用,當它發現有程序在等待這個i/o事件的時候,它會啟用等待程序,並且設定當前正在執行程序的need_resched標誌,這樣在中斷處理程式返回的時候,排程程式被啟用,原來在等待i/o事件的程序(很可能)獲得執行權,從而保證了對i/o事件的相對快速響應(毫秒級)。
從上面的說明可以看出,在i/o事件發生的時候,i/o事件的處理程序會搶占當前程序,系統的響應速度與排程時間片的長度無關。
q.高優先順序(nice)程序和低優先順序程序在執行上有何區別?例如乙個優先順序為-19(最高優先順序)的程序和優先順序為20(最低)的程序有何區別
a. 程序獲得的cpu時間的絕對數目取決於它的初始counter值,初始的counter的計算公式(sched.c in kernel 2.4.14)如下:
p->counter = (p->counter >> 1) + ((20 - p->nice) >> 2) +1)
由公式可以計算出,對於標準程序(p->nice 為0), 得到的初始counter為6,即程序獲得的時間片為60ms。
最高優先順序程序(nice為-19)的初始counter值為10,程序的時間片為100ms。
最低優先順序程序(nice為20)的初始counter值為1,程序時間片為10ms。
結論是最高優先順序程序會獲得最低優先順序程序10倍的執行時間,普通優先順序程序接近兩倍的執行時間。當然,這是在程序不進行任何io操作的時候的資料,在有io操作的時候,程序會經常被迫睡眠來等待io操作的完成,真正所占用的cpu時間是很難比較的。
我們可以看到每次重新計算counter的時候,新的counter值都要加上它本身剩餘值的一半,這種獎勵只適用於通過sched_yield主動放棄cpu的程序,只有它在重新計算的時候counter值沒有用完,所以在計算後counter值會增大,但永遠不可能超過20。
q.程序是否可能在執行系統呼叫的過程中被搶占?
a.程序在執行系統呼叫的過程中不會被搶占。讓我們設想程序a正在執行的過程中發生中斷,而中斷處理程式判斷出系統需要被重新排程,它會設定程序a的need_resched標誌(need_resched標誌的作用參見前面說明),在中斷處理程式結束之後(ret_from_intr),系統會檢查被中斷處理程式中斷執行的程序的優先順序,如果此時程序a處在使用者態,系統會直接啟用排程程式完成程序切換;而如果此時程序a處在核心態,系統會不作排程而恢復程序a的執行,只有程序a完成系統呼叫之後(ret_from_sys_call),它的need_resched標誌才會被檢查,從而完成程序切換。
程序在核心態不會被搶占的特點減少了單cpu系統中核心設計的複雜性,因為不需要考慮不同程序對核心**和資料結構的競爭。
7 參考文獻
1. linux核心源**版本2.4.14
在任何時候真實的**總是提供給我們最準確和詳細的資料。感謝linus torvalds,alan cox和其它linux開發者的辛勤勞動。
2.daniel p.bovet & marco cesati
<> isbn: 0-596-00002-2 o』reilly 2001
中譯版 《深入理解linux核心》 陳莉君等譯 isbn: 7-5083-0719-4 中國電力出版社 2001。
本書是專門介紹linux核心結構的書中最詳盡的一本,對**分析講解的也比較深入,基於2.2的核心版本
3.w.richard stevens
《unix環境高階程式設計》 尤晉元譯 isbn: 7-111-07579-x 機械工業出版社 2000
unix程式設計聖經,程式設計師手頭必備的書籍之一,對所有unix開發人員,無論水平高低,都有參考價值。翻譯的水準也難得一見的高明。
Linux核心學習筆記三 程序排程
程序排程 在可執行態程序之間分配有限處理器時間資源的核心子系統。1 程序型別 i o消耗型程序 大部分時間用來提交i o請求或是等待i o請求,經常處於可執行狀態,但執行時間短,等待請求過程時處於阻塞狀態。如互動式程式。處理器消耗型程序 時間大都用在執行 上,除非被搶占否則一直不停的執行。綜合型 既...
Linux核心學習筆記三 程序排程
程序排程 在可執行態程序之間分配有限處理器時間資源的核心子系統。1程序型別 i o消耗型程序 大部分時間用來提交i o請求或是等待i o請求,經常處於可執行狀態,但執行時間短,等待請求過程時處於阻塞狀態。如互動式程式。處理器消耗型程序 時間大都用在執行 上,除非被搶占否則一直不停的執行。綜合型 既是...
Linux核心學習筆記 12 程序排程
所謂排程 就是從就緒佇列中選擇乙個程序,投入cpu執行。排程的主戰場 就緒序列 核心 排程演算法 實質性的動作 程序的切換 對於以時間片排程為主的排程,時鐘中斷就是驅動力,確保每個程序在cpu上執行一定的時間。在排程的過程中,使用者還可以通過系統呼叫nice來調整優先順序,比如降低自己的優先順序等。...