今日、私たちが共有するコンテンツは、主にIoTオペレーティングシステムでのタスク管理に関するものです。
いつものように、共有投稿を公式に読み始める前に、いくつかの質問について考える必要があります。
1.プロセスとスレッド、違いと接続を知っていますか?
2.タスクとは何ですか?
3. IoTオペレーティングシステムのタスク管理の主な側面は何ですか?
上記の質問を真剣に検討した場合は、以下の共有を読んで、あなた自身の死角の知識を得ることができることを願っています!
1.タスク管理の基本概念
プロセス:実行中のプログラムのインスタンス
スレッド:システムのスケジューリングとディスパッチの基本単位であるプロセス内のエンティティ
プロセスとスレッドの違い
スレッドはプログラム実行の最小単位であり、プロセスはリソースのオペレーティングシステム割り当ての最小単位です。
プロセスは、プロセス内のコードの異なる実行ルートである1つ以上のスレッドで構成されます。
プロセスは互いに独立しており、同じプロセス内の各スレッドはプログラムのメモリスペースを共有します
タスクの概念
システムの観点から見ると、タスクはシステムリソースをめぐって競合する最小のオペレーティングユニットです。タスクは、CPUを使用または待機し、メモリスペースやその他のシステムリソースを使用し、他のタスクとは独立して実行できます。
Huawei LiteOSのタスクモジュールは、ユーザーに複数のタスクを提供し、タスク間の切り替えと通信を実現し、ユーザーがビジネスプログラムプロセスを管理するのに役立ちます。
Huawei LiteOSは、マルチタスクをサポートするオペレーティングシステムです。LiteOSでは、タスクはスレッドを表します。
Huawei LiteOSのタスクはプリエンプティブスケジューリングメカニズムであり、タイムスライスラウンドロビンスケジューリングをサポートします
第二に、タスク管理の原則
タスク:一連の要素で構成されるエンティティ
要素(各タスクの管理に使用)
識別子:タスクに関連付けられた一意の識別子
タスク名:タスク名
タスクステータス:現在のタスクが実行中または待機中であることを示すために使用されます
優先度:タスク実行の優先順位を表します
コンテキストスタックポインタ:タスクが実行される次の命令のアドレス
タスク制御ブロック(TCB:タスク制御ブロック)
タスクステータス
タスクによって示される動作を説明するために使用されます
準備完了状態(準備完了):タスクは準備完了リストにあり、準備完了タスクを実行できます。スケジューラーがスケジュールするのを待つだけです。新しく作成されたタスクは準備完了状態に初期化されます。
実行状態:この状態は、タスクが実行中であり、この時点でプロセッサを占有していることを示します。LiteOSスケジューラは、常に最高の優先度で準備完了状態のタスクを実行することを選択します。タスクが実行されると、タスクの状態が変化します。走り出す
ブロック済み:タスクが現在特定のシーケンスまたは外部割り込みを待機している場合、タスクはブロック状態にあり、タスクは準備完了リストにないことを意味します。タスクの一時停止、タスクの遅延、タスクがセマフォ、読み取りおよび書き込みキューの待機、または読み取りおよび書き込みイベントの待機などを含みます。
終了状態(デッド):タスクは終了し、システムがリソースを再利用するのを待機します
タスク状態間の移行
準備完了->実行状態
タスクが作成されると、準備完了状態になります。タスクの切り替えが発生すると、準備完了リストで最も優先度の高いタスクが実行されて実行状態になりますが、タスクは現時点ではまだ準備完了リストにあります。
実行->ブロッキング状態
実行中のタスクがブロックされると(一時停止、遅延、ミューテックスロックの取得、メッセージの読み取り、セマフォの読み取り待機など)、タスクは準備完了リストから削除され、タスクの状態は実行状態からブロック状態に変化してから発生します。タスクの切り替え、準備完了リストに残っている最も優先度の高いタスク
ブロッキング->準備完了状態
ブロックされたタスクが再開された後(タスクの再開、遅延時間のタイムアウト、セマフォの読み取りタイムアウト、またはセマフォの読み取りなど)、再開されたタスクが準備完了リストに追加され、ブロックされた状態から準備ができた状態に変わります。タスクが復元された場合タスクの優先度が実行中のタスクの優先度よりも高い場合、タスクの切り替えが発生し、タスクは準備完了状態から実行中の状態に変更されます。
準備完了->ブロッキング状態
タスクは準備完了状態でブロック(一時停止)されることもあります。このとき、タスクの状態は準備完了状態からブロック状態に変わります。タスクは準備完了リストから削除され、タスクが復元されるまでタスクのスケジューリングに参加しません。
実行->準備完了
優先度の高いタスクが作成または復元された後、タスクのスケジューリングが行われます。この時点で、準備完了リストで最も優先度の高いタスクが実行状態になり、最初に実行されていたタスクが実行状態から準備完了状態に変わり、準備完了リストに残ります。
実行->終了
実行中のタスクが終了すると、カーネルはこのタスクを自動的に削除し、タスクの状態は実行状態から終了状態に変わります。
ブロッキング->終了状態
ブロックされたタスクが削除インターフェイスを呼び出し、タスクの状態がブロックされた状態から終了状態に変わります
タスクスタック
タスクスタックのサイズは8バイトに揃えられます
効果
タスクが中断されたとき、または割り込みに応答したとき、タスクスタックはCPUレジスタの内容を保存するために使用されます
タスクの実行中は、タスクスタックを使用して、いくつかのローカル変数、関数パラメーターなどを保存します。
タスクの優先度
優先度は、タスク実行の優先順位を示します
タスクの優先度によって、タスクの切り替えが発生したときに実行されるタスクが決まります
レディリストの中で最も優先度の高いタスクが実行されます
優先度の高いタスクは優先度の低いタスクを中断でき、優先度の低いタスクは、優先度の高いタスクがブロックまたは終了した後にのみスケジュールできます。
Huawei LiteOSタスクには合計32の優先度(0〜31)があり、最高の優先度は0、最低の優先度は31です。
3、タスクのスケジューリング
タスクコンテキスト
Huawei LiteOSは、タスクが一時停止されたときにタスクのタスクコンテキスト情報を独自のタスクスタックに保存するため、タスクが再開された後、一時停止のコンテキスト情報がスタックスペースから復元され、タスクが一時停止されても実行が続行されます。中断されたコード
タスクの切り替え
タスクの切り替えには、準備完了リストで最も優先度の高いタスクの取得、タスクコンテキストの保存、タスクコンテキストの復元などのアクションが含まれます。
スケジューリングアルゴリズム
プリエンプティブスケジューリングメカニズム
タイムスライスローテーションスケジューリングメカニズム
4、タスク操作
タスクを作成する
LOS_TaskCreateOnly:作成されたタスクは、タスクのスケジュールなしで一時停止状態になります
LOS_TaskCreate:タスクを作成し、タスクスケジューリングの準備完了状態に入ります
タスクを終了する
LOS_TaskDelete:指定されたタスクを削除します
5つのタスク間通信
タスク間の通信を実現するためのメッセージキューを介したタスク間の情報送信
メッセージキュー
タスク間通信のデータ構造
タスクまたは割り込みから固定長でないメッセージを受信するために使用されます
さまざまなインターフェイスに応じて、メッセージを自分のスペースに保存するかどうかを選択できます