(57)【要約】【課題】複数のＣＰＵコアなど複数の処理装置を有効に利用すること。【解決手段】ＰＣＩデバイス５０ａ及び５０ｂがメモリ３０にＭＳＩメッセージを書き込み、ＣＰＵコア２１〜２４でそれぞれ実行されるポーリングルーチン５１〜５４がメモリ３０をポーリングする。また、ポーリングルーチン５１〜５４は、タスク、スレッドの切れ間とアイドル中に割込み要因をポーリングし、最も負荷の低いＣＰＵコアに割込み処理を行わせる。また、ＩＯタスク７１〜７４は、他のＩＯタスクとのタスク間通信をコマンドキューを用いて行う。【選択図】図２
2014232382.tif 000002
【特許請求の範囲】
【請求項１】
複数の処理装置を備えた制御装置において、
全ての処理装置が、
メモリへの書き込みにより通知された割込み要因をポーリング監視し、
前記割込み要因に対応する割込み処理を行う
ことを特徴とする制御装置。
【請求項２】
前記ポーリング監視する処理は、処理単位の切れ間にポーリング監視することを特徴とする請求項１に記載の制御装置。
【請求項３】
前記処理単位は、タスク又はスレッドであることを特徴とする請求項２に記載の制御装置。
【請求項４】
ポーリング監視により前記割込み要因を検出した処理装置は、該割込み要因を処理する処理装置を決定し、
決定された処理装置が前記割込み要因に対応する割込み処理を行うことを特徴とする請求項１、２又は３に記載の制御装置。
【請求項５】
各処理装置で実行されるタスクが、処理するコマンドを接続するキューを有し、
前記割込み処理は、各割込み要因に対応するコマンドを前記キューに接続し、
第１のタスクがコマンドの処理中に第２のタスクと通信する要件が発生すると、第１のタスクは該コマンドを第２のタスクのキューに接続することを特徴とする請求項１〜４のいずれか一つに記載の制御装置。
【請求項６】
複数の処理装置を備えた制御装置による制御方法において、
全ての処理装置が、
メモリへの書き込みにより通知された割込み要因をポーリング監視し、
前記割込み要因に対応する割込み処理を行う
ことを特徴とする制御方法。
【請求項７】
複数のコンピュータを備えた制御装置で実行される制御プログラムにおいて、
メモリへの書き込みにより通知された割込み要因をポーリング監視し、
前記割込みに対応する割込み処理を行う
処理を全てのコンピュータに実行させることを特徴とする制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御装置、制御方法及び制御プログラムに関する。
【背景技術】
【０００２】
従来、ＣＰＵ（Central  Processing  Unit：中央処理装置）は、割込みコントローラから割込みを受信すると、割込み要因に対応する割込み処理ハンドラを起動して割込み処理を行う。
【０００３】
図９は、従来の割込み処理の一例を示す図である。図９は、デバイスからの割込みに対してＩＯ（入出力）処理を行う場合を示している。図９に示すように、デバイス９１ａ及び９１ｂからのＭＳＩ（Message  Signal  Interrupt）は、割込みコントローラ９２経由でＣＰＵ９３に対して割込みとして通知される（１）。
【０００４】
すると、ＣＰＵ９３は、割込みを処理するため、割込み要因に対応した割込み処理ハンドラを呼び出す（２）。具体的には、ＣＰＵ９３は、デバイス９１ａから割込み通知を受けた場合には割込み処理ハンドラ９４ａを呼び出し、デバイス９１ｂから割込み通知を受けた場合には割込み処理ハンドラ９４ｂを呼び出す。
【０００５】
すると、割込み処理ハンドラ９４ａ又は９４ｂは、割込み要因のクリアなどハードウェアに対する処理を行う（３）。そして、割込み処理ハンドラ９４ａ又は９４ｂは、割込み要因に対応するコマンド９５ｂをＩＯタスク９５のコマンドキュー９５ａの最後尾に接続する（４）。そして、ＩＯタスク９５が、コマンドキュー９５ａの先頭のコマンド９５ｂを処理する。
【０００６】
また、マルチプロセッサシステムにおいて、割込みの存在を示す情報を格納するためにポーリングメモリを設け、指定されたプロセッサがポーリングメモリを調べる従来技術がある（例えば、特許文献１参照。）。また、ＰＣＩ（Peripheral  Component  Interconnect）デバイスによりメモリに書き込まれたＭＳＩをブリッジ装置が検出して新たなＭＳＩを発行し、別のＰＣＩデバイスにＭＳＩを受信させる従来技術がある（例えば、特許文献２参照。）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００６−２１６０４２号公報
【特許文献２】特開２０１０−１１７８７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
近年、ＲＡＩＤ（Redundant  Arrays  of  Inexpensive  Disks）装置などの制御装置に組み込まれるＣＰＵは複数のＣＰＵコアを有するようになってきている。したがって、制御装置の性能向上を図るために、複数のＣＰＵコアを有効に利用して割込み処理を行うことが課題となっている。
【０００９】
本発明は、１つの側面では、複数のＣＰＵコアなど複数の処理装置を有効に利用して割込み処理を行う制御装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本願の開示する制御装置は、１つの態様において、複数の処理装置を備えた制御装置で、全ての処理装置が、メモリへの書き込みにより通知された割込み要因をポーリング監視し、前記割込み要因に対応する割込み処理を行う。
【発明の効果】
【００１１】
１実施態様によれば、複数の処理装置を有効に利用する制御装置を提供することができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、実施例に係るＲＡＩＤ装置のハードウェア構成を示す図である。
【図２】図２は、実施例に係るＲＡＩＤ装置によるコマンド処理のフローを示す図である。
【図３】図３は、ＭＳＩメセージのメモリへの書き込みを説明するための図である。
【図４】図４は、ポーリングルーチンの処理フローを示すフローチャートである。
【図５Ａ】図５Ａは、コマンドキューによるタスク間通信（通常通信）を説明するための図である。
【図５Ｂ】図５Ｂは、コマンドキューによるタスク間通信（高速通信）を説明するための図である。
【図６】図６は、スレッドのスケジューリングの一例を示す図である。
【図７Ａ】図７Ａは、コマンドキューによるタスク間通信の送信側の処理フローを示すフローチャートである。
【図７Ｂ】図７Ｂは、コマンドキューによるタスク間通信の受信側の処理フローを示すフローチャートである。
【図８Ａ】図８Ａは、一般的な割込みポーリング方式を説明するための図である。
【図８Ｂ】図８Ｂは、実施例に係るポーリングルーチンによるポーリング方式を説明するための図である。
【図９】図９は、従来の割込み処理の一例を示す図である。
【発明を実施するための形態】
【００１３】
以下に、本願の開示する制御装置、制御方法及び制御プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例】
【００１４】
まず、実施例に係るＲＡＩＤ装置のハードウェア構成について説明する。図１は、実施例に係るＲＡＩＤ装置のハードウェア構成を示す図である。図１に示すように、ＲＡＩＤ装置１は、制御装置２と複数のディスク装置３とを有する。
【００１５】
制御装置２は、ＲＡＩＤ装置１を制御する装置であり、ディスク装置３は、データを記憶する装置である。制御装置２は、ＨＢＡ（Host  Bus  Adapter）１０と、ＣＰＵ２０と、メモリ３０と、ＩＯ制御モジュール４０とを有する。
【００１６】
ＨＢＡ１０は、ホスト装置４とのインタフェースであり、ホスト装置４からコマンドや書き込みデータなどを受け取る。また、ＨＢＡ１０は、ディスク装置３から読み出されたデータなどをホスト装置４へ返す。ここで、ホスト装置４は、サーバなどのコンピュータである。
【００１７】
ＣＰＵ２０は、４つのＣＰＵコア２１〜２４を有する。なお、ここでは、ＣＰＵ２０が４つのＣＰＵコア２１〜２４を有する場合について説明するが、ＣＰＵ２０は任意の個数のＣＰＵコアを有することができる。
【００１８】
ＣＰＵコア２１〜２４は、リアルタイムＯＳ（Operating  System）やリアルタイムＯＳ上で動作するファームウェアを実行する処理装置である。ＣＰＵコア２１〜２４は、ＳＭＰ（Symmetric  Multi-Processing：対称型マルチプロセッシング）方式で使用される。ここで、ＳＭＰ方式とは、全ての処理装置に対して対称的、均一的に処理が割り付けられる複数処理装置による並列処理方式である。
【００１９】
メモリ３０は、ホスト装置４からのコマンド及びデータ、ディスク装置３から読み出されたデータなどを記憶する。ここで、コマンドは、ディスク装置３へのデータの書き込みを指示する書き込みコマンドや、ディスク装置３からのデータの読み出しを指示する読み出しコマンドなどである。
【００２０】
ＩＯ制御モジュール４０は、ディスク装置３へのデータの読み書きを制御する。ＨＢＡ１０、ＣＰＵ２０、メモリ３０及びＩＯ制御モジュール４０は、ＰＣＩバス５で接続される。
【００２１】
次に、実施例に係るＲＡＩＤ装置１によるコマンド処理のフローについて説明する。図２は、実施例に係るＲＡＩＤ装置１によるコマンド処理のフローを示す図である。図２に示すように、ＣＰＵコア２１〜２４とＩＯタスク７１〜７４がそれぞれ結びつけられる（１）。
【００２２】
すなわち、ＩＯタスク７１〜７４は、ＣＰＵコア２１〜２４でそれぞれ実行される。同様に、割込み処理ハンドラ６１ａ〜６４ａ、割込み処理ハンドラ６１ｂ〜６４ｂ、ポーリングルーチン５１〜５４は、ＣＰＵコア２１〜２４でそれぞれ実行される。
【００２３】
なお、各ＣＰＵコアは、ＩＯタスク以外にもネットワーク制御タスクなど他のタスクを実行する。複数のタスクの実行の制御は、タスク優先度に基づいてリアルタイムＯＳによって行われる。
【００２４】
ＰＣＩデバイス５０ａ及び５０ｂは、ＭＳＩの割込み先、すなわち、ＭＳＩメッセージの書き込み先をメモリ３０とする（２）。ここで、ＰＣＩデバイス５０ａ及び５０ｂは、ＨＢＡ１０やディスク装置３などである。
【００２５】
また、ここでは、２台のＰＣＩデバイス５０ａ及び５０ｂを示すが、任意の台数のＰＣＩデバイスがＭＳＩメッセージをメモリ３０に書き込む。各ＰＣＩデバイスは、メモリ３０内のＰＣＩデバイス毎に定められた領域にＭＳＩメッセージを書き込む。
【００２６】
図３は、ＭＳＩメセージのメモリ３０への書き込みを説明するための図である。図３に示すように、ＭＳＩをサポートするデバイス９１は、割込み要因が発生すると、一般的には、割込みコントローラ９２が有するメモリ９２ａにＭＳＩメッセージを書き込む。すると、割込みコントローラ９２がＣＰＵ９３へ割込みを通知する。これに対して、ＲＡＩＤ装置１では、ＰＣＩデバイス５０は、メモリ３０の特定のアドレスで指定される領域にＭＳＩメッセージを書き込む。
【００２７】
図２に戻って、ポーリングルーチン５１〜５４は、メモリ３０をポーリングする（３）。なお、ポーリングルーチン５１〜５４は、同様の処理を行うため、以下の説明では、ポーリングルーチン５１の処理について説明する。
【００２８】
ポーリングルーチン５１は、ＭＳＩメッセージを見つけると、ＭＳＩメッセージに含まれる割込み要因に対応する割込み処理ハンドラ６１ａ又は６１ｂを呼び出す（４）。なお、ここでは、２つの割込み処理ハンドラ６１ａ及び６１ｂを示すが、割込み要因の数の割込み処理ハンドラがある。
【００２９】
そして、割込み処理ハンドラ６１ａ又は６１ｂは、割込み処理後に、割込み要因に対応するコマンド８０をＩＯタスク７１のコマンドキュー７１ａに接続する（５）。そして、ＩＯタスク７１が、コマンドキュー７１ａの先頭のコマンド８０から処理する（６）。なお、コマンドキュー７１ａは、コマンド８０が接続されるキューである。
【００３０】
このように、ＣＰＵコア２１〜２４でそれぞれ動作するポーリングルーチン５１〜５４がメモリ３０に書き込まれた全てのＭＳＩメッセージをポーリングする。したがって、ＣＰＵコア２１〜２４の中で割込み処理が偏ることなく、割込み処理の負荷を分散させることができる。
【００３１】
また、ＰＣＩデバイス５０ａ及び５０ｂがＭＳＩメッセージをメモリ３０に書き込み、ポーリングルーチン５１〜５４がメモリ３０をポーリングしてＭＳＩメッセージを見つけると割込み処理ハンドラを呼び出す。また、ＣＰＵ２０のクロックは、割込みコントローラ９２のクロックと比較して高速であり、ポーリングルーチン５１〜５４は、割込みコントローラ９２より高速に動作する。したがって、制御装置２は、割込みコントローラ９２を用いる場合と比較して、ＭＳＩを高速に処理することができ、ＲＡＩＤ装置１の性能を向上することができる。
【００３２】
次に、ポーリングルーチン５１の処理フローについて説明する。図４は、ポーリングルーチン５１の処理フローを示すフローチャートである。なお、ポーリングルーチン５２〜５４の処理フローも同様である。
【００３３】
図４に示すように、ポーリングルーチン５１は、メモリ３０をポーリングしてＭＳＩ割込み要因すなわちＭＳＩメッセージがあるか否かを判定する（ステップＳ１）。その結果、ＭＳＩ割込み要因がない場合には、ポーリングルーチン５１は、処理を終了する。
【００３４】
一方、ＭＳＩ割込み要因がある場合には、ポーリングルーチン５１は、割込みを処理するＣＰＵコアがアサインされているか否かを判定する（ステップＳ２）。その結果、ＣＰＵコアがアサインされている場合には、ポーリングルーチン５１は、ステップＳ５に進む。ここで、ＣＰＵコアがアサインされている場合とは、例えば、特定の割込み要因は特定のＣＰＵコアで処理する必要がある場合や、別のＣＰＵコアで動作したポーリングルーチンによってＣＰＵコアがアサインされた場合である。
【００３５】
ＣＰＵコアがアサインされていない場合には、ポーリングルーチン５１は、ＩＯ管理モジュールに依頼して最も負荷の低いＣＰＵコアを特定してもらい（ステップＳ３）、特定してもらったＣＰＵコアに割込み処理をアサインする（ステップＳ４）。
【００３６】
ここで、ＩＯ管理モジュールは、コマンド処理を管理するモジュールである。ＩＯ管理モジュールは、例えば、コマンドキューにコマンドを接続する際にコマンド種別に基づいてＣＰＵコアごとに処理負荷に関する点数（低負荷：０、中負荷：１、高付加：２など）を加え、コマンドを処理する際に点数を引く。そして、ＩＯ管理モジュールは、点数が最も低いＣＰＵコアを負荷が最も低いＣＰＵコアとして特定する。
【００３７】
そして、ポーリングルーチン５１は、アサインされたＣＰＵコアは自分が動作するＣＰＵコアであるか否かを判定し（ステップＳ５）、自分が動作するＣＰＵコアでない場合には、ステップＳ１に戻って次のＭＳＩ割込み要因を処理する。
【００３８】
一方、アサインされたＣＰＵコアが自分が動作するＣＰＵコアである場合には、ポーリングルーチン５１は、割込み要因に基づいて割込み処理ハンドラ６１ａ又は６１ｂを呼び出し（ステップＳ６）、ステップＳ１に戻って次のＭＳＩ割込み要因を処理する。
【００３９】
このように、ポーリングルーチン５１は、最も負荷の低いＣＰＵコアに割込み処理をアサインすることで、ＣＰＵコア間の処理の負荷を均等化することができる。
【００４０】
次に、ＩＯタスク間の通信について説明する。タスク間の同期、通信には通常はセマフォが用いられる。すなわち、送信側のタスクがセマフォを受信側のタスクに渡すことによって、タスク間の同期、通信が行われる。
【００４１】
しかしながら、複数のＣＰＵコアがＳＭＰ方式で使用される場合には、セマフォで通信する際に、ＣＰＵコアは、他のＣＰＵコアの状態を知るためにＣＰＵコア間通信を行う。具体的には、ＣＰＵコアは、タスクがセマフォを取得した際に、タスクを動作させてよいかを他のＣＰＵコアに確認するために、ＣＰＵコア間通信を行う。このため、ＳＭＰ方式では、セマフォ性能が悪くなり、装置の性能に影響する。
【００４２】
そこで、制御装置２は、セマフォを用いることなくタスク間通信を行う。制御装置２は、コマンドキューによりタスク間通信を行う。図５Ａ及び図５Ｂは、コマンドキューによるタスク間通信を説明するための図である。図５Ａは、通常通信の場合を示し、図５Ｂは、通常通信より高速な高速通信の場合を示す。
【００４３】
図５Ａに示すように、ＩＯタスク７１は、コマンドキュー７１ａの先頭から順番にコマンドを処理する（１）。ここで、ＩＯタスク７１は、処理の高速化のために、タスク内のコンテクスト（レジスタ空間、マッピング、スタックなど）を共有する複数のスレッドに分割されてＣＰＵコア２１で実行される。
【００４４】
すなわち、タスク切替の際にはタスク用コンテクスト全体の切替が必要になるため、タスク切替では遅延が発生する。一方、スレッド切替の際にはコンテクストの切替が不要であるため、スレッド切替ではタスク切替と比較して高速な切替が可能となる。
【００４５】
各コマンドは、どのスレッドにより処理されるかが予め定められており、処理されるスレッドの情報を宛先スレッドとして有する。図５Ａでは、コマンドキュー７１ａの先頭のコマンド８０はスレッドＡで処理され、コマンドキュー７１ａの２番目のコマンド８０はスレッドＢで処理される。
【００４６】
すなわち、コマンドキュー７１ａの先頭のコマンド８０は、宛先スレッドの情報としてスレッドＡを有し、コマンドキュー７１ａの２番目のコマンド８０は、宛先スレッドの情報としてスレッドＢを有する。
【００４７】
各タスクは、ＯＳが有するタスクスケジューラとは別に、タスク内にスレッドをスケジューリングするスレッドスケジューラとコマンドキューとを有する。スレッドスケジューラは、コマンドキューにつながっている順番にコマンドの宛先スレッドを呼び出し、１つのコマンドのスレッド内での処理が完了してから次のコマンドの処理を開始する。
【００４８】
図６は、スレッドのスケジューリングの一例を示す図である。図６に示すように、スレッドＡ、スレッドＢ及びスレッドＣに分割されてＣＰＵコアで実行されるタスクＡは、他のタスクＢとともにＯＳによりスケジュールされる。
【００４９】
一方、スレッドＡ、スレッドＢ及びスレッドＣは、タスクＡ内のスレッドスケジューラによってスケジュールされ、図６に示す例では、スレッドＡ、スレッドＢ、スレッドＣの順番で実行される。
【００５０】
図５Ａに戻って、コマンド処理中にＩＯタスク７２と通信する要件が発生した場合は、スレッドＡは、ＩＯタスク７２のコマンドキュー７２ａの最後にコマンド８０を接続する（２）。そして、ＩＯタスク７２のスレッドＢの実行後、ＩＯタスク７２のスレッドＡが、ＩＯタスク７１のスレッドＡがＩＯタスク７２のコマンドキュー７２ａの最後に接続したコマンド８０を実行することで（３）、コマンドキューを使用したタスク間通信が実現される。
【００５１】
一方、図５Ｂでは、コマンド処理中にＩＯタスク７２と通信する要件が発生した場合は、ＩＯタスク７１のスレッドＡは、ＩＯタスク７２のコマンドキュー７２ａの先頭にコマンド８０を接続する（２）。
【００５２】
このため、ＩＯタスク７２のスレッドＡは、ＩＯタスク７２のスレッドＢの実行前に、ＩＯタスク７１のスレッドＡがＩＯタスク７２のコマンドキュー７２ａの先頭に接続したコマンド８０を実行する（３）。したがって、図５Ｂに示すタスク間通信は、図５Ａに示したタスク間通信と比較して高速なタスク間通信を実現することができる。
【００５３】
なお、ここでは、ＩＯタスク間の通信にコマンドキューを使用した場合について説明したが、図２に示した割込み処理ハンドラは、コマンドをコマンドキューに接続することで、ＩＯタスクとコマンドキューを用いて通信を行っている。すなわち、コマンドキューを用いた通信は、割込み処理ハンドラとタスクとの間の通信にも用いられる。
【００５４】
次に、コマンドキューによるタスク間通信の処理フローについて説明する。図７Ａは、コマンドキューによるタスク間通信の送信側の処理フローを示すフローチャートであり、図７Ｂは、コマンドキューによるタスク間通信の受信側の処理フローを示すフローチャートである。
【００５５】
送信側のタスクは、コマンド処理中に他のタスクと通信する要件が発生すると、図７Ａに示すように、通信の優先度が高いか否かを判定する（ステップＳ１１）。その結果、通信の優先度が高くない場合、すなわち、通常通信である場合には、送信側のタスクは、通信先のタスクのコマンドキューの最後尾にコマンドを接続する（ステップＳ１２）。
【００５６】
これに対して、通信の優先度が高い場合、すなわち、高速通信である場合には、送信側のタスクは、通信先のタスクのコマンドキューの先頭にコマンドを接続する（ステップＳ１３）。
【００５７】
このように、送信側のタスクが、通信先のタスクのコマンドキューにコマンドを接続することによって、コマンドキューを用いたタスク間通信を実現することができる。
【００５８】
受信側のタスクは、図７Ｂに示すように、タスク内のコマンドキューにコマンドが接続されているか否かを判定する（ステップＳ２１）。その結果、コマンドキューにコマンドが接続されていない場合には、受信側のタスクは、コマンドキューにコマンドが接続されるまでステップＳ２１を繰り返す。
【００５９】
これに対して、コマンドキューにコマンドが接続されている場合には、受信側のタスクは、コマンドキューの先頭のコマンドを実行し（ステップＳ２２）、ステップＳ２１に戻る。
【００６０】
このように、受信側のタスクが、送信側のタスクによりコマンドキューに接続されたコマンドを実行することによって、コマンドキューを用いたタスク間通信を実現することができる。
【００６１】
次に、各ポーリングルーチンによる割込み要因のポーリング方式について説明する。図８Ａは、一般的な割込みポーリング方式を説明するための図であり、図８Ｂは、実施例に係るポーリングルーチンによるポーリング方式を説明するための図である。
【００６２】
図８Ａに示すように、一般的には、定期的なタイマ割込みによりポーリングが行われる。ここで、タイマ割込みによるポーリング処理は、最も高い優先度で実行される。しかしながら、割込みポーリング方式には、チェックする周期が長い場合、割込み要因の発生から検出までに時間を要し、チェックする周期が短い場合、ＣＰＵ負荷が高くなり他の処理に支障が生じるという問題がある。
【００６３】
そこで、実施例に係るポーリングルーチンは、定期的なタイマ割込みによりポーリングを行うのではなく、リアルタイムＯＳの特性を活かし、図８Ｂに示すように、タスクの切れ間、スレッドの切れ間及びアイドル中に割込み要因をポーリングする。
【００６４】
したがって、実施例に係るポーリングルーチンは、割込みのリアルタイム性を確保しながら、割込み資源と割込みコントローラ９２を使用しなくても効率的に割込み要因をチェックすることができる。
【００６５】
図８Ｂでは、タスクＡとタスクＢとの切れ間８５、タスクＢとアイドルとの切れ間８６、アイドル中８７及びスレッドＡ−１とスレッドＡ−２との切れ間８８にポーリングが行われる。
【００６６】
上述してきたように、実施例では、ＰＣＩデバイス５０ａ及び５０ｂがメモリ３０にＭＳＩメッセージを書き込み、ＣＰＵコア２１〜２４でそれぞれ実行されるポーリングルーチン５１〜５４がメモリ３０をポーリングする。したがって、制御装置２は、全てのＣＰＵコア２１〜２４を有効に利用して割込みを処理することができる。
【００６７】
また、実施例では、ポーリングルーチン５１〜５４は、タスクの切れ間、スレッドの切れ間及びアイドル中に割込み要因をポーリングする。したがって、制御装置２は、割込みのリアルタイム性を確保しながら、効率的に割込みを処理することができる。
【００６８】
また、実施例では、ポーリングルーチン５１〜５４は、最も負荷の低いＣＰＵコアに割込み処理を行わせる。したがって、制御装置２は、ＣＰＵコア２１〜２４の負荷を均等化することができる。
【００６９】
また、実施例では、ＩＯタスク７１〜７４は、他のＩＯタスクとのタスク間通信をコマンドキューを用いて行う。したがって、制御装置２は、セマフォを用いることなくＩＯタスク間で通信を行うことができ、ＲＡＩＤ装置１の性能に悪影響を与えることなくＩＯタスク間通信を行うことができる。
【００７０】
なお、実施例では、ＣＰＵが有する複数のＣＰＵコアでそれぞれ動作する複数のポーリングルーチンがポーリングする場合について説明した。しかしながら、本発明はこれに限定されるものではなく、例えば単一コアの複数のＣＰＵなど複数の処理装置でそれぞれ動作する複数のポーリングルーチンがポーリングする場合にも同様に適用することができる。
【００７１】
また、実施例では、ＲＡＩＤ装置について説明したが、本発明はこれに限定されるものではなく、他のストレージ装置の制御装置など複数ＣＰＵコアを有するＣＰＵを用いる他の装置にも同様に適用することができる。
【００７２】
また、実施例では、制御装置２について説明したが、制御装置２は、ポーリングルーチン及び割込み処理ハンドラを有する制御プログラムがＣＰＵコアにより実行されることにより実現される。ＣＰＵコアにより実行される制御プログラムは、ＤＶＤ（Digital  Versatile  Disk）に記憶され、ＤＶＤから読み出されて制御装置２にインストールされる。あるいは、制御プログラムは、ネットワークを介して接続されたコンピュータシステムのデータベースなどに記憶され、これらのデータベースから読み出されて制御装置２にインストールされる。そして、インストールされた制御プログラムは、メモリ３０に読み出されてＣＰＵコアによって実行される。
【符号の説明】
【００７３】
１    ＲＡＩＤ装置
２    制御装置
３    ディスク装置
４    ホスト装置
５    ＰＣＩバス
１０    ＨＢＡ
２０    ＣＰＵ
２１〜２４    ＣＰＵコア
３０    メモリ
４０    ＩＯ制御モジュール
５０，５０ａ，５０ｂ    ＰＣＩデバイス
５１〜５４    ポーリングルーチン
６１ａ〜６４ａ    割込み処理ハンドラ
６１ｂ〜６４ｂ    割込み処理ハンドラ
７１〜７４    ＩＯタスク
７１ａ〜７４ａ    コマンドキュー
８０    コマンド
８５    タスクＡとタスクＢとの切れ間
８６    タスクＢとアイドルとの切れ間
８７    アイドル中
８８    スレッドＡ−１とスレッドＡ−２との切れ間
９１    デバイス
９２    割込みコントローラ
９３    ＣＰＵ
【図１】
2014232382.tif 000003
【図２】
2014232382.tif 000004
【図３】
2014232382.tif 000005
【図４】
2014232382.tif 000006
【図５Ａ】
2014232382.tif 000007
【図５Ｂ】
2014232382.tif 000008
【図６】
2014232382.tif 000009
【図７Ａ】
2014232382.tif 000010
【図７Ｂ】
2014232382.tif 000011
【図８Ａ】
2014232382.tif 000012
【図８Ｂ】
2014232382.tif 000013
【図９】
2014232382.tif 000014