(57)【特許請求の範囲】
【請求項１】
複数のプロセッサコアをそなえ、特定の実行順序で実施される複数のスレッドを有するタスクを、各プロセッサコアで実行するマルチコアプロセッサシステムであって、
排他制御にかかるロック獲得状態のコマンドブロックを管理する処理順序管理部と、
該処理順序管理部によって管理されたコマンドブロックを該プロセッサに割り当てる割当部と、
該排他制御にかかるロック獲得待ち状態のコマンドブロックを管理する排他管理部と、
該排他管理部において管理されている該ロック獲得待ち状態のコマンドブロックがロック獲得状態になった際に、当該コマンドブロックを、該排他管理部から解放するとともに該処理順序管理部に登録させる移行制御部と、
該スレッドにおいて処理されたコマンドブロックを、該排他管理部におけるロック獲得待ち状態のコマンドブロックの先頭に再度登録する再登録処理部とをそなえることを特徴とする、マルチコアプロセッサシステム。
【請求項２】
該排他管理部が、上位装置からのコマンド受付順に従って、該コマンドブロックを該排他管理部に登録し、
該移行制御部が、先に当該排他管理部に登録された該コマンドブロックから順に該処理順序管理部に登録し、
該割当部が、先に該処理順序管理部に登録された該コマンドブロックから順番に、当該コマンドブロックを対応する該プロセッサコアに割り当てることを特徴とする、請求項１記載のマルチコアプロセッサシステム。
【請求項３】
該コマンドブロックに対して、当該コマンドブロックを処理するプロセッサコアを示すプロセッサ識別情報を設定するプロセッサ情報制御部をそなえ、
該プロセッサ情報制御部が、該コマンドブロックを処理した該プロセッサコアを特定する該プロセッサ識別情報を、当該コマンドブロックに設定することを特徴とする、請求項１又は２記載のマルチコアプロセッサシステム。
【請求項４】
該コマンドブロックに対して、当該コマンドブロックについてのスレッド間での排他設定を表すスレッド排他情報を設定する排他制御部をそなえ、
該排他制御部によって設定された該スレッド排他情報に基づいて、該スレッドの読み出しを行なうことを特徴とする、請求項１〜請求項３のいずれか１項に記載のマルチコアプロセッサシステム。
【請求項５】
該複数のプロセッサコアのそれぞれに対応する、複数のスレッドセットを生成するスレッドセット生成部をそなえることを特徴とする、請求項１〜請求項４のいずれか１項に記載のマルチコアプロセッサシステム。
【請求項６】
複数のプロセッサコアをそなえ、特定の実行順序で実施される複数のスレッドを有するタスクを、各プロセッサコアで実行するマルチコアプロセッサシステムにおけるスケジュール機能をコンピュータに実行させるスケジュール管理プログラムであって、
排他制御にかかるロック獲得状態のコマンドブロックを管理する処理順序管理部と、
該処理順序管理部によって管理されたコマンドブロックを該プロセッサコアに割り当てる割当部と、
該排他制御にかかるロック獲得待ち状態のコマンドブロックを管理する排他管理部と、
該排他管理部において管理されている該ロック獲得待ち状態のコマンドブロックがロック獲得状態になった際に、当該コマンドブロックを、該排他管理部から解放するとともに該処理順序管理部に登録させる移行制御部と、
該スレッドにおいて処理されたコマンドブロックを、該排他管理部におけるロック獲得待ち状態のコマンドブロックの先頭に再度登録する再登録処理部として、該コンピュータを機能させることを特徴とする、スケジュール管理プログラム。
【請求項７】
複数のプロセッサコアをそなえ、特定の実行順序で実施される複数のスレッドを有するタスクを、各プロセッサで実行するマルチコアプロセッサシステムにおけるスケジュール機能をコンピュータに実行させるスケジュール管理プログラムを記録したコンピュータ読取可能な記録媒体であって、
該スケジュール管理プログラムが、
排他制御にかかるロック獲得状態のコマンドブロックを管理する処理順序管理部と、
該処理順序管理部によって管理されたコマンドブロックを該プロセッサコアに割り当てる割当部と、
該排他制御にかかるロック獲得待ち状態のコマンドブロックを管理する排他管理部と、
該排他管理部において管理されている該ロック獲得待ち状態のコマンドブロックがロック獲得状態になった際に、当該コマンドブロックを、該排他管理部から解放するとともに該処理順序管理部に登録させる移行制御部と、
該スレッドにおいて処理されたコマンドブロックを、該排他管理部におけるロック獲得待ち状態のコマンドブロックの先頭に再度登録する再登録処理部として、該コンピュータを機能させることを特徴とする、スケジュール管理プログラムを記録したコンピュータ読取可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本件は、複数のプロセッサコアをそなえ、特定の実行順序で実施される複数のスレッドを有するタスクを各プロセッサコアで実行するマルチコアプロセッサシステムにおけるスケジューリングの技術に関する。
【背景技術】
【０００２】
図２１は情報処理装置のハードウェア構成を模式的に示す図である。
この図２１に示す情報処理装置１０００は、例えば、ストレージ装置であり、ホスト装置１００１に接続され、ホスト装置１００１から送信されるコマンドを順次処理する。
情報処理装置１０００は、図２１に示すように、ＨＢＡ（Host Bus Adapter）モジュール１００３，ＣＰＵコア（Central Processing Unit Core）１００４，メモリ（Memory）１００５，バックエンド（Backend）モジュール１００６及び、複数のハードディスク（Disk）１００７をそなえている。
【０００３】
この情報処理装置１０００においては、ＣＰＵコア１００４においてリアルタイムＯＳ（Operating System）が動作しており、ホスト装置１００１から到着したコマンドはＨＢＡモジュール１００３経由でメモリ１００５に書き込まれる。その後、リアルタイムＯＳ上で動作するファームウェアによりコマンド処理をされた上で、バックエンドモジュール１００６経由でハードディスク１００７に書き込まれる。
【０００４】
この情報処理装置１０００は、１つのＣＰＵコア１００４をそなえるユニプロセシング（Uni Processing）システム環境である。
図２２及び図２３はユニプロセッシングシステムにおけるタスクの切り替え手法を例示する図であり、それぞれ、タスクＡとタスクＢとの２つのタスクの切り替えを行なう例を示している。
【０００５】
ユニプロセッシングシステム環境において複数のタスクを処理する場合には、例えば、図２２に示すように、優先度に応じてタスクの切り替えを行なう手法が知られている。
また、昨今、複数のＣＰＵコアをそなえたプロセッサが用いられるようになってきている。ストレージ装置のような組み込み型装置にも、このような複数のＣＰＵコアをそなえたプロセッサを採用することが考えられ、これらの複数のＣＰＵコアを有効に活用することによる性能向上が期待される。
【０００６】
ここで、性能向上のために、複数ＣＰＵコアをＳＭＰ（Symmetric Multiple Processor：対称型マルチプロセッサ）として使用することを考える。リアルタイムＯＳ上での一般的なＳＭＰ手法を適用して複数のタスクのスケジューリングを行なう場合には、タスクを各ＣＰＵコアに動的に割り当てることによりスケジューリングが行なうことになる（例えば、下記特許文献１）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００６−３９８２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、このような従来のタスクのスケジューリング手法においては、タスク切替の際に、タスク用のコンテクスト全体（レジスタ空間，マッピング，スタック等）の切替が必要なため、これによりタスク切替時間の遅延が生じるという課題がある。
本件の目的の一つは、このような課題に鑑み創案されたもので、マルチコアプロセッサシステムにおいて、タスクを効率的に処理できるようにすることである。
【０００９】
なお、前記目的に限らず、後述する発明を実施するための形態に示す各構成により導かれる作用効果であって、従来の技術によっては得られない作用効果を奏することも本発明の他の目的の1つとして位置付けることができる。
【課題を解決するための手段】
【００１０】
このため、このマルチコアプロセッサシステムは、特定の実行順序で実施される複数のスレッドを有するタスクを、各プロセッサコアで実行するマルチコアプロセッサシステムであって、排他制御にかかるロック獲得状態のコマンドブロックを管理する処理順序管理部と、該処理順序管理部によって管理されたコマンドブロックを該プロセッサに割り当てる割当部と、該排他制御にかかるロック獲得待ち状態のコマンドブロックを管理する排他管理部と、該排他管理部において管理されている該ロック獲得待ち状態のコマンドブロックがロック獲得状態になった際に、当該コマンドブロックを、該排他管理部から解放するとともに該処理順序管理部に登録させる移行制御部と、該スレッドにおいて処理されたコマンドブロックを、該排他管理部におけるロック獲得待ち状態のコマンドブロックの先頭に再度登録する再登録処理部とをそなえる。
【００１１】
更に、このスケジュール管理プログラムは、複数のプロセッサコアをそなえ、特定の実行順序で実施される複数のスレッドを有するタスクを、各プロセッサコアで実行するマルチコアプロセッサシステムにおけるスケジュール機能をコンピュータに実行させるスケジュール管理プログラムであって、排他制御にかかるロック獲得状態のコマンドブロックを管理する処理順序管理部と、該処理順序管理部によって管理されたコマンドブロックを該プロセッサコアに割り当てる割当部と、該排他制御にかかるロック獲得待ち状態のコマンドブロックを管理する排他管理部と、該排他管理部において管理されている該ロック獲得待ち状態のコマンドブロックがロック獲得状態になった際に、当該コマンドブロックを、該排他管理部から解放するとともに該処理順序管理部に登録させる移行制御部と、該スレッドにおいて処理されたコマンドブロックを、該排他管理部におけるロック獲得待ち状態のコマンドブロックの先頭に再度登録する再登録処理部として、該コンピュータを機能させる。
【００１２】
なお、このコンピュータ読取可能な記録媒体は、上述したスケジュール管理プログラムを記録したものである。
【発明の効果】
【００１３】
開示のマルチコアプロセッサシステム，スケジュール管理プログラム及び同プログラムを記録したコンピュータ読取可能な記録媒体によれば、以下の少なくともいずれか１つの効果ないし利点が得られる。
（１）タスクを効率的に処理できる。
（２）複数プロセッサコアによりコマンドブロックを並行して処理することができ、コマンド処理の並列度を高め、処理を高速化することができる。
【００１４】
（３）複数のコマンドブロックを受け付け順で処理することができ、順序性を保証することができる。
（４）スレッド単位排他制御を容易に実現することができる。
【図面の簡単な説明】
【００１５】
【図１】実施形態の一例としての情報処理装置におけるスケジューラの機能構成を模式的に示す図である。
【図２】実施形態の一例としての情報処理装置のハードウェア構成を模式的に示す図である。
【図３】実施形態の一例としての情報処理装置におけるスケジューラの処理手法を模式的に示す図である。
【図４】実施形態の一例としての情報処理装置におけるコマンドブロックを模式的に示す図である。
【図５】実施形態の一例としての情報処理装置におけるMutexQ及びMSGQのデータ管理方法を例示する図である。
【図６】実施形態の一例としての情報処理装置におけるスレッドセットを複製して多重化した状態を例示する図である。
【図７】実施形態の一例としての情報処理装置における排他ＩＤ管理テーブルの例を示す図である。
【図８】実施形態の一例としての情報処理装置におけるコマンドブロックの処理の受け渡しを模式的に示す図である。
【図９】実施形態の一例としての情報処理装置におけるスレッド間での排他機能を説明するための図である。
【図１０】実施形態の一例としての情報処理装置におけるスレッド間での排他機能を説明するための図である。
【図１１】実施形態の一例としての情報処理装置におけるスレッド間での排他機能を説明するための図である。
【図１２】実施形態の一例としての情報処理装置におけるコマンド実行順序保証機能を説明するための図である。
【図１３】実施形態の一例としての情報処理装置における排他ＩＤ管理テーブルの参照手法を説明するための図である。
【図１４】実施形態の一例としての情報処理装置におけるコマンド実行順序保証機能の変形例を説明するための図である。
【図１５】実施形態の一例としての情報処理装置における弱いＣＰＵアフィニティ機能を説明するための図である。
【図１６】実施形態の一例としての情報処理装置における弱いＣＰＵアフィニティ機能を説明するための図である。
【図１７】実施形態の一例としての情報処理装置における弱いＣＰＵアフィニティ機能を説明するための図である。
【図１８】実施形態の一例としての情報処理装置における弱いＣＰＵアフィニティ機能を説明するための図である。
【図１９】実施形態の一例としての情報処理装置における弱いＣＰＵアフィニティ機能が保証されない場合を例示する図である。
【図２０】実施形態の一例としての情報処理装置における強いＣＰＵアフィニティ機能を説明するための図である。
【図２１】情報処理装置のハードウェア構成を模式的に示す図である。
【図２２】ユニプロセッシングシステムにおけるタスクの切り替え手法を例示する図である。
【図２３】ユニプロセッシングシステムにおけるタスクの切り替え手法を例示する図である。
【発明を実施するための形態】
【００１６】
以下、図面を参照して本マルチコアプロセッサシステムに係る実施の形態を説明する。
図１は実施形態の一例としての情報処理装置１におけるスケジューラの機能構成を模式的に示す図、図２はその情報処理装置のハードウェア構成を模式的に示す図である。
本情報処理装置１は、図２に示すように、ホスト装置２と通信回線を介して通信可能に接続されるコンピュータ装置であり、ホスト装置２から送信されるコマンドを順次処理するものであって、例えばストレージ装置である。
【００１７】
図２に示す例においては、本情報処理装置１は、ＨＢＡモジュール１０，プロセッサユニット１４，メモリ１１，バックエンドモジュール１２及び、複数のストレージ１３をそなえている。
ストレージ１３は、ハードディスクドライブ（Hard disk drive：ＨＤＤ）、ＳＳＤ（Solid State Drive）等の記憶装置であって、種々のデータを読み出し可能に格納する。そして、本情報処理装置１は、これらの複数のストレージ１３を用いてＲＡＩＤ（Redundant Arrays of Inexpensive Disks）を実現することにより、ＲＡＩＤ装置として機能する。
【００１８】
バックエンドモジュール１２は、ストレージ１３へのアクセス処理を行なうものであり、ストレージ１３の記憶領域における所定位置にアクセスし、データの書き込みや読み出しを行なう。ＨＢＡ１０は、ホスト装置２と通信可能に接続するための通信装置である。
メモリ１１は、プロセッサユニット１４においてプログラムを実行する際に、各種データやプログラムを一時的に格納（展開）する記録装置である。
【００１９】
プロセッサユニット１４は、ｎ個（ｎは２以上の自然数）のＣＰＵコア（プロセッサコア）２０−１〜２０−ｎをそなえた、マルチコアプロセッサである。なお、以下、ＣＰＵコアを示す符号としては、複数のＣＰＵコアのうち１つを特定する必要があるときには符号２０−１〜２０−ｎを用いるが、任意のＣＰＵコアを指すときには符号２０を用いる。又、このＣＰＵコアを表す符合における−（ハイフン）以降の数字はそのＣＰＵコア２０を特定するための識別子（ＣＰＵ識別ＩＤ）であり、後述する担当ＣＰＵ番号としても用いられる。又、以下、個々のＣＰＵコア２０を、符号“＃”とＣＰＵ識別ＩＤとを組み合わせることにより、「ＣＰＵコア＃１」のように表す場合がある。
【００２０】
本情報処理装置１においては、これらのＣＰＵコア２０をＳＭＰとして使用する。
本情報処理装置１においては、ホスト装置２から送信されるストレージコマンドを受け付け、このストレージコマンドに関する処理を行なった後、ストレージ１３に、データの書き込みもしくはデータの読み出しを行なう。
すなわち、本情報処理装置１においては、コマンドの受け付け、処理、書き込み（読み出し）のような複数の処理が、決められた順序で実行される。
【００２１】
図３は実施形態の一例としての情報処理装置１におけるスケジューラの処理手法を模式的に示す図，図４は実施形態の一例としての情報処理装置１におけるコマンドブロックＣＢを模式的に示す図である。又、図５は実施形態の一例としての情報処理装置１におけるMutexQ及びMSGQのデータ管理方法を例示する図である。
本情報処理装置１においては、同時に複数のタスクを処理可能なマルチタスクシステムとして構成されている。そして、各タスクを、コンテクストを共有するスレッド単位に分割し、これらのスレッド単位で切り替える。ここで、スレッドとは、プログラムの単位であって、例えば、関数のグループである。
【００２２】
本情報処理装置１のスレッドスケジューラ３０は、例えば、プロセッサユニット１４のいずれかのＣＰＵコア２０や図示しない他のプロセッサが、スケジュール管理プログラムを実行することにより実現される機能である。このスレッドスケジューラは、図１に示すように、排他管理部３１，処理順序管理部３２，移行制御部３３，割当部３４，スレッド別排他管理部３５，再登録処理部３６，プロセッサ情報制御部３７，抑止設定情報制御部３８，ロック制御部３９，排他制御部４０，抑止制御部４１及びスレッドセット生成部４２としての機能をそなえている。
【００２３】
なお、これらの排他管理部３１，処理順序管理部３２，移行制御部３３，割当部３４，スレッド別排他管理部３５，再登録処理部３６，プロセッサ情報制御部３７，抑止設定情報制御部３８，ロック制御部３９，排他制御部４０，抑止制御部４１及びスレッドセット生成部４２としての機能を実現するためのプログラム（スケジュール管理プログラム）は、例えばフレキシブルディスク，ＣＤ（ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−ＲＷ等），ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−ＲＡＭ，ＤＶＤ−Ｒ，ＤＶＤ＋Ｒ，ＤＶＤ−ＲＷ，ＤＶＤ＋ＲＷ，ＨＤ  ＤＶＤ等），ブルーレイディスク，磁気ディスク，光ディスク，光磁気ディスク等の、コンピュータ読取可能な記録媒体に記録された形態で提供される。そして、コンピュータはその記録媒体からプログラムを読み取って内部記憶装置または外部記憶装置に転送し格納して用いる。又、そのプログラムを、例えば磁気ディスク，光ディスク，光磁気ディスク等の記憶装置（記録媒体）に記録しておき、その記憶装置から通信経路を介してコンピュータに提供するようにしてもよい。
【００２４】
排他管理部３１，処理順序管理部３２，移行制御部３３，割当部３４，スレッド別排他管理部３５，再登録処理部３６，プロセッサ情報制御部３７，抑止設定情報制御部３８，ロック制御部３９，排他制御部４０，抑止制御部４１及びスレッドセット生成部４２としての機能を実現する際には、内部記憶装置（本実施形態ではメモリ１１等）に格納されたプログラムがコンピュータのマイクロプロセッサによって実行される。このとき、記録媒体に記録されたプログラムをコンピュータが読み取って実行するようにしてもよい。
【００２５】
なお、本実施形態において、コンピュータとは、ハードウェアとオペレーティングシステムとを含む概念であり、オペレーティングシステムの制御の下で動作するハードウェアを意味している。又、オペレーティングシステムが不要でアプリケーションプログラム単独でハードウェアを動作させるような場合には、そのハードウェア自体がコンピュータに相当する。ハードウェアは、少なくとも、ＣＰＵ等のマイクロプロセッサと、記録媒体に記録されたコンピュータプログラムを読み取るための手段とをそなえており、本実施形態においては、情報処理装置１がコンピュータとしての機能を有しているのである。
【００２６】
また、スレッドスケジューラ３０は、図３に示すようにMutexQ及びMSGQを１つずつそなえる。なお、これらのMutexQ及びMSGQは、タスク毎ではなく本情報処理装置１において１つずつそなえられる。
MSGQは、排他制御にかかるロック獲得状態のコマンドブロックＣＢを管理するキューであり、ロックを獲得し処理可能な状態（ロック獲得状態）となっているコマンドブロックＣＢが登録される。なお、以下、キューにコマンドブロックＣＢを登録することを、コマンドブロックＣＢを「つなぐ」もしくは「接続する」と表現する場合がある。
【００２７】
コマンドブロックＣＢは、スレッドにおいて実行（処理）される機能単位であり、例えば、上位装置であるホスト装置２から送信され受け付けるリードコマンドやライトコマンドである。
MSGQに登録されたコマンドブロックＣＢは、ＦＩＦＯ（First In, First Out）で、後述する割当部３４によって順番に読み出され、対応するタスクのスレッドに受け渡され、そのスレッドにおいて実行される。
【００２８】
また、本実施形態においては、新規コマンドブロックＣＢの処理に際して、予め決められたスレッド実行順序に従って処理が遷移するものとする。すなわち、新規のコマンドブロックＣＢは、最初にスレッドＡで処理され、その後には、必ずスレッドＢへと受け渡され、更に、その後にスレッドＣに受け渡されるものとする。
このように、コマンド受け付け後に、スレッドＡ、スレッドＢ、スレッドＣの順番でコマンドブロックＣＢが処理される本情報処理装置１において、これらの処理順序が決まっている複数のスレッドＡ、スレッドＢ及びスレッドＣの組み合わせを、スレッドセットという。すなわち、スレッドセットは、それぞれ特定機能を有する複数種類のスレッドを所定の処理順序で並べたものである。
【００２９】
コマンドブロックＣＢには、図４に示すように、担当ＣＰＵ番号（プロセッサ識別情報）とスレッド排他情報とが付加されている。
担当ＣＰＵ番号は、そのコマンドブロックＣＢを次に処理するＣＰＵコア２０を特定する情報であり、例えば、前述したＣＰＵ識別番号が用いられる。又、この担当ＣＰＵ番号は、後述するプロセッサ情報制御部３７によって設定される。
【００３０】
スレッド排他情報は、そのコマンドブロックＣＢについてのスレッド間での排他設定に関する情報であって、スレッド排他ＩＤと排他状態フラグとをそなえる。
スレッド排他ＩＤは、排他しようとしているスレッドを表す情報であり、排他状態フラグは、そのコマンドブロックＣＢが排他ロックを獲得した状態（排他ロック獲得状態）であるか否かを表す情報である。
【００３１】
コマンドブロックＣＢは、図５に示すように、担当ＣＰＵ番号やスレッド排他ＩＤ，排他状態フラグ，関数等のデータが格納されているデータ格納領域を示すデータアドレス，ＣＰＵアフィニティ（Affinity）フラグ等を関連付けて構成されている。
なお、ＣＰＵアフィニティフラグ（抑止設定情報）は、強いＣＰＵアフィニティ機能を有効にする場合に設定されるフラグである。ここで、強いＣＰＵアフィニティ機能とは、特定のハードウェア資源にアクセスするブロック毎にＣＰＵコア２０を固定することにより、ハードウェア資源へのアクセスに競合を発生させず、スピンロック（SpinLock）等の手法を用いることなくハードウェア資源の排他制御を実現するものである。この強いＣＰＵアフィニティ機能についての詳細は後述する。
【００３２】
MutexQは、排他制御にかかるロック獲得待ち状態のコマンドブロックＣＢを管理するキューである。このMutexQには、他のコマンドブロックＣＢがロックを獲得していることにより実行不可な状態であり、ロックを獲得すべく待機している状態（ロック獲得待ち状態）のコマンドブロックＣＢが登録される。
このMutexQに登録されたコマンドブロックＣＢは、後述する処理順序管理部３２によって読み出され、対応するタスクのスレッドに受け渡され、そのスレッドにおいて実行（処理）される。
【００３３】
そして、本実施形態においては、MutexQにつながったコマンドブロックＣＢがロック獲得状態になると、そのコマンドブロックＣＢは、後述する移行制御部３３により、MutexQから解放されMSGQに登録される。
MutexQは、図５に示すように、メモリ１１における複数のコマンドブロックＣＢのデータの格納アドレスを数珠つなぎに関連付けることにより管理している。例えば、MutexQの先頭となるコマンドブロックＣＢが格納されている領域の先頭アドレスを保持するとともに、このMutexQに登録された各コマンドブロックＣＢに、それぞれに後続するコマンドブロックＣＢの格納先の先頭アドレスをＮＥＸＴとして保持している。
【００３４】
また、MSGQも、MutexQと同様に、メモリ１１における複数のコマンドブロックＣＢのデータの格納アドレスを数珠つなぎに関連付けることにより管理している。すなわち、MSGQの先頭となるコマンドブロックＣＢが格納されている領域の先頭アドレスを保持するとともに、このMSGQに登録された各コマンドブロックＣＢに、それぞれに後続するコマンドブロックＣＢの先頭アドレスをＮＥＸＴとして保持している。
【００３５】
なお、図５に示す例においては、便宜上、一つのコマンドブロックＣＢについてのみそのデータ構成を示している。
そして、このＮＥＸＴを順次たどることにより、MutexQやMSGQに登録されている各コマンドブロックＣＢを取得することができる。又、先頭コマンドブロックＣＢアドレスやＮＥＸＴの値を、適宜、書き換えることにより、任意のコマンドブロックＣＢをMutexQやMSGQに登録したり、又、MutexQやMSGQから特定のコマンドブロックＣＢを取り外す（解放する）ことができる。
【００３６】
排他管理部３１は、上述したMutexQを用いて排他制御にかかるロック獲得待ち状態のコマンドブロックＣＢを管理する。
処理順序管理部３２は、上述したMSGQを用いて排他制御にかかるロック獲得状態のコマンドブロックＣＢを管理する。
移行制御部３３は、MutexQに登録されているロック獲得待ち状態のコマンドブロックＣＢがロック獲得状態になった際に、そのコマンドブロックＣＢを、MutexQから解放するとともにMSGQに登録させる制御を行なう。
【００３７】
スレッドセット生成部４２は、上述したスレッドセットを複製して、ＣＰＵコア２０数分のスレッドセットを作成する。このように、ＣＰＵコア２０の数と同数のスレッドセットを生成し、各ＣＰＵコア２０に対してそれぞれスレッドセットを割り当てることにより、ＣＰＵコア２０毎にコマンド処理を動作させることが可能となり、コマンド処理の並列度を高めることができる。
【００３８】
図６は実施形態の一例としての情報処理装置１におけるスレッドセットを複製して多重化した状態を例示する図である。
この図６に示す例においては、スレッドＡをスレッドＡ０，Ａ１，・・・，Ａｎに、スレッドＢをスレッドＢ０，Ｂ１，・・・，Ｂｎに、スレッドＣをスレッドＣ０，Ｃ１，・・・，Ｃｎに多重化した状態を示す。
【００３９】
ロック制御部３９は、複数のＣＰＵコア２０間において、同一スレッドを排他的に実行する排他制御を行なう。例えば、スレッドＡがいずれかのＣＰＵコア２０（例えば、ＣＰＵコア＃２）で実行されている間は、同時期に他のＣＰＵコア＃１，＃３〜＃ｎではスレッドＡを実行しない。
また、スレッドセット生成部４２によって多重化された同一スレッドも同時に実行されることはない。すなわち、スレッドＡ０，Ａ１，・・・，Ａｎが同時に実行されることはない。同様に、スレッドＢ０，Ｂ１，・・・，Ｂｎが同時に実行されることはなく、又、スレッドＣ０，Ｃ１，・・・，Ｃｎが同時に実行されることもない。
【００４０】
ロック制御部３９は、コマンドブロックＣＢにスレッド排他ＩＤを設定するとともに、同一のスレッド排他ＩＤをそなえるコマンドブロックＣＢにおいては、同時期には１つのコマンドブロックＣＢに対してだけ実行許可を与える（ロック権を付与する）。なお、スレッドに関してロック権を付与されたコマンドブロックＣＢをロック獲得状態という。又、スレッドに関して、いずれのコマンドブロックＣＢもロックを獲得していない状態をロック未獲得状態という。
【００４１】
また、このロック制御部３９は、ロック獲得状態を排他ＩＤ管理テーブルＴに登録する。図７は実施形態の一例としての情報処理装置１における排他ＩＤ管理テーブルＴの例を示す図である。
排他ＩＤ管理テーブルＴは、この図７に示すように、排他ＩＤに対して、その排他ＩＤがロック獲得状態である旨の情報（図７に示す例では“獲得済”）もしくは、その排他ＩＤがロック未獲得状態である旨の情報（図７に示す例では“獲得未”）が登録される。
【００４２】
プロセッサ情報制御部３７は、コマンドブロックＣＢに対して、上述した担当ＣＰＵ番号を設定する。プロセッサ情報制御部３７は、図５に示すように、コマンドブロックＣＢにおける特定の領域に担当ＣＰＵ番号としてＣＰＵ識別番号を設定する。
排他制御部４０は、コマンドブロックＣＢに対して、上述したスレッド排他情報を設定する。この排他制御部４０は、図５に示すように、コマンドブロックＣＢにおける特定の領域にスレッド排他ＩＤと排他状態フラグとを設定する。
【００４３】
割当部３４は、MSGQによって管理されたコマンドブロックＣＢを、ＣＰＵコア２０に割り当てる。この割当部３４は、例えば、コマンドブロックＣＢに含まれる担当ＣＰＵ番号を参照し、その担当ＣＰＵ番号に相当するＣＰＵコア２０（タスク）にコマンドブロックＣＢを割り当てる。
なお、コマンドブロックＣＢにおいて、担当ＣＰＵ番号が登録されていない場合には、そのコマンドブロックＣＢはいずれのＣＰＵコア２０で処理してもよい。この場合、割当部３４は、その時点において処理が割り振られていない（空いている）ＣＰＵコア２０や、一番最初に空き状態となったＣＰＵコア２０に、そこのコマンドブロックＣＢを割り当てる。
【００４４】
抑止制御部４１は、割当部３４がコマンドブロックＣＢをＣＰＵコア２０に割り当てる際に、そのコマンドブロックＣＢに対応付けられたＣＰＵコア２０が他の処理を実行中の場合に、このＣＰＵコア２０が実行中の処理を終了するまで、割当部３４の処理を抑止する。なお、この抑止制御部４１としての機能は、コマンドブロックＣＢのＣＰＵアフィニティフラグに、強いＣＰＵアフィニティ機能を有効にする旨の設定値（例えば“１”）が設定されている場合に有効となる。例えば、コマンドブロックＣＢのＣＰＵアフィニティフラグに“１”が設定されている場合に、強いＣＰＵアフィニティ機能を有効にする。又、コマンドブロックＣＢにおいてＣＰＵアフィニティフラグが、強いＣＰＵアフィニティを無効にする旨の設定に設定されている場合には（例えば“０”）、抑止制御部４１は割当部３４の処理を抑止しない。又、ＣＰＵアフィニティフラグは、抑止設定情報制御部３８により設定される。
【００４５】
抑止設定情報制御部３８は、コマンドブロックＣＢに対して、抑止制御部４１による機能を有効にするか否かを示すＣＰＵアフィニティフラグを設定する。抑止設定情報制御部３８は、例えば、オペレータが図示しないキーボードやマウス等の入力装置を介して、強いＣＰＵアフィニティを有効にする旨の入力操作を行なった場合に、各コマンドブロックＣＢのＣＰＵアフィニティフラグに１を設定する。
【００４６】
スレッド別排他管理部３５は、排他制御にかかるロック獲得待ち状態のコマンドブロックＣＢをスレッド毎に管理するものであり、ロック獲得待ち状態のコマンドブロックＣＢをホスト装置２からのコマンド受付順に従って管理する。このスレッド別排他管理部３５は、後述の如く、排他ＩＤ毎に作成されたキュー（排他ＩＤキュー）を用いて、スレッド毎のロック獲得待ち状態のコマンドブロックＣＢを管理する。
【００４７】
再登録処理部３６は、スレッドにおいて処理されたコマンドブロックＣＢを、MutexQの先頭に再度登録する。
以下、本情報処理装置１のスケジューラ３０がそなえる各種機能をについて説明する。
（１）スレッドの多重化機能
本情報処理装置１においては、スレッドはコマンド受け付け後に、スレッドＡ、スレッドＢ、スレッドＣの固定された順番でコマンドを処理する。このため、単純にスレッドを複数のＣＰＵコア２０に動的に割り当てるだけでは、コマンド処理の並列度は上がらず、処理性能は向上しない。そこで、スレッドセット生成部４２が、スレッドＡ，スレッドＢ及びスレッドＣからなるスレッドセットを複製することでコマンド処理の並列度を高める。本実施形態においては、スレッドセット生成部４２は、プロセッサユニット１４にそなえられたＣＰＵコア２０の数（ｎ個）と同数のスレッドセットを生成する。
【００４８】
図８は実施形態の一例としての情報処理装置１におけるコマンドブロックＣＢの処理の受け渡しを模式的に示す図である。
この図８に示すように、スレッドセットを複数生成することにより、複数のＣＰＵコア２０を用いて並列にコマンド処理を動作させることが可能となり、タスクを効率的に処理することができる他、各ＣＰＵコア２０でスレッド遷移が可能となる。
【００４９】
これにより、実施形態の一例としての情報処理装置１においては、コマンドブロックＣＢは同一ＣＰＵコア２０上のスレッドセットで処理を継続でき、各ＣＰＵコア２０においてＣＰＵキャッシュのヒット率が向上し、更なる性能向上が見込まれる。
（２）スレッド間での排他機能
さて、上述の如く、スレッドセットを多重化することにより並列度を高めることができるが、スレッド間の共通資源への排他処理のオーバーヘッドが大きくなるおそれがある。そこで、スレッド単位の並列動作を制限する機能をそなえることで、排他処理のオーバーヘッドを極小化する。
【００５０】
前述したように、本情報処理装置１においては、スレッド単位の排他処理によって、例えばスレッドＡ０，Ａ１，Ａ２，・・・Ａｎは同一タイミングではどれか一つのＣＰＵコア２０でしか動作しない。これによりスレッドＡｘ（ｘは０≦ｘ≦ｎの整数）のみ使用する共通資源についてはスレッド内での排他処理が不要となる。
ここで、スレッドＡを多重化して生成したスレッドＡ０，Ａ１，・・・，Ａｎの排他をスレッド排他ＩＤ１（ＩＤ１と表す場合がある）とする。同様に、スレッドＢを多重化して生成したスレッドＢ０，Ｂ１，・・・，Ｂｎの排他をスレッド排他ＩＤ２（ＩＤ２と表す場合がある）とする。又、スレッドＣを多重化して生成したスレッドＣ０，Ｃ１，・・・，Ｃｎの排他をスレッド排他ＩＤ３（ＩＤ３と表す場合がある）とする。
【００５１】
スケジューラ３０によるスケジューリング時におけるスレッド排他の具体的手法を、図９〜図１１を参照しながら説明する。
図９〜図１１は実施形態の一例としての情報処理装置１におけるスレッド間での排他機能を説明するための図である。
なお、以下、図中、二重線の四角形で囲まれたスレッド排他ＩＤは、ロック獲得状態であることを示し、又、一重線の四角形で囲まれたスレッド排他ＩＤはロック獲得待ち状態であることを示す。すなわち、排他状態フラグが“１”の状態を二重線の四角形で囲まれたスレッド排他ＩＤによって表すとともに、排他状態フラグが“０”の状態を一重線の四角形で囲まれたスレッド排他ＩＤで表す。
【００５２】
図９に示す状態においては、MutexQにロック獲得待ちの状態のコマンドブロックＣＢ［Ｙ］，［Ｚ］がつながっており、又、MSGQに、ロック獲得状態のコマンドブロックＣＢ［Ｘ］がつながっている。
また、この図９に示す状態においては、スレッド排他ＩＤ１はロック状態であるので、コマンドブロックＣＢ［Ｙ］はMSGQにつながれない。
【００５３】
（ａ１）スケジューラ３０は、MutexQのコマンドブロックＣＢを先頭から探索し（図９のａ１参照）、先ず、このMutexQの先頭であるコマンドブロックＣＢ［Ｙ］の評価を行なう。
このスレッドＡ用のスレッド排他ＩＤ１がロック獲得状態であるので、スケジューラ３０は、次のコマンドブロックＣＢを探索する。
【００５４】
（ａ２）次に、MutexQのコマンドブロックＣＢ［Ｚ］の評価を行なう。ここで、スレッドＢ用のスレッド排他ＩＤ２がロック未獲得状態であるので、移行制御部３３は、このコマンドブロックＣＢ［Ｚ］をロック獲得状態に変更した後、MutexQから切り離してMSGQにつなげる（図１０のａ２参照）。
（ａ３）MSGQには、スレッド排他ＩＤがロック獲得状態のコマンドブロックＣＢだけがつながっている。そこで、割当部３４は、MSGQの先頭のコマンドブロックＣＢ［Ｘ］をＣＰＵコア＃０で動作するタスク０に割り当てる。ＣＰＵコア＃０で動作するタスク０内のスレッドスケジューラがコマンドブロックＣＢ［Ｘ］を実行する（図１０のａ３参照）。
【００５５】
（ａ４）次に、割当部３４が、コマンドブロックＣＢ［Ｚ］をＣＰＵコア＃１で動作するタスク１に割り当てる。ＣＰＵコア＃１で動作するタスク１内のスレッドスケジューラがコマンドブロックＣＢ［Ｚ］を実行する（図１０のａ４参照）。
（ａ５）コマンドブロックＣＢ［Ｘ］が完了すると（図１０のａ５参照）、ロック制御部３９がスレッドＡのスレッド排他ＩＤ１をロック未獲得状態にする。
【００５６】
（ａ６）コマンドブロックＣＢ［Ｚ］が完了すると（図１０のａ６参照）、ロック制御部３９がスレッドＢのスレッド排他ＩＤ２をロック未獲得状態にする。これらにより、他のコマンドブロックＣＢがロックを獲得できるようになる。
（ａ７）上記（ａ５）により、コマンドブロックＣＢ［Ｙ］のスレッドＡのスレッド排他ＩＤ１がロック未獲得状態となったので、移行制御部３３が、上記（ａ２）と同様に、コマンドブロックＣＢ［Ｙ］をロック獲得状態に変更後、MSGQにつなぐ（図１１のａ７参照）
以後、上記（ａ３）〜（ａ６）と同様な処理が繰り返し行なわれる。
【００５７】
なお、多重化されていないタスク/スレッドについては直接MSGQに接続することもできる。
実施形態の一例としての情報処理装置１においては、MutexQを用いることにより、ＳＭＰにおいてスレッド単位の排他処理を実現することができる。例えば、特定のスレッドにおいてのみ使用する共通資源を、スレッド内での排他処理を行なうことなく使用することができる。
【００５８】
（３）コマンド実行順序保障機能
本情報処理装置１においては、ＳＭＰ環境においてコマンド並列処理を実現する場合であっても、ホスト装置２からのコマンド受け付け順に処理を行なうことができる機能をそなえる。すなわち、MutexQを用いることにより、ＳＭＰ環境において、ホスト装置２からの受け付け順でのコマンド実行順序保証を実現することができる。
【００５９】
図１２は実施形態の一例としての情報処理装置１におけるコマンド実行順序保証機能を説明するための図、図１３はその排他ＩＤ管理テーブルの参照手法を説明するための図である。
図１２に示すように、ホスト装置２から受け付けるリード（Read）コマンドやライト（Write）コマンドは、コマンドブロックＣＢとして、それぞれ受け付け順にMutexQに接続される。スケジューラ３０において、移行制御部３３は、スレッド排他の獲得をMutexQの先頭から評価し、スレッド排他獲得できたものからMSGQにつなげる。
【００６０】
すなわち、コマンドブロックＣＢの実行は、MutexQにつながれた順番どおりにスレッドＡから行なわれる。MutexQはグローバルなものでありタスク間で共有されているため、MutexQにつながっているコマンドブロックＣＢの実行順序性は保証されることになる。又、図１２に示すように、同一スレッドはＣＰＵコア２０間で排他的に実行する。
図１３に示す例においては、ロック制御部３９は、MutexQの先頭のコマンドブロックＣＢ［０］について、排他ＩＤ管理テーブルＴを参照して排他ＩＤ１の排他状態を確認する（図１３のｂ１参照）。この図１３に示す例においては、排他ＩＤ１はロック未獲得状態（獲得未）であるので、コマンドブロックＣＢ［０］は排他ＩＤ１を獲得する（図１３のｂ２参照）。
【００６１】
排他ＩＤ１を獲得できたコマンドブロックＣＢ［０］は、例えば、スレッドＡ１において実行される（図１３のｂ３参照）。
このように、実施形態の一例としての情報処理装置１においては、MutexQにおいてホスト装置２からのコマンド受付順にコマンドブロックＣＢが登録される。これにより、ＳＭＰ環境においてコマンドの実行順序が保証され、ホスト装置２からの受付順で実行されることができる。
【００６２】
（４）コマンド実行順序保障機能の変形例
図１４は実施形態の一例としての情報処理装置１におけるコマンド実行順序保証機能の変形例を説明するための図である。
本変形例においては、スレッド別排他管理部３５が、排他ＩＤ毎に作成された排他ＩＤキューを用いて、スレッド毎にロック獲得待ち状態のコマンドブロックＣＢを管理する。
【００６３】
図１４に示す例においては、スケジューラ３０は、MutexQに加えて、排他ＩＤ１用キュー（Queue），排他ＩＤ２用キュー，・・・のように、排他ＩＤごとに作成された排他ＩＤキューをそなえている。
各排他ＩＤ用キューには、同一の排他ＩＤにかかるコマンドブロックＣＢが、ホスト装置２から受け付けた順に登録される。
【００６４】
そして、本変形例においては、MutexQには、各排他ＩＤの待ち行列のそれぞれ先頭の１つだけが接続される。これにより、MutexQには、各排他ＩＤのコマンドブロックＣＢが１つずつ登録されるのである。
例えば、MutexQから排他ＩＤ１のコマンドブロックＣＢが処理されてなくなると、スレッド別排他管理部３５は、排他ＩＤ１用キューから次の（先頭の）コマンドブロックＣＢを取り外しMutexQにつなぎなおす。同様に、MutexQから排他ＩＤｎのコマンドブロックＣＢがなくなると、スレッド別排他管理部３５は、排他ＩＤｎ用キューの先頭のコマンドブロックＣＢを取り外しMutexQにつなぎなおす。
【００６５】
これにより、MutexQには排他ＩＤと同数のコマンドブロックＣＢだけが接続される。
このように、実施形態の一例としての情報処理装置１においては、コマンドブロックＣＢの実行に際しては、MutexQのみを先頭からチェックするだけでよく、実行可能コマンドの探索速度を向上させることができる。
（５）弱いＣＰＵアフィニティ機能
図１５〜図１８は実施形態の一例としての情報処理装置１における弱いＣＰＵアフィニティ機能を説明するための図である。
【００６６】
この弱いＣＰＵアフィニティ機能とは、例えば、スレッドＡからスレッドＢへ、又、スレッドＢからスレッドＣへとスレッドを遷移する場合に、同一ＣＰＵコア２０上でコマンドブロックＣＢの処理を継続させる機能である。すなわち、コマンドブロックＣＢのスレッド間の遷移を同一ＣＰＵコア２０上で実現することにより、ＣＰＵキャッシュのヒット率を向上させ、処理の高速化を実現することができる。
【００６７】
具体的には、再登録処理部３６が、スレッドにおいて処理されたコマンドブロックＣＢを、その担当ＣＰＵ番号に先に処理されたＣＰＵコア２０のＣＰＵ番号を設定した上で、MutexQの先頭に再度登録する。これにより、コマンドブロックＣＢが、先に処理されたＣＰＵコア２０と同じＣＰＵコア２０で優先的に処理される。これにより、ＣＰＵコア２０におけるＣＰＵキャッシュのヒット率を向上させることができる。
【００６８】
本実施形態の一例としての情報処理装置１における弱いＣＰＵアフィニティ機能の具体的手法を、図１５〜図１８を用いて説明する。
（ｃ１）例えば、ＣＰＵコア＃０で動作するタスク０のスレッドスケジューラが、MutexQのコマンドブロックＣＢを先頭から探索する。この検索の結果、コマンドブロックＣＢ［Ｘ］が実行可能であれば、移行制御部３３が、そのコマンドブロックＣＢ［Ｘ］をMSGQにつなぐ（図１５のｃ１参照）。
【００６９】
（ｃ２）MSGQには実行可能コマンドブロックＣＢのみつながっており、ＣＰＵコア＃０で動作するタスク０のスレッドスケジューラは、MSGQの先頭のコマンドブロックＣＢから順番に実行する。つまりコマンドブロックＣＢ［Ｘ］をスレッドAで実行する（図１５のｃ２参照）。
（ｃ３）コマンドブロックＣＢ［Ｘ］の処理完了直前に、スレッドＡは次のスレッドＢをスレッドスケジューラ経由で呼び出す（図１６のｃ３参照）。
【００７０】
（ｃ４）再登録処理部３６は、コマンドブロックＣＢ［Ｘ］内の担当ＣＰＵ番号域に、先ほどまで処理していたＣＰＵ番号である０を設定した上で、MutexQの先頭に、そのコマンドブロックＣＢ［Ｘ］をつなぎ直す（図１７のｃ４参照）。
（ｃ５）そして、コマンドブロックＣＢ［Ｘ］が実行可能となると、移行制御部３３が、そのコマンドブロックＣＢ［Ｘ］をMSGQにつなぐ（図１８のｃ５参照）。
【００７１】
（ｃ６）ＣＰＵコア＃０で動作するタスク０のスレッドスケジューラは、MSGQの先頭からチェックし、担当ＣＰＵ番号＝０であるコマンドブロックＣＢ、つまり、コマンドブロックＣＢ［Ｘ］を実行する（図１８のｃ６参照）。
このように、コマンドブロックＣＢ［Ｘ］を、その直前に処理したＣＰＵコア２０と同一のＣＰＵコア２０で処理することができ、これによりＣＰＵキャッシュヒット率が向上する。このように、ＣＰＵキャッシュを有効に活用し処理を高速化することができる。
【００７２】
なお、図１５〜図１８に示した例においては、弱いＣＰＵアフィニティが保証された例について説明したが、条件によってはこの弱いＣＰＵアフィニティが保証されない場合もある。
図１９は実施形態の一例としての情報処理装置１における弱いＣＰＵアフィニティ機能が保証されない場合を例示する図である。この図１９を参照しながら、本情報処理装置１において、弱いＣＰＵアフィニティ機能が保証されない場合の処理を説明する。
【００７３】
（ｄ１）例えば、MSGQには担当ＣＰＵ番号＝０で、かつスレッドＢ宛のコマンドブロックＣＢ［Ｘ］がつながっているが、ＣＰＵコア＃０では、例えば、割込み処理等によりスレッドＤが動作している状態を考える（図１９のｄ１参照）。
（ｄ２）ＣＰＵコア＃１で動作するタスク１のスレッドスケジューラが、次のコマンドブロックＣＢを実行しようとする（図１９のｄ２参照）。
【００７４】
（ｄ３）タスク１のスレッドスケジューラは、コマンドブロックＣＢ［Ｘ］を実行しようとするが、担当ＣＰＵ番号＝０となっている。
しかしながら、ＣＰＵコア＃０ではスレッドＤが動作しているので、コマンドブロックＣＢ［Ｘ］を実行することができない。そこで、プロセッサ情報制御部３７は、MSGQにつながった状態のコマンドブロックＣＢ［Ｘ］の担当ＣＰＵ番号をクリアする（図１９のｄ３参照）。
【００７５】
これは、ＣＰＵコア＃０ではスレッドＤが動作中のため、例えしばらく待った後でコマンドブロックＣＢ［Ｘ］をＣＰＵコア＃０で動作させたとしても、ＣＰＵコア＃０のＣＰＵキャッシュにヒットしない確率が高いと考えられるためである。
なお、担当ＣＰＵ番号が未記入のコマンドブロックＣＢ［Ｘ］は、次回のコマンドブロックＣＢ探索時に空いているＣＰＵコア２０で処理可能とさせる。
【００７６】
（ｄ４）タスク2のスレッドスケジューラは、MSGQを探索に行きコマンドブロックＣＢ［Ｘ］を空いているＣＰＵコア２０で実行する（図１９のｄ４参照）。
（６）強いＣＰＵアフィニティ機能
ＳＭＰ環境でハードウェア等の共通資源の排他をとるための手法としてスピンロック（SpinLock）が知られている。スピンロックは、共通資源ごとに作成され、一つのＣＰＵコア２０上からスピンロックを確保した状態で共通資源にアクセスすることで、他のＣＰＵコア２０からの共通資源へのアクセスを抑止する。
【００７７】
但し、スピンロックのデメリットとして、競合相手が多くなることでスピンロック獲得待ちが発生するため、性能向上のためにはスピンロックの使用頻度を減らすことが重要となる。
そこで、本実施形態においては、ハードウェア資源にアクセスするドライバのために強いＣＰＵアフィニティ機能をそなえる。この強いＣＰＵアフィニティ機能においては、ハード資源にアクセスするブロックごとにＣＰＵコア（アクセスプロセッサコア）２０を完全に固定することで、資源の競合を発生させず、スピンロック無しでの処理を可能とする。
【００７８】
具体的には、通常のスレッド走行レベルからハードウェア資源へアクセスする時の ＣＰＵコア（アクセスプロセッサコア）２０を限定する（例えば、ＣＰＵコア＃１）。
例えば、ハードウェア資源Ａに対しては、ＣＰＵコア＃１でのみアクセスすることにより、ハードウェア資源Ａへのアクセス時に排他制御を不要とすることができる。
また、そのハードウェア資源からＣＰＵコア２０への応答は、例えばドライバの特定のポートを介した割込み信号によって行なわれる。
【００７９】
そして、ハードウェア資源からの割込み処理が走行するＣＰＵコア２０を、そのハードウェア資源へのアクセスを限定したＣＰＵコア２０（例えば、ＣＰＵコア＃１）と同一にする。例えば、ドライバチップの特定のポートに特定のＣＰＵコア（アクティブプロセッサコア）２０を割り当て、スレッドから送信されたコマンドブロックＣＢを、このポート経由で送出する。これにより、ハードウェア資源からの応答を特定のＣＰＵコア２０に集中させることができる。
【００８０】
また、この強いＣＰＵアフィニティ機能と、上述した弱いＣＰＵアフィニティ機能とを共存させるべく、コマンドブロックＣＢ内の担当ＣＰＵ番号域を使用する。すなわち、各スレッドにおいてハードウェア資源へのアクセスを伴う処理が生じた場合には、プロセッサ情報制御部３７が、その処理にかかるコマンドブロックＣＢの担当ＣＰＵ番号に、アクセスプロセッサコアのＣＰＵ識別番号を設定する。
【００８１】
さらに、コマンドブロックＣＢ内にＣＰＵアフィニティフラグ（ＣＰＵアフィニティ種別域）を設け、抑止設定情報制御部３８が、このＣＰＵアフィニティフラグに、強いＣＰＵアフィニティ機能の有効／無効のいずれかを表す情報（フラグ）を選択的に設定する。
そして、これにより、強いＣＰＵアフィニティ機能を有効にする旨が指示された場合には、抑止制御部４０が、指定されたＣＰＵコア２０が空くまで実行を待ち合わせる制御を行なう。つまり強いＣＰＵアフィニティ機能実行時には担当ＣＰＵ番号をクリアする処理は行なわない。
【００８２】
図２０は実施形態の一例としての情報処理装置１における強いＣＰＵアフィニティ機能を説明するための図である。この図２０に示す例においては、ハードウェア資源ＡにはＣＰＵコア＃１からのみアクセスするものとする。
以下、図２０を参照しながら、強いＣＰＵアフィニティ機能を説明する。
（ｅ１）例えば、スレッドＡからスレッドＢ経由でハード資源Ａにアクセスする場合には、先ず、スレッドスケジューラ経由で、ＣＰＵコア＃１を指定してスレッドＢを呼び出す（図２０のｅ１参照）。
【００８３】
（ｅ２）その後、ＣＰＵコア＃１で動作するタスク１のスレッドスケジューラが、コマンドブロックＣＢ［Ｘ］の担当ＣＰＵ番号をチェックした上で、コマンドブロックＣＢ［Ｘ］を実行し、ハードウェア資源Ａにアクセスする（図２０のｅ２参照）。
（ｅ３）また、ハードウェア資源Ａからの割込みはＣＰＵコア＃１に上がり、割込み処理がCPU#1上で動作する（図２０のｅ３参照）。
【００８４】
このように、実施形態の一例としての情報処理装置１においては、強いＣＰＵアフィニティ機能により、ハードウェア資源にアクセスするドライバのために強いＣＰＵアフィニティにより、ＣＰＵコア２０を特定することができる。そして、ハードウェア資源にアクセスするアクセスブロック毎にＣＰＵコア２０を固定することで、資源の競合の発生を抑止し、スピンロックを用いる必要がない。
【００８５】
このように、実施形態の一例としての情報処理装置１によれば、複数のＣＰＵコア２０によりコマンドブロックＣＢを並行して処理することができ、コマンド処理の並列度を高め、処理を高速化することができる。
また、同一ＣＰＵコア２０上のスレッドセットでコマンドブロックＣＢを処理を継続して処理することができ、各ＣＰＵコア２０においてＣＰＵキャッシュのヒット率が向上し、これによっても処理性能を向上させることができる。
【００８６】
また、スレッド単位の排他処理を行ない、同一スレッドや多重化された同一スレッドが同時に実行されることがないので、これらのスレッドのみが使用する共通資源について、スレッド内で排他制御を行なう必要がなく、処理を高速化できるとともに管理負荷を軽減することができる。
また、MutexQをそなえることにより、複数のコマンドブロックＣＢをホスト装置２からの受け付け順で処理することができ、順序性を保証することができる。
【００８７】
さらに、コマンドブロックＣＢに対して、担当ＣＰＵ番号を属性情報として持たせることにより、ＣＰＵアフィニティ機能を実現することができる。すなわち、連続して行なわれるスレッドを同じＣＰＵコア２０で容易に処理させることができ、ＣＰＵキャッシュのヒット率を向上させ、処理を高速化することができる。又、ハードウェア資源等の共通資源について、特定の共通資源へのアクセスを容易に同じＣＰＵコア２０から行なうことができ、これにより、資源の競合を発生させることなく、スピンロックを用いることなく処理を行なうことができる。
【００８８】
また、コマンドブロックＣＢに対してスレッド排他情報を属性情報としても持たせることにより、マルチコアプロセッサシステムにおいてスレッド排他を容易に実現することができる。
さらに、排他ＩＤごとに作成された排他ＩＤキューをそなえるともに、MutexQに、各排他ＩＤの待ち行列のそれぞれ先頭の１つだけを登録することにより、実行可能コマンドの探索速度を向上させることができる。
【００８９】
そして、開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。
また、上述した開示により本実施形態を当業者によって実施・製造することが可能である。
以上の実施形態に関し、更に以下の付記を開示する。
【００９０】
（付記１）
複数のプロセッサコアをそなえ、特定の実行順序で実施される複数のスレッドを有するタスクを、各プロセッサコアで実行するマルチコアプロセッサシステムであって、
排他制御にかかるロック獲得状態のコマンドブロックを管理する処理順序管理部と、
該処理順序管理部によって管理されたコマンドブロックを該プロセッサコアに割り当てる割当部と、
該排他制御にかかるロック獲得待ち状態のコマンドブロックを管理する排他管理部と、
該排他管理部において管理されている該ロック獲得待ち状態のコマンドブロックがロック獲得状態になった際に、当該コマンドブロックを、該排他管理部から解放するとともに該処理順序管理部に登録させる移行制御部とをそなえることを特徴とする、マルチコアプロセッサシステム。
【００９１】
（付記２）
該排他管理部が、上位装置からのコマンド受付順に従って、該コマンドブロックを該排他管理部に登録し、
該移行制御部が、先に当該排他管理部に登録された該コマンドブロックから順に該処理順序管理部に登録し、
該割当部が、先に該処理順序管理部に登録された該コマンドブロックから順番に、当該コマンドブロックを対応する該プロセッサコアに割り当てることを特徴とする、付記１記載のマルチコアプロセッサシステム。
【００９２】
（付記３）
該排他管理部が、各スレッドに対応する該コマンドブロックを１つずつ管理することを特徴とする、付記１記載のマルチコアプロセッサシステム。
（付記４）
該排他制御にかかるロック獲得待ち状態のコマンドブロックを、上位装置からのコマンド受付順に従って、スレッド毎に管理する、スレッド別排他管理部をそなえ、
該排他管理部において、該コマンドブロックが解放された際に、該スレッド別排他管理部が、当該解放されたコマンドブロックに対応するスレッドにかかる該コマンド受付順の先頭のコマンドブロックを該排他管理部に登録することを特徴とする、付記３記載のマルチコアプロセッサシステム。
【００９３】
（付記５）
該スレッドにおいて処理されたコマンドブロックを、該排他管理部におけるロック獲得待ち状態のコマンドブロックの先頭に再度登録する再登録処理部をそなえることを特徴とする、付記２記載のマルチコアプロセッサシステム。
（付記６）
該コマンドブロックに対して、当該コマンドブロックを処理するプロセッサコアを示すプロセッサ識別情報を設定するプロセッサ情報制御部をそなえ、
該プロセッサ情報制御部が、該コマンドブロックを処理した該プロセッサコアを特定する該プロセッサ識別情報を、当該コマンドブロックに設定することを特徴とする、付記５記載のマルチコアプロセッサシステム。
【００９４】
（付記７）
処理可能な状態となっているプロセッサコアが、当該コマンドブロックに設定された該プロセッサ識別情報に対応するプロセッサコアとは異なる場合に、該プロセッサ情報制御部が、当該コマンドブロックに設定された該プロセッサ識別情報をクリアすることを特徴とする、付記６記載のマルチスレッドプロセッサ。
【００９５】
（付記８）
ハードウェア資源に対してアクセスするプロセッサコアをアクセスプロセッサコアとして予め特定しておき、
該プロセッサ情報制御部が、該ハードウェア資源に対するアクセスが生じる処理に関して、当該処理にかかるコマンドブロックに対して、該アクセスプロセッサコアに対応する該プロセッサ識別情報を設定することを特徴とする、付記６記載のマルチコアプロセッサシステム。
【００９６】
（付記９）
該割当部が該コマンドブロックを割り当てる際に、当該コマンドブロックに対応付けられた該アクセスプロセッサコアが他の処理を実行中の場合に、当該アクセスプロセッサコアが当該他の処理を終了するまで、該割当部の処理を抑止する抑止制御部をそなえることを特徴とする、付記８記載のマルチコアプロセッサシステム。
【００９７】
（付記１０）
該コマンドブロックに対して、該抑止制御部による機能を有効にするか否かを示す抑止設定情報（ＣＰＵアフィニティ種別域）を設定する抑止設定情報制御部をそなえることを特徴とする、付記９記載のマルチコアプロセッサシステム。
（付記１１）
該コマンドブロックに対して、当該コマンドブロックについてのスレッド間での排他設定を表すスレッド排他情報を設定する排他制御部をそなえ、
該排他制御部によって設定された該スレッド排他情報に基づいて、該スレッドの読み出しを行なうことを特徴とする、付記１〜付記１０のいずれか１項に記載のマルチコアプロセッサシステム。
【００９８】
（付記１２）
複数のプロセッサコアをそなえ、特定の実行順序で実施される複数のスレッドを有するタスクを、各プロセッサコアで実行するマルチコアプロセッサシステムにおけるスケジュール機能をコンピュータに実行させるスケジュール管理プログラムであって、
排他制御にかかるロック獲得状態のコマンドブロックを管理する処理順序管理部と、
該処理順序管理部によって管理されたコマンドブロックを該プロセッサコアに割り当てる割当部と、
該排他制御にかかるロック獲得待ち状態のコマンドブロックを管理する排他管理部と、
該排他管理部において管理されている該ロック獲得待ち状態のコマンドブロックがロック獲得状態になった際に、当該コマンドブロックを、該排他管理部から解放するとともに該処理順序管理部に登録させる移行制御部として、該コンピュータを機能させることを特徴とする、スケジュール管理プログラム。
【００９９】
（付記１３）
該排他管理部として該コンピュータを機能させる際に、上位装置からのコマンド受付順に従って、該コマンドブロックを該排他管理部に登録し、
該移行制御部として該コンピュータを機能させる際に、先に当該排他管理部に登録された該コマンドブロックから順に該処理順序管理部に登録し、
該割当部として該コンピュータを機能させる際に、先に該処理順序管理部に登録された該コマンドブロックから順番に、当該コマンドブロックを対応する該プロセッサコアに割り当てることを特徴とする、付記１２記載のスケジュール管理プログラム。
【０１００】
（付記１４）
該排他管理部として該コンピュータを機能させる際に、各スレッドに対応する該コマンドブロックを１つずつ管理することを特徴とする、付記１２記載のスケジュール管理プログラム。
（付記１５）
該排他制御にかかるロック獲得待ち状態のコマンドブロックを、上位装置からのコマンド受付順に従って、スレッド毎に管理する、スレッド別排他管理部として該コンピュータを機能させるとともに、
該排他管理部として該コンピュータを機能させる際に、該コマンドブロックが解放された際に、該スレッド別排他管理部が、当該解放されたコマンドブロックに対応するスレッドにかかる該コマンド受付順の先頭のコマンドブロックを該排他管理部に登録することを特徴とする、付記１４記載のスケジュール管理プログラム。
【０１０１】
（付記１６）
該スレッドにおいて処理されたコマンドブロックを、該排他管理部におけるロック獲得待ち状態のコマンドブロックの先頭に再度登録する再登録処理部として該コンピュータを機能させることを特徴とする、付記１３記載のスケジュール管理プログラム。
（付記１７）
該コマンドブロックに対して、当該コマンドブロックを処理するプロセッサコアを示すプロセッサ識別情報を設定するプロセッサ情報制御部として該コンピュータを機能させるとともに、
該プロセッサ情報制御部として該コンピュータを機能させる際に、該コマンドブロックを処理した該プロセッサコアを特定する該プロセッサ識別情報を、当該コマンドブロックに設定することを特徴とする、付記１６記載のスケジュール管理プログラム。
【０１０２】
（付記１８）
ハードウェア資源に対してアクセスするプロセッサコアをアクセスプロセッサとして予め特定しておき、
該プロセッサ情報制御部として該コンピュータを機能させる際に、該ハードウェア資源に対するアクセスが生じる処理に関して、当該処理にかかるコマンドブロックに対して、該アクセスプロセッサに対応する該プロセッサ識別情報を設定することを特徴とする、付記１７記載のスケジュール管理プログラム。
【０１０３】
（付記１９）
該コマンドブロックに対して、当該コマンドブロックについてのスレッド間での排他設定を表すスレッド排他情報を設定する排他制御部として該コンピュータを機能させるとともに、
該排他制御部によって設定された該スレッド排他情報に基づいて、該スレッドの読み出しを行なうことを特徴とする、付記１２〜付記１８のいずれか１項に記載のスケジュール管理プログラム。
【０１０４】
（付記２０）
複数のプロセッサコアをそなえ、特定の実行順序で実施される複数のスレッドを有するタスクを、各プロセッサコアで実行するマルチコアプロセッサシステムにおけるスケジュール機能をコンピュータに実行させるスケジュール管理プログラムを記録したコンピュータ読取可能な記録媒体であって、
該スケジュール管理プログラムが、
排他制御にかかるロック獲得状態のコマンドブロックを管理する処理順序管理部と、
該処理順序管理部によって管理されたコマンドブロックを該プロセッサコアに割り当てる割当部と、
該排他制御にかかるロック獲得待ち状態のコマンドブロックを管理する排他管理部と、
該排他管理部において管理されている該ロック獲得待ち状態のコマンドブロックがロック獲得状態になった際に、当該コマンドブロックを、該排他管理部から解放するとともに該処理順序管理部に登録させる移行制御部として、該コンピュータを機能させることを特徴とする、スケジュール管理プログラムを記録したコンピュータ読取可能な記録媒体。
【符号の説明】
【０１０５】
１    情報処理装置
２    ホスト装置
１０    ＨＢＡ
１１    メモリ
１２    バックエンドモジュール
１３    ストレージ
１４    プロセッサユニット
２０，２０−１，２０−２，・・・，２０−ｎ  ＣＰＵコア
３０    スケジューラ
３１    排他管理部
３２    処理順序管理部
３３    移行制御部
３４    割当部
３５    スレッド別排他管理部
３６    再登録処理部
３７    プロセッサ情報制御部
３８    抑止設定情報制御部
３９    ロック制御部
４０    排他制御部
４１    抑止制御部
４２    スレッドセット生成部
Ｔ    排他ＩＤ管理テーブル
ＣＢ  コマンドブロック
【図１】
0005655403.tif 000002
【図２】
0005655403.tif 000003
【図３】
0005655403.tif 000004
【図４】
0005655403.tif 000005
【図５】
0005655403.tif 000006
【図６】
0005655403.tif 000007
【図７】
0005655403.tif 000008
【図８】
0005655403.tif 000009
【図９】
0005655403.tif 000010
【図１０】
0005655403.tif 000011
【図１１】
0005655403.tif 000012
【図１２】
0005655403.tif 000013
【図１３】
0005655403.tif 000014
【図１４】
0005655403.tif 000015
【図１５】
0005655403.tif 000016
【図１６】
0005655403.tif 000017
【図１７】
0005655403.tif 000018
【図１８】
0005655403.tif 000019
【図１９】
0005655403.tif 000020
【図２０】
0005655403.tif 000021
【図２１】
0005655403.tif 000022
【図２２】
0005655403.tif 000023
【図２３】
0005655403.tif 000024