對于一個嵌入式多任務、多線程操作系統(tǒng),所啟動的應用進程至少擁有一個線程或多個線程,線程在進程中執(zhí)行代碼。一個進程能夠“同時”運行多個線程,“同時”加上引號,因為實際上,在單處理CPU平臺上,任何時刻,只有一個線程在執(zhí)行。操作系統(tǒng)通過任務調度算法快速切換線程來模擬多線程并行,交替地停止一個線程,然后切換到另外一個上運行。支持任務優(yōu)先級,高優(yōu)先級線程比低優(yōu)先級線程更先執(zhí)行,也就是說低優(yōu)先線程必須等到高優(yōu)先級線程被阻塞掛起后才可能被調度。對于優(yōu)先級別相等的線程使用輪換算法來調度。
無論是WinCE還是Linux操作系統(tǒng),應用線程的運行總是涉及到兩個基本的參數:一個是系統(tǒng)分配給線程的時間片,一個是系統(tǒng)調度的時間間隔。Linux和WinCE下這兩個參數有所不同,如下表所示:
|
WinCE |
嵌入式Linux |
|
| 線程的運行時間片 |
100ms |
10ms |
| 系統(tǒng)調度間隔 |
1ms |
10ms |
這里需要注意的是,線程不一定需要將時間片完全用完,事實上,在嵌入式系統(tǒng)中,線程的運行處理時間通常都遠小于所分的時間片,這時線程應當調用相關系統(tǒng)函數將自己掛起,系統(tǒng)將立即進行線程重調度。這時的重調度實際是加快了各個線程的輪片,提高了多線程并行運行的程度,客觀上保證了嵌入式設備的實時響應能力。
如果線程運行處理的時間超過了系統(tǒng)分配的時間片,在到達時間片后系統(tǒng)將強制掛起該線程,進行任務調度,以保證其他線程的運行。所以在多任務的程序設計中,特別忌諱線程中出現(xiàn)長時間查詢代碼,如:
while( bFlag == FALSE )
{
// Polling Flag…
}
這種代碼總是占完了時間片,大大地浪費CPU資源,使得整個進程的線程調度變得很慢,比如對于WinCE來說,就會出現(xiàn)100ms才調度一次,如果有10個這樣的線程,意味著每個線程需要1s才能輪詢一次,在嵌入式應用中,就很容易出現(xiàn)數據丟失等錯誤,從而無法實現(xiàn)正常的功能。對于Linux也是存在同樣的問題。
在實際應用中,常用的掛起線程的方法是調用延時函數。對于WinCE,調用Sleep( ms )函數;對Linux,可以調用select( )函數來掛起當前線程。由于系統(tǒng)的調度間隔不一樣,對相同的掛起時間,系統(tǒng)會有不同的處理。比如,設置掛起時間為2ms,在WinCE中,將在掛起2ms之后的1ms后,被系統(tǒng)重新調度;在Linux中,由于調度間隔大于掛起的時間,所以系統(tǒng)將在線程掛起10ms之后才被重新調度,也就是說在Linux下,無論程序中設置的掛起時間2ms還是9ms,該線程實際被掛起的時間總是10ms。
-
嵌入式系統(tǒng)
+關注
關注
41文章
3747瀏覽量
133644 -
Linux
+關注
關注
88文章
11760瀏覽量
219047
發(fā)布評論請先 登錄
10倍精度突破!國內首個全棧信創(chuàng)時間同步“中國方案”發(fā)布
龍芯中科成功舉辦2025信息技術應用創(chuàng)新產教融合交流會
龍芯中科助力2025教育信息技術應用創(chuàng)新大賽成功舉辦
誠邁科技信創(chuàng)電腦助力2025第二屆教育信息技術應用創(chuàng)新大賽圓滿收官
寶馬南京信息技術有限公司開業(yè)
國家信息中心與摩爾線程達成戰(zhàn)略合作
軟通動力入選2025新一代信息技術應用優(yōu)秀案例
易華錄入選國家級信息技術應用創(chuàng)新典型解決方案
“信息技術應用產學協(xié)同人才培養(yǎng)行動計劃”正式發(fā)布,誠邁科技入選首批參與單位
佛瑞亞如何通過信息技術推動業(yè)務增長
飛騰主板為信創(chuàng)產業(yè)發(fā)展提高硬實力
DEKRA德凱成為沙特通信和信息技術設備技術法規(guī)認證機構
科普|信創(chuàng)是什么?一文讀懂“信息技術應用創(chuàng)新”戰(zhàn)略
2025第二屆教育信息技術應用創(chuàng)新大賽正式開賽
信創(chuàng)浪潮下,國產主板有什么新的發(fā)展機遇?
英創(chuàng)信息技術應用線程時間片分析比較介紹
評論