- ベストアンサー
リアルタイムOSにおける「静的なタスク生成」とは?
リアルタイムOSの特徴である「タスクの静的な生成」とはどういう意味でしょうか。 コンパイル時にタスクを生成することだそうですが、 ・「コンパイル時にタスクを生成」とは? ・汎用OSにおけるタスク生成と、どのように違うのか? ・そもそも「タスク生成」とは? 静的というと、「動かない=あらかじめ決められている」というイメージを持っていますが、正しいでしょうか。 ご教示お願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
貴殿の理解でおおよそ間違っていません。 RTOSの資源の少ない環境においては、タスクは、起動時点で 生成済みで、削除されない作りをすることが多いためです。 ですので、起動されてから生成済みのタスクを起動したり、停止したり 制御をします。 以下、μITRON4.0の場合について回答します。 ・「コンパイル時にタスクを生成」とは? --> 実際には、カーネル起動時にタスクが起動するまでの間に タスクを生成します。 どんなタスク生成するするかは、 実行時には、ROMテーブルなどに出力されているデータに基づいて 生成されます。そのROMテーブルは、コンパイル前に 変なテキストファイルに定義を書いてそれをコンフュギュレータ と呼ばれる専用ツールを使って、コンパイルできる言語に変換します。 μITRONによっても方言があって、変なテキストファイルではなく、 直接C言語でROMテーブルなどを定義するものもあります。Nortiという RTOSはそうなっています。 ・汎用OSにおけるタスク生成と、どのように違うのか? --> 利用するメモリとCPU負荷が少なくて済みます。 静的生成の反対の動的生成では、ヒープメモリ等の獲得が必要に なります。汎用OSではMMUが搭載されている場合が多く、メモリを 効率的に使えますが、RTOSではそれがなく、メモリが非効率になります。 また、生成時のエラーチェックは、動的生成ではシステム起動時ですが、 静的生成では、コンパイルまでにエラーチェックされていますので 実行時はエラー処理をかなり省くことができます。 ・そもそも「タスク生成」とは? --> タスクを実行するためのタスク固有のワークエリアを確保して 起動をかければ実行できる状態にすること 静的というと、「動かない=あらかじめ決められている」というイメージを持っていますが、正しいでしょうか。 --> そうです。変なテキストファイルであらかじめ決めておきます。
その他の回答 (1)
- onosuke
- ベストアンサー率67% (310/456)
参考URLからの引用です。 ----ここから引用---- >タスクやセマフォなど,OSの管理する各種のオブジェクトを >必要に応じて動的に生成/削除するのではなく, >あらかじめ静的に(システム設計時に)生成しておくアプローチがある。 ----ここまで引用---- 考え方としては、上記引用文のように 設計段階で各種の資源(OSの管理する各種のオブジェクト)を あらかじめ決定(確定/限定)することです。 上記考え方の実装(実現方法)のひとつが、 「タスクの静的な生成」ですね。 ここで閑話休題。 「リアルタイムOSの特徴」として列挙されるモノは、汎用OSの差異に注目して列挙したモノです。 一方、「上記の考え方」は、「リアルタイムOSの目的」=「制約の厳しい組込システムに特化したOSを提供する」を達成する方針として出てきたものです。 こういったことを踏まえて、 「Bという手段はどういうことなのか?」から視点を変えて、 「Aという目的を達成するための手段がBである」という読み方をすると、 理解しやすくなりませんか?
お礼
ご回答ありがとうございます。 参考URLを見てみました。 つまり、リアルタイムOSにおける静的タスク生成は、 「制約の厳しい組み込みシステムに対応するために、あらかじめタスク生成に必要な設定(メモリ割り付け等)を決めておくことで、初期化処理を短くする」 という意味があるんですね。 R32C様のご回答と合わせて、そちらのお礼にてまとめさせて頂きました。 ありがとうございました。
お礼
ご回答ありがとうございます。 つまり静的タスク生成とは、 「タスクのワークエリア(メモリ上の作業領域)等をあらかじめ定めておいて、OS起動時にその定義通りにタスクを生成する(ワークエリアを確保する)」 ということですね。 >変なテキストファイル 「静的API」のことでしょうか? リアルタイムOSにおけるタスク生成についてまとめると、 (参照:onosuke様 参考URL) 1.「静的API」という記法で、制御ブロック(タスクの状態を表すデータ構造)の初期状態やメモリーの割り付けを、あらかじめ定めておく。 2.↑を「コンフィギュレータ」というツールで、コンパイルできる言語に変換する。 3.↑をコンパイルし、ROMテーブルにデータを出力する。 4.OS起動時、↑のデータに基づいてタスクを生成する(ワークエリアを確保し、タスク実行の準備をする)。 また、汎用OSとリアルタイムOSを比べると、 ・汎用OS…必要時にワークエリア等を決め、タスクを生成する。 ・リアルタイムOS…あらかじめワークエリア等を決めておき、その設定に従ってOS起動時にタスクを生成する。 なるほど! すっきりしました。 以上の解釈に誤りがありましたら、ご指摘お願いいたします。