[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
(itron-club 1755) Re:
データキ
ューの受信タスクについて
- To: itron-club __at__ ertl.jp (itron-club ML)
- From: SHUKUGUCHI Masahiro <ms89019 __at__ mms.co.jp>
- Date: Fri, 8 Jul 2005 12:03:29 +0900
宿口です。
# 今井さんご自身の質問とは思えないんですが。。。(~_~;)
=====
とりあえず、仕様策定の経緯から。。。。
μITRON4.0仕様策定の目的の1つは、各ベンダーμITRON 間での互換性を高める
ことでした。μITRON3.0仕様までは、同じμITRONでベンダーが異なれば、その
互換性は保障されていません。(アプリケーションを別のプラットフォームで
使用することを考慮しないのであれば、問題ではありません。しかし、アプリケ
ーション(ミドルウェア)がいくつかのプラットフォームで動作することを
考慮すると避けられない問題です。)
メールボックス機能は、よく使われる機能の1つですが、その実装方法は大きく
わけて、リンクドリスト方式とデータキュー(リングバッファ)方式の2つがあ
りました。
リングバッファ方式では、そのデータ構造上の制約から、メッセージに優先度を
持たせることが困難であることが指摘されていました。(不可能ではありません
が、メッセージ(データ)の移動(コピー)が発生するので、処理時間がかかり
ます。)
また、リングバッファ方式は、蓄積できるメッセージ数も制約があります。
そのようなわけで、同じメールボックス機能でも実装者が異なる場合は、その
振舞いが異なることが問題点として指摘されていました。
その解決策として、μITRON4.0仕様では、メールボックスの実装方法をリンクド
リスト方式に定める動きがありましたが、リングバッファ方式も捨てがたい(
リンクドリストに比して軽量に実装できる、など)との意見もあり、議論の結果、
実装方法が異なる2つのメールボックス機能を定義することになったと記憶して
います。
・リンクドリスト方式のメールボックス
・リングバッファ方式のデータキュー
データキューの方が「軽量」ということで、iつき(非タスクコンテキスト
から発行できる)サービスコールは、データキューのみ(isnd_dtq())に設定
されています。
ところで、データキューへの強制送信(fsnd_dtq()/ifsnd_dtq())は、データ
キューの空きが無い場合に、その先頭のデータを削除し、データキューの末尾
にデータを挿入するもので、データを優先的に送信できるわけではありません。
=====
ご指摘の、「実際の利用状況では優先度順が必要になる場面はない」かと
問われると、あまり良い答えではありませんが「実装方法の特徴を理解して、
システムの目的に適切なメールボックス機能を選択してください。」という
ことになると(個人的には)考えています。
宿口雅弘
> 宮城県産業技術総合センターの今井と申します。
> よろしくお願いします。
>
> μITRON4.0仕様について質問です。
>
> メールボックスの受信タスクの待ち行列の順番はFIFO順と
> 優先度順から選択できるのに、データキューではFIFO順しか
> ないのはなぜでしょうか?
> 対称性の観点からはオヤっと思うのですが、実際の利用状況では
> 優先度順が必要になる場面はないということでしょうか。