(57)【特許請求の範囲】
【請求項１】
複数のＣＰＵがそれぞれ所定のタスク実行毎に、メモリに対するアクセス種別と利用帯域に基づき当該タスクのタスク種類を判定し、当該タスク種類及び各タスクのアクセス終了時間の予測に基づいて、各タスクをいずれのストレージにアクセスさせるかをスケジューラによりスケジューリングし、
前記スケジューリングに基づき、同一メモリへアクセスするタスクを前記スケジューラにより同一のＣＰＵに割り当てる、
ことを特徴とするスケジューリング方法。
【請求項２】
前記スケジューラは、前記タスクが第１タスク種類に属するか否かを判定し、
前記タスクが前記第１タスク種類に属するときは前記タスクがアクセスする第１アクセス領域が第１メモリまたは第２メモリにあるか否かを判定し、
前記スケジューラは、前記判定結果に基づいて前記タスクがアクセスするメモリを前記第１メモリまたは前記第２メモリに設定すること
を特徴とする請求項１に記載のスケジューリング方法。
【請求項３】
前記第１タスク種類はメモリリードタスクであること
を特徴とする請求項２に記載のスケジューリング方法。
【請求項４】
前記スケジューラは、前記タスクが前記第１タスク種類に属さないときは前記タスクが第２タスク種類に属するか否かを判定すること
を特徴とする請求項２または請求項３に記載のスケジューリング方法。
【請求項５】
前記第２タスク種類はメモリリードライトタスクであること
を特徴とする請求項４に記載のスケジューリング方法。
【請求項６】
前記スケジューラは、前記タスクが第３タスク種類に含まれるときは、前記タスクが前記第１メモリにアクセスする第１アクセス時間と前記タスクが前記第２メモリにアクセスする第２アクセス時間との比較結果に基づいて、前記タスクがアクセスするメモリをアクセス時間が短い前記第１メモリまたは前記第２メモリに設定すること
を特徴とする請求項２乃至請求項５の何れか一に記載のスケジューリング方法。
【請求項７】
前記スケジューラは、前記第１アクセス領域が第３タスク種類に属するタスクがアクセスする第２アクセス領域に含まれるか否かを判定し、
前記判定結果に基づいて前記第１アクセス領域が前記第１メモリまたは前記第２メモリにあるか否かを判定すること
を特徴とする請求項２乃至請求項５の何れか一に記載のスケジューリング方法。
【請求項８】
前記第３タスク種類はメモリライトタスクであること
を特徴とする請求項６または請求項７に記載のスケジューリング方法。
【請求項９】
前記スケジューラは、前記第１アクセス領域が前記第２アクセス領域に含まれるときは、前記第２アクセス領域の前記第２メモリから前記第１メモリへの書き込みの終了に基づいて前記タスクがアクセスするメモリを前記第１メモリまたは前記第２メモリに設定すること
を特徴とする請求項６または請求項７に記載のスケジューリング方法。
【請求項１０】
前記スケジューラは、前記タスクがアクセスするメモリが前記第２メモリに設定されるとき、前記タスクがアクセスした前記第２メモリのメモリ領域を前記第１メモリに書き込むこと
を特徴とする請求項２乃至請求項９の何れか一に記載のスケジューリング方法。
【請求項１１】
前記スケジューラは、前記タスクが第１タスク種類グループに含まれるときは、前記第１メモリにアクセスする他のタスクが割り当てられている第２ＣＰＵに前記第１タスク種類グループに含まれるタスクを割り当てること
を特徴とする請求項２乃至請求項１０の何れか一に記載のスケジューリング方法。
【請求項１２】
前記スケジューラは、第２ＣＰＵに割り当てられるタスクが第２タスク種類に属さないときであって前記第２ＣＰＵで実行されている他のタスクが前記第２タスク種類に属するとき、前記他のタスクは前記第２ＣＰＵのタスクキューに戻されること
を特徴とする請求項２乃至請求項１０の何れか一に記載のスケジューリング方法。
【請求項１３】
前記スケジューラは、第２ＣＰＵに割り当てられるタスクが第２タスク種類に属するときであって前記第２ＣＰＵを含む複数のＣＰＵの少なくとも一のＣＰＵで前記第２タスク種類グループに含まれるタスクが実行されていないとき、前記第２タスク種類に属するつぎのタスクの実行を停止すること
を特徴とする請求項２乃至請求項１０の何れか一に記載のスケジューリング方法。
【請求項１４】
複数のＣＰＵと複数のメモリを含み、
複数の前記ＣＰＵがそれぞれ所定のタスク実行毎に、前記メモリに対するアクセス種別と利用帯域に基づき当該タスクのタスク種類を判定し、当該タスク種類及び各タスクのアクセス終了時間の予測に基づいて、各タスクをいずれのストレージにアクセスさせるかをスケジューラによりスケジューリングし、
前記スケジューリングに基づき、同一メモリへアクセスするタスクを前記スケジューラにより同一の前記ＣＰＵに割り当てる制御を行う、
ことを特徴とするシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のＣＰＵが共有するメモリに対するアクセス競合を回避するスケジューリング方法およびシステムに関する。
【背景技術】
【０００２】
複数のストレージおよび複数のＣＰＵを備えるマルチコアシステムでは、一つのストレージに対して同時に複数のＣＰＵからのストレージアクセスが生じる可能性がある。これを回避する対策としては、複数のストレージアクセスを切り替えながら処理することが考えられる。【０００３】
たとえば、ディスクドライブに対するアクセス・タスクをグループ化し、タスクのリストにしたがってスレッドを直列に実行することにより、ディスクに対するシークの競合を防止した技術がある（たとえば、下記特許文献１参照。）。また、制限時間つきストレージアクセス要求を対象にし、対象ストレージへの書き込みが制限時間内に終了しない場合は、データを別のストレージへ一旦書き込みをおこない、後ほど本来のストレージへデータを移動させる技術がある（たとえば、下記特許文献２参照。）。【０００４】
また、画像データ検索システムにおいて、集合型光ディスク装置と単盤型光ディスク装置を接続し、画像データの登録を単盤型光ディスク装置に仮登録した後に、集合型光ディスク装置に転送することにより、画像データの登録要求と検索要求とが同時に発生しても画像データへのアクセス競合を防ぐ技術がある（たとえば、下記特許文献３参照。）。また、マルチプロセッサにおいて、ＨＤＤへのアクセス要求の種別を判定し、種別毎に異なるアドレス空間を設定し、アクセス要求を制御する調停論理手段を設け、競合したアクセス発生時に、いずれかの処理を先におこなう技術がある（たとえば、下記特許文献４参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平７−１０４９３９号公報
【特許文献２】特開平１０−９１３５７号公報
【特許文献３】特開平３−０１８９７６号公報
【特許文献４】特開２００９−１８７３２７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１〜４に記載の技術では、ストレージへのアクセススケジューリングと、ＯＳのタスクスケジューリングがそれぞれ個別におこなわれることになるため、ストレージアクセスをおこなう際に複数のＣＰＵ間で同一のストレージに対するアクセス競合が発生することが考えられる。このアクセス競合の発生により、ストレージのアクセス性能が低下する。特許文献２に記載の技術では、ストレージへのアクセススケジューリングしか考慮されておらず、ストレージへのアクセススケジューリングと、ＯＳのタスクスケジューリングとの連携がなされないために、複数のＣＰＵでそれぞれタスクを実行するときに一つのストレージへのアクセス競合が発生することがあった。【０００７】
開示のスケジューリング方法およびシステムは、上述した問題点を解消するものであり、複数のＣＰＵが共有するメモリへのアクセス競合を回避することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、開示技術は、複数のＣＰＵがそれぞれ所定のタスク実行毎に、メモリに対するアクセス種別と利用帯域に基づき当該タスクのタスク種類を判定し、当該タスク種類及び各タスクのアクセス終了時間の予測に基づいて、各タスクをいずれのストレージにアクセスさせるかをスケジューラによりスケジューリングし、前記スケジューリングに基づき、同一メモリへアクセスするタスクを前記スケジューラにより同一のＣＰＵに割り当てる、ことを特徴とする。
【発明の効果】
【０００９】
開示のスケジューリング方法およびシステムによれば、複数のＣＰＵが共有するメモリへのアクセス競合を回避できるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施の形態のスケジューリング方法を実行するシステムの構成例を示す図である。
【図２】図２は、システムの内部構成を示すブロック図である。
【図３−１】図３−１は、データベースの情報を示す図表である（その１）。
【図３−２】図３−２は、データベースの情報を示す図表である（その２）。
【図３−３】図３−３は、データベースの情報を示す図表である（その３）。
【図４−１】図４−１は、アクセス競合の回避の処理概要を示す図である（その１）。
【図４−２】図４−２は、アクセス競合の回避の処理概要を示す図である（その２）。
【図５−１】図５−１は、ストレージに対するアクセススケジューリングの例を示す図である（その１）。
【図５−２】図５−２は、ストレージに対するアクセススケジューリングの例を示す図である（その２）。
【図５−３】図５−３は、ストレージに対するアクセススケジューリングの例を示す図である（その３）。
【図５−４】図５−４は、ストレージに対するアクセススケジューリングの例を示す図である（その４）。
【図５−５】図５−５は、ストレージに対するアクセススケジューリングの例を示す図である（その５）。
【図６−１】図６−１は、ストレージアクセスとタスクアクセスを連動させたスケジューリングの例を示す図である（その１）。
【図６−２】図６−２は、ストレージアクセスとタスクアクセスを連動させたスケジューリングの例を示す図である（その２）。
【図６−３】図６−３は、ストレージアクセスとタスクアクセスを連動させたスケジューリングの例を示す図である（その３）。
【図６−４】図６−４は、ストレージアクセスとタスクアクセスを連動させたスケジューリングの例を示す図である（その４）。
【図６−５】図６−５は、ストレージアクセスとタスクアクセスを連動させたスケジューリングの例を示す図である（その５）。
【図７】図７は、書き戻し前のデータへのアクセスの状態を示す図である。
【図８−１】図８−１は、データの書き戻しにかかる処理を示す図である（その１）。
【図８−２】図８−２は、データの書き戻しにかかる処理を示す図である（その２）。
【図８−３】図８−３は、データの書き戻しにかかる処理を示す図である（その３）。
【図９】図９は、ストレージスケジューラがおこなう処理手順を示すフローチャートである。
【図１０】図１０は、タスクスケジューラがおこなう処理手順を示すフローチャートである。
【図１１】図１１は、メインスケジューラ、スレーブスケジューラがおこなう処理手順を示すフローチャートである。
【図１２】図１２は、アクセス監視部がおこなう処理手順を示すフローチャートである。
【図１３】図１３は、実施の形態による競合の回避および全アクセスの処理時間を説明する図である。
【図１４】図１４は、図１に示したコンピュータを用いたシステムの適用例を示す図である。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、開示技術の好適な実施の形態を詳細に説明する。開示技術は、複数のＣＰＵと複数のメモリを備えてタスクを並列処理するシステム等に適用される。そして、メモリアクセスのスケジューリングとタスクスケジューリングとを連携させることにより、タスク実行により、複数のメモリのうち共有される一つのメモリに対するアクセス競合を回避し、メモリへのアクセス処理の効率化を図る。
【００１２】
（実施の形態）
図１は、実施の形態のスケジューリング方法を実行するシステムの構成例を示す図である。システム１００は、複数のＣＰＵ（第１ＣＰＵ１０１、第２ＣＰＵ１０２）を含み、ＣＰＵ１０１，１０２は、それぞれＯＳ１１１，１１２を含む。これらＣＰＵ１０１，１０２は、バス１０３を介してメモリ１２１と、複数のＣＰＵによって共有されるメモリにアクセスする。以下の説明では、図１に示す１台のコンピュータに複数のＣＰＵ１０１，１０２を搭載したマルチコアの構成例を用いて説明をおこなう。
【００１３】
図１に示す例では、複数のＣＰＵによって共有される複数のメモリを有する。この複数のメモリとして、第１メモリとしてのメインストレージ（Ａ）１３１と、第２メモリとしてのサブストレージ（Ｂ）１３２を含む。たとえば、これらメインストレージ（Ａ）１３１と、サブストレージ（Ｂ）１３２は、ハードディスク装置を用いることができる。以下の実施例では、ＣＰＵ１０１，１０２は、いずれも主にメインストレージ１３１にアクセスし、共有使用するものとしている。そして、メインストレージ１３１に対するアクセス競合回避のために、一時的にサブストレージ１３２を利用するものとして説明する。
【００１４】
図２は、システムの内部構成を示すブロック図である。マスタ側のＯＳ１１１は、マスタスケジューラ２０１と、アクセス監視部２０２と、ウェイトキュー２０３と、タスクキュー２０４とを含む。マスタスケジューラ２０１は、ストレージスケジューラ２０５と、タスクスケジューラ２０６と、タスクディスパッチ部２０７とを含む。
【００１５】
スレーブ側のＯＳ１１２は、スレーブスケジューラ２１１と、アクセス監視部２１２と、タスクキュー２１４とを含む。スレーブスケジューラ２１１は、タスクディスパッチ部２１７を含む。メモリ１２１は、データベース（ＤＢ）２２１を含む。
【００１６】
マスタＯＳ１１１のストレージスケジューラ２０５は、ウェイトキュー２０３からタスクを取り出し、取り出したタスクのアクセス先ストレージ（メインストレージ１３１あるいはサブストレージ１３２）を決定する。この際、各タスクの特性（ＲｅａｄあるいはＷｒｉｔｅ、帯域利用、処理時間等）により、アクセス先ストレージを決定し、タスクスケジューラ２０６に通知する。
【００１７】
マスタＯＳ１１１のタスクスケジューラ２０６は、ストレージスケジューラ２０５によるストレージアクセスのスケジューリング情報と、タスクのスケジューリング情報に基づき、タスクの割当先を決定し、タスクキュー２０４に挿入する。このタスクスケジューラ２０６は、ストレージのアクセス先が同じであるタスク同士を同一のＣＰＵ１０１，１０２に割り当てる。タスクディスパッチ部２０７は、ＣＰＵ１０１のディスパッチ状況を基に、タスクキュー２０４に挿入されているタスクのタスクディスパッチ、タスクスイッチを制御する。
【００１８】
マスタＯＳ１１１のアクセス監視部２０２は、ストレージに対するリード、ライトの発生時に、実行中タスクの情報に基づき、タスクがアクセスするストレージ（メインストレージ１３１あるいはサブストレージ１３２）を指定する。
【００１９】
スレーブＯＳ１１２は、マスタＯＳ１１１の統括制御を受けてＣＰＵ１０２の制御を実行する。スレーブＯＳ１１２のスレーブスケジューラ２１１は、タスクディスパッチ部２１７を含み、このタスクディスパッチ部２１７は、ＣＰＵ１０２のディスパッチ状況を基に、タスクキュー２１４に挿入されているタスクのタスクディスパッチ、タスクスイッチを制御する。スレーブＯＳ１１２のアクセス監視部２１２は、ストレージに対するリード、ライトの発生時に、実行中タスクの情報に基づき、タスクがアクセスするストレージ（メインストレージ１３１あるいはサブストレージ１３２）を指定する。
【００２０】
メモリ１２１のデータベース２２１には、タスクテーブル、ストレージアクセススケジューリング情報、タスクのスケジューリング情報が保持される。
【００２１】
図３−１〜図３−３は、データベースの情報を示す図表である。図３−１は、データベース２２１に保存されるタスクテーブル３０１を示す図である。タスクテーブル３０１は、ライト（Ｗｒｉｔｅ）タスクテーブル３１１と、リード（Ｒｅａｄ）タスクテーブル３１２と、Ｆタスクテーブル３１３とを含む。このＦタスクテーブル３１３の情報は、アクセス競合を避けるためにＷｒｉｔｅタスクが一旦別のストレージに書き込んだ場合に参照される。Ｆタスク（書き戻しタスクに相当）は、実際のアクセス対象のストレージに、一時的にデータを書き込んだストレージからデータの書き戻しをおこなうタスクである。このＦタスクは、ストレージにアクセスをおこなう他のタスクに影響を与えないタイミングでディスパッチされる。
【００２２】
ライトタスクテーブル３１１は、（１）ライトタスクＩＤと、（２）指定書き込み領域と、（３）書き込み指定領域と、（４）書き戻し判定フラグと、（５）一時保存先アクセスリードタスクと、（６）データサイズの各情報を含む。
【００２３】
（１）ライトタスクＩＤは、ストレージに書き込むライトタスクの識別子（ＩＤ）である。（２）指定書き込み領域は、書き込みが指定されているストレージのアドレスである。（３）書き込み指定領域は、一時的に書き込む先のストレージのアドレスである。（４）書き戻し判定フラグは、指定書き込み領域のアドレスのデータを、書き込み指定領域に書き込みが終了したかを示すフラグ値である。（５）一時保存先アクセスリードタスクは、指定書き込み領域のアドレスにアクセスしているタスクのＩＤである。（６）データサイズは、書き込みをおこなうデータのサイズである。
【００２４】
リードタスクテーブル３１２は、（１）リードタスクＩＤと、（２）指定アクセス領域と、（３）読み出し指定領域と、（４）データサイズの各情報を含む。（１）リードタスクＩＤは、ストレージから読み出すリードタスクの識別子（ＩＤ）である。（２）指定アクセス領域は、読み出しを指定されたストレージのアドレスである。（３）読み出し指定領域は、実際に読み出しをおこなうストレージのアドレスである。（４）データサイズは、読み出しをおこなうデータのサイズである。
【００２５】
Ｆタスクテーブル３１３は、（１）ＦタスクＩＤと、（２）書き戻しライト（Ｗｒｉｔｅ）タスクＩＤとを含む。（１）ＦタスクＩＤは、ＦタスクのＩＤである。（２）書き戻しライトタスクＩＤは、一時的に書き込みをおこなったデータを実際の指定先のストレージに書き戻しをおこなう対象ライト（Ｗｒｉｔｅ）タスクＩＤである。
【００２６】
図３−２は、データベース２２１に保存されるストレージアクセススケジューリングテーブル３２１と、タスクスケジューリングテーブル３２２とを示す図である。ストレージアクセススケジューリングテーブル３２１は、ストレージＩＤと、各ストレージＩＤ毎の割り当てタスクＩＤ、および終了予測時間とを含む。ストレージＩＤは、上記メインストレージ１３１，およびサブストレージ１３２を識別するＩＤである。割り当てタスクＩＤは、各ストレージにアクセスするタスクＩＤである。終了予測時間は、後述するアクセス終了時間予測式により求められたタスクの終了予測時間である。
【００２７】
タスクスケジューリングテーブル３２２は、ＣＰＵＩＤと、ＣＰＵＩＤ毎の割り当てタスクＩＤとを含む。ＣＰＵＩＤは、複数のＣＰＵ１０１，１０２の識別子（ＩＤ）である。割り当てタスクＩＤは、複数のＣＰＵ１０１，１０２毎に割り当てられているタスクの識別子（ＩＤ）である。
【００２８】
図３−３は、データベース２２１に保存されるストレージアクセスをおこなうタスクの分類を示す図表である。図示の分類表３３１に示されるように、タスクは、ストレージへのアクセスタイプと、帯域の利用の仕方、処理時間等により複数（図示の例ではＡ〜Ｆ）に分類される。
【００２９】
分類Ａのタスクは、アクセスタイプがリード、帯域利用が一定帯域であり、ビデオ等のアプリケーション処理時のデータ等である。分類Ｂのタスクは、アクセスタイプがリード、帯域利用が全帯域であり、アップロードするデータ等である。分類Ｃのタスクは、アクセスタイプがライト、帯域利用全帯域であり、ダウンロードしたデータ等である。分類Ｄのタスクは、アクセスタイプがライト、帯域利用が最優先、処理時間が一瞬である、スワップアウトのデータ等である。分類Ｅのタスクは、アクセスタイプがリード、帯域利用が最優先、処理時間が一瞬である、スワップインのデータ等である。分類Ｆのタスク（Ｆタスク）は、上記のように、サブストレージ１３２からメインストレージ１３１への書き戻しをおこなう処理にかかるタスクであり、アクセスタイプがリードおよびライト、帯域利用が全帯域である。
【００３０】
（アクセス競合回避の処理の概要）
つぎに、複数のＣＰＵによる一つのストレージに対するアクセス競合を回避する処理の概要について説明する。図４−１、図４−２は、アクセス競合の回避の処理概要を示す図である。はじめに、図４−１に示すように、ＣＰＵ１０１がストレージからリードのタスクを実行しているとする。リードタスクは、データの読み出し先であるストレージがあらかじめ決まっている（図示の例では、メインストレージ１３１である）。
【００３１】
このとき、新たにＣＰＵ１０２でライトタスクが発生したとする。このライトタスクのデータは、メインストレージ１３１にアクセスし、格納されるものであるとする。しかし、メインストレージ１３１は、ＣＰＵ１０１によるリードタスクを実行中であるため、このライトタスクをどのストレージに書き込むかを判断する。この判断は、各ストレージのストレージ帯域Ｍ，Ｓの情報に基づき、メインストレージ１３１に対するタスクのアクセス終了時間を予測算出し、いずれのストレージ１３１，１３２に書き込むかを決定する。図示の例では、ライトタスクとリードタスクが同じメインストレージ１３１にアクセスして生じるアクセス競合を避けるために、ＣＰＵ１０２がライトタスクをサブストレージ１３２に書き込む状態を示している。
【００３２】
図４−１に示す状態の後、図４−２に示すように、メインストレージ１３１に対するアクセスがない時期に、サブストレージ１３２に書き込んだデータをメインストレージ１３１に書き込む（上記Ｆタスクの処理）。これにより、同一のストレージに対する複数のＣＰＵからのアクセス競合を回避する。この際、ＣＰＵ１０１，１０２のＯＳ１１１，１１２は、メモリ１２１に格納されているデータベース２２１を参照して同一ストレージのアクセス先のタスクを同一のＣＰＵに割り当てることにより、同一ストレージへのアクセス競合を回避するようにしている。
【００３３】
（タスクのアクセス終了時間の予測について）
ここで、上記のタスクのアクセス終了時間の予測の具体例について説明する。この予測処理は、ストレージスケジューラ２０５が実行する。ストレージスケジューラ２０５は、ライトタスクであるタスクＣ，Ｄをどのストレージに書き込むかを判断するために予測演算する。
【００３４】
算出時の条件としては、
１．分類Ａのリードタスクは、一定帯域を利用してストレージにアクセスする。この分類Ａのタスクは、他の分類Ｂ，Ｃ，Ｄ，Ｅ，Ｆのタスクと並列アクセスが可能である。
２．分類Ｂ，Ｃ，Ｄ，Ｅ，Ｆのタスクは、利用可能な全帯域を利用してストレージにアクセスする。すなわち、分類Ａが使用していない全帯域を利用する。
３．分類Ｂ，Ｃ，Ｄ，Ｅ，Ｆのタスクは、シーケンシャルに処理する。分類Ａのタスクとのみ並列アクセスを許可する。
【００３５】
そして、メインストレージ１３１のストレージ帯域をＭ、サブストレージ１３２のストレージ帯域をＳ、メインストレージ１３１に割り当てられた分類ＢのタスクＢｘのデータ量をＢｍｘ、メインストレージ１３１に割り当てられた分類ＣのタスクＣｘのデータ量をＣｍｘ、メインストレージ１３１に割り当てられた分類ＡのタスクＡｘの使用帯域をＡｍｘ、サブストレージ１３２に割り当てられた分類ＢのタスクＢｘのデータ量をＢｓｘ、サブストレージ１３２に割り当てられた分類ＣのタスクＣｘのデータ量をＣｓｘ、サブストレージ１３２に割り当てられた分類ＡのタスクＡｘの使用帯域をＡｓｘとする。このとき、各ストレージ割り当て時のアクセス終了時間をＴｍ、Ｔｓとすると、下記式（１）で求めることができる。
【００３６】
【数１】
0005861706.tif 000002
【００３７】
そして、Ｔｍ＞Ｔｓであれば、ライトタスクＣ，Ｄをサブストレージ１３２へ書き込み、Ｔｍ＜Ｔｓであれば、ライトタスクＣ，Ｄをメインストレージ１３１へ書き込み指示する。
【００３８】
（ストレージアクセススケジューリングについて）
はじめに、ストレージスケジューラ２０５が実行するストレージアクセススケジューリングについて説明する。図５−１〜図５−５は、ストレージに対するアクセススケジューリングの例を示す図である。分類Ａ，Ｃ（Ｃ１，Ｃ２），Ｂ，Ｄの順にスケジューリングする例について説明する。ここで、分類Ａ，Ｂの対象データは、メインストレージ１３１に存在し、いずれも利用帯域は１０、Ｂのデータ量は３０、Ｃ１のデータ量は２０、Ｃ２のデータ量は３０であるとする。また、メインストレージ１３１、サブストレージ１３２ともにストレージ帯域は５０であるとする。
【００３９】
図５−１に示すように、はじめに、ストレージスケジューラ２０５は、ウェイトキュー２０３から分類Ａのリードタスクを取り出す。この分類Ａの対象データは、メインストレージ１３１にあるため、このタスクをメインストレージ１３１に割り当てる。つぎに、図５−２に示すように、分類Ｃ（Ｃ１）のライトタスクは、上記式（１）のアクセス終了時刻の予測演算をおこなうと、Ｔｍ＝２０／（５０−１０）＝０．５、Ｔｓ＝２０／５０＝０．４と算出されるため、この分類Ｃ１のタスクをサブストレージに割り当てる。
【００４０】
つぎに、図５−３に示すように、分類Ｃ（Ｃ２）のライトタスクについては、Ｔｍ＝３０／（５０−１０）＝０．７５、Ｔｓ＝２０＋３０／５０＝１により、この分類Ｃ２のタスクをメインストレージに割り当てる。つぎに、図５−４に示すように、分類Ｂのリードタスクは、メインストレージ１３１に存在するので、この分類Ｂのタスクをメインストレージ１３１に割り当てる。最後に、図５−５に示すように、分類Ｄのライトタスクについては、Ｔｍ＝（３０＋３０）／（５０−１０）＝１．５、Ｔｓ＝２０／５０＝０．４と算出されるため、この分類Ｄのタスクをサブストレージに割り当てる。
【００４１】
ストレージスケジューラ２０５は、上記のスケジューリング毎に、割り当てたタスクのＩＤと、終了予測時間をストレージアクセススケジューリングテーブル３２１に保存していく。
【００４２】
（ストレージアクセスとタスクアクセスの連動について）
つぎに、ストレージアクセスと、タスクアクセスの連動について説明する。タスクスケジューラ２０６は、ストレージスケジューラ２０５のスケジューリング情報をストレージアクセススケジューリングテーブル３２１から読み出し、各ＣＰＵのタスクキューにタスクのキューイングをおこなう。また、タスクディスパッチ部２０７，２１７は、ＣＰＵ１０１，１０２のディスパッチ状況を基に、タスクキュー２０４，２１４に挿入されているタスクのタスクディスパッチをおこなう。そして、アクセス監視部２０２，２１２は、ストレージに対するリード、ライトの発生時に、実行中タスクの情報に基づき、タスクがアクセスするストレージとして、メインストレージ１３１あるいはサブストレージ１３２を指定する。
【００４３】
このタスクスケジューラ２０６は、ストレージアクセス先が同一のストレージとなるように、各ＣＰＵ１０１，１０２のタスクキュー２０４，２１４にキューイングする。これにより、同一ストレージに対するアクセス競合を避ける。また、タスクディスパッチ部２０７，２１７は、分類Ｂ，Ｃのタスクを各ＣＰＵ１０１，１０２で同時に一つしかディスパッチしない。なお、分類Ｂ，Ｃのタスクは、既に別の分類Ｂ，Ｃのタスクがディスパッチされている場合には、タスクキュー２０４，２１４に入れたままにする。
【００４４】
また、タスクディスパッチ部２０７，２１７は、分類Ａ，Ｄ，Ｅのタスクがキューイングされた場合は、すぐにディスパッチする。これは、分類Ａ，Ｄ，Ｅのタスクはアクセス競合による影響が小さいためである。分類Ａのタスクは、全帯域を使用しないためであり、分類Ｄ，Ｅのタスクは、処理時間が非常に短いためである。
【００４５】
また、タスクディスパッチ部２０７，２１７は、分類Ｆのタスクがストレージアクセススケジューリングされており、各ＣＰＵ１０１，１０２のタスクキュー２０４，２１４に分類Ｂ，Ｃのタスクが存在せず各ＣＰＵ１０１，１０２で分類Ｂ，Ｃのタスクがディスパッチされていない場合には、この分類Ｆのタスクをディスパッチする。
【００４６】
また、タスクディスパッチ部２０７，２１７は、分類Ｆのタスクがディスパッチ中に分類Ｂ，Ｃのタスクがキューイングされた場合には、ただちに分類Ｆのタスクをタスクキュー２０４，２１４に戻す。これは、書き戻しによる性能低下を防ぐためである。
【００４７】
図６−１〜図６−５は、ストレージアクセスとタスクアクセスを連動させたスケジューリングの例を示す図である。図５−１〜図５−５と同様に、分類Ａ，Ｂの対象データは、メインストレージ１３１に存在し、いずれも利用帯域は１０、Ｂのデータ量は３０、Ｃ１のデータ量は２０、Ｃ２のデータ量は３０であるとする。また、メインストレージ１３１、サブストレージ１３２ともにストレージ帯域は５０であるとする。また、タスクの発生順序分類Ａ→Ｃ１→Ｃ２→Ｂ→Ｄと、各タスクのストレージスケジューリングについては、図５−１〜図５−５を用いて説明した結果を利用するものとする。
【００４８】
はじめに、図６−１に示すように、発生した分類Ａのタスクは、ストレージスケジューラ２０５によりメインストレージ１３１にアクセススケジューリングされる（図５−１参照）。また、この分類Ａのタスクは、いずれのＣＰＵ１０１，１０２でも割り当て可能である。図示の例では、タスクスケジューラ２０６は、分類ＡのタスクをＣＰＵ１０１に割り当てたものとする。
【００４９】
図６−２に示すように、つぎに発生した分類Ｃ１のタスクは、ストレージスケジューラ２０５によりサブストレージ１３２にアクセススケジューリングされる（図５−２参照）。そして、タスクスケジューラ２０６は、この分類Ｃ１のタスクを分類Ａのタスクとはアクセスストレージが異なるので、異なるＣＰＵ１０２に割り当てる。
【００５０】
図６−３に示すように、つぎに発生した分類Ｃ２のタスクは、ストレージスケジューラ２０５によりメインストレージ１３１にアクセススケジューリングされる（図５−３参照）。そして、タスクスケジューラ２０６は、この分類Ｃ２のタスクについて、アクセス先が同一であるタスクＡと同一のＣＰＵ１０１に割り当てる。上述したように、分類Ａのタスクと分類Ｃ（Ｃ２）のタスクは並列にアクセス可能であるため、ＣＰＵ１０１はこれら分類Ａと分類Ｃ２のタスクをマルチタスク処理する。
【００５１】
図６−４に示すように、つぎに発生した分類Ｂのタスクは、ストレージスケジューラ２０５によりメインストレージ１３１にアクセススケジューリングされる（図５−４参照）。そして、タスクスケジューラ２０６は、この分類Ｂのタスクについて、アクセス先が同一であるタスクＡ，Ｃ２と同一のＣＰＵ１０１に割り当てる。但し、上述したように、分類Ｂのタスクは、分類Ｃ（Ｃ２）のタスクと並列アクセス不可であるため、ＣＰＵ１０１は、分類Ｂのタスクをタスクキュー２０４にキューイングしておく。
【００５２】
図６−５に示すように、つぎに発生した分類Ｄのタスクは、ストレージスケジューラ２０５によりサブストレージ１３２にアクセススケジューリングされる（図５−５参照）。そして、タスクスケジューラ２０６は、この分類Ｄのタスクについて、アクセス先が同一であるタスクＣ１と同一のＣＰＵ１０２に割り当てる。但し、この分類Ｄのタスクは、アクセス時間が短いので、タスクディスパッチ部２１７は、分類Ｃ１のタスクと、この分類Ｄのタスクのディスパッチ順を入れ替えて分類Ｄのタスクを先に処理させる。
【００５３】
（データの書き戻しについて）
ライトアクセスのタスクを対象ストレージではなく、別ストレージにスケジューリングした場合、Ｆタスクを生成し、対象ストレージへの書き戻しをおこなう。このため、書き戻し終了までの期間、一時領域を確保する必要がある。
【００５４】
図７は、書き戻し前のデータへのアクセスの状態を示す図である。たとえば、分類Ｂのタスクが対象ストレージであるメインストレージ１３１ではなく、異なるサブストレージ１３２に一時保存された状態が生じたとする。このような書き戻しが終了する前の状態のデータ７０１に対するアクセスが発生した場合には、データ７０１の本来の保存先であるメインストレージ１３１ではなく、この時点でデータ７０１が一時保存されているサブストレージ１３２へアクセスする制御が必要となる。
【００５５】
上記データの書き戻しに対応するために、タスク毎に固有のタスク情報をあらかじめ付加しておき、タスクスケジューラ２０６と、ストレージスケジューラ２０５とを連携させる。この連携に用いる情報が、上述した図３−１に示したタスクテーブル３０１である。ストレージスケジューラ２０５は、このタスクテーブル３０１を参照して、アクセス先を特定する。また、ライトタスクテーブル３１１の一時保存先（上記例ではサブストレージ１３２）にアクセスしているリードタスクが存在する間は、この一時保存されているデータ７０１を保護しておく。そしてストレージスケジューラ２０５は、スケジューリング時に、このタスクテーブル３０１を参照してＦタスクに対するスケジューリングを決定する。
【００５６】
（Ｆタスクのディスパッチ例）
図８−１〜図８−３は、データの書き戻しにかかる処理を示す図である。図８−１に示すように、ＣＰＵ１０１，１０２のキャッシュ（Ｌ１キャッシュ）８０１，８０２間には、スヌープコントローラ８０３が設けられる。このスヌープコントローラ８０３を介してキャッシュ８０１，８０２の更新データをＣＰＵ１０１，１０２間でやりとりし、キャッシュ８０１，８０２のコヒーレンシをとっている。
【００５７】
また、キャッシュ８０１には、ＣＰＵ１０１，１０２の動作フラグ（Ｃフラグと称す）８１１，８１２が設けられ、キャッシュ８０２にもＣＰＵ１０１，１０２のＣフラグ８２１，８２２が設けられている。
【００５８】
ＣＰＵ１０１に関するＣフラグ８１１，８２１は、ＣＰＵ１０１で分類Ｂ，Ｃ，Ｄ，Ｅのタスクを実行時に１、Ｆタスクを実行時に２の値をとる。ＣＰＵ１０２に関するＣフラグ８１２，８２２についても同様に、ＣＰＵ１０２で分類Ｂ，Ｃ，Ｄ，Ｅのタスクを実行時に１、Ｆタスクを実行時に２の値をとる。それ以外（分類Ａのタスク実行時を含む）の値は０（ＯＦＦ）である。
【００５９】
そして、図８−１に示すように、ＣＰＵ１０１は、分類ＡのタスクＡ１と分類Ｃのタスクをマルチタスク処理しており、タスクキュー２０４に分類Ｆのタスクがキューイングされている。また、ＣＰＵ１０２は、分類Ｄのタスクを処理し、タスクキュー２１４に分類Ａ２のタスクがキューイングされているとする。この場合、ＣＰＵ１０１のＣフラグ８１１，８２１は、分類Ｃのタスク実行時に１、分類Ａのタスク実行時に０となる。ＣＰＵ１０２のＣフラグ８１２，８２２は、分類Ｄのタスク実行により１となる。
【００６０】
つぎに、図８−２に示すように、ＣＰＵ１０１における分類Ｃのタスクが終了すると（分類Ａのタスク（Ａ１）は実行継続）、このときＣＰＵ１０１のＣフラグ８１１，８２１は、値が０になる。また、ＣＰＵ１０２における分類Ｄのタスクが終了すると、つぎに、分類Ａのタスク（Ａ２）が実行されるが、このときＣＰＵ１０２のＣフラグ８１２，８２２は、値が０になる。これにより、ＣＰＵ１０１は、すべてのＣフラグ８１１，８１２の値が０になったことにより、タスクキュー２０４のＦタスクをディスパッチする。
【００６１】
これにより、図８−３に示すように、ＣＰＵ１０１で分類ＦのＦタスクが実行され、Ｆタスクの実行中は、ＣＰＵ１０１のＣフラグ８１１，８２１は、値が２となる。このように、分類ＦのＦタスクは、複数のＣＰＵ１０１，１０２のうち一つのＣＰＵでのみ実行される。
【００６２】
（システムの処理手順）
上述したように、実施の形態では、ストレージスケジューラ２０５と、タスクスケジューラ２０６が連動して動作する。ストレージスケジューラ２０５のアクセススケジューリング結果を基に、タスクスケジューラ２０６がＣＰＵ１０１，１０２へのタスクの配布をおこなう。
【００６３】
（ストレージスケジューラの処理手順）
図９は、ストレージスケジューラがおこなう処理手順を示すフローチャートである。マスタスケジューラ２０１に設けられるストレージスケジューラ２０５は、タスクの発生を待ち（ステップＳ９０１：Ｎｏ、およびステップＳ９０２：Ｎｏのループ）、タスクが発生すると（ステップＳ９０１：Ｙｅｓ）、タスクの種類を判別する（ステップＳ９０３）。タスクが発生せず（ステップＳ９０１：Ｎｏ）、すべてのタスクが終了すると（ステップＳ９０２：Ｙｅｓ）、終了する。
【００６４】
ステップＳ９０３のタスクの種別の判別では、あらかじめ定めた分類Ａ〜Ｆのタスクであれば（ステップＳ９０３：Ｙｅｓ）、つぎに、分類Ａ，Ｂ，Ｅのリードタスクであるか判別し（ステップＳ９０４）、分類Ａ〜Ｆのタスクでなければ（ステップＳ９０３：Ｎｏ）、ストレージスケジューリングを実施せず、タスクスケジューラ２０６の処理（後述する図１０）へ移行する。
【００６５】
ステップＳ９０４において、分類Ａ，Ｂ，Ｅのリードタスクであれば（ステップＳ９０４：Ｙｅｓ）、アクセスデータが存在するストレージをチェックし、アクセスデータが存在するストレージにスケジューリングする。はじめに、タスクテーブル３０１を参照し、ライトタスクテーブル３１１の（２）指定書き込み領域と、リードタスクテーブル３１２の（２）指定アクセス領域を比較し、一致するライトタスクを検索する（ステップＳ９０５）。
【００６６】
つぎに、該当するライトタスクの（４）書き戻し判定フラグをチェックし（ステップＳ９０６）、書き戻しが完了しているか判定する（ステップＳ９０７）。書き戻しが完了していれば（ステップＳ９０７：Ｙｅｓ）、リードタスクテーブル３１２の（３）読み出し指定領域をライトタスクテーブル３１１の（２）指定書き込み領域に更新し（ステップＳ９０８）、ステップＳ９１１に移行する。
【００６７】
一方、ステップＳ９０７において、書き戻しが完了していなければ（ステップＳ９０７：Ｎｏ）、リードタスクテーブル３１２の（３）読み出し指定領域をライトタスクテーブル３１１の（３）書き込み指定領域に更新し（ステップＳ９０９）、また、ライトタスクテーブル３１１の（５）一時保存先アクセスリードタスクにリードタスクテーブル３１２の（１）リードタスクＩＤを付加し（ステップＳ９１０）、ステップＳ９１１に移行する。
【００６８】
ステップＳ９１１では、ライトタスクテーブル３１１の（６）データサイズに、読み出すデータサイズを書き込み（ステップＳ９１１）、該当するタスクを対象データのあるストレージに割り当てる（ステップＳ９１２）。この後、ストレージアクセススケジューリングテーブル３２１を更新し（ステップＳ９１３）、タスクスケジューラ２０６の処理（図１０）へ移行する。
【００６９】
ステップＳ９０４において、分類Ａ，Ｂ，Ｅのリードタスク以外のときには（ステップＳ９０４：Ｎｏ）、分類Ｆのタスクであるか判定する（ステップＳ９１４）。分類Ｆのタスクでなければ（ステップＳ９１４：Ｎｏ）、タスクの種別は、残る分類Ｃ，Ｄのいずれかのライトタスクであるため、ストレージアクセス終了時間を予測し、アクセスするストレージを決定し、割り当てる（ステップＳ９１５）。この後、ライトタスクテーブル３１１の（２）指定書き込み領域と、（３）書き込み指定領域が等しいか（すなわち、書き戻し不要か）判定する（ステップＳ９１６）。
【００７０】
ステップＳ９１６の判定結果、ライトタスクテーブル３１１の（２）指定書き込み領域と、（３）書き込み指定領域が等しければ（ステップＳ９１６：Ｙｅｓ）、ライトタスクテーブル３１１を更新する（ステップＳ９１７）。この際、ライトタスクテーブル３１１の（２）指定書き込み領域〜（４）書き戻し判定フラグ、（６）データサイズを更新する。ステップＳ９１６の判定結果、ライトタスクテーブル３１１の（２）指定書き込み領域と、（３）書き込み指定領域が等しくなければ（ステップＳ９１６：Ｎｏ）、書き戻しが必要であり、Ｆタスクをタスクキュー２０４に挿入してから（ステップＳ９１８）、ステップＳ９１７に移行する。ステップＳ９１７の実行後は、ストレージアクセススケジューリングテーブル３２１を更新し（ステップＳ９１３）、タスクスケジューラ２０６の処理（図１０）へ移行する。
【００７１】
また、ステップＳ９１４の判定結果、分類Ｆのタスクであれば（ステップＳ９１４：Ｙｅｓ）、このＦタスクを対象データのある（書き戻しをおこなうデータが存在する）ストレージに割り当て（ステップＳ９１９）、ストレージアクセススケジューリングテーブル３２１を更新し（ステップＳ９１３）、タスクスケジューラ２０６の処理（図１０）へ移行する。
【００７２】
（タスクスケジューラの処理手順）
図１０は、タスクスケジューラがおこなう処理手順を示すフローチャートである。マスタスケジューラ２０１に設けられるタスクスケジューラ２０６は、図９に示したストレージスケジューラ２０５によるストレージアクセススケジューリングの処理後に実行される。
【００７３】
はじめに、該当するタスクが分類Ａ〜Ｆのタスクであるか判別し（ステップＳ１００１）、分類Ａ〜Ｆのタスクであれば（ステップＳ１００１：Ｙｅｓ）、同一ストレージに割り当てられているタスクがいずれかのＣＰＵ１０１，１０２のタスクキュー２０４，２１４に存在するか判断する（ステップＳ１００２）。判断結果、同一ストレージに割り当てられているタスクがいずれかのＣＰＵ１０１，１０２のタスクキュー２０４，２１４に存在すれば（ステップＳ１００２：Ｙｅｓ）、このタスクを同一のタスクキュー２０４，２１４に割り当て（ステップＳ１００３）、処理を終了してストレージスケジューラ２０５の処理（図９）に戻る。
【００７４】
ステップＳ１００１の判断結果が分類Ａ〜Ｆのタスクではないとき（ステップＳ１００１：Ｎｏ）、およびステップＳ１００２の判断結果が同一ストレージに割り当てられているタスクがいずれかのＣＰＵ１０１，１０２のタスクキュー２０４，２１４に存在しないとき（ステップＳ１００２：Ｎｏ）、通常スケジューリングを実施し（ステップＳ１００４）、処理を終了してストレージスケジューラ２０５の処理（図９）に戻る。
【００７５】
（メインスケジューラ、スレーブスケジューラの処理手順）
図１１は、メインスケジューラ、スレーブスケジューラがおこなう処理手順を示すフローチャートである。はじめに、メインスケジューラ２０１、スレーブスケジューラ２１１は、タスクキュー２０４、２１４にタスクが存在するか、もしくはいずれかのＣＰＵのフラグ値が変化したかを判定し（ステップＳ１１０１）、タスクが存在すれば（ステップＳ１１０１：（１））、分類Ｂ〜Ｆのタスクであるか判定する（ステップＳ１１０２）。いずれかのＣＰＵのフラグ値が変化した場合は（ステップＳ１１０１：（２））、Ｆタスクを実行中であるかを判定し（ステップＳ１１１１）、Ｆタスク実行中であれば（ステップＳ１１１１：Ｙｅｓ）、Ｆタスクをタスクキューに戻し（ステップＳ１１１２）、ステップＳ１１０１に戻り、Ｆタスク実行中でなければ（ステップＳ１１１１：Ｎｏ）、処理を終え、ステップＳ１１０１に戻る。いずれの判定にも当てはまらない場合（ステップＳ１１０１：Ｎｏ）は、上記処理を終え、タスクの発生、もしくは、いずれかのＣＰＵフラグ値の変更を待つ。
【００７６】
ステップＳ１１０２において、分類Ｂ〜Ｆのタスクであれば（ステップＳ１１０２：Ｙｅｓ）、分類Ｆのタスクであるか判断し（ステップＳ１１０３）、分類Ｂ〜Ｆのタスクでなければ（ステップＳ１１０２：Ｎｏ）、ステップＳ１１１０へ移行する。分類Ｆのタスクであれば（ステップＳ１１０３：Ｙｅｓ）、いずれかのＣＰＵ１０１，１０２で分類Ｂ〜Ｆのタスクがスレッド化されているか判断する（ステップＳ１１０４）。判断結果、分類Ｂ〜Ｆのタスクがスレッド化されていれば（ステップＳ１１０４：Ｙｅｓ）、処理を終了し、分類Ｂ〜Ｆのタスクがスレッド化されていなければ（ステップＳ１１０４：Ｎｏ）、Ｃフラグを２に設定し（ステップＳ１１０５）、このＦタスクをスレッド化して処理を開始し（ステップＳ１１０６）、処理終了により上記処理を終える。
【００７７】
ステップＳ１１０３において、分類Ｆのタスクでなければ（ステップＳ１１０３：Ｎｏ）、同一ＣＰＵ１０１，１０２において（１）分類Ｂ〜Ｅのタスクがスレッド化されているか、あるいは（２）Ｆタスクがスレッド化されているか判定する（ステップＳ１１０７）。判定結果、分類Ｂ〜Ｅのタスクがスレッド化されていれば（ステップＳ１１０７：結果（１））、このタスクをスレッド化せずに処理終了する。また、（２）Ｆタスクがスレッド化されていれば（ステップＳ１１０７：結果（２））、Ｆタスクをタスクキュー２１４に戻し（ステップＳ１１０８）、Ｃフラグを１に設定し（ステップＳ１１０９）、このタスクをスレッド化して処理を開始し（ステップＳ１１１０）、処理終了により、上記一連の処理を終える。
【００７８】
また、ステップＳ１１０７において、上記（１）分類Ｂ〜Ｅのタスクがスレッド化されておらず、さらに、（２）Ｆタスクがスレッド化されていない場合には（ステップＳ１１０７：Ｎｏ）、ステップＳ１１１０により該当タスクをスレッド化して処理を開始し（ステップＳ１１１０）、処理終了により、上記一連の処理を終える。
【００７９】
（アクセス監視部の処理手順）
図１２は、アクセス監視部がおこなう処理手順を示すフローチャートである。アクセス監視部２０２，２１２は、それぞれストレージに対するリード、ライトの発生時に、実行中タスクの情報に基づき、タスクがアクセスするストレージ（メインストレージ１３１あるいはサブストレージ１３２）を指定する。
【００８０】
はじめに、（１）タスクディスパッチ発生、あるいは（２）ディスパッチ中のタスク処理終了が発生したか判定する（ステップＳ１２０１）。（１）タスクディスパッチが発生したときには（ステップＳ１２０１：結果（１））、このタスクが分類Ａ〜Ｆのタスクか判定する（ステップＳ１２０２）。分類Ａ〜Ｆのタスクであれば（ステップＳ１２０２：Ｙｅｓ）、つぎに、分類Ａ，Ｂ，Ｅのリードタスクであるか判定する（ステップＳ１２０３）。ステップＳ１２０１，およびステップＳ１２０２のいずれにおいても該当しないタスクであれば（ステップＳ１２０１：Ｎｏ、およびステップＳ１２０２：Ｎｏ）、今回のタスクに関する特別なアクセス制御は実施せずに処理を終える。
【００８１】
ステップＳ１２０３において、分類Ａ，Ｂ，Ｅのリードタスクであれば（ステップＳ１２０３：Ｙｅｓ）、リードタスクテーブル３１２から情報（３）読み出し指定領域を取得し（ステップＳ１２０４）、この読み出し指定領域からデータの読み出しを開始する（ステップＳ１２０５）。この後、このタスクの（１）タスク終了、あるいは（２）タスクスイッチを判定し（ステップＳ１２０６）、（１）タスク終了時には（ステップＳ１２０６：結果（１））、ステップＳ１２０７に移行し、（２）タスクスイッチ時には（ステップＳ１２０６：結果（２））、処理を終了する。また、（１）タスク終了、（２）タスクスイッチのいずれでもなければ、タスク終了、あるいはタスクスイッチの発生を待つ（ステップＳ１２０６：Ｎｏのループ）。
【００８２】
ステップＳ１２０７では、リードタスクテーブル３１２の（２）指定アクセス領域と（３）読み出し指定領域とが一致しているか判定する。判定の結果、（２）指定アクセス領域と（３）読み出し指定領域とが一致していれば（ステップＳ１２０７：Ｙｅｓ）、処理を終了し、（２）指定アクセス領域と（３）読み出し指定領域とが一致していなければ（ステップＳ１２０７：Ｎｏ）、一時保存先からデータを読み込んでいたため、ライトタスクテーブル３１１の（２）指定書き込み領域と、リードタスクテーブル３１２の（２）指定アクセス領域が一致するライトタスクを検索し、該当ライトタスクについてライトタスクテーブル３１１の（５）一時保存先アクセスリードタスクから終了したリードタスクのＩＤを除去し（ステップＳ１２０８）、処理を終了する。
【００８３】
また、ステップＳ１２０１において、（２）ディスパッチ中のタスク処理終了が発生したときには（ステップＳ１２０１：結果（２））、分類Ｂ〜Ｆのタスクであるか判定し（ステップＳ１２０９）、分類Ｂ〜Ｆのタスクであれば（ステップＳ１２０９：Ｙｅｓ）、Ｃフラグを初期値（０）に設定し（ステップＳ１２１０）、処理を終了する。一方、分類Ｂ〜Ｆのタスクでなければ（分類Ａのタスクを含む）（ステップＳ１２０９：Ｎｏ）、処理をおこなわず、終了する。
【００８４】
また、ステップＳ１２０３において、分類Ａ，Ｂ，Ｅのリードタスク以外であれば（ステップＳ１２０３：Ｎｏ）、このタスクがライトタスクであるかＦタスクであるか判定する（ステップＳ１２１１）。判定の結果、Ｆタスクであれば（ステップＳ１２１１：Ｙｅｓ）、Ｆタスクテーブル３１３の情報（２）書き戻しライトタスクＩＤに該当するライトタスクをライトタスクテーブル３１１から検索し、該当タスクの情報（２）指定書き込み領域と、（３）書き込み指定領域を取得し（ステップＳ１２１２）、対象領域の書き戻しを開始する（ステップＳ１２１３）。
【００８５】
この後、このタスクの（１）タスク終了、あるいは（２）タスクスイッチを判定し（ステップＳ１２１４）、（１）タスク終了時には（ステップＳ１２１４：結果（１））、書き戻ししたライトタスクの情報（４）書き戻し判定を更新（終了）し（ステップＳ１２１５）、ライトタスクテーブル３１１の情報（２）指定書き込み領域の保護を解除し（ステップＳ１２１６）、処理を終了する。また、ステップＳ１２１４において、（２）タスクスイッチ時には（ステップＳ１２１４：結果（２））、処理をおこなわず、終了する。
【００８６】
また、ステップＳ１２１１の判定の結果、Ｆタスクでなければ（ステップＳ１２１１：Ｎｏ）、分類Ｃ，Ｄのライトタスクであり、ライトタスクテーブル３１１から情報（２）指定書き込み領域と、（３）書き込み指定領域を取得する（ステップＳ１２１７）。この後、（２）指定書き込み領域と（３）書き込み指定領域が一致しているか判定する（ステップＳ１２１８）。判定の結果、一致していなければ（ステップＳ１２１８：Ｎｏ）、書き込み先のストレージ領域を保護し（ステップＳ１２１９）、指定領域へのデータの書き込みを開始し（ステップＳ１２２０）、処理終了により、上記一連の処理を終える。ステップＳ１２１８にて、（２）指定書き込み領域と（３）書き込み指定領域が一致していれば（ステップＳ１２１８：Ｙｅｓ）、ステップＳ１２１９をスキップして指定領域へのデータの書き込みを開始し（ステップＳ１２２０）、処理終了により、上記一連の処理を終える。
【００８７】
（実施の形態による競合回避および全アクセスの処理時間について）
図１３は、実施の形態による競合の回避および全アクセスの処理時間を説明する図である。上述したストレージアクセススケジューリングの結果、メインストレージ１３１に対して分類ＣのライトタスクＣ１，Ｃ３を割り当て、サブストレージ１３２に対して分類ＣのライトタスクＣ２，Ｃ４を割り当てたと仮定する。ここで、各タスクＣ１〜Ｃ４の書き込みデータ量はいずれも５０、各ストレージの帯域は５０であるとする。
【００８８】
上述の実施の形態の処理（図中右下）によれば、同一アクセス先のタスクが同一ＣＰＵ１０１，１０２に割り当てられるので、メインストレージ１３１とサブストレージ１３２のいずれにもアクセス競合は発生しない。また、各ＣＰＵ１０１，１０２でシーケンシャルにアクセスがおこなわれると仮定すると、全アクセスの処理時間は、５０／５０＋５０／５０＝２となる。すなわち、メインストレージ１３１とサブストレージ１３２の全帯域を有効に使用することができる。
【００８９】
一方、システムの基本構成は実施の形態と同一構成であるが、従来の未対策技術、すなわち、ストレージアクセススケジュールのみ実行し、ストレージアクセススケジューリングとタスクスケジューリングとが連携していない構成を対比のために図中左下に示した。この場合、図示のように、タスクＣ１とＣ２がＣＰＵ１０１に割り当てられ、タスクＣ３とＣ４がＣＰＵ１０２に割り当てられる場合がある。このようにタスクスケジューリングされ、メインストレージ１３１に割り当てられているタスクＣ１，Ｃ３に対しＣＰＵ１０１のタスクＣ１と、ＣＰＵ１０２のタスクＣ３が実行されると、メインストレージ１３１に対してＣＰＵ１０１，１０２が同時にアクセスするアクセス競合が発生する。そして、各ＣＰＵ１０１，１０２でシーケンシャルにアクセスがおこなわれると仮定すると、全アクセスの処理時間は、タスクＣ１とＣ３の実行によるアクセス競合、およびタスクＣ２とＣ４の時刻によるアクセス競合の発生により、５０／２５＋５０／２５＝４となり、実施の形態に比して倍の処理時間がかかる。この例からみても、実施の形態の処理によれば、高いアクセス性能を達成できることがわかる。
【００９０】
（システムの適用例）
図１４は、図１に示したコンピュータを用いたシステムの適用例を示す図である。図１４において、ネットワークＮＷは、サーバ１４０１，１４０２とクライアント１４３１〜１４３４とが通信可能なネットワークであり、たとえば、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネット、携帯電話網などで構成される。
【００９１】
サーバ１４０２は、クラウド１４２０を構成するサーバ群（サーバ１４２１〜１４２５）の管理サーバである。クライアント１４３１〜１４３４のうち、クライアント１４３１はノート型パソコン、クライアント１４３２はデスクトップ型パソコン、クライアント１４３３は携帯電話機（スマートフォン、ＰＨＳ（Ｐｅｒｓｏｎａｌ  Ｈａｎｄｙｐｈｏｎｅ  Ｓｙｓｔｅｍ）でもよい）、クライアント１４３４はタブレット型端末である。図１４のサーバ１４０１，１４０２，１４２１〜１４２５、クライアント１４３１〜１４３４は、たとえば、図１に示したコンピュータにより実現される。
【００９２】
また、本実施の形態は、図１に示した各ＣＰＵ１０１，１０２、およびストレージ１３１，１３２がそれぞれ異なるコンピュータ（たとえば図１４の携帯電話機やサーバ）に搭載され、複数のコンピュータがネットワークＮＷを介して分散型の並列処理をおこなう構成に適用することもできる。
【００９３】
以上説明した開示技術によれば、同一のストレージにアクセスするタスクを同じＣＰＵに割り当てることにより、複数のＣＰＵが一つのストレージにアクセスするアクセス競合を回避することができ、効果的なスケジューリングをおこなえるようになる。
【００９４】
また、タスクの種別を判定して、あるタスクによってアクセスしているストレージに対してさらに他のタスクが生じることによるアクセス競合を避けるようにしている。タスクの種別については、データサイズによる処理時間等に基づき、複数の種別のタスクについて、それぞれ分類しておけばよく、瞬間的にアクセス競合が発生するが全体のアクセス時間に影響を与えない場合には、アクセス競合を許容することも判断している。たとえば、全帯域ではなく一定帯域のみ利用するリードタスクであれば、他のライトタスク等は、並行して同じストレージへのアクセスを許容してもよい。
【００９５】
また、ライトタスクのデータ書き込み対象のストレージは、複数のタスクがそれぞれのストレージにアクセスするときの時間に基づき決定するため、アクセス時間を短時間とすることができるようになる。この決定には、各ストレージの帯域や、分類されたタスクのデータ量などの複数の値を用いており、適したストレージを決定できるようになる。
【００９６】
また、データの読み出し先のストレージが定まっているリードタスクを一つのＣＰＵで実行中に、異なるＣＰＵでライトタスクを実行する際には、ライトタスクのデータを一旦、他のストレージに書き込む。他のストレージに一旦書き込まれたデータは、ストレージへのアクセス終了後に本来のストレージに移動させる。これにより、システム全体のストレージに対するアクセス処理を効率化できるようになる。
【００９７】
上記の実施形態において説明したストレージは、たとえばディスク装置であるが、これに限らず、複数のＣＰＵが共有使用することによりアクセス競合が生じるメモリであれば、他の各種データメモリ装置であっても同様に適用することができる。
【符号の説明】
【００９８】
１００  システム
１０１，１０２  ＣＰＵ
１０３  バス
１１１，１１２  オペレーティングシステム（ＯＳ）
１２１  メモリ
１３１  メインストレージ
１３２  サブストレージ
２０１  マスタスケジューラ
２０２，２１２  アクセス監視部
２０３  ウェイトキュー
２０４，２１４  タスクキュー
２０５  ストレージスケジューラ
２０６  タスクスケジューラ
２０７，２１７  タスクディスパッチ部
２１１  スレーブスケジューラ
２２１  データベース（ＤＢ）
３０１  タスクテーブル
３１１  ライトタスクテーブル
３１２  リードタスクテーブル
３１３  Ｆタスクテーブル
３２１  ストレージアクセススケジューリングテーブル
３２２  タスクスケジューリングテーブル
【図１】
0005861706.tif 000003
【図２】
0005861706.tif 000004
【図３−１】
0005861706.tif 000005
【図３−２】
0005861706.tif 000006
【図３−３】
0005861706.tif 000007
【図４−１】
0005861706.tif 000008
【図４−２】
0005861706.tif 000009
【図５−１】
0005861706.tif 000010
【図５−２】
0005861706.tif 000011
【図５−３】
0005861706.tif 000012
【図５−４】
0005861706.tif 000013
【図５−５】
0005861706.tif 000014
【図６−１】
0005861706.tif 000015
【図６−２】
0005861706.tif 000016
【図６−３】
0005861706.tif 000017
【図６−４】
0005861706.tif 000018
【図６−５】
0005861706.tif 000019
【図７】
0005861706.tif 000020
【図８−１】
0005861706.tif 000021
【図８−２】
0005861706.tif 000022
【図８−３】
0005861706.tif 000023
【図９】
0005861706.tif 000024
【図１０】
0005861706.tif 000025
【図１１】
0005861706.tif 000026
【図１２】
0005861706.tif 000027
【図１３】
0005861706.tif 000028
【図１４】
0005861706.tif 000029