Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

マルチタスク実行のモデル化

マルチタスク モードと疑似マルチタスク モード

マルチタスク モードで周期的タスクを実行すると、既定の設定では、サンプル レートが最も速いブロックは優先度が最も高いタスクによって実行され、サンプル レートが 2 番目のブロックは優先度が 2 番目のタスクによって実行され、以降同様に繰り返されます。優先度が低いタスクは、優先度が高い複数のタスクの処理の間に処理されます。このように、効率的にプログラムが実行されます。

タスクが周期的ではなく非同期の場合、サンプル レートとタスクの優先度に必ずしも関係性はなく、優先度が最も高いタスクのサンプル レートが最も速いとは限りません。非同期タスクの優先順位を指定するには、Async Interrupt ブロックと Task Sync ブロックを使用します。優先度の数字の意味を切り替えるには、モデル コンフィギュレーション パラメーター [優先順位の値が高いほどタスクの優先順位が高いことを示す] を選択または選択解除します。

マルチタスク環境 (すなわち、リアルタイム オペレーティング システムを使用している環境) では、個々のタスクを定義して、優先度を割り当てることができます。ベアメタル ターゲット ハードウェア (すなわち、リアルタイム オペレーティング システム以外のシステムを使用している環境) では、個別のタスクを作成することはできません。ただし、生成されたアプリケーション モジュールでは、割り込みのオーバーラップとプログラムによるコンテキスト スイッチを使用する効果的なマルチタスクの実行スキームを実装します。

すなわち、ある割り込みの処理中に別の割り込みが発生する場合があるということです。この場合、現在の割り込みがプリエンプトされ、浮動小数点演算装置 (FPU) のコンテキストが保存されます。優先度の高い割り込みが、優先度の高い (つまり、より高速のサンプル レートの) コードを実行します。割り込みが完了すると、プリエンプトされた ISR に制御権が戻ります。

次の図は、マルチタスク、疑似マルチタスクおよびシングルタスク環境でコード ジェネレーターによってマルチレート システムのタスクのタイミングが処理される様子を示したものです。

Timing diagram that shows how the code generator handles timing of tasks in multirate systems

次の図は、割り込みのオーバーラップによる疑似マルチタスクの実装を示したものです。この場合、割り込み 0 は、割り込み 1、2、および 3 が完了するまで返されません。

Timing diagram that shows how overlapped interrupts are used to implement pseudomultitasking

マルチタスク実行のためのプログラムのビルド

マルチタスク実行を使用するには、モデル コンフィギュレーション パラメーター [各離散レートを個別のタスクとして扱う] を選択します。このパラメーターは、[ソルバー タイプ][固定ステップ] に設定した場合にのみ有効です。[自動] モードが選択されると、モデルに 2 つ以上の異なるサンプル時間が含まれている場合、マルチタスク環境が指定されます。モデルに連続サンプル時間および離散サンプル時間が含まれ、固定ステップ サイズが離散サンプル時間と等しい場合、シングルタスク モードで実行されます。

マルチタスク モデルの実行

モデルの連続部が離散部と異なるレートで実行される場合、またはモデルが異なるサンプル レートのブロックをもつ場合、Simulink® エンジンは各ブロックに "タスク識別子" (tid) を割り当て、ブロックとそのブロックのサンプル レートで実行するタスクとを関連付けます。

[モデル コンフィギュレーション パラメーター] ダイアログ ボックスの [ソルバー] ペインでサンプル レートとその制約を設定します。コードを生成するには、ソルバー タイプに [固定ステップ] を選択します。使用できるサンプル レートには一定の制約があります。

  • ブロックのサンプルレートは、基準の (つまり最も速い) サンプル期間の整数倍でなければなりません。

  • モデル コンフィギュレーション パラメーター [周期的なサンプル時間の制約][制約なし] に設定すると、ベース サンプル期間はパラメーター [固定ステップ サイズ] の設定で決定されます。

  • パラメーター [周期的なサンプル時間の制約][サンプル時間を制約する] に設定すると、基本レートの固定ステップ サイズはパラメーター [サンプル時間のプロパティ] で指定するサンプル時間行列の最初の要素になります。モデル例 MultirateMultitaskingBareBoard[ソルバー] ペインに例を示します。

    Model Configuration Parameter dialog box Solver pane settings for example model MultirateMultitaskingBareBoard

  • 連続ブロックは基本サンプルレートで実行する積分アルゴリズムを使用して実行します。モデル コンフィギュレーション パラメーター [周期的なサンプル時間の制約][制約なし] に、パラメーター [固定ステップ サイズ][自動] に設定した場合にのみ、ベース サンプル期間はモデルのレートの最大公約数です。

  • モデルの連続部と離散部が異なるレートで実行できるのは、離散部のレートが連続部のレートと同じかそれより遅く、基本サンプル レートの整数倍である場合のみです。

マルチタスク実行

このシンプルなマルチレート モデルから生成されたコードのシミュレーションを行い、実行できます。このモデルは、シングルタスク モードまたはマルチタスク モードで固定ステップ ソルバーを使用するように構成されています。

Execution order of blocks in model, labeled A through F.

適用されるタスク モードは、モデル コンフィギュレーション パラメーター [各離散レートを個別のタスクとして扱う] の設定によって変わります。クリアされた場合、パラメーターはシングルタスク モードを指定します。選択された場合、パラメーターはマルチタスク モードを指定します。

説明例は、モデルの A から F までの 6 つのブロックについて説明します。

ブロックの実行順序 (ブロックの上の数字で表示) は、ブロック E および F に高い優先度が割り当てられていることが強制的に示されています。示された順序は、このモデルで考えられる有効な実行順序の 1 つです。詳細については、動的システムのシミュレーションの段階を参照してください。

実行順序は、ブロック間のデータ依存関係によって決定します。リアルタイム システムでは、実行順序によって、指定した時間間隔またはタスク内でブロックが実行される順序が決定されます。この説明では、モデルの実行順序は、タスクに対するブロックの計算の割り当てやタスク実行のスケジューリングに関連付けられているため、既知の順序として扱います。

メモ

このセクションの説明とタイミング図は、Rate Transition ブロックが既定の設定 (保護) モードで使用されているという前提に基づいています。すなわち、ブロック パラメーター [データ転送中の整合性を確保][確定的にデータ転送を確保 (最大遅延)] は選択されています。

このモデルがマルチタスク用に構成されている場合、ブロック計算は、レートで優先度が指定され、2 つのタスクで実行されます。

  • より低速のタスクは、優先度が低く、毎秒実行されるようにスケジュールされます。これを "1 秒タスク" といいます。

  • より高速のタスクは、優先度が高く、毎秒 10 回実行されるようにスケジュールされます。これを "0.1 秒タスク" といいます。0.1 秒タスクは、1 秒タスクをプリエンプトする場合があります。

モデルの各ブロックについて、次の表に、実行順序、ブロック実行時のタスク、およびブロックに計算の出力または更新が含まれているかどうかを示します。ブロック A および B は、離散状態が存在しないため、更新の計算は含まれません。

ブロック
(実行順序)

タスク

出力

更新

E

0.1 秒タスク

Y

Y

F

0.1 秒タスク

Y

Y

A

0.1 秒タスク

Y

N

B

Rate Transition ブロックは、端子ベースのサンプル時間を使用します。
出力は、0.1 秒タスクの出力端子サンプル時間で実行されます。
端子ベースのサンプル時間の詳細については、参照モデルのサンプル時間を参照してください。

Y

N

C

1 秒タスク

Y

Y

D

Rate Transition ブロックは、端子ベースのサンプル時間を使用します。
出力は、0.1 秒タスクの出力端子サンプル時間で実行されます。
更新は、1 秒タスクの入力端子サンプル時間で実行されます。
端子ベースのサンプル時間の詳細については、参照モデルのサンプル時間を参照してください。

Y

Y

リアルタイム マルチタスク実行

次の図は、生成コードがマルチタスク モードでリアルタイム システムに展開されたときの計算のスケジューリングを示しています。生成プログラムは、10 Hz タイマーからの割り込みを制御しながら、2 つのタスクをリアル タイムで実行中です。

Timing diagram that shows scheduling of computations in multitasking solver mode when generated code is deployed in a real-time system

マルチタスク実行のシミュレーション

次の図は、Simulink シミュレーション ループ中のモデルの実行を示しています。

次の図は、マルチタスク モードでのモデルのシミュレーションを示しています。Simulink エンジンは、マルチタスクをシミュレートして、1 つの実行のスレッドでブロックを実行します。プリエンプションは発生しません。

Timing diagram that shows the Simulink execution of the model in multitasking solver mode

関連するトピック