Real-Timeモジュールで確定的アプリケーションを作成する
- 更新日2025-02-20
- 4分で読める
確定的なアプリケーションは、リアルタイムオペレーティングシステム (RTOS) のマルチスレッド処理と優先度に基づくスケジュールモデルの利点を生かしたものです。確定的なアプリケーションを作成する場合、アプリケーションタスクを分割し、RTOSが定める優先順位に基づいて、専用のプロセッサリソースを受け取るようにするマルチスレッドのアプリケーションを作成します。
マルチスレッド処理
シングルCPUコンピュータは、複数のアプリケーションを1つずつ順番に短時間実行することでマルチタスク処理を実現します。各アプリケーションにプロセッサ時間を細かく割り当てることで、コンピュータが複数のアプリケーションを同時に実行しているように見えます。一方、マルチCPUシステムでは、真の意味での並列処理が実行されます。
マルチスレッド処理は、1つのアプリケーションにマルチタスク処理の概念を適用するもので、それぞれの実行システムスレッドを実行時間が短い小さなタスクに分割します。「スレッド」とは、実行システム内におけるアプリケーションの完全に独立した実行フローです。マルチスレッド処理アプリケーションでは、実行可能なスレッドが存在する限りプロセッサがアイドル状態にならないため、プロセッサの効率を最大限に高めることができます。ファイルのデータ読み書き、I/O、ユーザインタフェースのアクティビティのポーリングを行うアプリケーションにマルチスレッド処理を採用すると、これらのアクティビティの合間にプロセッサが別のタスクを実行できます。
優先度に基づくスケジュールモデル
RTターゲットのRTOSでは、ラウンドロビンスケジューリングとプリエンプティブスケジューリングの組み合わせによって実行システムのスレッドが実行されます。
ラウンドロビンスケジューリング―同じ優先度のスレッドに適用されます。同じ優先度のスレッドには、プロセッサ時間が均等に割り当てられます。たとえば、通常優先度のスレッドには10ミリ秒の実行時間が割り当てられます。プロセッサは、各タスクを10 msずつ実行し、終了時に残っていたタスクは次の割り当て時間まで待機状態になります。
プリエンプティブスケジューリング―優先度が高いスレッドが直ちに実行され、優先度が低いスレッドの実行は一時停止されます。タイムクリティカルスレッドには最高の優先度がつけられ、他のあらゆる優先度のスレッドより先に実行されます。
タイミングストラクチャの優先度
LabVIEWは、タイミングストラクチャスレッドをタイムクリティカルと高優先度の間の優先順位で実行します。同じVI内に存在する複数のタイミングストラクチャの優先度は、タイミングループの優先度を相対的に設定することで可能です。タイミングループを構成ダイアログボックスでは、タイミングループの実行のタイミングソース、周期、優先度、その他の上級オプションを設定できます。
タスクを分割して確定的マルチスレッドアプリケーションを作成する
確定的アプリケーションでは、確定的タスクが必ず時間どおりに終了する必要があります。確定的タスクを時間どおりに完了するためには、タスク専用のプロセッサリソースを確保する必要があります。タスクを分割して専用のプロセッサリソースを割り当てることにより、時間どおりの実行を保証できます。
確定的タスクは、十分なプロセッサリソースを確保できるように、他のタスクと分離します。たとえば、一定の間隔でデータを集録してディスクに保存するアプリケーションでは、データ収集のタイミングと制御を時間厳守で処理する必要があります。ただし、データをディスクに保存する操作、つまりファイルI/O操作は、応答時間がハードウェアの種類やハードウェアリソースの使用状況によって異なるため、非確定的タスクとなります。タイミングループやさまざまな優先度のVIを使用して、確定的タスクの実行とタイミングを制御することができます。