|
(5)タスク分割の考え方
タスクはどのような視点で切り分けるかを考えてみましょう。OSのタスクスケジューリングやプリエンプションの動作から、タスクに分ける必要があるパターンを考えてみましょう。
1.並列処理から見たタスク分割
ある時間帯に「〜しながら〜する」といった並列の処理が存在する場合、それぞれの処理は待ち合わせや時間間隔よって処理が切り替わり、断続的に処理が進みます。このような場合は並列する処理をタスクにしなければなりません。逆に、並列に動作することのない処理をタスクに分ける必要はありません。この場合、C言語で言うならば関数にしておけばよいのです。どの処理を並列動作させたいかの視点でタスクを分割することが必要です。タスク内の処理は優先度が同じであることも分割の指針になります。
2.優先処理から見たタスク分割
先のスケジューリング方式からわかるように、同じ優先度のタスクではFCFSでタスクが切り替わるため、優先的に実行させたい処理が必ずしも優先されるとは限りません。プリエンプションさせたいタスクが実行中のタスクと同じ優先度ではそのタスクが待ち状態になるまで切り替わりません。言い換えれば、プリエンプションさせたい処理はタスクにし、高い優先度をつけます。また、優先度を分けたい処理はタスクにします。一般に、何らかのシステム異常への緊急処理や高速に処理しなければリアルタイム性を損ねるような処理は最高位の優先度を付け、システムのログをとるような空き時間に処理すればよいものは低い優先度を付けます。最下位の優先度のタスクは他にどのタスクも実行されていない時に実行されるためにアイドルタスクと呼ばれます。何も機能しないループ処理をアイドリング用に置く場合もあります。
■優先処理の注意
優先度の低いタスクは如何に重要な処理を実行中であろうと中断される場合があること、また、より高いタスクが実行されている限りは下位のタスクは永久に実行されないことに注意して優先度設定する必要があることに注意してください。
|