[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(itron-club 1755) Re: データキ ューの受信タスクについて



宿口です。

# 今井さんご自身の質問とは思えないんですが。。。(~_~;)

=====
とりあえず、仕様策定の経緯から。。。。

μITRON4.0仕様策定の目的の1つは、各ベンダーμITRON 間での互換性を高める
ことでした。μITRON3.0仕様までは、同じμITRONでベンダーが異なれば、その
互換性は保障されていません。(アプリケーションを別のプラットフォームで
使用することを考慮しないのであれば、問題ではありません。しかし、アプリケ
ーション(ミドルウェア)がいくつかのプラットフォームで動作することを
考慮すると避けられない問題です。)

メールボックス機能は、よく使われる機能の1つですが、その実装方法は大きく
わけて、リンクドリスト方式とデータキュー(リングバッファ)方式の2つがあ
りました。

リングバッファ方式では、そのデータ構造上の制約から、メッセージに優先度を
持たせることが困難であることが指摘されていました。(不可能ではありません
が、メッセージ(データ)の移動(コピー)が発生するので、処理時間がかかり
ます。)
また、リングバッファ方式は、蓄積できるメッセージ数も制約があります。

そのようなわけで、同じメールボックス機能でも実装者が異なる場合は、その
振舞いが異なることが問題点として指摘されていました。

その解決策として、μITRON4.0仕様では、メールボックスの実装方法をリンクド
リスト方式に定める動きがありましたが、リングバッファ方式も捨てがたい(
リンクドリストに比して軽量に実装できる、など)との意見もあり、議論の結果、
実装方法が異なる2つのメールボックス機能を定義することになったと記憶して
います。
 ・リンクドリスト方式のメールボックス
 ・リングバッファ方式のデータキュー

データキューの方が「軽量」ということで、iつき(非タスクコンテキスト
から発行できる)サービスコールは、データキューのみ(isnd_dtq())に設定
されています。

ところで、データキューへの強制送信(fsnd_dtq()/ifsnd_dtq())は、データ
キューの空きが無い場合に、その先頭のデータを削除し、データキューの末尾
にデータを挿入するもので、データを優先的に送信できるわけではありません。

=====

ご指摘の、「実際の利用状況では優先度順が必要になる場面はない」かと
問われると、あまり良い答えではありませんが「実装方法の特徴を理解して、
システムの目的に適切なメールボックス機能を選択してください。」という
ことになると(個人的には)考えています。

宿口雅弘

> 宮城県産業技術総合センターの今井と申します。
> よろしくお願いします。
> 
> μITRON4.0仕様について質問です。
> 
> メールボックスの受信タスクの待ち行列の順番はFIFO順と
> 優先度順から選択できるのに、データキューではFIFO順しか
> ないのはなぜでしょうか?
> 対称性の観点からはオヤっと思うのですが、実際の利用状況では
> 優先度順が必要になる場面はないということでしょうか。