embeddedなブログ

組み込みシステムに関することや趣味に関することをダラダラと書いていきます(^^)

Windows CE 6.0のタスク切り替え(コンテキスト スイッチ)

2012-04-04 16:30:59 | Windows Embedded CompactまたはCE

Windows CE 6.0のタスク切り替え(コンテキスト スイッチ)は、どのように実装されているのでしょうか?

PRIVATEコードで探してみたところ、以下のソースにその実装がありました。

PRIVATE\WINCEOS\COREOS\NK\KERNEL\kcalls.c

具体的には、KCNextThread という関数です。この関数に実装されているタスク切り替えの流れをざっくりと説明します。

(1)実行中のスレッド(RunList.pth)が、Quantum時間を使い切ってきるかをチェック

(2)使い切っていたら、次に実行待ちのスレッド(RunList.pRunnable)があるかをチェック

(3)実行待ちスレッドがあれば、待ちリストの順序を入れ替え、その後、実行中スレッドを RUNSTATE_RUNNABLE という状態に変更します。

(4)実行待ちスレッドの状態を RUNSTATE_RUNNABLE に変更して、実行します。

以上です。 詳しくはソースを見ていただければ分かると思います。


最新の画像もっと見る