(57)【要約】【課題】  マルチプロセッサシステムにおいて、スレッドをスケジューリングして資源の有効利用と処理の高速化を図る必要がある。【解決手段】  スレッド状態管理部３２は、複数のスレッドをグループ化して、スレッドグループの状態を管理する。実行待ちキュー３０は、実行待ちおよび実行中の状態にあるスレッドグループを優先度順かつ同一優先度内ではＦＩＦＯ（First In First Out）順でキューイングする。割り当てリスト生成部１２は、実行待ちキュー３０の先頭から順にスレッドグループを取り出し、そのスレッドグループに属するすべてのスレッドを同時にいずれかのプロセッサに割り当てられる場合に限り、そのスレッドグループをスレッド割り当てリスト１８に追加する。スレッド割り当て部１４は、スレッド割り当てリスト１８に格納されたスレッドグループに属するすべてのスレッドをプロセッサに割り当てる。【選択図】  図６
2006155480.tif 000002
【特許請求の範囲】
【請求項１】
マルチプロセッサシステムにおいて、並列処理されるスケジューリング対象の実行単位を複数のプロセッサに割り当てる順序をスケジュールする方法であって、
１つ以上の前記スケジューリング対象の実行単位をグループ化し、同一グループに属する前記実行単位の各々により占有されるプロセッサ内の資源を互いに参照できるように、各実行単位が参照するアドレス空間に前記資源をマップし、同一グループに属するすべての前記実行単位は同時にいずれかのプロセッサに割り当てるという制約の下で、グループのプロセッサへの割り当てを制御することを特徴とするスケジューリング方法。
【請求項２】
マルチプロセッサシステムにおいて、並列処理されるスケジューリング対象の実行単位を複数のプロセッサに割り当てる順序をスケジュールする方法であって、
１つ以上の前記スケジューリング対象の実行単位をグループ化してグループ単位でプロセッサへの割り当てを管理し、前記グループ毎に設定される優先度順でかつ同一優先度内では前記グループが待ち行列に到着した順で前記グループの優先順位を決め、同一グループに属するすべての実行単位は同時にいずれかのプロセッサに割り当てるという制約の下で、実行待ちおよび実行中の状態にあるグループを前記優先順位にしたがってプロセッサに割り当てることを特徴とするスケジューリング方法。
【請求項３】
マルチプロセッサシステムにおいて、並列処理されるスケジューリング対象の実行単位を複数のプロセッサに割り当てる順序をスケジュールする方法であって、
１つ以上の前記スケジューリング対象の実行単位を含むグループの内、実行待ちおよび実行中の状態にあるグループを前記グループ毎に設定される優先度順でかつ同一優先度内では到着順に格納した実行待ちキューの先頭から順に前記グループを取り出し、取り出したグループに属するすべての実行単位を同時にいずれかのプロセッサに割り当てることができる場合に限り、そのグループに属するすべての実行単位をプロセッサに割り当て、そうでない場合は、それ以降に前記実行待ちキューから取り出されるグループの割り当てを優先することを特徴とするスケジューリング方法。
【請求項４】
プロセッサに割り当てる前記実行単位の数がプロセッサ総数に達するか、または前記実行待ちキューの末尾から前記グループが取り出されるに至るまで、前記実行待ちキューから順次取り出されるグループのプロセッサへの割り当て処理を繰り返すことを特徴とする請求項３に記載のスケジューリング方法。
【請求項５】
前記実行待ちキューの先頭から順次取り出されるグループに属する各実行単位が既にいずれかのプロセッサに割り当てられて実行中である場合、その実行中である実行単位は、他のプロセッサに割り当て先を変更されて再配置されないように、その実行中である実行単位の当該プロセッサへの割り当てを確保することを特徴とする請求項３または４に記載のスケジューリング方法。
【請求項６】
マルチプロセッサシステムにおいて、並列処理されるスケジューリング対象の実行単位を複数のプロセッサに割り当てる順序をスケジュールする装置であって、
１つ以上の前記スケジューリング対象の実行単位をグループ化し、同一グループに属する前記実行単位の各々により占有されるプロセッサ内の資源を互いに参照できるように、各実行単位が参照するアドレス空間に前記資源をマップして管理するメモリ制御部と、
実行待ちおよび実行中の状態にあるグループを格納した実行待ちキューと、
前記実行待ちキューの先頭から順にグループを取り出し、取り出したグループに属するすべての実行単位を同時にいずれかのプロセッサに割り当てることができる場合に限り、そのグループに属するすべての実行単位を複数のプロセッサに割り当てる割り当て部とを含むことを特徴とするスケジューリング装置。
【請求項７】
当該装置は、実行単位をグループ化する初期設定の際に、同一グループに属する各実行単位が占有する前記資源の前記アドレス空間へのマップ先の領域を決定し、その資源のマップ先の領域に関する設定情報を当該グループが削除されるまで保持することを特徴とする請求項６に記載のスケジューリング装置。
【請求項８】
前記割り当て部によりいずれかのプロセッサに同時に割り当てられた同一グループに属する第１および第２の実行単位について、前記第１の実行単位が、前記アドレス空間にマップされた同一グループ内の前記第２の実行単位の資源領域にデータを書き込む操作を行うことにより、同一グループ内の前記第１の実行単位から前記第２の実行単位にデータが渡されることを特徴とする請求項６または７に記載のスケジューリング装置。
【請求項９】
前記割り当て部によりいずれかのプロセッサに同時に割り当てられた同一グループに属する第１および第２の実行単位について、前記第１の実行単位が、前記アドレス空間にマップされた同一グループ内の前記第２の実行単位の資源領域にデータを書き込む操作を行い、前記第２の実行単位が、当該資源に対するデータの書き込みの完了を待つことにより、同一グループ内の前記第１の実行単位と前記第２の実行単位の間で同期が取られることを特徴とする請求項６または７に記載のスケジューリング装置。
【請求項１０】
マルチプロセッサシステムにおいて、並列処理されるスケジューリング対象の実行単位を複数のプロセッサに割り当てる順序をスケジュールする装置であって、
１つ以上の前記スケジューリング対象の実行単位を含むグループの内、実行待ちおよび実行中の状態にあるグループを前記グループ毎に設定される優先度順でかつ同一優先度内では到着順に格納した実行待ちキューと、
前記実行待ちキューの先頭から順にグループを取り出し、取り出したグループに属するすべての実行単位を同時にいずれかのプロセッサに割り当てることができる場合に限り、そのグループをプロセッサへの割り当て候補となるグループを格納した割り当てリストに追加する割り当てリスト生成部と、
前記割り当てリスト生成部により生成された前記割り当てリストに格納されたグループに属するすべての実行単位を複数のプロセッサに割り当てる割り当て部とを含むことを特徴とするスケジューリング装置。
【請求項１１】
前記割り当てリスト生成部は、プロセッサに割り当てる実行単位の個数がプロセッサ総数に達するか、または前記実行待ちキューの末尾から前記グループが取り出されるに至るまで、前記割り当てリストの生成処理を繰り返すことを特徴とする請求項１０に記載のスケジューリング装置。
【請求項１２】
実行中の状態にある実行単位とその実行単位が割り当てられているプロセッサとの対応関係を保持するスケジュールテーブルをさらに含み、
前記割り当てリスト生成部は、前記実行待ちキューから順次取り出したグループに属する各実行単位が前記スケジュールテーブルにある場合、その実行単位が割り当てられているプロセッサにフラグを設定し、前記実行待ちキューから順次取り出したグループに属する各実行単位が前記スケジュールテーブルになく、そのグループに属するすべての実行単位を同時にいずれかのプロセッサに割り当てることができる場合、そのグループを前記割り当てリストに追加し、
前記割り当て部は、前記割り当てリストに格納されたグループに属するすべての実行単位を前記スケジュールテーブルにおいて前記フラグが設定されていないプロセッサに割り当てることを特徴とする請求項１０または１１に記載のスケジューリング装置。
【請求項１３】
同一グループに属する各実行単位がそれぞれの占有するプロセッサ内の資源を互いに参照できるように、前記資源は各実行単位が参照するアドレス空間にマップされていることを特徴とする請求項１０から１２のいずれかに記載のスケジューリング装置。
【請求項１４】
前記割り当て部によりいずれかのプロセッサに同時に割り当てられた同一グループに属する各実行単位が、前記アドレス空間にマップされた同一グループに属する各実行単位の資源領域に対してデータを読み書きすることにより、同一グループに属する複数の実行単位の間でデータの共有がなされることを特徴とする請求項１３に記載のスケジューリング装置。
【請求項１５】
前記割り当て部によりいずれかのプロセッサに同時に割り当てられた同一グループに属する第１および第２の実行単位について、前記第１の実行単位が、前記アドレス空間にマップされた同一グループ内の前記第２の実行単位の資源領域にデータを書き込む操作を行うことにより、同一グループ内の前記第１の実行単位から前記第２の実行単位にデータが渡されることを特徴とする請求項１３に記載のスケジューリング装置。
【請求項１６】
前記割り当て部によりいずれかのプロセッサに同時に割り当てられた同一グループに属する第１および第２の実行単位について、前記第１の実行単位が、前記アドレス空間にマップされた同一グループ内の前記第２の実行単位の資源領域にデータを書き込む操作を行い、前記第２の実行単位が、当該資源に対するデータの書き込みの完了を待つことにより、同一グループ内の前記第１の実行単位と前記第２の実行単位の間で同期が取られることを特徴とする請求項１３に記載のスケジューリング装置。
【請求項１７】
並列処理されるスケジューリング対象の実行単位を複数のプロセッサに割り当てて並列に実行するマルチプロセッサシステムであって、
１つのプロセッサは、前記スケジューリング対象の実行単位を他の複数のプロセッサに割り当てるスケジューラを含み、
前記スケジューラは、
１つ以上の前記スケジューリング対象の実行単位をグループ化し、同一グループに属する前記実行単位の各々により占有されるプロセッサ内の資源を互いに参照できるように、各実行単位が参照するアドレス空間に前記資源をマップして管理するメモリ制御部と、
実行待ちおよび実行中の状態にあるグループを格納した実行待ちキューと、
前記実行待ちキューの先頭から順にグループを取り出し、取り出したグループに属するすべての実行単位を同時にいずれかのプロセッサに割り当てることができる場合に限り、そのグループに属するすべての実行単位を複数のプロセッサに割り当てる割り当て部とを含むことを特徴とするマルチプロセッサシステム。
【請求項１８】
並列処理されるスケジューリング対象の実行単位を複数のプロセッサに割り当てて並列に実行するマルチプロセッサシステムであって、
１つのプロセッサは、前記スケジューリング対象の実行単位を他の複数のプロセッサに割り当てるスケジューラを含み、
前記スケジューラは、
１つ以上の前記スケジューリング対象の実行単位を含むグループの内、実行待ちおよび実行中の状態にあるグループを前記グループ毎に設定される優先度順でかつ同一優先度内では到着順に格納した実行待ちキューと、
前記実行待ちキューの先頭から順にグループを取り出し、取り出したグループに属するすべての実行単位を同時にいずれかのプロセッサに割り当てることができる場合に限り、そのグループを割り当てリストに追加する割り当てリスト生成部と、
前記割り当てリスト生成部により生成された前記割り当てリストに格納されたグループに属するすべての実行単位を複数のプロセッサに割り当てる割り当て部とを含むことを特徴とするマルチプロセッサシステム。
【請求項１９】
並列処理されるスケジューリング対象の実行単位を１つ以上含むグループの内、実行待ちおよび実行中の状態にあるグループを前記グループ毎に設定される優先度順でかつ同一優先度内では到着順に格納した実行待ちキューの先頭から順にグループを取り出すステップと、
実行中の状態にある実行単位とその実行単位が割り当てられているプロセッサとの対応関係を保持するスケジュールテーブルを参照し、前記実行待ちキューから順次取り出したグループに属する各実行単位が前記スケジュールテーブルにある場合、その実行単位が割り当てられているプロセッサにフラグを設定するステップと、
前記実行待ちキューから順次取り出したグループに属する各実行単位が前記スケジュールテーブルになく、そのグループに属するすべての実行単位を同時にいずれかのプロセッサに割り当てることができる場合、そのグループを前記割り当てリストに追加するステップと、
前記割り当てリストに格納されたグループに属するすべての実行単位を前記スケジュールテーブルにおいて前記フラグが設定されていないプロセッサに割り当てるステップとをコンピュータに実行させることを特徴とするプログラム。
【請求項２０】
マルチプロセッサシステムにおいて、並列処理されるスケジューリング対象の実行単位を複数のプロセッサに割り当てる順序をスケジュールする方法であって、
複数のプロセッサの内、少なくとも１つのプロセッサを並列処理されるスケジューリング対象の実行単位の割り当て対象から除外し、非割り当て対象のプロセッサ上で動作するスケジュール対象とならない実行単位により独占的に占有される当該プロセッサ内の資源を前記スケジューリング対象の実行単位から参照できるように、各実行単位が参照するアドレス空間に前記資源をマップした上で、前記実行単位の割り当て対象のプロセッサへの割り当てを制御することを特徴とするスケジューリング方法。
【請求項２１】
マルチプロセッサシステムにおいて、並列処理されるスケジューリング対象の実行単位を複数のプロセッサに割り当てる順序をスケジュールする装置であって、
複数のプロセッサの内、少なくとも１つのプロセッサを並列処理されるスケジューリング対象の実行単位の割り当て対象から除外し、非割り当て対象のプロセッサ上で動作するスケジュール対象とならない実行単位により独占的に占有される当該プロセッサ内の資源を前記スケジューリング対象の実行単位から参照できるように、各スケジューリング対象の実行単位が参照するアドレス空間に前記資源をマップして管理するメモリ制御部と、
実行待ちおよび実行中の状態にある前記スケジューリング対象の実行単位を格納した実行待ちキューと、
前記実行待ちキューの先頭から順に前記スケジューリング対象の実行単位を取り出し、いずれかのプロセッサに割り当てる割り当て部とを含むことを特徴とするスケジューリング装置。
【請求項２２】
非割り当て対象のプロセッサ上で動作する非スケジューリング対象の実行単位により独占的に占有される当該プロセッサ内の資源の前記アドレス空間へのマップ先の領域は、いずれのスケジューリング対象の実行単位から見ても同じアドレスに固定されていることを特徴とする請求項２１に記載のスケジューリング装置。
【請求項２３】
前記割り当て部によりいずれかのプロセッサに割り当てられた前記スケジューリング対象の実行単位が、前記アドレス空間にマップされた非割り当て対象のプロセッサ上で動作する非スケジューリング対象の実行単位の資源領域にデータを書き込む操作を行うことにより、非割り当て対象のプロセッサの資源が直接的に制御されることを特徴とする請求項２１または２２に記載のスケジューリング装置。
【請求項２４】
前記割り当て部によりいずれかのプロセッサに割り当てられた前記スケジューリング対象の実行単位が、前記アドレス空間にマップされた非割り当て対象のプロセッサ上で動作する非スケジューリング対象の実行単位の資源領域にデータを書き込む操作を行い、前記非割り当て対象のプロセッサ上で動作する非スケジューリング対象の実行単位が、当該資源に対するデータの書き込みの完了を待つことにより、前記スケジューリング対象の実行単位と前記非スケジューリング対象の実行単位の間で同期が取られることを特徴とする請求項２１または２２に記載のスケジューリング装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はマルチプロセッサシステムにおける並列処理の実行単位のスケジューリング方法およびスケジューリング装置、ならびにマルチプロセッサシステムに関する。
【背景技術】
【０００２】
最近のマルチタスクをサポートするオペレーティングシステムは、複数のプロセスを同時に実行することができるマルチプロセス環境を実現するとともに、さらに、これらのプロセスがプロセス内部で複数のスレッドを生成して並行処理を行うことのできるマルチスレッド技術を搭載している。プロセスは実行時に固有のリソースやアドレス空間が割り当てられ、他のプロセスの領域にアクセスすることはできない。これに対してスレッドは、プロセスの内部で生成される実行単位であり、各スレッドはプロセス内の領域に互いに自由にアクセスすることができる。スレッドは、オペレーティングシステムがＣＰＵの実行時間を割り当てる基本的な単位となる。
【０００３】
スレッドをＣＰＵに割り当てるスレッドスケジューリング方式として、待ち行列に入っているスレッドを一定時間毎に順番に選んで実行する単純なラウンドロビン方式や、スレッドの優先度の順に実行するプライオリティ方式などがある。ラウンドロビン方式では、待ち行列にあるスレッドが一定時間ごとに公平にＣＰＵに割り当てられて実行される。プライオリティ方式では、優先度毎に設けられた待ち行列に各優先度のスレッドがキューイングされ、優先度の高い待ち行列から順にスレッドが選択されＣＰＵに割り当てられて実行される。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
１つのシステム内に複数のプロセッサを搭載したマルチプロセッサシステムでは、並列に処理を実行して処理全体の高速化を図ることができる。マルチプロセッサシステムにおいて、マルチスレッド環境を実現する場合、スレッドをいずれかのプロセッサに割り当てて実行することになり、スレッドの実行順序によって、プロセスの実行速度やメモリ消費量などの性能が変わってくる。マルチプロセッサシステムにおけるスレッドスケジューリングでは、プロセッサ資源の利用の効率化や、スレッド間のデータの受け渡しや通信の効率化などについても配慮する必要があり、シングルプロセッサシステムにおけるスレッドスケジューリングとは違った工夫が必要となる。
【０００５】
本発明はこうした課題に鑑みてなされたものであり、その目的は、マルチプロセッサシステムにおける並列処理の実行単位をプロセッサに割り当てる順序を制御して、処理効率を上げ、プロセッサの利用効率を高めることのできるスケジューリング技術を提供することにある。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、本発明のある態様のスケジューリング方法は、マルチプロセッサシステムにおいて、並列処理されるスケジューリング対象の実行単位を複数のプロセッサに割り当てる順序をスケジュールする方法であって、１つ以上の前記スケジューリング対象の実行単位をグループ化し、同一グループに属する前記実行単位の各々により占有されるプロセッサ内の資源を互いに参照できるように、各実行単位が参照するアドレス空間に前記資源をマップし、同一グループに属するすべての実行単位は同時にいずれかのプロセッサに割り当てるという制約の下で、グループのプロセッサへの割り当てを制御する。
【０００７】
本発明の別の態様もまた、スケジューリング方法である。この方法は、マルチプロセッサシステムにおいて、並列処理されるスケジューリング対象の実行単位を複数のプロセッサに割り当てる順序をスケジュールする方法であって、１つ以上の前記スケジューリング対象の実行単位をグループ化してグループ単位でプロセッサへの割り当てを管理し、前記グループ毎に設定される優先度順でかつ同一優先度内では前記グループが待ち行列に到着した順で前記グループの優先順位を決め、同一グループに属するすべての実行単位は同時にいずれかのプロセッサに割り当てるという制約の下で、実行待ちおよび実行中の状態にあるグループを前記優先順位にしたがってプロセッサに割り当てる。
【０００８】
この態様によると、優先順位にしたがって、同一グループに属するすべての実行単位を同時にプロセッサに割り当てることができる。この優先順位は、同一優先度内では待ち行列への到着順に順位が決められるため、同一優先度のグループ間で到着順を守ることができる。実行待ちだけでなく既に実行中の状態にあるグループも含めて、優先順位を決めてプロセッサに割り当てるため、割り当てるべきグループのプロセッサへの割り当て処理を一括して簡単に行うことができる。
【０００９】
本発明のさらに別の態様もまた、スケジューリング方法である。この方法は、マルチプロセッサシステムにおいて、並列処理されるスケジューリング対象の実行単位を複数のプロセッサに割り当てる順序をスケジュールする方法であって、１つ以上の前記スケジューリング対象の実行単位を含むグループの内、実行待ちおよび実行中の状態にあるグループを前記グループ毎に設定される優先度順でかつ同一優先度内では到着順に格納した実行待ちキューの先頭から順に前記グループを取り出し、取り出したグループに属するすべての実行単位を同時にいずれかのプロセッサに割り当てることができる場合に限り、そのグループに属するすべての実行単位をプロセッサに割り当て、そうでない場合は、それ以降に前記実行待ちキューから取り出されるグループの割り当てを優先する。
【００１０】
この態様によると、プロセッサの総数の制約から、グループに属するすべての実行単位を同時にプロセッサに割り当てることができない場合、優先順位のより低いグループに割り当て権を譲渡することで、マルチプロセッサシステムのプロセッサの利用効率を向上することができる。
【００１１】
前記実行待ちキューの先頭から順次取り出されるグループに属する各実行単位が既にいずれかのプロセッサに割り当てられて実行中である場合、その実行中である実行単位は、他のプロセッサに割り当て先を変更されて再配置されないように、その実行中である実行単位の当該プロセッサへの割り当てを確保してもよい。これにより、既にプロセッサに割り当てられて実行中であるグループに属する各実行単位については、既に割り当てられたプロセッサへの割り当てを維持することができ、割り当て処理にかかるコストを削減できる。
【００１２】
本発明のさらに別の態様は、スケジューリング装置である。この装置は、マルチプロセッサシステムにおいて、並列処理されるスケジューリング対象の実行単位を複数のプロセッサに割り当てる順序をスケジュールする装置であって、１つ以上の前記スケジューリング対象の実行単位をグループ化し、同一グループに属する前記実行単位の各々により占有されるプロセッサ内の資源を互いに参照できるように、各実行単位が参照するアドレス空間に前記資源をマップして管理するメモリ制御部と、実行待ちおよび実行中の状態にあるグループを格納した実行待ちキューと、前記実行待ちキューの先頭から順にグループを取り出し、取り出したグループに属するすべての実行単位を同時にいずれかのプロセッサに割り当てることができる場合に限り、そのグループに属するすべての実行単位を複数のプロセッサに割り当てる割り当て部とを含む。
【００１３】
本発明のさらに別の態様もまた、スケジューリング装置である。この装置は、マルチプロセッサシステムにおいて、並列処理されるスケジューリング対象の実行単位を複数のプロセッサに割り当てる順序をスケジュールする装置であって、１つ以上の前記スケジューリング対象の実行単位を含むグループの内、実行待ちおよび実行中の状態にあるグループを前記グループ毎に設定される優先度順でかつ同一優先度内では到着順に格納した実行待ちキューと、前記実行待ちキューの先頭から順にグループを取り出し、取り出したグループに属するすべての実行単位を同時にいずれかのプロセッサに割り当てることができる場合に限り、そのグループを割り当てリストに追加する割り当てリスト生成部と、前記割り当てリスト生成部により生成された前記割り当てリストに格納されたグループに属するすべての実行単位を複数のプロセッサに割り当てる割り当て部とを含む。
【００１４】
本発明のさらに別の態様は、マルチプロセッサシステムである。このシステムは、並列処理されるスケジューリング対象の実行単位を複数のプロセッサに割り当てて並列に実行するマルチプロセッサシステムであって、１つのプロセッサは、前記スケジューリング対象の実行単位を他の複数のプロセッサに割り当てるスケジューラを含む。前記スケジューラは、１つ以上の前記スケジューリング対象の実行単位をグループ化し、同一グループに属する前記実行単位の各々により占有されるプロセッサ内の資源を互いに参照できるように、各実行単位が参照するアドレス空間に前記資源をマップして管理するメモリ制御部と、実行待ちおよび実行中の状態にあるグループを格納した実行待ちキューと、前記実行待ちキューの先頭から順にグループを取り出し、取り出したグループに属するすべての実行単位を同時にいずれかのプロセッサに割り当てることができる場合に限り、そのグループに属するすべての実行単位を複数のプロセッサに割り当てる割り当て部とを含む。
【００１５】
本発明のさらに別の態様もまた、マルチプロセッサシステムである。このシステムは、並列処理されるスケジューリング対象の実行単位を複数のプロセッサに割り当てて並列に実行するマルチプロセッサシステムであって、１つのプロセッサは、前記スケジューリング対象の実行単位を他の複数のプロセッサに割り当てるスケジューラを含む。前記スケジューラは、１つ以上の前記スケジューリング対象の実行単位を含むグループの内、実行待ちおよび実行中の状態にあるグループを前記グループ毎に設定される優先度順でかつ同一優先度内では到着順に格納した実行待ちキューと、前記実行待ちキューの先頭から順にグループを取り出し、取り出したグループに属するすべての実行単位を同時にいずれかのプロセッサに割り当てることができる場合に限り、そのグループを割り当てリストに追加する割り当てリスト生成部と、前記割り当てリスト生成部により生成された前記割り当てリストに格納されたグループに属するすべての実行単位を複数のプロセッサに割り当てる割り当て部とを含む。
【００１６】
本発明のさらに別の態様もまた、スケジューリング方法である。この方法は、マルチプロセッサシステムにおいて、並列処理されるスケジューリング対象の実行単位を複数のプロセッサに割り当てる順序をスケジュールする方法であって、複数のプロセッサの内、少なくとも１つのプロセッサを並列処理されるスケジューリング対象の実行単位の割り当て対象から除外し、非割り当て対象のプロセッサ上で動作するスケジュール対象とならない実行単位により独占的に占有される当該プロセッサ内の資源を前記スケジューリング対象の実行単位から参照できるように、各実行単位が参照するアドレス空間に前記資源をマップした上で、前記実行単位の割り当て対象のプロセッサへの割り当てを制御する。
【００１７】
本発明のさらに別の態様もまた、スケジューリング装置である。この装置は、マルチプロセッサシステムにおいて、並列処理されるスケジューリング対象の実行単位を複数のプロセッサに割り当てる順序をスケジュールする装置であって、複数のプロセッサの内、少なくとも１つのプロセッサを並列処理されるスケジューリング対象の実行単位の割り当て対象から除外し、非割り当て対象のプロセッサ上で動作するスケジュール対象とならない実行単位により独占的に占有される当該プロセッサ内の資源を前記スケジューリング対象の実行単位から参照できるように、各スケジューリング対象の実行単位が参照するアドレス空間に前記資源をマップして管理するメモリ制御部と、実行待ちおよび実行中の状態にある前記スケジューリング対象の実行単位を格納した実行待ちキューと、前記実行待ちキューの先頭から順に前記スケジューリング対象の実行単位を取り出し、いずれかのプロセッサに割り当てる割り当て部とを含む。
【００１８】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラム、データ構造などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１９】
本発明によれば、マルチプロセッサシステムの資源を有効利用し、並列処理の高速化を図ることができる。
【発明を実施するための最良の形態】
【００２０】
実施の形態１
図１は、実施の形態１に係るマルチプロセッサシステムの構成図である。マルチプロセッサシステムは、複数のプロセッシングエレメント（ＰＥ）１００とメインメモリ１２０を有し、それらはメインバス１１０に接続されている。各プロセッシングエレメント１００は、プロセッサ１３０、ローカルメモリ１４０、およびメモリ制御部１５０を含む。プロセッサ１３０はローカルメモリ１４０に対してデータを読み書きすることができる。メモリ制御部１５０は、他のプロセッシングエレメント１００のプロセッサ１３０からローカルメモリ１４０のデータを参照するときのインタフェースを与えるとともに、メモリの同期・排他制御の機能を提供する。
【００２１】
プロセッシングエレメント１００のいずれか一つには、並列処理の実行単位であり、スケジューリングの対象となる実行実体（以下、スレッドという）をスケジューリングする機能をもたせる。このスケジューリング機能は特権レベルで動作する。特権レベルでは、マルチプロセッサシステムのすべての資源にアクセスする権限を有する。一方、スケジューリング機能をもたない他のプロセッシングエレメント１００上で動作するプログラムは、ユーザレベルで動作する。ユーザレベルでは、特権レベルに比べてアクセスできる資源が限られる。
【００２２】
スレッドスケジューリングにより、ある時刻に各プロセッサ１３０には１つのスレッドが割り当てられ、マルチプロセッサシステム全体で並列に複数のスレッドが実行される。各プロセッサ１３０に割り当てられたスレッドは、プロセッシングエレメント１００内のローカルメモリ１４０やメモリ制御部１５０内部のレジスタなどのすべての資源を占有して使用することができる。
【００２３】
スレッドがいずれのプロセッサ１３０にも割り当てられていない場合、スレッドのコンテキストはメインメモリ１２０に退避される。スレッドのコンテキストは、そのスレッドが割り当て先のプロセッシングエレメント１００（以下、割り当て先ＰＥという）内で占有するすべての資源の状態であり、スレッドがプロセッサ１３０において動作しているときに各種レジスタ内に保持されている値の集合、ローカルメモリ１４０に保持されたデータ、メモリ制御部１５０の各種レジスタの内部状態などである。スレッドがプロセッサ１３０上で動作していないときは、そのスレッドのコンテキストをメインメモリ１２０にコピーしておき、再度プロセッサ１３０に割り当てられたときに、そのコンテキストを読み込んで、処理を継続できるようにする。
【００２４】
本実施の形態では、１つ以上のスレッドを要素として含むスレッドグループが定義され、スレッドグループ単位でスケジューリングが行われ、スレッドグループに属するすべてのスレッドは同時にいずれかのプロセッサ１３０に割り当てられる。スレッドグループ内の一部のスレッドがプロセッサ１３０に割り当てられ、残りのスレッドがメインメモリ１２０に残留する状態にはならない。したがって、同一スレッドグループ内のすべてのスレッドは、実行待ち、実行中などの遷移状態を共有することになる。同一スレッドグループに属するスレッドは、互いのアドレス空間をカーネルのシステムコールを用いずに直接参照することができる。
【００２５】
図２は、プロセッサ１３０に割り当てられたスレッドから見たアドレス空間１７０を説明する図である。アドレス空間１７０には、共有データを含むメインメモリがマップされたメインメモリ領域１７２と、同一グループ内の各スレッドの占有資源がマップされたスレッドマップ領域１７４とが含まれる。
【００２６】
スレッドマップ領域１７４には、同一グループ内の各スレッドに対応してスレッドマップ＃１〜＃ｎが配置されている。プロセッサ数をｎとすると同一グループ内に最大ｎ個のスレッドを設けることができるから、スレッドマップについてもｎ個分の領域が確保されている。各スレッドマップ＃１〜＃ｎは、対応する各スレッドが割り当て先ＰＥ内で占有する資源の一部をメモリマップしたものであり、符号１７５で示すように、ローカルメモリと、メモリ制御部１５０を外部から制御するためのレジスタ群を含むが、メモリ制御部１５０を外部から制御するためのレジスタ群は、すべてがアクセス可能ではなく、後述の通信用レジスタのみがアクセス可能であり、斜線で示した他のレジスタにはアクセスすることはできない。アクセス可能なレジスタだけでなく、アクセス不可能なレジスタも含めて、レジスタ群全体をマップしておくことで、アクセス可能なレジスタの種類に関係なく、スレッドマップのサイズを一定にすることができ、スレッドマップの先頭アドレスに対するオフセット値が固定値になり、プログラマにとって管理がしやすくなる。
【００２７】
各スレッドにより割り当て先ＰＥ内で占有される資源の一部がアドレス空間にマップされることにより、同一グループ内の各スレッドは、互いに他のスレッドが占有する資源の一部にシステムコールを介さずにアクセスして操作することが可能となる。メモリ制御部１５０を外部から制御するためのレジスタについては、操作を許可するレジスタに限ってアドレス空間にマップすることで、外部からの操作に一定の制限を設けることができる。
【００２８】
第１のスレッドマップ＃１には、スレッドベースアドレスを先頭アドレスとしてスレッドマップのサイズ分の領域が割り当てられている。第２のスレッドマップ＃２の先頭アドレスは、スレッドベースアドレスにスレッドマップのサイズに対応したオフセット値を加算したアドレスになる。
【００２９】
同一グループのスレッドをコンフィギュレーションする際、スレッドマップの番号＃１〜＃ｎを指定することにより、そのスレッドがどのスレッドマップを使用するかが決まる。後述のスケジューリング装置２００は、同一グループ内の各スレッドがどのスレッドマップを使用しているかをスレッドマップの設定情報としてメモリに保持し、スレッド割り当て時にスレッドの割り当て先ＰＥのメモリ制御部１５０にスレッドマップの設定情報を設定する。各プロセッシングエレメント１００のメモリ制御部１５０は、スレッドがスケジュールされたときに、同一グループ内の各スレッドの資源がどのスレッドマップにメモリマップされているかをスレッドマップの設定情報により把握することができ、アドレス空間１７０のスレッドマップにもとづいて、他のスレッドの資源に対するアクセス要求をＤＭＡによって処理することができる。
【００３０】
なお、より詳細には、後述のスケジューリング装置２００のスレッド状態管理部３２が、スレッドグループのスレッドマップの設定情報を管理し、スレッドマップの設定情報を一例としてスレッド状態テーブル３４に格納して保持する。また、スケジューリング装置２００のスレッド割り当て部１４が、スレッドをプロセッサに割り当てる処理を行い、スレッドグループのスレッドマップの設定情報をメモリ制御部１５０に設定する処理を行う。プロセッサに割り当てられたスレッドは、スレッドグループのスレッドマップの設定情報がメモリ制御部１５０に設定された後に、スタートする。
【００３１】
たとえば、２つのスレッドＡ１、Ａ２が同一のグループＡに属するとする。グループＡの初期設定によって、グループＡのアドレス空間の第１領域ＥＡ１に第１スレッドＡ１の資源がメモリマップされ、アドレス空間の第２領域ＥＡ２に第２スレッドＡ２の資源がメモリマップされたとする。グループＡの各スレッドＡ１、Ａ２がスケジューリングされ、第１プロセッサにスレッドＡ１が割り当てられ、第２プロセッサにスレッドＡ２が割り当てられたとする。
【００３２】
このとき、第１プロセッサ上で動作する第１スレッドＡ１から、第２スレッドＡ２のスレッドマップである第２領域ＥＡ２にアクセスすると、第２プロセッサの資源が第２スレッドＡ２の資源として参照される。第１スレッドＡ１、第２スレッドＡ２のプロセッサへの割り当てと実行は、資源が準備されてから行われるため、第１スレッドＡ１から第２スレッドＡ２のスレッドマップである第２領域ＥＡ２へのアクセスは、第２スレッドＡ２がどのプロセッサに割り当てられているかに関係なく、必ず第２スレッドＡ２の資源へのアクセスであることが保証される。第２スレッドＡ２が第１スレッドＡ１のスレッドマップである第１領域ＥＡ１にアクセスする場合も同様である。
【００３３】
このように、いずれかのプロセッサ１３０に割り当てられたスレッドは、アドレス空間１７０内に設定されたスレッドマップのアドレスにアクセスすることで、同一グループ内の他のスレッドが占有する資源にＤＭＡによって直接アクセスすることができる。
【００３４】
同一グループ内の他のスレッドは、いずれかのプロセッサ１３０に割り当てられているが、どのプロセッサ１３０に割り当てられるかは、スケジューリングの度に異なる。しかし、スレッドマップは、スレッドがどのプロセッサに割り当てられるかに関係なく、アドレス空間１７０内の同じアドレスに設定されている。したがって、同一グループ内の各スレッドは、スレッドのプロセッサへの割り当て状態には関係なく、アドレス空間１７０内のスレッドマップにアクセスすることで、他のスレッドの資源に一貫してアクセスできることが保証される。
【００３５】
各プロセッシングエレメント１００のメモリ制御部１５０内部には、スレッド間の同期通信のために使用可能な通信用レジスタが設けられている。この通信用レジスタの値は、当該プロセッシングエレメント１００のプロセッサ１３０から特殊な命令によって読むことができ、通信用レジスタに値がまだ書き込まれていないときは、当該プロセッサ１３０は、通信用レジスタに値が書き込まれるまで待つ。
【００３６】
また、この通信用レジスタは、自分以外のプロセッシングエレメント１００のメモリ制御部１５０から書き込みができる。メモリ制御部１５０内部の通信用レジスタは、スレッドの占有資源として、アドレス空間１７０内にスレッドマップとしてメモリマップされている。したがって、あるスレッドは、自分のアドレス空間１７０内のスレッドマップを参照して、他のプロセッシングエレメント１００のメモリ制御部１５０の通信用レジスタにアクセスすることができ、値を書き込むことができる。
【００３７】
アドレス空間１７０にメモリマップされた通信用レジスタを利用すると、メモリ制御部１５０は、自スレッドの通信用レジスタに他スレッドが値を書き込むまで、ハートウエア的にプロセッサがストールする機構を実現することができ、スレッド間で同期通信が可能となる。
【００３８】
また、メモリ制御部１５０がもつアドレス空間の参照機能を用いて、メモリでのポーリングによる排他処理や同期処理を行うこともできる。メモリ制御部１５０を介したメインメモリに対するデータの読み書きを、メモリ制御部１５０がもつメモリ同期化命令を用いて行うことにより、メモリの同期・排他制御を行うことができる。
【００３９】
このように、同一スレッドグループに属するすべてのスレッドは、同時にいずれかのプロセッサ１３０に割り当てられて実行されるため、プロセッシングエレメント１００のメモリ制御部１５０によるアドレス空間の参照機能、同期・排他制御機構を活用して、効率的なデータ転送、同期通信、メモリの排他処理・同期処理などを行うことができ、処理効率が上がる。
【００４０】
図３（ａ）〜（ｄ）は、スレッドグループを説明する図である。図３（ａ）は、３つのスレッドｔｈ１ａ、ｔｈ１ｂ、ｔｈ１ｃを含む第１スレッドグループを示す。図３（ｂ）は、１つのスレッドｔｈ２ａを含む第２スレッドグループを示す。このようなスレッドが１つだけの場合もスレッドグループとして扱う。同様に、図３（ｃ）は、２つのスレッドｔｈ３ａ、ｔｈ３ｂを含む第３スレッドグループを示す。図３（ｄ）は、１つのスレッドｔｈ４ａを含む第４スレッドグループを示す。
【００４１】
スレッドグループに属するスレッドの内、１つのスレッドはプライマリスレッドに指定され、そのスレッドグループを代表する。スレッドグループ単位でスレッドスケジューリングを行う際、プライマリスレッドを操作することでそのスレッドグループに属するすべてのスレッドをまとめて操作することができる。
【００４２】
図４は、スレッドグループ単位でスレッドがプロセッサ１３０に割り当てられる様子を説明する図である。同図は、プロセッサ総数４のマルチプロセッサシステムにおいて、図３に示した４つのスレッドグループに属するスレッドのプロセッサ１３０への割り当て状態を示している。ある時刻において、第１スレッドグループに属する３つのスレッドｔｈ１ａ、ｔｈ１ｂ、ｔｈ１ｃは、それぞれ第１プロセッサ、第２プロセッサ、第３プロセッサに割り当てられ、第２スレッドグループに属する１つのスレッドｔｈ２ａは、第４プロセッサに割り当てられている。それ以外の第３スレッドグループに属する２つのスレッドｔｈ３ａ、ｔｈ３ｂ、および第４スレッドグループに属する１つのスレッドｔｈ４ａはメインメモリ１２０に退避されている。
【００４３】
スレッドスケジューリングは、同一スレッドグループに属するすべてのスレッドを同時にいずれかのプロセッサ１３０に割り当てることを条件として行われる。第１スレッドグループがプロセッサ１３０に割り当てられるときは、第１スレッドグループに属する３つのスレッドｔｈ１ａ、ｔｈ１ｂ、ｔｈ１ｃが同時にいずれかのプロセッサ１３０に割り当てることができる場合に限られる。３つのスレッドｔｈ１ａ、ｔｈ１ｂ、ｔｈ１ｃの１つまたは２つがプロセッサ１３０に割り当てられ、残りがメインメモリ１２０に退避しているという状況は作らない。
【００４４】
図５は、スレッドの状態遷移を説明する図である。スレッドは生成（create）コマンドにより生成され、未構築（not configured）状態４２になる。未構築状態４２にあるスレッドに対してコンフィギュレーションコマンドを実行すると、構築（configured）状態４４に遷移する。コンフィギュレーションコマンドの引数にプライマリスレッドを指定することで、そのスレッドをプライマリスレッドと同一のスレッドグループに所属させることができる。構築状態４４にあるスレッドに対して削除（delete）コマンドを実行すると、そのスレッドは削除され、そのスレッドに使用したメモリ領域は解放される。
【００４５】
未構築状態４２と構築状態４４を合わせて休止（dormant）状態４０という。構築状態４４にあるプライマリスレッドに対してスタートコマンドを実行すると、そのプライマリスレッドを含め、そのスレッドグループに属するすべてのスレッドが実行待ち（ready）状態５２に遷移する。以降、スレッドグループに属するすべてのスレッドは、動作（operational）状態５０内で一緒に状態遷移する。以降、動作状態５０内での状態遷移を説明する際、簡単のため、スレッドというが、これは同一スレッドグループに属するすべてのスレッドを意味している。なお、スレッドグループに対するコマンドは、プライマリスレッドに対して実行することにより、そのスレッドグループに属するすべてのスレッドに作用する。
【００４６】
実行待ち状態５２にあるスレッドは、ウエイトコマンドにより同期待ち（waiting）状態５６に遷移し、同期待ち状態５６にあるスレッドは、シグナルを受けて実行待ち状態５２に戻る。
【００４７】
実行待ち状態５２にあるスレッドは、ディスパッチ（dispatch）コマンドにより実行中（running）状態５４に遷移し、実行中状態５４にあるスレッドは、イールド（yield）コマンドにより実行待ち状態５２に戻り、ウエイトコマンドにより同期待ち状態５６に遷移し、サスペンド（suspend）コマンドにより中断状態６０に遷移する。
【００４８】
同期待ち状態５６にあるスレッドは、サスペンドコマンドにより同期待ち中断（waiting and suspended）状態５８に遷移し、同期待ち中断状態５８にあるスレッドは、レジューム（resume）コマンドにより同期待ち状態５６に復帰する。同期待ち中断状態５８にあるスレッドは、シグナルを受けて中断（suspended）状態６０に遷移する。
【００４９】
中断状態６０にあるスレッドは、レジュームコマンドにより実行待ち状態５２に遷移し、実行待ち状態５２にあるスレッドは、サスペンドコマンドにより中断状態６０に遷移する。
【００５０】
実行中状態５４にあるスレッドは、例外処理が起こると中止（stopped）状態６２に遷移し、中止状態６２にあるスレッドは、リスタートコマンドにより実行中状態５４または実行待ち状態５２に遷移する。
【００５１】
実行待ち状態５２、実行中状態５４、中止状態６２、および中断状態６０にあるスレッドはそれぞれ終了（terminate）すると、スレッドは動作状態５０から休止状態４０に移行し、構築状態４４に遷移する。
【００５２】
上記の動作状態５０にあるスレッドの内、実行中状態５４にあるスレッドは、プロセッサ１３０に割り当てられており、それ以外の状態にあるスレッドはメインメモリ１２０に退避されている。
【００５３】
図６は、実施の形態１に係るスケジューリング装置２００の構成図である。同図は機能に着目したブロック図を描いており、これらの機能ブロックはハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現することができる。スケジューリング装置２００は、図１のプロセッシングエレメント１００のいずれか一つに設けられ、プロセッサ１３０、ローカルメモリ１４０、およびメモリ制御部１５０を用いて実現される。さらにメインメモリ１２０を用いて実現してもよい。以下、図６の構成を説明するにあたり、適宜図７〜図９を参照する。
【００５４】
スレッド状態管理部３２は、スレッドの生成と削除、スレッドグループの設定、スレッドグループの優先度、およびスレッドグループ単位の状態遷移をスレッド状態テーブル３４によって管理する。
【００５５】
図７は、スレッド状態テーブル３４を説明する図である。スレッド状態テーブル３４は、スレッドグループＩＤ７０、スレッドグループに属するスレッド数７２、スレッドグループの遷移状態７４、スレッドグループに属するスレッド７６、およびスレッドグループの優先度７８を対応づけて格納する。スレッドの生成と削除、スレッドグループの設定と状態変化、優先度の設定などがあると、スレッド状態管理部３２はスレッド状態テーブル３４を更新する。
【００５６】
同図の例では、グループＩＤ１の第１スレッドグループは、スレッド数が３で、３つのスレッドｔｈ１ａ、ｔｈ１ｂ、ｔｈ１ｃを含み、優先度は１に設定されており、現在の遷移状態は実行中である。グループＩＤ２の第２スレッドグループは、スレッド数が１で、１つのスレッドｔｈ２ａを含み、優先度は２に設定されており、現在の遷移状態は実行中である。グループＩＤ３の第３スレッドグループは、スレッド数が２で、２つのスレッドｔｈ３ａ、ｔｈ３ｂを含み、優先度は２に設定されており、現在の遷移状態は実行待ちである。グループＩＤ４の第４スレッドグループは、スレッド数が１で、１つのスレッドｔｈ４ａを含み、優先度は４に設定されており、現在の遷移状態は実行待ちである。優先度は値が小さいほど優先度が高いとし、優先度は、ここでは１６段階とするが、２５６段階にするなど設計の自由度がある。
【００５７】
スレッド状態管理部３２は、スレッド状態テーブル３４で管理されているスレッドグループの内、実行待ち状態または実行中状態にあるスレッドグループを実行待ちキュー３０にキューイングする。実行待ちキュー３０は、実行待ち状態または実行中状態にあるスレッドグループをスレッドグループ毎に設定された優先度順で、かつ同一優先度内では先に入れられたものが先に取り出されるＦＩＦＯ（First In First Out）順で優先順位を決めてキューイングした待ち行列である。
【００５８】
図８は、実行待ちキュー３０を説明する図である。優先度１〜１６のリストの各エントリには、その優先度をもつスレッドグループのプライマリスレッドがＦＩＦＯ順でキューイングされる。
【００５９】
同図の例では、優先度１のエントリには、第１スレッドグループのプライマリスレッドｐｔｈ１がキューイングされ、優先度２のエントリには、第２スレッドグループのプライマリスレッドｐｔｈ２と第３スレッドグループのプライマリスレッドｐｔｈ３がこの順でキューイングされ、優先度４のエントリには、第４スレッドグループのプライマリスレッドｐｔｈ４がキューイングされている。第２スレッドグループは第３スレッドグループよりも先にキューに入れられたため、第２スレッドグループのプライマリスレッドｐｔｈ２は第３スレッドグループのプライマリスレッドｐｔｈ３よりも先にキューイングされている。
【００６０】
実行待ちキュー３０の先頭の位置にある優先度１のプライマリスレッドｐｔｈ１から優先度２のエントリの先頭にキューイングされているプライマリスレッドｐｔｈ２にリンクがつけられる。さらに優先度２のエントリの最初のプライマリスレッドｐｔｈ２から同一優先度内で次にキューイングされているプライマリスレッドｐｔｈ３にリンクがつけられ、さらにそのプライマリスレッドｐｔｈ３から優先度４のプライマリスレッドｐｔｈ４にリンクがつけられる。これによって、プライマリスレッドｐｔｈ１、ｐｔｈ２、ｐｔｈ３、ｐｔｈ４の順に取り出すことができるように優先順位が決められた実行待ちキュー３０が生成される。
【００６１】
スレッド状態管理部３２は、スレッドグループの状態が実行待ち、実行中のいずれの状態でもなくなった場合、実行待ちキュー３０からそのスレッドグループのプライマリスレッドを削除する。また、新たに生成され、スタートコマンドにより実行待ち状態になったスレッドグループのプライマリスレッドや、同期待ち状態などから復帰して実行待ち状態になったスレッドグループのプライマリスレッドを該当する優先度のエントリにＦＩＦＯ順で挿入し、実行待ちキュー３０を更新する。
【００６２】
スケジューラ１０は、実行待ちキュー３０にキューイングされているスレッドグループを先頭から取り出して、プロセッサに割り当てる制御をするものであり、割り当てリスト生成部１２とスレッド割り当て部１４とを含む。スレッド状態管理部３２は、スレッドグループの状態が同期待ち、中断などの状態に遷移したり、スレッドが終了することにより、再スケジューリングが必要となった場合、割り当てリスト生成部１２に通知する。
【００６３】
割り当てリスト生成部１２は、スレッド状態管理部３２から再スケジューリングの指示を受けて、これから述べる「マーキング処理」または「割り当てリスト生成処理」を行う。
【００６４】
割り当てリスト生成部１２は、割り当てスレッド数カウンタ１６、スレッド割り当てリスト１８、およびスケジューリング配列２０を利用して、スレッドスケジューリングを行う。
【００６５】
割り当てスレッド数カウンタ１６は、プロセッサ１３０に割り当てるスレッド数をカウントするものであり、以下、単に「カウンタ」という。スレッド割り当てリスト１８は、プロセッサ１３０に割り当てるスレッドグループのプライマリスレッドを格納するものであり、以下、単に「割り当てリスト」という。スケジューリング配列２０は、スレッドのプロセッサ１３０への割り当て状況を保持するスケジュールテーブルであり、個々のプロセッサ１３０を特定するプロセッサ番号とそのプロセッサ１３０に割り当てられたスレッドとを対応づけた配列である。
【００６６】
図９は、スケジューリング配列２０を説明する図である。スケジューリング配列２０は、プロセッサ番号８０、そのプロセッサに割り当てられたスレッド８２、およびマーク８４が対応づけて格納される。プロセッサ番号８０は、プロセッサに一意に対応する識別番号である。マーク８４は、割り当てリスト生成部１２のマーキング処理において、スレッドのプロセッサへの割り当てを確保するためのフラグとして用いられる。同図の例では、プロセッサ総数は４であり、第１〜第４プロセッサが１から４の番号で識別される。プロセッサ番号１〜３には、第１スレッドグループの３つのスレッドｔｈ１ａ、ｔｈ１ｂ、ｔｈ１ｃがそれぞれ割り当てられ、プロセッサ番号４には、第２スレッドグループのスレッドｔｈ２ａが割り当てられている。
【００６７】
割り当てリスト生成部１２は、スレッドスケジューリングを開始するにあたって、カウンタ１６をゼロに初期化し、割り当てリスト１８を空にする。
【００６８】
割り当てリスト生成部１２は、実行待ちキュー３０の先頭から順にプライマリスレッドを取り出す。以下、取り出したプライマリスレッドが属するスレッドグループを「割り当て候補スレッドグループ」と呼ぶ。割り当てリスト生成部１２は、割り当て候補スレッドグループに属するスレッドの個数をカウンタ１６に加算する。カウンタ１６の値がマルチプロセッサシステムのプロセッサ総数を超えてしまう場合は、割り当てリスト生成部１２は、その割り当て候補スレッドグループを割り当て候補から外して、カウンタ１６の値を加算前の値に戻す。
【００６９】
割り当てリスト生成部１２は、スケジューリング配列２０を参照することにより、実行待ちキュー３０から順次取り出した割り当て候補スレッドグループが、既に実行中の状態にあるかどうかを調べる。割り当て候補スレッドグループに属する各スレッドがスケジューリング配列２０にあれば、その割り当て候補スレッドグループに属する各スレッドは実行中である。その場合、スケジューリング配列２０において、実行中のスレッドが割り当てられているプロセッサ番号にマークをつける。これを「マーキング処理」という。マーキング処理により、マークをつけたプロセッサ番号に既に割り当てられたスレッドは、他のプロセッサに割り当て先を変更されて再配置されないように、当該プロセッサへの割り当てが確保される。
【００７０】
割り当てリスト生成部１２は、割り当て候補スレッドグループに属する各スレッドがスケジューリング配列２０にない場合、すなわち、その割り当て候補スレッドグループは実行中状態でない場合は、その割り当て候補スレッドグループのプライマリスレッドを割り当てリスト１８に追加する。これを「割り当てリスト生成処理」という。割り当てリスト生成処理によって、割り当てリスト１８には、今回のスケジューリングで新たにプロセッサ１３０に割り当てられるスレッドグループがリストアップされる。
【００７１】
割り当てリスト生成部１２は、カウンタ１６の値がプロセッサ総数に達するか、実行待ちキュー３０の末尾からプライマリスレッドを取り出すに至るまで、マーキング処理、割り当てリスト生成処理のいずれかを繰り返し行う。
【００７２】
割り当てリスト生成部１２による処理が終了すると、スレッド割り当て部１４は、割り当てリスト１８からプライマリスレッドを取り出し、そのスレッドグループに属するすべてのスレッドをスケジューリング配列２０のマークされていないプロセッサ番号に割り振る。このとき、マークされていないプロセッサ番号に割り当てられて実行中状態にあったスレッドは、プリエンプトされ、実行待ち状態に遷移する。スレッド割り当て部１４は、スレッド状態管理部３２にプリエンプトされたスレッドを通知し、スレッド状態管理部３２はスレッド状態テーブル３４を更新し、そのスレッドの状態変化を管理する。
【００７３】
スレッドの割り当て状況を保持するスケジューリング配列２０にしたがって、実際にスレッドはプロセッサ１３０に割り当てられ、実行に移される。これによって、既に実行中状態にあったスレッドは、継続して同じプロセッサ１３０上で実行され、実行待ち状態にあったスレッドはプロセッサ１３０に新たに割り当てられ、実行中状態に変化する。スレッド状態管理部３２は、スレッド状態テーブル３４を更新して各スレッドの状態変化を管理する。
【００７４】
図１０は、以上の構成のスケジューリング装置２００によるスレッドスケジューリング手順を説明するフローチャートである。
【００７５】
スレッド状態管理部３２は、スレッドの遷移状態が実行中状態から同期待ち状態や中断状態に変わったり、スレッドが終了した場合に、割り当てリスト生成部１２にスレッドのスケジューリングを指示する。割り当てリスト生成部１２は、カウンタ１６と割り当てリスト１８を初期化する（Ｓ１０）。
【００７６】
割り当てリスト生成部１２は、実行待ちキュー３０の先頭から割り当て候補スレッドグループを取り出す（Ｓ１２）。割り当てリスト生成部１２は、割り当て候補スレッドグループに属するスレッドの個数をカウンタ１６に加算することにより、割り当てスレッド数をカウントする（Ｓ１４）。
【００７７】
割り当てリスト生成部１２は、カウンタ１６の値がプロセッサ総数以下であるかどうかを判定する（Ｓ１６）。カウンタ１６の値がプロセッサ総数を超えていた場合、その割り当て候補スレッドグループに属するすべてのスレッドを同時にいずれかのプロセッサに割り当てることはできないため、カウンタ１６から当該割り当て候補スレッドグループのスレッド数を減算してカウンタ値を元に戻し（Ｓ１８）、ステップＳ２６の処理に進む。
【００７８】
カウンタ１６の値がプロセッサ総数以下である場合（Ｓ１６のＹ）、割り当てリスト生成部１２は、割り当て候補スレッドグループに属する各スレッドがスケジューリング配列２０に格納されているかどうかを調べる（Ｓ２０）。スケジューリング配列２０において、割り当て候補スレッドグループに属するスレッドがいずれかのプロセッサ番号に割り振られていれば、そのスレッドは前回のスケジューリングにおいてそのプロセッサに割り当てられて実行されていたことになる。
【００７９】
割り当てリスト生成部１２は、割り当て候補スレッドグループに属する各スレッドがスケジューリング配列２０に存在する場合（Ｓ２０のＹ）、スケジューリング配列２０において、そのスレッドが割り振られているプロセッサ番号にマークを付ける（Ｓ２２）。マークされたプロセッサ番号に割り当てられたスレッドは、他のプロセッサに割り当て先を変更されて再配置されないように、当該プロセッサへの割り当てが確保される。
【００８０】
割り当てリスト生成部１２は、割り当て候補スレッドグループに属する各スレッドがスケジューリング配列２０に存在しない場合（Ｓ２０のＮ）、割り当てリスト生成部１２は、その割り当て候補スレッドグループを割り当てリスト１８に追加する（Ｓ２３）。
【００８１】
割り当てリスト生成部１２は、カウンタ１６の値がプロセッサ総数に等しい場合（Ｓ２４のＹ）、それ以上のスレッドの割り当てはできないため、割り当てリスト１８の生成を終了し、ステップＳ３０に進む。また、割り当てリスト生成部１２は、割り当て候補スレッドグループが実行待ちキュー３０の末尾から取り出されたものである場合（Ｓ２６のＹ）、もはや次に割り当てるべきスレッドがないから、この場合も割り当てリスト１８の生成を終了し、ステップＳ３０に進む。
【００８２】
割り当てリスト生成部１２は、カウンタ１６の値がプロセッサ数に達しておらず（Ｓ２４のＮ）、割り当て候補スレッドグループが実行待ちキュー３０の末尾から取り出されたものでない場合（Ｓ２６のＮ）、実行待ちキュー３０の次のスレッドグループを取り出し（Ｓ２８）、ステップＳ１４以降の処理を繰り返す。
【００８３】
ステップＳ３０において、スレッド割り当て部１４は、割り当てリスト１８に格納されたスレッドグループに属する各スレッドをスケジューリング配列２０においてマークされていないプロセッサ番号に割り振る。このとき、マークされていないプロセッサ番号に既に割り振られていたスレッドはそのプロセッサへの割り当てを横取りされる。割り当てリスト１８に格納されたすべてのスレッドグループについて、プロセッサ番号への割り振り処理が完了した時点で、一連のスレッドスケジューリング処理は終了する。
【００８４】
以下、上記のスレッドスケジューリング手順をいくつかの例を用いて説明する。図１１〜図１３は、図７のスレッド状態テーブル３４に示された条件の下でのスレッドスケジューリング手順を説明する図である。
【００８５】
マルチプロセッサシステムのプロセッサ総数は４であるとする。４個のスレッドグループがいずれも実行待ちの状態にあり、いずれのスレッドもまだプロセッサに割り当てられていない初期状態にあるとする。このときの時刻をｔ０とする。
【００８６】
図１１（ａ）は、実行待ちキュー３０の初期状態であり、第１スレッドグループのプライマリスレッドｐｔｈ１（以下、第１プライマリスレッドと呼ぶ）は優先度１のエントリに、第２スレッドグループのプライマリスレッドｐｔｈ２（以下、第２プライマリスレッドと呼ぶ）と第３スレッドグループのプライマリスレッドｐｔｈ３（以下、第３プライマリスレッドと呼ぶ）は優先度２のエントリに、第４スレッドグループのプライマリスレッドｐｔｈ４（以下、第４プライマリスレッドと呼ぶ）は優先度４のエントリにそれぞれキューイングされている。
【００８７】
ここで、第２プライマリスレッドｐｔｈ２は第３プライマリスレッドｐｔｈ３よりも先にキューイングされている。したがって、実行待ちキュー３０は、第１プライマリスレッドｐｔｈ１、第２プライマリスレッドｐｔｈ２、第３プライマリスレッドｐｔｈ３、第４プライマリスレッドｐｔｈ４の順に優先順位が決められた待ち行列になる。
【００８８】
図１１（ｂ）は、割り当てリスト生成部１２によるマーキング処理と割り当てリスト生成処理の過程を説明する図である。処理過程テーブル１５は、割り当てリスト生成部１２が実行待ちキュー３０の先頭から順次取り出したプライマリスレッドに対して、マーキング処理か割り当てリスト生成処理のいずれを行ったかを示し、また、そのときのカウンタ１６の値を示す。
【００８９】
割り当てリスト生成部１２は、図１１（ａ）の実行待ちキュー３０の先頭から第１プライマリスレッドｐｔｈ１を取り出し、第１スレッドグループのスレッド数３をカウンタ１６に加算する。スケジューリング配列２０は空の状態であり、いずれのスレッドもマーキング処理の対象となることはないから、第１プライマリスレッドｐｔｈ１はそのまま割り当てリスト１８に格納される。
【００９０】
次に、割り当てリスト生成部１２は、図１１（ａ）の実行待ちキュー３０の次のエントリである第２プライマリスレッドｐｔｈ２を取り出し、第２スレッドグループのスレッド数１をカウンタ１６に加算する。第２プライマリスレッドｐｔｈ２は、同様にマーキング処理の対象となることはなく、割り当てリスト１８に追加される。このときカウンタ値は４になっており、プロセッサ総数に達しているため、割り当てリスト生成部１２は、割り当てリスト１８の生成を終了する。
【００９１】
スレッド割り当て部１４は、図１１（ｂ）の割り当てリスト１８にリストアップされた第１、第２スレッドグループに属するすべてのスレッドをスケジューリング配列２０のマークされていないプロセッサ番号に割り振る。
【００９２】
図１１（ｃ）は、割り当てリスト１８にしたがってスレッドが割り振られたスケジューリング配列２０を示す。いずれのプロセッサ番号もマークされておらず、第１〜第３プロセッサには第１スレッドグループの３つのスレッドｔｈ１ａ、ｔｈ１ｂ、ｔｈ１ｃが割り振られ、第４プロセッサには第２スレッドグループの１つのスレッドｔｈ２ａが割り振られる。これによって、現時刻ｔ０におけるスレッドスケジューリングが完了する。
【００９３】
その後、時刻ｔ１において、第１スレッドグループの各スレッドが同期待ちになったり、中断するか、終了するなど、実行中状態でも実行待ち状態でもない状態になったとする。図１２（ａ）は、時刻ｔ１における実行待ちキュー３０を示す図である。第１プライマリスレッドｐｔｈ１は実行待ちでも実行中でもなくなるため、スレッド状態管理部３２は、第１プライマリスレッドｐｔｈ１を実行待ちキュー３０から外す。その結果、時刻ｔ１では、実行待ちキュー３０の先頭は第２プライマリスレッドｐｔｈ２となっている。
【００９４】
割り当てリスト生成部１２は、スレッド状態管理部３２の通知を受けて、カウンタ１６と割り当てリスト１８を初期化して、スケジューリングを開始する。図１２（ｂ）は、時刻ｔ１における割り当てリスト生成部１２によるマーキング処理と割り当てリスト生成処理の過程を示す。
【００９５】
割り当てリスト生成部１２は、実行待ちキュー３０の先頭から第２プライマリスレッドｐｔｈ２を取り出し、カウンタ１６に第２スレッドグループのスレッド数１を加算し、カウンタ値を１とする。
【００９６】
割り当てリスト生成部１２は、第２スレッドグループのスレッドｔｈ２ａがスケジューリング配列２０にあるかどうかを調べる。この時点でスケジューリング配列２０は、１つ前の時刻ｔ０における図１１（ｃ）の状態にあり、第２スレッドグループのスレッドｔｈ２ａはプロセッサ番号４に割り振られているから、割り当てリスト生成部１２は、図１２（ｃ）のように、スケジューリング配列２０のプロセッサ番号４にマークを付ける。
【００９７】
次に、割り当てリスト生成部１２は、実行待ちキュー３０の次のエントリである第３プライマリスレッドｐｔｈ３を取り出し、カウンタ１６に第３スレッドグループのスレッド数２を加算し、カウンタ値を３とする。
【００９８】
割り当てリスト生成部１２は、第３スレッドグループのスレッドｔｈ３ａ、ｔｈ３ｂがスケジューリング配列２０にあるかどうかを調べる。第３スレッドグループのスレッドｔｈ３ａ、ｔｈ３ｂは、図１１（ｃ）に示す時刻ｔ０におけるスケジューリング配列２０にはないことから、割り当てリスト生成部１２は、第３プライマリスレッドｐｔｈ３を割り当てリスト１８に追加する。
【００９９】
割り当てリスト生成部１２は、実行待ちキュー３０のさらに次のエントリである第４プライマリスレッドｐｔｈ４を取り出し、第４スレッドグループのスレッド数１をカウンタ１６に加算し、カウンタ値を４とする。
【０１００】
割り当てリスト生成部１２は、同様にして、第４スレッドグループのスレッドｔｈ４ａがスケジューリング配列２０にないことから、割り当てリスト１８に第４プライマリスレッドｐｔｈ４を追加する。割り当てリスト生成部１２は、カウンタ１６の値がプロセッサ総数４に達しているため、割り当てリスト１８の生成を終了する。
【０１０１】
スレッド割り当て部１４は、図１２（ｂ）の割り当てリスト１８にリストアップされた第３、第４スレッドグループに属するすべてのスレッドをスケジューリング配列２０のマークされていないプロセッサ番号に割り振る。
【０１０２】
図１２（ｃ）は、割り当てリスト１８にしたがってスレッドが割り振られたスケジューリング配列２０を示す図である。プロセッサ番号４はマークされているため、そのプロセッサ番号に割り振られた第２スレッドグループのスレッドｔｈ２ａはそのまま割り当てが維持される。マークされていないプロセッサ番号１〜３には、第３スレッドグループの２つのスレッドｔｈ３ａ、ｔｈ３ｂ、第４スレッドグループの１つのスレッドｔｈ４ａがそれぞれ割り振られる。これによって、現時刻ｔ１におけるスレッドスケジューリングが完了する。
【０１０３】
図１３は、図１１および図１２で説明したスレッドスケジューリングによるスレッドの割り当て状態の時間変化を示す図である。時刻ｔ０において、第１〜第３プロセッサ（ＰＥ１〜ＰＥ３）には、第１スレッドグループの３つのスレッドｔｈ１ａ〜ｔｈ１ｃがそれぞれ割り当てられ、第４プロセッサ（ＰＥ４）には、第２スレッドグループのスレッドｔｈ２ａが割り当てられて実行される。
【０１０４】
時刻ｔ１において、第１スレッドグループの３つのスレッドｔｈ１ａ〜ｔｈ１ｃが同期待ちになるなどにより実行待ちキュー３０から外れたため、再スケジューリングが行われるが、その時点で最も優先順位が高い第２スレッドグループのスレッドｔｈ２ａは第４プロセッサに割り当てられたまま継続して実行され、空いた第１〜第３プロセッサには、第３スレッドグループの２つのスレッドｔｈ３ａ、ｔｈ３ｂ、第４スレッドグループの１つのスレッドｔｈ４ａがそれぞれ割り当てられて実行される。
【０１０５】
図１４〜図１６は、別のスレッドスケジューリング例を説明する図である。この例において、「優先順位の逆転」が起こることを説明する。
【０１０６】
図１４は、本例におけるスレッド状態テーブル３４を示す。第３スレッドグループのスレッド数は４である点だけが図７の例とは異なり、それ以外の条件は図７の例と同じである。したがって、最初の時刻ｔ０におけるスケジューリング結果は、図１１と同じであるから説明を省略する。第１スレッドグループの各スレッドが同期待ちになるなどにより、実行待ちキュー３０から外れた時刻ｔ１におけるスケジューリング手順を説明する。
【０１０７】
図１５（ａ）は、時刻ｔ１における実行待ちキュー３０の状態を示す図である。図１２（ａ）と同様、第１プライマリスレッドｐｔｈ１が実行待ちキュー３０から外れた結果、実行待ちキュー３０の先頭は第２プライマリスレッドｐｔｈ２となる。
【０１０８】
図１５（ｂ）は、時刻ｔ１における割り当てリスト生成部１２によるマーキング処理と割り当てリスト生成処理の過程を説明する図である。
【０１０９】
割り当てリスト生成部１２は、実行待ちキュー３０の先頭から第２プライマリスレッドｐｔｈ２を取り出し、カウンタ１６に第２スレッドグループのスレッド数１を加算し、カウンタ値を１とする。
【０１１０】
割り当てリスト生成部１２は、第２スレッドグループのスレッドｔｈ２ａがスケジューリング配列２０にあることから、図１５（ｃ）のように、スケジューリング配列２０においてスレッドｔｈ２ａが割り振られたプロセッサ番号４にマークを付ける。
【０１１１】
次に、割り当てリスト生成部１２は、実行待ちキュー３０の次のエントリである第３プライマリスレッドｐｔｈ３を取り出す。割り当てリスト生成部１２は、カウンタ１６に第３スレッドグループのスレッド数４を加算すると、カウンタ値は５になることから、第３スレッドグループの割り当てはできないと判定し、第３スレッドグループについては割り当て候補から外し、マーキング処理も割り当てリスト生成処理も行わない。
【０１１２】
割り当てリスト生成部１２は、実行待ちキュー３０のさらに次のエントリである第４プライマリスレッドｐｔｈ４を取り出す。カウンタ１６に第４スレッドグループのスレッド数１を加算し、カウンタ値を２とする。割り当てリスト生成部１２は、第４スレッドグループのスレッドｔｈ４ａがスケジューリング配列２０にないことから、割り当てリスト１８に第４プライマリスレッドｐｔｈ４を追加する。第４スレッドグループのスレッドｔｈ４ａは実行待ちキュー３０の最後のエントリであるから、割り当てリスト生成部１２は、割り当てリスト１８の生成を終了する。
【０１１３】
スレッド割り当て部１４は、図１５（ｂ）の割り当てリスト１８にリストアップされた第４スレッドグループに属するすべてのスレッドをスケジューリング配列２０のマークされていないプロセッサ番号に割り振る。
【０１１４】
図１５（ｃ）は、割り当てリスト１８にしたがってスレッドの割り当てが行われたスケジューリング配列２０を示す。マークされたプロセッサ番号４に割り当てられた第２スレッドグループのスレッドｔｈ２ａはそのまま割り振りが維持され、マークされていないプロセッサ番号１に、第４スレッドグループの１つのスレッドｔｈ４ａが割り振られる。これによって、現時刻ｔ１におけるスレッドのスケジューリングが完了する。
【０１１５】
図１６は、本例におけるスレッドの割り当て状態の時間変化を示す図である。時刻ｔ０におけるスレッドの割り当ては図１３と同じである。時刻ｔ１において、最も優先されるべき第２スレッドグループのスレッドｔｈ２ａが実行中のまま状態が維持されるのは図１３と同じであるが、次に優先されるべき第３スレッドグループはスレッド数が４であるため、空きプロセッサに割り当てることができず、優先順位が第３スレッドグループよりも低い第４スレッドグループのスレッドｔｈ４ａが第１プロセッサに割り当てられて実行される。
【０１１６】
このように、同一スレッドグループに属するすべてのスレッド数を同時にいずれかのプロセッサに割り当てるという制約があるため、優先順位を最大限守るというスケジューリングポリシーでスケジューリングを行っていても、プロセッサ資源の利用効率を上げるために、優先順位を逆転させることがある。
【０１１７】
上記の例のようにスレッドスケジューリングにおいて優先順位の逆転が起こる条件を定式化すると次のようになる。Ｈ、Ｍ、Ｌをスレッドグループとし、Ｐ（Ｘ）をスレッドグループＸの優先度、Ｎ（Ｘ）をスレッドグループＸに属するスレッドの個数、ｎをプロセッサ総数とすると、優先度についてＰ（Ｈ）≧Ｐ（Ｍ）＞Ｐ（Ｌ）が成り立つ場合であって、スレッド数について、以下の関係が成り立つとき、優先順位の逆転が起こる。
Ｎ（Ｈ）＋Ｎ（Ｍ）＞ｎ
Ｎ（Ｈ）＋Ｎ（Ｌ）≦ｎ
【０１１８】
上記の関係式が成り立つ場合、スレッドグループＭに属するすべてのスレッドをプロセッサに割り当てることはできないが、優先度がそれよりも低いスレッドグループＮに属するすべてのスレッドはプロセッサに割り当てることができるため、本実施の形態のスレッドスケジューリング方式では、プロセッサの使用効率を上げるために、優先順位を逆転させて、優先順位がより低いスレッドグループＮを割り当てる。
【０１１９】
図１７〜図２２は、さらに別のスレッドスケジューリング例を説明する図である。この例では、すでに割り当てられたスレッドが他の優先順位の高いスレッドによってプロセッサへの割り当てを横取りされる状況を説明する。
【０１２０】
図１７は、スレッド状態テーブル３４を説明する図である。第１スレッドグループから第５スレッドグループまでのスレッドグループがあり、スレッド数はそれぞれ２、３、１、１、３であり、優先度はそれぞれ１、２、３、４、５である。
【０１２１】
図１８（ａ）〜（ｃ）は、最初の時刻ｔ０におけるスケジューリングを説明する図である。実行待ちキュー３０は、図１８（ａ）のように、第１〜第５プライマリスレッドｐｔｈ１〜ｐｔｈ５がこの順でキューに入っている。
【０１２２】
図１８（ｂ）は、割り当てリスト生成部１２によるマーキング処理と割り当てリスト生成処理の過程を示す。割り当てリスト生成部１２は、実行待ちキュー３０の先頭から第１プライマリスレッドｐｔｈ１を取り出し、カウンタ１６にスレッド数２を加算し、カウンタ値を２とするとともに、第１プライマリスレッドｐｔｈ１を割り当てリスト１８に追加する。
【０１２３】
割り当てリスト生成部１２は、実行待ちキュー３０の次のエントリである第２プライマリスレッドｐｔｈ２を取り出すが、第２スレッドグループのスレッド数は３であり、カウンタ１６に加算するとプロセッサ総数４を超えるため、第２スレッドグループは割り当てることができない。
【０１２４】
そこで、割り当てリスト生成部１２は、実行待ちキュー３０のさらに次のエントリである第３プライマリスレッドｐｔｈ３を取り出し、第３スレッドグループのスレッド数１をカウンタ１６に加算し、カウンタ値を３とし、第３プライマリスレッドｐｔｈ３を割り当てリスト１８に追加する。これにより、第２スレッドグループよりも優先順位が低い第３スレッドグループが優先的にプロセッサに割り当てられる優先順位の逆転が起こる。
【０１２５】
さらに、割り当てリスト生成部１２は、実行待ちキュー３０の次のエントリである第４プライマリスレッドｐｔｈ４を取り出し、第４スレッドグループのスレッド数１をカウンタ１６に加算し、カウンタ値を４とし、第４プライマリスレッドｐｔｈ４を割り当てリスト１８に追加する。割り当てリスト生成部１２は、カウンタ１６の値がプロセッサ総数４に達したため、割り当てリスト１８の生成を終了する。
【０１２６】
スレッド割り当て部１４は、図１８（ｂ）の割り当てリスト１８にリストアップされた第１、第３、および第４スレッドグループに属する各スレッドをスケジューリング配列２０に割り振る。図１８（ｃ）のように、プロセッサ番号１、２には第１スレッドグループの２つのスレッド１ａ、スレッド１ｂがそれぞれ割り振られ、プロセッサ番号３には第３スレッドグループのスレッド３ａが割り振られ、プロセッサ番号には第４スレッドグループのスレッドｔｈ４ａが割り振られる。
【０１２７】
その後、時刻ｔ１において第１スレッドグループの各スレッドが同期待ちになったとする。その結果、図１９（ａ）のように、実行待ちキュー３０の先頭は第２プライマリスレッドｐｔｈ２になる。
【０１２８】
割り当てリスト生成部１２は、図１９（ｂ）のように、実行待ちキュー３０の先頭から第２プライマリスレッドｐｔｈ２を取り出し、第２スレッドグループのスレッド数３をカウンタ１６に加算し、カウンタ値を３とする。第２スレッドグループのスレッドは１つ前の時刻ｔ０におけるスケジューリング配列２０にないから、割り当てリスト生成部１２は、第２プライマリスレッドｐｔｈ２を割り当てリスト１８に追加する。
【０１２９】
次に、割り当てリスト生成部１２は、実行待ちキュー３０の次のエントリである第３プライマリスレッドｐｔｈ３を取り出し、第３スレッドグループのスレッド数１をカウンタ１６に加算し、カウンタ値を４とする。第３スレッドグループのスレッドｔｈ３ａは、１つ前の時刻ｔ０におけるスケジューリング配列２０にあるから、割り当てリスト生成部１２は、図１９（ｃ）のように、スケジューリング配列２０において第３スレッドグループのスレッドｔｈ３ａが割り振られたプロセッサ番号３にマークを付ける。
【０１３０】
カウンタ１６の値がプロセッサ総数４に達したため、スレッド割り当て部１４は、図１９（ｃ）のように、割り当てリスト１８にリストされた第２スレッドグループに属する３つのスレッドｔｈ２ａ、ｔｈ２ｂ、ｔｈ２ｃをスケジューリング配列２０のマークされていないプロセッサ番号１、２、４に割り振る。このとき、プロセッサ番号４に割り振られていた第４スレッドグループのスレッドｔｈ４ａはプロセッサへの割り当てを第２スレッドグループのスレッドｔｈ２ｃによって横取りされる。
【０１３１】
時刻ｔ２において、第３スレッドグループのスレッドｔｈ３ａが終了したとする。これにより、図２０（ａ）に示すように、実行待ちキュー３０から第３プライマリスレッドｐｔｈ３が外される。
【０１３２】
図２０（ｂ）に示すように、割り当てリスト生成部１２は、実行待ちキュー３０の先頭から第２プライマリスレッドｐｔｈ２を取り出し、第２スレッドグループのスレッド数３をカウンタ１６に加算し、カウンタ値を３とする。割り当てリスト生成部１２は、第２スレッドグループの各スレッドはスケジューリング配列２０に既にあるため、図２０（ｃ）のように、第２スレッドグループのスレッドｔｈ２ａ、ｔｈ２ｂ、ｔｈ２ｃが割り振られているプロセッサ番号１、２、４にマークを付ける。
【０１３３】
次に、割り当てリスト生成部１２は、実行待ちキュー３０の次のエントリである第４プライマリスレッドｐｔｈ４を取り出し、第４スレッドグループのスレッド数１をカウンタ１６に加算し、カウンタ値を４とし、第４スレッドグループのスレッドはスケジューリング配列２０にないから、第４プライマリスレッドｐｔｈ４を割り当てリスト１８に追加する。
【０１３４】
カウンタ１６の値がプロセッサ総数４に達したため、スレッド割り当て部１４は、図２０（ｃ）のように、割り当てリスト１８にリストされた第４スレッドグループのスレッドｔｈ４ａをスケジューリング配列２０のマークされていないプロセッサ番号３に割り振る。
【０１３５】
時刻ｔ３において、第２スレッドグループのスレッドｔｈ２ａが終了したとする。これにより、図２１（ａ）に示すように、実行待ちキュー３０から第２プライマリスレッドｐｔｈ２が外される。
【０１３６】
図２１（ｂ）に示すように、割り当てリスト生成部１２は、実行待ちキュー３０の先頭から第４プライマリスレッドｐｔｈ４を取り出し、第４スレッドグループのスレッド数１をカウンタ１６に加算し、カウンタ値を１とする。割り当てリスト生成部１２は、第４スレッドグループの各スレッドはスケジューリング配列２０に既にあるため、図２１（ｃ）のように、第４スレッドグループのスレッドｔｈ４ａが割り当てられているプロセッサ番号３にマークをつける。
【０１３７】
次に、割り当てリスト生成部１２は、実行待ちキュー３０の次のエントリである第５プライマリスレッドｐｔｈ５を取り出し、カウンタ１６に第５スレッドグループのスレッド数３を加算し、カウンタ値を４とする。第５スレッドグループのスレッドはスケジューリング配列２０にないから、第５プライマリスレッドｐｔｈ５を割り当てリスト１８に追加される。
【０１３８】
カウンタ１６の値がプロセッサ総数４に達したため、スレッド割り当て部１４は、図２１（ｃ）のように、割り当てリスト１８にリストされた第５スレッドグループのスレッドｔｈ５ａ、ｔｈ５ｂ、ｔｈ５ｃをスケジューリング配列２０のマークされていないプロセッサ番号１、２、４にそれぞれ割り当てる。
【０１３９】
図２２は、本例におけるスレッドの割り当て状態の時間変化を示す図である。時刻ｔ０では、第１プロセッサ、第２プロセッサに第１スレッドグループの２つのスレッドｔｈ１ａ、ｔｈ１ｂが割り当てられ、第３プロセッサに第３スレッドグループのスレッドｔｈ３ａが割り当てられ、第４プロセッサに第４スレッドグループのスレッドｔｈ４ａが割り当てられて実行される。
【０１４０】
時刻ｔ１において、第１スレッドグループが同期待ちとなり、再スケジューリングが起こる。このとき、その時点で最も優先順位が高い第２スレッドグループの３つのスレッドｔｈ２ａ、ｔｈ２ｂ、ｔｈ２ｃが割り当てられるため、第４プロセッサに割り当てられていた優先順位の低い第４スレッドグループのスレッドｔｈ４ａはプリエンプトされる。しかし、時刻ｔ２において、第３スレッドグループが終了すると、代わりに第４スレッドグループのスレッドｔｈ４ａが第３プロセッサに割り当てられる。時刻ｔ３において、第２スレッドグループが終了すると、代わりに第５スレッドグループのスレッドｔｈ５ａ、ｔｈ５ｂ、ｔｈ５ｃが第１、第２、第４プロセッサにそれぞれ割り当てられる。
【０１４１】
以上述べたように、本実施の形態のスケジューリング装置２００によれば、スレッドをグループ化し、同一スレッドグループに属する複数のスレッドは同時にいずれかのプロセッサに割り当てて実行することにより、マルチプロセッサシステムの同期・排他制御機構を利用して、スレッドグループ内のスレッド間で互いのアドレス空間を効率よく参照したり、メモリの排他処理を効率よく行うことができる。また、スレッド間で通信したり、メモリを共有する場合も、スレッドグループ内のスレッドは同時にプロセッサに割り当てられるため、効率よくスレッド間通信を行ったり、メモリの共有を行うことができる。
【０１４２】
仮に、同一スレッドグループに属する複数のスレッドの中に、プロセッサに割り当てられているものと、プロセッサに割り当てられずに、スレッドのコンテクストがメインメモリに退避されているものとがあるとすると、スレッドの実体が現在どこにあるかを知る必要があり、カーネルに問い合わせて、システムコールを通じてデータの読み出しをすることになり、そのための処理機構は複雑でコストがかかる。しかしながら、本実施の形態では、あるスレッドがプロセッサ上にある場合は、同一スレッドグループの他のスレッドも必ず他のプロセッサ上にあることが保証されるため、処理効率を高めることができる。  
【０１４３】
本実施の形態のスレッドスケジューリングでは、同一スレッドグループに属するすべてのスレッドを同時にプロセッサに割り当てるという条件のもと、優先順位の高いスレッドを極力最優先にし、かつ、マルチプロセッサの資源の利用効率を最大限に上げることができる。優先順位の高いスレッドグループのスレッドを割り当てるために、先に割り当てられたより優先順位の低いスレッドはプリエンプトされる。このプリエンプションによって優先順位を守ることができる。また、プロセッサ総数の制約から、あるスレッドグループの割り当てができない場合は、より優先順位の低いスレッドグループが優先され、優先順位の逆転が起こることもある。この優先順位の逆転によって、プロセッサの利用効率を高めることができる。
【０１４４】
本実施の形態の実行待ちキュー３０は、実行待ち状態にあるスレッドグループだけでなく、実行中状態にあるスレッドグループも優先度順でかつ同一優先度内ではＦＩＦＯ順でキューイングしている。これにより、スレッドグループのＦＩＦＯ順を守ってスケジューリングができる。仮に、実行中状態にあるスレッドグループを実行待ちキュー３０から外してしまうとすると、ＦＩＦＯ順を維持するためには、ＦＩＦＯ順を別途記憶しておく必要があり、処理が複雑になり、効率が低下することになる。しかしながら、本実施の形態では、実行中状態にあるスレッドグループもＦＩＦＯ順で実行待ちキュー３０に保持するため、ＦＩＦＯ順を維持しながら、割り当て処理を一括して行うことができる。そのため、割り当て処理の効率が良く、処理も簡単である。
【０１４５】
また、本実施の形態では、割り当てリスト生成部１２がスケジューリング配列２０においてマーキング処理をすることにより、既に割り当てられたスレッドが割り当て先のプロセッサを変更されて再配置されることがないことを保証することができる。実行中状態にあったスレッドが継続してスケジューリングされて実行される場合に、そのスレッドは同一のプロセッサにおいて連続して実行されることになるため、スレッドのプロセッサへの割り当て処理を省くことができ、処理効率が向上する。
【０１４６】
実施の形態２
実施の形態２に係るマルチプロセッサシステムは、図１のマルチプロセッサシステムと同じ構成であり、スレッドスケジューリングにより、ある時刻に各プロセッサ１３０には１つのスレッドが割り当てられ、マルチプロセッサシステム全体で並列に複数のスレッドが実行される。
【０１４７】
本実施の形態のマルチプロセッサシステムでは、複数のプロセッサ１３０の内、少なくとも１つのプロセッサ１３０がスレッドスケジューリングの対象外となり、残りのプロセッサ１３０にスレッドがスレッドスケジューリングにより割り当てられる点が実施の形態１と異なる。
【０１４８】
また、実施の形態１では、１つ以上のスレッドを含むスレッドグループが定義され、スレッドグループ単位でスケジューリングが行われたが、本実施の形態では、スレッドグループは特に定義されず、スレッド単位でスケジューリングが行われる。スレッドスケジューリング方式は、実施の形態１で説明した優先度順かつ同一優先度内ではＦＩＦＯ順でスレッドのプロセッサへの割り当てを制御してもよく、通常のラウンドロビン方式やプライオリティ方式を採用してもよい。
【０１４９】
スレッドの割り当て対象外のプロセッシングエレメント１００（以下、非割り当て対象ＰＥという）のプロセッサ１３０上には、当該プロセッシングエレメント１００内の資源を独占的に占有する実行実体が動作し、この実行実体は、スケジューリングの対象外であるため、いったんプロセッサに割り当てられると、当該プロセッサへの割り当てを横取りされることがない。以下、この非割り当て対象ＰＥ上で動作するスケジューリング対象とならない実行実体のことを、「非スケジューリング対象実行実体」と呼ぶ。
【０１５０】
非スケジューリング対象実行実体は、非割り当て対象ＰＥ内のローカルメモリ１４０やメモリ制御部１５０内部のレジスタなどのすべての資源を占有して使用することができる。これは、スレッドスケジューリングによりプロセッシングエレメント１００に割り当てられたスレッドが、プロセッシングエレメント１００内のローカルメモリ１４０やメモリ制御部１５０内部のレジスタなどのすべての資源を占有して使用することができることと同じである。また、非スケジューリング対象実行実体が占有する資源については、外側からすなわち他のプロセッシングエレメント１００からもアクセスできるように、一部のアクセスを許可しないクリティカルな資源を除いて、ほとんどすべての資源がアドレス空間にマップされる。
【０１５１】
図２３は、あるプロセッサ１３０に割り当てられたスレッドから見たアドレス空間１７０を説明する図である。非割り当て対象ＰＥで動作する非スケジューリング対象実行実体が時間的に占有する資源は、他のプロセッシングエレメント１００で動作する各スレッドのアドレス空間１７０にメモリマップされる。アドレス空間１７０には、共有データを含むメインメモリがマップされたメインメモリ領域１７２と、非スケジューリング対象実行実体の占有資源がマップされた非スケジューリング対象実行実体マップ領域１７６とが含まれる。
【０１５２】
非スケジューリング対象実行実体マップ領域１７６には、この例では、２つの非スケジューリング対象実行実体マップ＃１、＃２が配置されている。すなわち、本例では、２つのプロセッシングエレメント１００が非割り当て対象ＰＥとして選ばれ、各非割り当て対象ＰＥ上で非スケジューリング対象実行実体が動作している。各非スケジューリング対象実行実体マップ＃１、＃２は、各非スケジューリング対象実行実体が非割り当て対象ＰＥ内で占有する資源をメモリマップしたものであり、符号１７７で示すように、ローカルメモリと、メモリ制御部１５０を外部から制御するためのレジスタ群を含む。レジスタ群には、実施の形態１で説明した同期通信のための通信用レジスタの他、プログラムの実行や停止を行うためのプログラム制御用レジスタや、ＤＭＡを制御するためのＤＭＡ制御用レジスタなどがあり、実施の形態１で説明した図２のスレッドマップの場合とは異なり、これらのすべてのレジスタにアクセスが可能である。これらのレジスタにアクセスすることにより、非スケジューリング対象実行実体が占有するプロセッサ資源を直接、きめ細かく操作することが可能である。
【０１５３】
第１の非スケジューリング対象実行実体マップ＃１には、非スケジューリング対象実行実体ベースアドレスを先頭アドレスとして非スケジューリング対象実行実体マップのサイズ分の領域が割り当てられている。第２の非スケジューリング対象実行実体マップ＃２の先頭アドレスは、非スケジューリング対象実行実体ベースアドレスに非スケジューリング対象実行実体マップのサイズに対応したオフセット値を加算したアドレスになる。この例では、２つの非スケジューリング対象実行実体マップ＃１、＃２しか配置されていないが、一般には、スレッドスケジューリングの対象外となり、非スケジューリング対象実行実体が動作するプロセッシングエレメント１００の数だけ、非スケジューリング対象実行実体マップが設けられる。
【０１５４】
非スケジューリング対象実行実体を生成する際に、生成関数の戻り値として返されるＩＤから非スケジューリング対象実行実体マップの番号が決まり、その非スケジューリング対象実行実体がアドレス空間１７０内のどの非スケジューリング対象実行実体マップを使用するかが静的に決まる。各プロセッシングエレメント１００のメモリ制御部１５０は、各非スケジューリング対象実行実体がどの非スケジューリング対象実行実体マップを使用しているかを非スケジューリング対象実行実体マップの設定情報として保持する。各プロセッシングエレメント１００のメモリ制御部１５０は、各非スケジューリング対象実行実体の資源がどの非スケジューリング対象実行実体マップにメモリマップされているかを非スケジューリング対象実行実体マップの設定情報により把握することができ、アドレス空間１７０の非スケジューリング対象実行実体マップにもとづいて、非スケジューリング対象実行実体の資源に対するアクセス要求をＤＭＡによって処理することができる。
【０１５５】
たとえば、システム初期化時に第１、第２プロセッサがスレッドスケジューリングの対象から外され、第１プロセッサで第１非スケジューリング対象実行実体Ｒ１が動作し、第２プロセッサで第２非スケジューリング対象実行実体Ｒ２が動作するとする。また、第３、第４プロセッサにスレッドがスケジューリングされて割り当てられるとする。
【０１５６】
第１、第２非スケジューリング対象実行実体Ｒ１、Ｒ２の生成時に、スレッドのアドレス空間の第１領域ＥＲ１に第１非スケジューリング対象実行実体Ｒ１の資源がメモリマップされ、第２領域ＥＲ２に第２非スケジューリング対象実行実体Ｒ２の資源がメモリマップされたとする。スレッドスケジューリングにより、第３プロセッサに第１スレッドＡ１が割り当てられ、第４プロセッサに第２スレッドＡ２が割り当てられたとする。
【０１５７】
このとき、第３プロセッサ上で動作する第１スレッドＡ１から、第１非スケジューリング対象実行実体Ｒ１の非スケジューリング対象実行実体マップである第１領域ＥＲ１にアクセスすると、第１プロセッサの資源が第１非スケジューリング対象実行実体Ｒ１の資源として参照される。第１スレッドＡ１から第１非スケジューリング対象実行実体Ｒ１の非スケジューリング対象実行実体マップである第１領域ＥＲ１へのアクセスは、第１非スケジューリング対象実行実体Ｒ１がどのプロセッサで動作しているかに関係なく、必ず第１非スケジューリング対象実行実体Ｒ１の資源へのアクセスであることが保証される。第１スレッドＡ１が第２非スケジューリング対象実行実体Ｒ２の非スケジューリング対象実行実体マップである第２領域ＥＲ２にアクセスする場合も同様である。
【０１５８】
第４プロセッサ上で動作する第２スレッドＡ２が第１、第２非スケジューリング対象実行実体Ｒ１、Ｒ２の非スケジューリング対象実行実体マップである第１領域ＥＲ１、第２領域ＥＲ２にアクセスする場合も全く同様である。
【０１５９】
このように、いずれかのプロセッサ１３０に割り当てられたスレッドは、アドレス空間１７０内に設定された非スケジューリング対象実行実体マップのアドレスにアクセスすることで、非スケジューリング対象実行実体が占有する資源にＤＭＡによって直接アクセスすることができる。
【０１６０】
スレッドがアドレス空間にメモリマップされた非スケジューリング対象実行実体の占有資源にアクセスすることにより、非スケジューリング対象実行実体が動作するプロセッサのハードウエア資源をシステムコールを介さずに直接的に操作することができ、スレッドが参照するアドレス空間には、非スケジューリング対象実行実体が占有する資源のほとんどがマップされているから、より多くのハードウエア資源の制御をユーザの管理にゆだねることができる。たとえば、プログラムの実行、停止などの操作を外側から行うことも可能になる。
【０１６１】
また、実施の形態１で述べた同期機構は、本実施の形態においても有効である。スレッドが、アドレス空間にメモリマップされた非スケジューリング対象実行実体の資源の一つであるメモリ制御部１５０内の通信用レジスタに値を書き込む操作を行い、非スケジューリング対象実行実体がその通信用レジスタに対する書き込みの完了を待つことにより、非スケジューリング対象実行実体とスレッドの間で同期を取ることができる。
【０１６２】
非スケジューリング対象実行実体の他の使い方として、非スケジューリング対象実行実体の占有資源をグラフィックス表示装置などのデバイスのメモリ空間にメモリマップし、非スケジューリング対象実行実体が動作するプロセッシングエレメント１００とグラフィックス表示装置との間で非スケジューリング対象実行実体の占有資源を利用した同期機構を実現してもよい。
【０１６３】
実施の形態３
実施の形態２のマルチプロセッサシステムでは、スレッドグループを定義しなかったが、実施の形態１と同様にスレッドをグループ化し、スレッドグループ単位でスケジューリングを行ってもよい。実施の形態３のマルチプロセッサシステムは、実施の形態１のマルチプロセッサシステムにおいて、実施の形態２で述べた非スケジューリング対象実行実体の占有資源をアドレス空間にメモリマップする方法を採用したものである。
【０１６４】
本実施の形態のマルチプロセッサシステムでは、実施の形態２と同様、複数のプロセッサ１３０の内、少なくとも１つのプロセッサ１３０がスレッドスケジューリングの対象外となり、残りのプロセッサ１３０にスレッドがスレッドスケジューリングにより割り当てられる。また、本実施の形態のマルチプロセッサシステムでは、実施の形態１と同様、１つ以上のスレッドを含むスレッドグループが定義され、スレッドグループ単位でスケジューリングが行われる。実施の形態１および実施の形態２と共通する構成と動作については説明を省略し、異なる構成と動作についてのみ説明する。
【０１６５】
図２４は、あるプロセッサ１３０に割り当てられたスレッドから見たアドレス空間１７０を説明する図である。アドレス空間１７０には、共有データを含むメインメモリがマップされたメインメモリ領域１７２と、同一グループ内の各スレッドの占有資源がマップされたスレッドマップ領域１７４と、非スケジューリング対象実行実体の占有資源がマップされた非スケジューリング対象実行実体マップ領域１７６とが含まれる。
【０１６６】
スレッドマップ領域１７４については、実施の形態１で述べた通りであり、非スケジューリング対象実行実体マップ領域１７６については、実施の形態２で述べた通りである。なお、符号１７５で示される各スレッドマップに含まれる資源と、符号１７７で示される各非スケジューリング対象実行実体マップに含まれる資源は、スレッドマップに含まれる資源にはアクセスが許されないものがあるという違いはあるが、マップされる資源の種類としては同じであるから、両マップのサイズは同じであり、先頭アドレスに対するオフセット値は同じ値になる。
【０１６７】
スレッドマップ領域１７４は、同一グループに属するスレッドのアドレス空間に対して設定されるものであり、異なるグループに属するスレッドからは参照することができないが、非スケジューリング対象実行実体マップ領域１７６は、スレッドの属するグループに関係なく固定して配置されており、同じアドレスで参照することができる。また、非スケジューリング対象実行実体マップ領域１７６は、メインメモリ１２０に退避されることがないため、スレッドのアドレス空間においていつでも参照可能である。
【０１６８】
図２５は、本実施の形態のスレッドスケジューリングによるスレッドの割り当て状態の時間変化を示す図である。この例では、第１および第２プロセッサが非割り当て対象ＰＥとして選ばれ、それ以外の第３〜第６プロセッサにスレッドがスケジュールされて割り当てられる。
【０１６９】
第１プロセッサでは第１非スケジューリング対象実行実体が実行され、第２プロセッサでは第２非スケジューリング対象実行実体が実行される。これらの非スケジューリング対象実行実体は、スケジューリングの対象ではないため、非スケジューリング対象実行実体が削除されるまで、各プロセッサを時間的に占有し続ける。
【０１７０】
第３〜第６プロセッサについては、図２２で説明した実施の形態１のスレッドスケジューリングの例と同じ方法でスレッドがスレッドグループ単位でスケジュールされて、割り当てられる。
【０１７１】
なお、非スケジューリング対象実行実体が削除されてプロセッサへの割り当てが解放された場合は、そのプロセッサはスレッドの割り当てた対象に加えられてもよい。たとえば、第２非スケジューリング対象実行実体が削除されて、第２プロセッサが解放された場合、次のスケジューリングのタイミングにおいて、第２プロセッサをスレッドの割り当て対象に追加し、第２〜第６プロセッサに対してスレッドをスケジューリングして割り当てるようにしてもよい。
【０１７２】
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【０１７３】
上記の実施の形態では、マルチプロセッサシステムとして、すべてのプロセッシングエレメントが同じ構成である対称型マルチプロセッサシステムを例にあげて説明し、いずれか一つのプロセッシングエレメントがスレッドの管理・スケジューリング機能をもつように構成した。マルチプロセッサシステムは、管理用プロセッシングエレメントを含む非対称型マルチプロセッサシステムであってもよく、管理用プロセッシングエレメントにスレッドの管理・スケジューリング機能をもたせてもよい。また、スケジューリング機能はオペレーティングシステム（ＯＳ）の機能の一部として実現されてもよく、ＯＳ上で動作する一つのプロセスとして実現されてもよい。
【０１７４】
上記の説明では、プロセス内部で生成されるスレッドを並列処理単位とするスレッドスケジューリングを説明したが、本発明は、プロセスを並列処理単位としたプロセススケジューリングにも同様に適用することができる。
【図面の簡単な説明】
【０１７５】
【図１】実施の形態１に係るマルチプロセッサシステムの構成図である。
【図２】図１のプロセッサに割り当てられたスレッドから見たアドレス空間を説明する図である。
【図３】図１のプロセッサで動作するスレッドとスレッドの所属するスレッドグループを説明する図である。
【図４】図３に示すスレッドグループ単位でスレッドがプロセッサに割り当てられる様子を説明する図である。
【図５】スレッドの状態遷移を説明する図である
【図６】実施の形態１に係るスケジューリング装置の構成図である。
【図７】図６のスレッド状態テーブルを説明する図である。
【図８】図６の実行待ちキューを説明する図である。
【図９】図６のスケジューリング配列を説明する図である。
【図１０】実施の形態１に係るスケジューリング装置によるスケジューリング手順を説明するフローチャートである。
【図１１】ある時刻でのスレッドの割り当ての手順を説明する図である。
【図１２】別の時刻でのスレッドの割り当ての手順を説明する図である。
【図１３】図１１および図１２のスレッドスケジューリングによるスレッドの割り当て状態の時間変化を示す図である。
【図１４】図６のスレッド状態テーブルの別の例を説明する図である。
【図１５】ある時刻でのスレッドの割り当ての手順を説明する図である。
【図１６】図１５のスレッドスケジューリングによるスレッドの割り当て状態の時間変化を示す図である。
【図１７】図６のスレッド状態テーブルのさらに別の例を説明する図である。
【図１８】ある時刻でのスレッドの割り当ての手順を説明する図である。
【図１９】別の時刻でのスレッドの割り当ての手順を説明する図である。
【図２０】さらに別の時刻でのスレッドの割り当ての手順を説明する図である。
【図２１】さらに別の時刻でのスレッドの割り当ての手順を説明する図である。
【図２２】図１８〜図２１のスレッドスケジューリングによるスレッドの割り当て状態の時間変化を示す図である。
【図２３】実施の形態２に係るマルチプロセッサシステムのプロセッサに割り当てられたスレッドから見たアドレス空間を説明する図である。
【図２４】実施の形態３に係るマルチプロセッサシステムのプロセッサに割り当てられたスレッドから見たアドレス空間を説明する図である。
【図２５】実施の形態３に係るマルチプロセッサシステムにおけるスレッドスケジューリングによるスレッドの割り当て状態の時間変化を示す図である。
【符号の説明】
【０１７６】
１０  スケジューラ、  １２  割り当てリスト生成部、  １４  スレッド割り当て部、  １６  割り当てスレッド数カウンタ、  １８  スレッド割り当てリスト、  ２０  スケジューリング配列、  ３０  実行待ちキュー、  ３２  スレッド状態管理部、  ３４  スレッド状態テーブル、  １００  プロセッシングエレメント、  １１０  メインバス、  １２０  メインメモリ、  １３０  プロセッサ、  １４０  ローカルメモリ、  １５０  メモリ制御部、  ２００  スケジューリング装置。
【図１】
2006155480.tif 000003
【図２】
2006155480.tif 000004
【図３】
2006155480.tif 000005
【図４】
2006155480.tif 000006
【図５】
2006155480.tif 000007
【図６】
2006155480.tif 000008
【図７】
2006155480.tif 000009
【図８】
2006155480.tif 000010
【図９】
2006155480.tif 000011
【図１０】
2006155480.tif 000012
【図１１】
2006155480.tif 000013
【図１２】
2006155480.tif 000014
【図１３】
2006155480.tif 000015
【図１４】
2006155480.tif 000016
【図１５】
2006155480.tif 000017
【図１６】
2006155480.tif 000018
【図１７】
2006155480.tif 000019
【図１８】
2006155480.tif 000020
【図１９】
2006155480.tif 000021
【図２０】
2006155480.tif 000022
【図２１】
2006155480.tif 000023
【図２２】
2006155480.tif 000024
【図２３】
2006155480.tif 000025
【図２４】
2006155480.tif 000026
【図２５】
2006155480.tif 000027