天天看點

MF研究:TinyCLR運作時原理

.Net Micro Framework系統架構如下圖所示,其中移植工作主要在平台抽象層(PAL)和硬體抽象層(HAL),大部分常用的PAL層的程式已經寫好,基本上不需要什麼修改,隻有HAL會根據特定的硬體進行微調。不過如果添加新的裝置驅動,則HAL和PAL層都需要定義和重寫,假設CLR層不支援類似的裝置接口,就隻有通過Interop接口來通路了。後續的文章我會介紹一個最簡單的序列槽驅動來說明MF的驅動是如何設計的,這篇文章我就先介紹一下MF中的CLR運作時原理。

MF系統目前最為人诟病的就是,它不是一個實時系統。WINCE至少還算一個軟實時系統,可MF不是,雖然V3.0版本引入了Interop接口,就是為了緩解人們對嵌入式實時性的應用需要。但這不可能從根本上去解決這個沖突。據說明年推出的MF V4.0将是一個實時系統,這确實令人非常期待,不過時間緊迫,我真為美國微軟MF開發團隊捏把汗。

TinyCLR僅一個執行緒,接管所有的記憶體配置設定。采用輪詢算法,根據線程的優先級,配置設定最小為20ms的時間片。

運作原理圖如下:

TinyCLR中的線程分5種優先級:

0 = Lowest   最低的

1=BelowNormal 比正常偏低

2=Normal 正常

3=AboveNormal 比整個偏高

4=Highest  最高的

以兩倍的CPU時間機關作為這種優先級的量度等級。越進階的線程,獲得時間片就越多。

由以上可以看出,20ms的時間片,再加上CLR的垃圾回收機制,确實談不上實時系統。不過,如果我們想在V3.0版本上開發一個對時間要求比較迫切的應用該怎麼辦?也許Interop是目前唯一的辦法,後續的文章我就介紹這方面的内容。

繼續閱讀