(toppers-users 549) Re: 基本的な事ですが?←有り難うございます。

y-ton @ mx7.ttcn.ne.jp y-ton @ mx7.ttcn.ne.jp
2002年 9月 12日 (木) 14:13:22 JST


こんにちは、ユートンです。

松川さん、宿口さん
本当に初歩的な質問に丁寧に回答を頂き有り難うございます。

私の認識が間違っていることがわかりましたので今後は十分に
注意したいと思います。

思いこみの怖さを実感いたしました。

プリエンプトが発生する事を理解しないでフラグ等でタスク間
の排他や同期をとると凄く危険なので・・・わかって良かった
です。(基本的にはしちゃいけいと思っていますが・・・)

ITRONでdispatchが発生するサービス一覧みたいな資料ってどこ
かにころがってませんでしょうか?
今回の件でチョット整理しておきたいのですが・・・?

Tatsuhiko Matsukawa さんは書きました:
>ユートンさん、今日は。
>ITRON駆け出しの松川といいます。
>
>自分の勉強の意味も含めて、回答させていただきます。
>(何か不備な点がありましたら、ベテランの皆様、
>フォローをお願いいたします。)
>
>結論から言うと、snd_msg()とsnd_mbx()は同じです。
>待ち状態(WAITING)になることはありませんが、プリエンプト
>されて実行可能状態(READY)になることは、どちらもあります。

** Cut quoted 12 lines by the mail filter. **

自分自身が現状のレディーキューでは最高優先度に位置してい
るって事。

>[Case2] このメールボックスへのrcv_mbxで待ち状態の
>タスク(TASK-B)がTASK-Aより優先度が低い場合、
>TASK-Bは待ち解除され実行可能状態(READY)になり
>ますが、TASK-Aのほうが優先度が高いため、引き続き、
>TASK-Aは実行状態(RUNNING)のままです。

待ち解除によってレディーキューへ登録されるって事ですね。
優先度が現在実行中タスクより低いために実行状態にはなら
ずに発行したタスクが実行可能状態のままって事。

>[Case3] このメールボックスへのrcv_mbxで待ち状態の
>タスク(TASK-B)がTASK-Aより優先度が高い場合、
>まず、TASK-Bは待ち解除され実行可能状態(READY)
>になります。TASK-Aの優先度はTASK-Bより低いため、
>TASK-Aはプリエンプトされて実行可能状態(READY)、
>TASK-Bはディスパッチされて実行状態(RUNNING)にな
>ります。

優先度高いタスクが実行可能であるためにプリエンプト発生っ
て事ですね。
ただし、実行状態で無くなっても待ちには移行しないでそのま
まレディーキューに残っているので優先度の高いタスクが無く
なれば実行状態に戻り再度続きが実行されるって事ですね。

>> 3.0 snd_msg
>>  3.0のサービスコール詳細において、snd_msg発行で待ち状態へ移行しない
>> と記述されています。(プリエンプトもしないと思っていたのですが?)
>snd_msgでも、Case3の場合、プリエンプトされます。

SHUKUGUCHI Masahiro さんは書きました:
>宿口と申します。
>
>基本的に松川さんのご解説で間違いありませんが、追記します。
>
>1.スケジューリングポリシーについて
>ITRONのスケジューリングポリシーは「優先度ベースのプリエンプティブな
>スケジューリング」です。具体的には、その時点で最も優先度の高いREADY
>状態のタスクがRUNNING状態になるのが原則です。
>
>待ちが解除される事象が発生すると、上記ポリシーに従ったスケジューリ

** Cut quoted 18 lines by the mail filter. **

レディーキューの状態を変えることは無いって事で、ラウンド
ロビンにはならない事は理解できてます。有り難うございます。

タスクのプライオリティ設定は重要でシステム全体で考えるっ
て事が良くわかりました。

今後もとんちんかんな質問をするかも知れませんがよろしくお
願い致します。

☆・゜・。・゜☆・゜・。・゜☆
ユートン  y-ton @ mx7.ttcn.ne.jp
☆・゜・。・゜☆・゜・。・゜☆