| 【発明の名称】 |
優先順位検索方法 |
| 【発明者】 |
【氏名】林 孝則 【住所又は居所】東京都品川区大崎2丁目1番17号 株式会社明電舎内
|
| 【要約】 |
【課題】大きなビットマップの場合でも検索性能の向上を図る。
【解決手段】OSのスケジューラでは、実行待ちタスクの中から優先度の高いタスクを効率的に見つけ出すために、優先度毎にタスクをキューに繋ぐ手段を採っている。所が、優先度数が多い場合には、高優先度のキューから順に空きか、否かをチェックすると、ビットマップBTM自体が大きくなって検索が効率的でない。そこで、各キューが空きか、否かをビットマップBTMに表現した。例えば、サイズ「1024」のビットマップBTM]には、インデックスINDを付ける。スケジューラは、インデックスIND付きビットマップBTMから「1」である最大の位置番号を検索して、キューが空きでない最高の優先度を取得し、対応するキューから次に実行するべきタスクを選択するようにする。 |
【特許請求の範囲】
【請求項1】 タスクの動作の優先順位を管理する方法であって、その優先順位を、ワード配列を用いてビットマップで表現し、このビットマップにワード毎のインデックスを付して、各ワード毎にビット「1」が立っているかどうかを、他のデータを用いて管理し、他のデータの各ビットと1対1の対応関係を持ち、ビット「1」が立っているとき、ワードに「1」のビットがあることを確認した後、他のデータを用いて最下位の「1」ビットを検索することを特徴とする優先順位検索方法。 【請求項2】 前記ビットマップのサイズが大きいときには、ビットマップ毎にインデックスを2段以上にすることを特徴とする請求項1記載の優先順位検索方法。
|
【発明の詳細な説明】【0001】 【発明の属する技術分野】 この発明は、タスクの動作の優先順位を管理する方法であって、特にビットマップにワード毎にインディックスを付して検索性能の向上を図った優先順位検索方法に関するものである。 【0002】 【従来の技術】 コンピュータ装置に設けられているCPUには、上記タスク動作の優先順位を管理する手段が備えられている。この優先順位を管理するために、タスク動作の優先順位と1対1に対応するビットマップを用い、このビットを検索することにより、次に動作させるタスクの検索を行っている(例えば、特許文献1参照。)。 【0003】 上記のようなタスクの優先順位と1対1に対応するビットマップの場合、例えば、優先度が32ビット以下であると、ビットマップが1ワードに収まって効率的である。しかし、優先度が上記CPUの1ワードに収まらない長いビットマップにおいては、ワード配列を用いた、図5に示すようなビットマップを用いている。 【0004】 図5は、32ビット・ワードを32個並べてサイズ「1024」のビットマップを表現した説明図である。図5において、1個の四角形の桝目が「1」ビットを表し、その四角形の桝目内の数字はビットの(0から始まる)位置番号で、その位置番号は、「0000」から「1023」まである。 【0005】 上記のようなビットマップにおいて、ビットの並び順で最初の「1」であるビットを検索するには、ビットマップを構成するワード配列のワードを順番に調べていって「0」でない最初のワードを見つけ、そのワード内で「1」のビットを探す方法が採られている。(後述の図6、図7のフローチャート参照) また、ビットマップに対する上記のような検索は、高速に行いたいので、専用のCPU命令を持たせることもある。 【0006】 図6は、長いビットマップから「1」のビットを検索するフローチャートで、この図6においては、図5で示したビットマップから、「1」であるビットで最大の位置番号を持つものを探して、その位置番号を得ることを条件とするものである。なお、位置番号「0」(0000)のビットは、必ず「1」であるとする。 【0007】 図6において、まず、ステップS1で位置番号「31」をワード「W」とし、ステップS2でワード「W」が「0」か(YES)、「0」でないか(NO)を判定し、「YES」ならステップS3で「W−1」をワード「W」とする処理をした後、ステップS2にて再び処理を行なう。ステップS2で「NO」ならステップS4の処理を行なう。 【0008】 ステップS4の処理は、後述する図7に示す処理を呼び出して行なう。ステップS4では、ワード「W」で「1」である最下位ビット位置を探して「b」とする。この「b」は、ステップS5に示す式に入力して演算処理され、位置番号「num」を得る。 【0009】 図7は、1ワードのビットマップから「1」のビットを検索するフローチャートで、1ワードのビットマップ(word)から、「1」であるビットで最下位のものを探してLSBを「0」、MSBを「31」とするビット位置を得ることを条件とするものである。なお、ワードは「0」でないものとする。 【0010】 図7において、ステップS11にて「0」を位置番号「num」とした後、ステップS12にて下位16ビットが「0」であるかどうかを判定し、「YES」ならステップS13の処理を行ない、「NO」ならステップS14の判定処理を行なう。ステップS13では、下位16ビットが「0」ならば上位16ビットに「1」がある処理(num←num+16)を、また、左へ16ビットシフトの処理(word←word>>16)を行なう。 【0011】 次に、ステップS14では、下位8ビットが「0」であるかどうかを判定し、「YES」ならステップS15の処理を行ない、「NO」ならステップS16の判定処理を行なう。ステップS15では、下位8ビットが「0」ならば上位8ビットに「1」がある処理(num←num+8)を、また、左へ8ビットシフトの処理(word←word>>8)を行なう。以下順次、4ビット、2ビット、1ビットの処理をステップS21まで行なう。 【0012】 【特許文献1】 特開平5−342022号公報(第2頁−第3頁、図1−図4)。 【0013】 【発明が解決しようとする課題】 通常、ビットマップの検索は、配列の添字順に線形に行われるので、演算時間はビットマップの長さに比例して長くなる。従って、ビットマップが長いと検索性能の低下が生じる。このため、専用のCPU命令が無い場合は、特にその検索性能の低下が著しくなる問題が起こる。 【0014】 この発明は、上記の事情に鑑みてなされたもので、ビットマップにインデックスを付けることにより、大きなビットマップの場合でも検索性能の向上を図ることができる優先順位検索方法を提供することを課題とする。 【0015】 【課題を解決するための手段】 この発明は、上記の課題を達成するために、第1発明は、タスクの動作の優先順位を管理する方法であって、その優先順位を、ワード配列を用いてビットマップで表現し、このビットマップにワード毎のインデックスを付して、各ワード毎にビット「1」が立っているかどうかを、他のデータを用いて管理し、他のデータの各ビットと1対1の対応関係を持ち、ビット「1」が立っているとき、ワードに「1」のビットがあることを確認した後、他のデータを用いて最下位の「1」ビットを検索することを特徴とする優先順位検索方法である。 【0016】 第2発明は、前記ビットマップのサイズが大きいときには、ビットマップ毎にインデックスを2段以上にすることを特徴とする優先順位検索方法である。 【0017】 【発明の実施の形態】 以下この発明の実施の形態を図面に基づいて説明する。図1はこの発明の実施の第1形態を示す説明図で、この実施の第1形態は、優先度付き実行待ちタスクから最高優先度のタスクを探す方法である。 【0018】 リアルタイムOS(オペレーティング・システム)のスケジューラでは、実行待ちタスクの中から優先度の高いタスクを効率的に見つけ出すために優先度毎にタスクをキュー(待ち行列)に繋ぐ手段を採っている。 【0019】 ここで、優先度数が少ない(例えば、一桁)場合には、キューの数も少ないので、高優先度のキューから順に空きか、否かのチェックを行なっていっても大した負荷にはならない。例えば、優先度が「32」ビット以下であると、ビットマップが「1」ワードに収まって効率的である。 【0020】 しかし、優先度数が多い(例えば、数十〜数千)場合には、高優先度のキューから順に空きか、否かをチェックするのでは、ビットマップ自体が大きくなって検索が効率的でない。そこで、各キューが空きか、否かをビットマップに表現して、検索の効率化を図ることを、見出したのが、上記図1の実施の第1形態である。 【0021】 図1は、ビットマップBTMにインデックスINDを付けて検索の効率化を図った説明図で、32ビット・ワードを32個並べてサイズ「1024」のビットマップBTMにインデックスINDを付けたものである。そして、インデックスINDの各ビットは、図1に示したように対応付けた各ワードが「0」のとき「0」とし、「0」でないときに「1」とする。 【0022】 図1において、優先度は「0」〜「1023」を採り、数字が大きいほど優先度が高いものとする。OS(オペレーティング・システム)は予め実行可能キューが空きでない優先度に対応するビットマップBTMの位置番号のビットを「1」にしてあるものとする。また、アイドルタスクがあるために、優先度「0」のキューは空きでなく、ビットマップBTMの位置番号「0」は必ず「1」であるとする。 【0023】 スケジューラは、インデックス付きビットマップBTMから「1」である最大の位置番号を検索して、キューが空きでない最高の優先度を取得し、対応するキューから次に実行するべきタスクを選択する。 【0024】 インデックス付きビットマップBTMの検索では、まずインデックスINDに対して図7に示すフローチャート(アルゴリズム)を使用して「1」である最下位ビットの位置を得、これから「1」である最大の位置番号のビットを含むワードの添字番号を計算する。 【0025】 次に、この「0」でないワードに対して図7に示すアルゴリズムを使用して、「1」である最下位ビットを得、これと先ほどのワードの添字番号とからビットマップの位置番号を図2に示すフローチャートのように計算する。 【0026】 図2はインデックス付きビットマップで「1」のビットを検索するフローチャートで、このフローチャートでは、図1に示したビットマップから、「1」であるビットで最大の位置番号を持つものを探して、その位置番号を得る。なお、位置番号「0」のビットは、必ず「1」であるとする。 【0027】 図2において、ステップS31で図7の処理を呼び出し、インデックスで「1」である最下位ビット位置をワード「W」とする。そのワード「W」をステップS32の処理で「31−W」をワード「W」とする。 【0028】 その後、ステップS33で再び図7の処理を呼び出して、ワード「W」で「1」である最下位ビット位置を「b」と処理する。この「b」をステップS34に示す式(num←W*32+31−b)で演算処理して終了し、その演算結果として位置番号「num」を得る。 【0029】 図3はこの発明の実施の第2形態を示す説明図で、この第2形態は、大きなビットマップから「1」のビットを検索するものである。上記第1形態では、サイズ「1024」以下程度のビットマップから「1」であるビットで位置番号が最大のものを検索した。 【0030】 さらに、大きいビットマップでも、第1形態で示したインデックスを、1ワードから2ワード以上にすれば同じ様な処理ができる。このように処理に基づいた方法が図3に示すインデックスを2段以上にしたものである。 【0031】 図3は、インデックスを、主インデックスM−IND、副インデックスSB1−IND〜SBn−INDとして、ビットマップが大きくなった場合の例で、32ビット・ワードを「1024」個並べてサイズ「32768」のビットマップを2段インデックスで作った例である。主インデックスM−INDおよび副インデックスSB1−IND,SB2−INDの各ビットは、図3で対応付けた各ワードが「0」のとき「0」とし、「0」でないときに「1」とする。 【0032】 ビットマップがさらに大きい場合、3段、4段のインデックスへの拡張も容易である。インデックスの段数を増加することで一段ごとに32倍ずつ大きなビットマップを扱える。 【0033】 図4は、実施の第2形態における2段インデックス付きビットマップで「1」のビットを検索するフローチャートで、このフローチャートでは、図3で示したビットマップから、「1」であるビットで最大の位置番号を持つものを探してその位置番号を得る。なお、位置番号「0」のビットはかならず「1」であるとする。 【0034】 図4において、ステップS41で図7の処理を呼び出して、インデックスで「1」である最下位ビット位置を「W」とする。次に、ステップS42で「31−W」を「W」とする。 【0035】 その後、図7の処理を呼び出して、ステップS43で副索引[W]で「1」である最下位ビット位置を「X」とする。次にこの「X」をステップS44で「31−X」をワード「X」とする。 【0036】 ステップS44で得られたワード「X」をステップS45で図7の処理を再び呼び出して、ワード「X」で「1」である最下位ビット位置を「b」として、ステップS46の式(W*1024+X*32+31−b)を用いて演算し、位置番号「num」とする。 【0037】 上記各実施の形態においては、コンピュータ装置を用いて処理される。コンピュータ装置には、図示しないが外部記憶装置などの入出力装置などが使用されている。 【0038】 【発明の効果】 以上述べたように、この発明によれば、ビットマップにインデックスを付けることにより、サイズ「1000」程度のビットマップで検索性能を向上させることができる。また、インデックス付けを複数多段で行なうことにより、更に大きなビットマップでも検索性能を向上させることができる。 【図面の簡単な説明】 【図1】この発明の実施の第1形態を示す説明図。 【図2】インデックス付きビットマップで「1」のビットを検索するフローチャート。 【図3】この発明の実施の第2形態を示す説明図。 【図4】実施の第2形態における2段インデックス付きビットマップで1のビットを検索するフローチャート。 【図5】32ビット・ワードを32個並べてサイズ「1024」のビットマップを表現した説明図。 【図6】長いビットマップから「1」のビットを検索するフローチャート。 【図7】1ワードのビットマップから「1」のビットを検索するフローチャート。 【符号の説明】 IND…インデックス BTM…ビットマップ num…位置番号
|
| 【出願人】 |
【識別番号】000006105 【氏名又は名称】株式会社明電舎 【住所又は居所】東京都品川区大崎2丁目1番17号
|
| 【出願日】 |
平成14年11月14日(2002.11.14) |
| 【代理人】 |
【識別番号】100096459 【弁理士】 【氏名又は名称】橋本 剛
|
| 【公開番号】 |
特開2004−164350(P2004−164350A) |
| 【公開日】 |
平成16年6月10日(2004.6.10) |
| 【出願番号】 |
特願2002−330188(P2002−330188) |
|