uC / OS-IIタスクレディリストとタスクスケジューリング

すぐにタイムリーを意味し、リアルタイムが含まれています。オペレーティング・システムは、外部のイベントにタイムリーに要求に応答するコンピュータシステムを可能にし、タイムリーな操作を調整し、すべてのリアルタイムのデバイスとリアルタイムタスクを制御し、指定したイベントが発生した場合に処理を完了することができた場合は、このオペレーティングシステムは、リアルタイム・オペレーティングありますシステム。

実際のオペレーティングシステムが正しい結果を生成しなければならない計算最初のリアルタイムシステムのための2つの基本的な要件は、ありますが、正しく論理的または関数と呼ばれます。第二に、リアルタイムコンピューティング・システムは、適切なタイミングと呼ばれ、所定のイベント以内に完了しなければなりません。これらの要件を満たすために、リアルタイム・オペレーティング・システムには、以下の3つの条件満たさなければならない:
でなければならない1)リアルタイム・オペレーティング・システムをマルチタスクシステムの
切替時間2)タスクは、システム内のタスクの数の独立していなければならない
割り込みレイテンシ時間3)と、可能な限り予測可能に短いです

第二の点で本論文では、時間の切り替えタスクが何もタスクの数に関係しない方法です。

===========================分割ライン===================== =======

ミッションシステムの割り当てCPUの準備の状態は、マルチタスクオペレーティングシステムの仕事の心臓部です。カーネルのタスクのスケジューリングを行う場合、あなたは準備ができて最高優先度のタスクのタスクである、タスクが実行されているかを知る必要があります。関係なく、システムの動作のリアルタイムタスクスケジューリングを必要とし、スケジュールされた時間は、スケジューリングに費やした時間が判定されます。このニーズを満たすために、のuC / OS-IIシステムは、タスクレディリスト構造を定義します

タスクレディリストは次のとおりです。


システム内の各タスクは、ビットマップ内の1つのバイナリビットを占有するビットマップであるレディ状態、システムに登録された全てのタスクのタスクレディリストは、ステータスのビット値がレディ状態にあるタスクかどうかを示します。実際に、それはINT8Uアレイの一種であるOSRdyTbl []は、タスクの優先順位のレベル、各タスクのための1ビットです。

図では、アレイは、8つの要素、すなわち準備状態64に表すことができるタスクを有しています。各要素8は、タスク8のでタスク群とみなすことができる、レディ状態のタスクに記載され、準備のテーブルルックアップを容易にするために、のuC / OS-IIはまた、可変INT8U OSRdyGrpのデータ・タイプとして定義され、及びタスクグループ(すなわち、素子アレイ)は変数の各ビットがOSRdyTblを[]対応し、タスクグループとタスクの準備ができている場合、対応するビットが1に設定されている変数OSRdyGrpタスク群に入れ、それ以外の場合は0。下図のように:

 

 

 


アイドルタスクおよび統計的なタスク - 上の図では、2つの優先度のタスクの最小値を作成します。アイドルタスクの優先度が63であり、アイドルタスクの準備ができ、次いでOSRdyTbl [7]が最上位ビットが1であるタスクの統計的優先度が62であり、統計的タスクは、第二の最上層の次に​​OSRdyTbl [7]の準備ができています。

あなたは11のための優先度のタスクを作成する場合、次のように続いて、その後、準備リストは、次のとおりです。

 

 

 

 


ここでの優先順位のタスクに応じて準備ができて、リスト内のタスクの場所を見つけるためにどのように簡単な質問は、ですか?各タスクの優先順位は一意であり、あなたが優先順位番号は6ビットのバイナリであるとして置くことができるように、その最大値は、63を超えるではありません。この3ビットのハイ(D5D4D3)は、特定の変数OSRdyGrpデータビットを指定し、特定の配列要素のデータビットを示すために、下位3ビット(D2D1D0)と、レディリストインデックス配列要素を決定するために使用します。

要約すると、それは、UC / OS-IIのコードとPRIOタスク優先度セットのような準備状態に見ることができます。

OSRdyGrp | = OSMapTbl [PRIO >> 3]。
OSRdyTbl [PRIO >> 3] | = OSMapTbl [PRIO&0x07の]。

//前記OSMapTbl []は、計算をスピードアップするためのuC / OS-IIでの各要素は、配列を定義:
OSMapTbl [0] = 00000001B
[1] OSMapTbl = 00000010B
OSMapTbl [2] = 00000100b
。OSMapTbl [3 ] = 00001000B
OSMapTbl [4] = 00010000B
OSMapTbl [5] = 00100000B
OSMapTbl [6] = 01000000b
OSMapTbl [7] = 10000000b

逆に、タスクをログアウトするために、すなわち、システムタスクレディリストに対応するビットが設けられています0は、次のコードが使用されます。

IF((OSRbtTbl [PRIO >> 3] =〜&OSMapTbl [PRIO&0x07の])== 0)
OSRbyGrp OSMapTbl&=〜[PRIO >> 3。];
1つの
2
タスクレディリスト上のコードOSRbtTbl []対応するタスク対応するビットは、タスクがOSRbtTbl [PRIO >> 3]すべてのビットがゼロであることをその対応するビットがクリアされる前にすべての準備の状態ではないタスクグループ、削除されるだけOSRbyGrp、のためにクリアされます対応するビットOSRbyGrpがクリアされました。

最後のステップは、最も優先度の高いタスクを見つけることです最初のUCは/ OS-IIは、いくつかの非常に重要な概念を知っている必要があり、これを説明する前に、準備ができている:
1)UC / OS-IIは、プリエンプティブリアルタイムマルチタスクシステムであり、それは常に動作しますが準備ができて最高優先度のタスクその
2)UC / OS-IIラウンドロビン方式をサポートしていないタスクスケジューラは、最も高い優先順位を見つけることは準備ができているので、各タスクの優先順位は、異なるユニークですタスクコンテキストスイッチと
、それがタスクの数が一定で取り、そして関係なくアプリケーションの確立3)UC / OS-IIタスクスケジューリング時間

時間が決定できない場合OSRbtTbl全体タスクレディリストからスキャンを開始するために、最も優先度の高いタスクを見つけるために[0]を3、UC / OS-IIタスクレディリストはない指すようによれば、などの場合です。即ちOSUnMapTbl []、優先決意テーブルを準備するために、このUC / OS-IIはこれ以下のように、テーブルが定義されています。

NT8UはOSUnMapTbl [] = {CONST
0x0Fの* / 0、0、1、0、2、0、1、0、3、0、1、0、2、0、1、0、/ * 0×00を
、4,0 0x1Fの* / 1、0、2、0、1、0、3、0、1、0、2、0、1、0、/ *が0x10
5、0、1、0、2、0、1、0 、3、0x2F * / 0、1、0、2、0、1、0、/ *の0x20
4、0、1、0、2、0、1、0、3、0、1、0、2、 0x3F * / 0、1、0、/ * 0x30から
0x4Fに6、0、1、0、2、0、1、0、3、0、1、0、2、0、1、0、/ * 0x40の* /
0x5F * / 4、0、1、0、2、0、1、0、3、0、1、0、2、0、1、0、/ * 0x50を
5、0、1、0、2 、0、1、0、3、0、1、0、2、0、1、0、/ * 0x60 0x6F * /へ
4、0、1、0、2、0、1、0、3、0、 0x7Fの* / 1、0、2、0、1、0、/ * 0x70
7、0、1、0、2、0、1、0、3、0、1、0、2、0、1、0 、/ * 0x8F * /へ0x80の
4、0、1、0、2、0、1、0、3、0、1、0、2、0、1、0、/ * 0x90を0x9Fに* /
。0xAFに5,0 ,. 1、0、2、0 ,. 1,0 ,. 3,0 ,. 1、0、2、0、。1、0、/ * 0xA0を* /
4、0 ,. 1、0、2,0 、1,0 ,. 3,0 ,. 1、0、2、0、。1、0、/ * 0xB0 0xbfの* /へ
。6、0 ,. 1、0、2、0 ,. 1,0 ,. 3,0 ,. 1 0、2、0、。1、0、/ * 0xCFに0xC0の* /
4、0 ,. 1、0、2、0 ,. 1,0 ,. 3,0 ,. 1、0、2、0、。1、0、/ * 0xDFに0xD0 * /
5、0 ,. 1、0、2、0 ,. 1,0 ,. 3,0 ,. 1、0、2、0、。1、0、/ * 0xE0となっ0xEFというに* /
4、0 ,. 1 、0、2、0 ,. 1,0 ,. 3,0 ,. 1、0、2、0、。1、0 / * 0xF0が0xFFのに* /
};

OSRdyGrp、直ちに優先順位に従って原理に従って、第1の優先決意テーブルを探しOSRdyTbl []は対応する要素、すなわちOSRdyGrp(0〜7)最初のためにローからハイに位置1のビットが見出さ。11001000bがOSRdyGrpある場合、例えば、ビット1の最小数は、最高の優先順位OSRdyTbl [3]であるルックアップテーブル3、SO 3です。記載されているので、多くのプログラムが同じ理由である理由である、同じことを見つけるために、01001000B、3である場合。OSUnMapTbl優先決意テーブルは8ビットの符号なしの数の値に応じて最下位ビット1について決定され、OSUnMapTbl [n]は、数1のためのN最下位ビットです。

理解OSUnMapTbl []は有効な優先順位の決意テーブルの後に、次のように最高の優先順位準備タスクコードを取得するためのUC / OS-IIスケジューラがあることを理解することができます:

Y = OSUnMapTbl [OSRdyGrp]; //取得した優先度D5、D4、D3ビット
X = OSUnMapTbl [OSRdyTbl [Y] ]; // D2は、D1は、D0ビット優先度取得
PRIO =を(Y << 3)+ X-の

Y = OSUnMapTbl [OSRdyGrp]がタスクレディリストのタスクグループ最下位ビットはビット番号1が最も高い優先度のタスクグループのグループを見つけることである、Y上に取り出されている、X = OSUnMapTbl [OSRdyTbl [Y ] であります見つけるために最も高い優先度のタスクグループタスク。したがって、最も高い優先度のタスクは、これらの2つの点、すなわちPRIO =(Y << 3)+に従って構成することができる 3。

前のタスクレディリストによると:

 

 


ノウハウOSRbyGrp = 10000010B = 130、OSUnMapTbl []テーブルを検索する値に応じて、OSUnMapTblを誘導することができる[130] = 1、即ち、OSRdyTbl [1]、図OSRdyTblから分かるように、最も高い優先度のタスク群[1] = 00001000B = 8、OSUnMapTbl []テーブルを検索する値に応じて、OSUnMapTblを誘導することができる[8]は= 3、すなわち、タスクグループにおいて、最も優先度の高いタスクは、BIT3あるので、タスクの優先度(1 << 3)11 + 3 =

設計タスクスケジューラコード、すなわち、タスクレディリスト構造と優先決意テーブル構造、それはリアルタイムを満たすように、回転インデックステーブルルックアップを使用して、代わりに、それはタスクシステムの数とは無関係に動作する方法を横切りますシステム要件。これは設計されてUC / OS-IIリアルタイム・オペレーティング・システムの一つです。

おすすめ

転載: www.cnblogs.com/qinliujie/p/11877526.html