(toppers-users 3828) Re: 2つの優先度の有効な利用方法は?(長文 改造案)

Miyagawa miyagawa @ trail4you.com
2012年 1月 23日 (月) 23:56:07 JST


どうも間違いが多いなぁ

>   (H_max*60 + M_max)*10 < 10分

  (H_max*60 + M_max)*10 + L_max < 10分

-----
アドレス変えました。



(2012/01/23 19:16), Miyagawa wrote:
> 昔を思い出したのでちょっとだけ昔話を書きます。
> 
> 今やメモリーは数GBという世界に住んでいるので
> オブジェクトにたっぷりとメモリーを割り当てて
> 疎結合なシステム設計をするのが当たり前な状況ですが
> 30年前は 8bit CPUをアセンブラでプログラムしてました。
> 
> その頃はメモリーの制約が大きく、タスクモニターの
> 課題のひとつがスタック領域でした。
> 
> 各タスク毎にスタックを割り付ければ、待ちを行う
> システムコールは比較的簡単に作れます。しかし、
> そうするとタスク数分のスタックが必要となる。
> 
> そこで、待ちは必ずスタックがボトムに戻った時しか
> 出来ないようにすれば、スタックを共有していても
> 待つ事が出来る。しかし、これをやるのは実際は
> 面倒です。昔はアセンブラでやっていましたけれどね。
> 
> まあ、タスクは待つ事が出来ないとして、一旦走りきって
> 終了する物とするのが簡単確実な手でした。
> 
> ちょっと大きな処理は、再度走り始める時にステータスを
> 見て今は何をしないといけないかを毎回判定して実行する
> 様な作りに成ります。
> 
> 優先度設計は例えば下記のように時間制限で決めます。
> 
> 優先度 H : 1秒以内に走らなければ成らないタスク
> 優先度 M : 1分以内に走らなければ成らないタスク
> 優先度 L : 10分以内に走らなければ成らないタスク
> 
> それぞれの優先度のタスクの実行時間の和をH_max,
> M_max, L_maxとすると下記の条件が成り立つように
> システム設計します。
> 
> 話を簡単にするため割り込み処理時間は無視します。
> H_maxに含まれると考えてください。
> 
>   H_max < 1秒
>   H_max*60 + M_max < 1分
>   (H_max*60 + M_max)*10 < 10分
> 
> 極々当たり前の話ですね。
> 
> ここで、優先度Lのタスクが走りきれないというのは
> 設計上許さないと言う事に成ります。
> 
> 例外的にLのタスクが1本だけで、状況に応じて品質を
> 調整するような作りは有りです。
> 忙しすぎれば間引いてしまうような事です。
> 
> また、1秒のタスクが1秒以内に全目的を完了する必要は無く
> 完了まで定期的に呼ばれて順次実行する作りも有りです。
> 時間制限を満たす所で一旦終わるわけです。
> 
> 昔の記憶だと、優先度の高いのが制御や計測部分、
> 中くらいがその加工や記録部分、低いのが印刷等の
> レポート機能部分と言う様な感じが多かったかな?
> 
> 例えば3本のレポート印刷するタスクがあれば
> そいつらは全部まとめて10分以内に印刷できれば良い
> という感じです。
> 
> 根本的にオーバーロードな設計を禁止すれば
> それなりに動きます。
> 
> SSPだとHグループ(実行時1、起動時2-4)、Mグループ
> (実行時5、起動時6-8)、Lグループ(実行時9、起動時10-16)
> 見たいな感じかなぁ。
> 
> まあ、レベル数は3段階でなくても良いし。
> 
> スタックの共有が出来れば各グループの最大値の和程度に
> 割込み分を加えた値位に抑えられますよね。
> 
> タスク毎に持たなくて良いと言うのは大きいですし、
> 通常は余裕度の部分が優先度グループ分足されて多少楽になる
> はずですよね。
> 
> 昔の作り方からすればSSPもシステム設計しだいで
> 役に立つのではないかなぁ?
> 
> でもまぁ
> 
> 待ちが出来ないと手続き通りの素直なプログラミングが出来ない
> と言うのは間違いないので開発効率は下がりますよね。
> 
> ------
> このメールはsanritz.co.jpから出しますが、実は1/20で
> 辞めちゃいましたので、アドレス登録しなおします。
> 今回だけ御免なさい。
> 
> 
> 
>