タスクの独立性とAPI ― 2009年12月11日 23時25分15秒
μITRONを使った開発のメリットとして解説書に書いてあることの一つに、タスク単位で独立しているのでデバッグが独立して出来て、人員を有効に活用できる、というようなことが書かれています。
確かに、適切に設計されたタスクであればその通りなのですが、適切に設計する人間がいないという現実があります。 手前味噌ですが、私などのようにμITRONのカーネルの設計や実装をした経験のある人間以外ではもしかしたら出来ないことなのかもしれないと思い始めています。
どんなに、解説書や講習会で学んでもちゃんとした指導者がそばにいないととんでもない設計をしてしまうようです。 一番最悪なのが一つの割込み処理に対して一つのタスクを割り当てるなどの単なるサンプル例が「正しい」と思い込んでしまうことです。
一つのタスクで複数の割込み処理のイベントを受け取って総合的に処理することもできるという発想すら出来なくなってしまいます。
例えば、複数の経路を複数のDMACを使ってデータ転送するような場合に、DMACの割込み要因に対応した割込み処理毎に対応するタスクを分割するなどというのは全くのナンセンスです。
DMACなどの制御する部分はタスクにする必要すらありません。単純に設定をする関数を作ればいいだけです。
APIを提供する場合も同期APIと非同期API+コールバック関数の実装を行うようにすることが出来ますが、内部で閉じた割込み処理連携は外部に出す必要はありません。 タスクに対するI/Fだけを定義してその定義に基づいてのみ、動作するように実装すべきです。複数のタスクを渡ってメッセージのやり取りしてたった一つのデータストリームの管理をするような実装は間違っています。
APIやタスク同期サービスコールを使ったインターフェースでの単一の要求で処理が完結しない実装は設計が間違っています。
コメント
トラックバック
このエントリのトラックバックURL: http://kumikomi.asablo.jp/blog/2009/12/11/4760238/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。
※投稿には管理者が設定した質問に答える必要があります。