天天看點

嵌入式linux 線程内usleep與cpu排程時間片大小分析

1.在嵌入式linux平台下調用sleep或者usleep函數的CPU線程排程情況?

2.開發闆上使用的時at91sam9261 ARM9 CPU晶片,主頻240M,作業系統是linux2.6.28.10版本,那麼在該作業系統下的線程排程的切換CPU時間片是多長,網上有地方說是linux2.6是線程切換CPU時間片預設是10ms,不知是否準确,不提升線程優先級的情況下能否将線程切換時間片改變(如改為1ms)?

3.at91sam9261 ARM9 CPU晶片,主頻240M,作業系統是linux2.6.28.10版本,大概每秒中能處理多少條基本指令,是怎麼算的?

例如:假如目前linux系統的線程切換CPU時間片是10ms,程式中我在某個線程中調用usleep(20000);

      情況a:如果目前系統線程不多的情況下(即cpu20ms内有足夠的空餘時間把其它的線程(這裡都是指同優先級别的線程)都輪轉一遍的情況)毫無疑問這個線程應該基本能夠準确的usleep 20ms左右,誤差範圍應該是一個線程切換CPU時間片10ms吧。如果不是這樣請确認說明一下?

      情況b:如果目前系統線程很多的情況下(即cpu20ms内不足以把其它的線程(這裡都是指同優先級别的線程)都輪轉一遍的情況),系統還會在20ms左右重新将該線程再度排程起來嗎?如果基本即時地在20ms左右将該線程再度排程起來了,那對其它同優先級别的還沒有輪轉到時間片的線程豈不是十分不公平,請問此種情況linux是怎麼來排程的,調用usleep(20000);後該線程還能在20ms左右後基本即時的被喚醒嗎?

      情況c:目前linux系統的線程切換CPU時間片仍然是10ms,如果我程式中的這個線程調用的usleep時間不是20ms,而是1ms,

即usleep(1000);系統是否仍然是最少睡眠10ms,也就是usleep(1000);的效果與usleep(10000);效果是一樣的

嗯,問題比較多,大家能說幾點說幾點吧,人多不能追加分數的話,就另外開貼再散吧。

|

主頻也就是最大時鐘頻率,240M執行的指令不見得有240M那麼多,因為有的指令周期不是單個時鐘周期就可以完成的,是多時鐘周期的。

情況C了解應該是對的。

|

程序不一定是完全用完一個時間片才排程的,也有可能是程序因為等待某個資源或條件主動放棄cpu

是以,usleep(1000);的效果與usleep(10000);不一定相同,但是肯定不是sleep 1ms了

|

呵呵,10ms

|

核心預設設定為 HZ = 100,貌似就是 100ms

問題太多,看的頭大

繼續閱讀