Windows CE (.NET) とか IoTとか

組込みWindows と IoTの話を扱います

"Embedded" and "Linux"

またまた、Mike Hall's Blog ネタ です。

ESDEVCON - Day 2 - Linux Real Time.

http://weblogs.asp.net/mikehall/archive/2004/08/18/216601.aspx

によると、MikeはEmbedded Software Developers Conference in San JoseでRealtime Linuxのセッションにもぐりこんだそうです。

Embedded Linux: Semantics and Realityの著者であるKarim Yaghmourは、Linuxは本来Desktop/Server向けOSであり、Embedded / RealTime向けに設計されたものではない、と言っています。彼の訴求点は、そのようなEmbedded / Realtime分野で使用されているLinuxシステムの現状がどのようなものであり、真にRealtimeといえるLinuxシステムを構築するための方法を述べています。

Drivers can disable interrupts, therefore you've instantly taken a hit to determinism on the O/S, there's no way to determine how long the interrupts will be disabled. Tasks can run as RT or RR (real-time, or round robin), an RT task can 'hog' the scheduler, if this happens then all other tasks are starved of cpu time, again non-deterministic.

ここで述べられていることはまさしくWindows CE 3.0以前のCE実装の問題点であり、3.0以降で改善されたとされる部分に合致します。

Windows CEの場合、割り込み処理はカーネルプロセス内の特殊な割り込み処理ルーチンであるISRと、その後実際にデータ転送を行うISTの2つの部分に分かれます。ISTはCEの通常スレッドであるため、割り込みは禁止されず、スレッドスケジューリングはスレッド優先度の設定だけで決定されます。それに対してWindows CE 2.xまでのISRはネスト割り込み不可であったため、上記のように"there's no way to determine how long the interrupts will be disabled"の状況に陥っていました。

CE 3.0以降ではすべてのISRはネスト割り込み可能になり、ハードウエアに優先割り込みの機能がある場合には、より優先度の高い割り込みはすぐに受け付けられます。その結果、少なくともハードウエア的に最も優先度の高い割り込みの応答時間はほかの要因に引きずられること無く、割り込み応答時間は予測可能(deterministic)になります。

実際にWindows CE.NETでは割り込み応答時間はmsecオーダーということは無く、数十マイクロSecから数百マイクロSecの範囲に収まります。