(57)【特許請求の範囲】
【請求項１】
同時に実行すべき複数のスレッドを１つのスレッド集合とし、スレッド集合中の各スレッドのコンテキストを主記憶上のコンテキスト退避領域にスレッド集合に１対１に対応して設けたコンテキスト領域に格納し、マルチプロセッサシステムを構成する複数のプロセッサのうち一時には単一のプロセッサのみがカーネルスケジューラ実行権限を取得可能となるよう例外処理中に主記憶上の排他制御変数を用いて排他調停を行い、カーネルスケジューラ実行権限を取得したプロセッサが、次に実行すべきスレッド集合を主記憶上のディスパッチキューを用いて選択し、該選択したスレッド集合中の複数のスレッドを主記憶上の同期変数を用いて自プロセッサを含む複数のプロセッサで同時に実行させる制御を行い、前記排他調停の際、カーネルスケジューラ実行権限の取得に失敗したプロセッサは、カーネルスケジューラ実行権限を取得したプロセッサから、プロセッサ間割り込みを受理できるよう準備をして待機し、プロセッサ間割り込みを受理したならば待機中であった例外の発生条件を例外受理前の状態に戻すことで、スレッド切り替え後に例外が再発生するよう設定することを特徴とする、複数のプロセッサで同時にスレッドの実行を開始させる方法。
【請求項２】
スレッド集合中の複数のスレッドのコンテキストを、各プロセッサで読み込んだ後、主記憶上の同期変数による同期手段を用いて、各プロセッサが同時にスレッドの実行を開始するよう調停を行うことを特徴とする請求項１記載の、複数のプロセッサで同時にスレッドの実行を開始させる方法。
【請求項３】
マルチプロセッサシステムにおいて複数のプロセッサで同時にスレッドの実行を開始させる方法において、
（ａ）一時には単一のプロセッサのみがカーネルスケジューラ実行権限を取得可能となるよう各プロセッサの例外処理中で主記憶上の排他制御変数を用いて排他調停を行うステップ、
（ｂ）カーネルスケジューラ実行権限を取得したプロセッサが、自プロセッサで実行中のスレッドのコンテキストを主記憶上のコンテキスト退避領域に退避すると共に、当該スレッドが属するスレッド集合中の他のスレッドの実行先プロセッサに対して主記憶上のコンテキスト退避領域内の場所を指定してコンテキスト退避要求にかかるプロセッサ間割り込みを発行するステップ、
（ｃ）前記コンテキスト退避要求にかかるプロセッサ間割り込みを受信したプロセッサが、指定された主記憶上のコンテキスト退避領域の場所に自プロセッサで実行中のスレッドのコンテキストを退避し、その完了を要求元プロセッサに主記憶上の同期変数により通知するステップ、
（ｄ）コンテキスト退避要求を出したプロセッサが、要求先の全てのプロセッサにおけるコンテキスト退避の完了を主記憶上の同期変数により確認後、次に実行すべきスレッド集合中の他プロセッサで実行すべきスレッドのコンテキストを記憶している主記憶上のコンテキスト退避領域の場所を指定してそのスレッドの実行先プロセッサに対してコンテキスト読み込み要求を出すと共に、次に実行すべきスレッド集合中の自プロセッサで実行すべきスレッドのコンテキストを主記憶上のコンテキスト退避領域から読み込んでコンテキストの復帰を行うステップ、
（ｅ）前記コンテキスト読み込み要求を受けたプロセッサが、指定された主記憶上のコンテキスト退避領域の場所からスレッドのコンテキストを読み込んでコンテキストの復帰を行い、その完了を当該スレッドが属するスレッド集合中のスレッドの全実行先プロセッサに主記憶上の完了同期変数により通知するステップ、
（ｆ）前記スレッド集合中のスレッドを実行する全てのプロセッサにおけるコンテキストの復帰が完了した時点で、当該全てのプロセッサが同時にスレッドの実行を開始するステップ、
とを含み、
（ｇ）前記ステップａにおける排他調停でカーネルスケジューラ実行権限の取得に失敗したプロセッサは、カーネルスケジューラ実行権限を取得したプロセッサから、プロセッサ間割り込みを受理できるよう準備をして待機し、プロセッサ間割り込みを受理したならば待機中であった例外の発生条件を例外受理前の状態に戻すことで、スレッド切り替え後に例外が再発生するよう設定するステップを含み、
複数のプロセッサで同時に実行すべき複数のスレッドを１つのスレッド集合として主記憶上のコンテキスト退避領域内のスレッド集合に１対１に対応するコンテキスト領域に格納することを特徴とする、複数のプロセッサで同時にスレッドの実行を開始させる方法。
【請求項４】
同時に実行すべき複数のスレッドを１つのスレッド集合とし、スレッド集合中の各スレッドのコンテキストを主記憶上のコンテキスト退避領域にスレッド集合に１対１に対応して設けたコンテキスト領域に格納する手段と、
マルチプロセッサシステムを構成する複数のプロセッサのうち一時には単一のプロセッサのみがカーネルスケジューラ実行権限を取得可能となるよう例外処理中に主記憶上の排他制御変数を用いて排他調停を行う手段とを備え、
カーネルスケジューラ実行権限を取得したプロセッサが、次に実行すべきスレッド集合を主記憶上のディスパッチキューを用いて選択し、該選択したスレッド集合中の複数のスレッドを主記憶上の同期変数を用いて自プロセッサを含む複数のプロセッサで同時に実行させる制御を行い、
前記排他調停の際、カーネルスケジューラ実行権限の取得に失敗したプロセッサは、カーネルスケジューラ実行権限を取得したプロセッサから、プロセッサ間割り込みを受理できるよう準備をして待機し、プロセッサ間割り込みを受理したならば待機中であった例外の発生条件を例外受理前の状態に戻すことで、スレッド切り替え後に例外が再発生するよう設定することを特徴とする、複数のプロセッサで同時にスレッドの実行を開始させる装置。
【請求項５】
複数のプロセッサで同時に実行すべき複数のスレッドを１つのスレッド集合として主記憶上のコンテキスト退避領域内のスレッド集合に１対１に対応するコンテキスト領域に格納するようにしたマルチプロセッサシステムにおける各プロセッサに、
（ａ）一時には単一のプロセッサのみがカーネルスケジューラ実行権限を取得可能となるよう各プロセッサの例外処理中で排他調停を行うステップ、
（ｂ）カーネルスケジューラ実行権限を取得したプロセッサが、自プロセッサで実行中のスレッドのコンテキストを主記憶上のコンテキスト退避領域に退避すると共に、当該スレッドが属するスレッド集合中の他のスレッドの実行先プロセッサに対して主記憶上のコンテキスト退避領域内の場所を指定してコンテキスト退避要求にかかるプロセッサ間割り込みを発行するステップ、
（ｃ）前記コンテキスト退避要求にかかるプロセッサ間割り込みを受信したプロセッサが、指定された主記憶上のコンテキスト退避領域の場所に自プロセッサで実行中のスレッドのコンテキストを退避し、その完了を要求元プロセッサに主記憶上の同期変数により通知するステップ、
（ｄ）コンテキスト退避要求を出したプロセッサが、要求先の全てのプロセッサにおけるコンテキスト退避の完了を主記憶上の同期変数により確認後、次に実行すべきスレッド集合中の他プロセッサで実行すべきスレッドのコンテキストを記憶している主記憶上のコンテキスト退避領域の場所を指定してそのスレッドの実行先プロセッサに対してコンテキスト読み込み要求を出すと共に、次に実行すべきスレッド集合中の自プロセッサで実行すべきスレッドのコンテキストを主記憶上のコンテキスト退避領域から読み込んでコンテキストの復帰を行うステップ、
（ｅ）前記コンテキスト読み込み要求を受けたプロセッサが、指定された主記憶上のコンテキスト退避領域の場所からスレッドのコンテキストを読み込んでコンテキストの復帰を行い、その完了を当該スレッドが属するスレッド集合中のスレッドの全実行先プロセッサに主記憶上の完了同期変数により通知するステップ、
（ｆ）前記スレッド集合中のスレッドを実行する全てのプロセッサにおけるコンテキストの復帰が完了した時点で、当該全てのプロセッサが同時にスレッドの実行を開始するステップ、
（ｇ）前記ステップａにおける排他調停でカーネルスケジューラ実行権限の取得に失敗したプロセッサは、カーネルスケジューラ実行権限を取得したプロセッサから、プロセッサ間割り込みを受理できるよう準備をして待機し、プロセッサ間割り込みを受理したならば待機中であった例外の発生条件を例外受理前の状態に戻すことで、スレッド切り替え後に例外が再発生するよう設定するステップ、
を実行させるプログラムを記録したコンピュータ可読記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はマルチプロセッサシステムにおけるスレッドコンテキストスイッチ時に複数のプロセッサで同時にスレッドの実行を開始させる技術に関し、特に複数のプロセッサにおける複数のスレッド実行状態、すなわち複数のスレッドコンテキストを単一の単位として扱うことができる技術に関する。
【０００２】
【従来の技術】
従来の複数プロセッサにおけるカーネルスケジューラの一例として、ソラリス（Ｓｏｌａｒｉｓ）  でのスレッドの扱いがユニックスインターナルズ・ザニューフロンティアーズ、プレンティスホール社、ウレシュバハリア著、１９９６年（ＵＮＩＸ  Ｉｎｔｅｒｎａｌｓ  Ｔｈｅ  ｎｅｗ  ｆｒｏｎｔｉｅｒｓ  、Ｐｒｅｎｔｉｃｅ  Ｈａｌｌ  、Ｕｒｅｓｈ  Ｖａｈａｌｉａ）の第１３０頁ないし第１３９頁、および、マルチスレッドプログラミング入門、アスキー出版局、ビルルイス、ダニエルベルク原著１９９６年９月の第７３頁ないし第７７頁に記載されている。また、複数プロセッサ間の排他制御の手段については、ＯＳの基礎と応用、プレンティスホール・トッパン社、Ａ．Ｓ．タネンバウム原著の第２章第２節等に説明されている。また、生成された複数のタスクを並列実行するマルチプロセッサシステムの例が特開平９−３１９６５３号公報に記載されている。
【０００３】
図９に示すように、この従来のカーネルスケジューラにおけるプロセッサ数最小とした場合の構成は、入力装置１と、第１のプロセッサ２７と、第２のプロセッサ２８と、プロセッサ間割り込み通知装置２９と、主記憶３と、出力装置４とを備える。
【０００４】
また、第１のプロセッサ２７内に例外管理装置２７１と、第１のプロセッサ２７が実行する割り込み処理手段２７２及びカーネルスケジューラ手段２７３とを備え、第２のプロセッサ２８内に例外管理装置２８１と、第２のプロセッサ２８が実行する割り込み処理手段２８２及びカーネルスケジューラ手段２８３とを備え、主記憶３上に排他制御変数３１、コンテキスト退避領域３２、ディスパッチキュー３３、優先度リスト３８を備える。
【０００５】
図１０は、図９の割り込み処理手段２７２，２８２、および、カーネルスケジューラ手段２７３，２８３の動作を示す流れ図である。
【０００６】
このような構成を有する従来のカーネルスケジューラの動作を図９、図１０を用いて、以下説明する。
【０００７】
仮に入力装置１からの入力による例外を受けるプロセッサを第１のプロセッサ２７とすると、第１の例外要因１１が第１のプロセッサ２７の例外管理装置２７１に受理され、割り込み処理手段２７２が起動される（ステップＳ１）。
【０００８】
割り込み処理手段２７２内でコンテキスト退避手段２７２３が呼び出され、第１のプロセッサ２７の実行状態すなわちコンテキストを、現実行中のスレッドが第１のスレッドとすると、コンテキスト退避領域３２にある第１のスレッドのコンテキスト３２１として退避する（ステップ２）。
【０００９】
割り込み処理手段２７２は、次にカーネルスケジューラ手段２７３を起動し、カーネルスケジューラ手段２７３では、まず排他調停手段２７３１が実行される。第２のプロセッサ２８が排他制御変数３１を変更している場合は待機し（ステップＳ３）、変更していなければ排他制御変数３１を置き換えて、以降の操作に必要なディスパッチキュー３３等の領域を、他のプロセッサがアクセスするのを防止する（ステップＳ４，Ｓ５）。
【００１０】
引続き、カーネルスケジューラ手段２７３内部のディスパッチキュー操作手段２７３２が、第１の例外要因１１および割り込み処理手段２７２の処理により新規に実行可能となったスレッドが存在するか判断し（ステップＳ６）、存在する場合にはそのスレッドを示す構造体もしくはＩＤ番号をディスパッチキュー３３に登録する（ステップＳ７）。図９の例では第１のプロセッサ２７が第３のスレッドを示す構造体３３３を優先度「１１５」で登録した状態を示している。なお、優先度はその数値が大きいほど高い優先度を示すものとする。
【００１１】
さらに、起動対象選択手段２７３３が、ディスパッチキュー３３に待機するスレッドの内、優先度が最高位のスレッドを検索し（ステップＳ８）、また優先度リスト３８から実行中スレッドの優先度が最低のプロセッサを検索する（ステップＳ９）。図９の例では、この検索により、ディスパッチキュー３３から優先度「１１５」の第３のスレッドが得られ、優先度リスト３８から優先度「１００」を実行中の第２のプロセッサが得られる。
【００１２】
次に起動対象選択手段２７３３は、ディスパッチキュー３３に待機するスレッドの内の最高優先度である第３のスレッドを示す構造体３３３の優先度「１１５」が、優先度リスト３８中、最低優先度である第２のプロセッサで実行中のスレッドの優先度「１００」を上回っているかを調べる（ステップＳ１０）。今の場合、上回っているので、更に、自プロセッサが優先度最低のスレッドを実行中かを調べる（ステップＳ１１）。今の場合、実行中でない。この例のように、ディスパッチキュー３３で待機中のスレッドの優先度が他プロセッサで現在実行中の優先度よりも上位の場合、プロセッサ間割り込み手段２７３４は、最低優先度スレッドを実行中のプロセッサに対してプロセッサ間割り込みを用いて通知を行う（ステップＳ１２）。図９の例では、第２のプロセッサ２８が通知の対象となる。
【００１３】
第１のプロセッサ２７は、プロセッサ間割り込みを用いた通知の後、排他制御変数３１を元の状態に戻すことで排他条件を解除し（ステップＳ１５）、コンテキストを復帰して第１の例外要因１１の発生前の状態に移る。図９の例では、元の第１のスレッドに戻ることになる。
【００１４】
一方、プロセッサ間割り込みの通知対象となったプロセッサ２８では、プロセッサ間割り込み通知装置２９により第２のプロセッサ２８の例外管理装置２８１にプロセッサ間割り込みが通知されることで、割り込み処理手段２８２が起動される。
【００１５】
割り込み処理手段２８２内では、第１の例外要因１１を処理した割り込み処理手段２７２と同様に、コンテキスト退避手段２８２３が呼び出され、第２のプロセッサの実行状態すなわち第２のスレッドのコンテキストを、コンテキスト退避領域３２にある第２のスレッドのコンテキスト３２２として退避する（ステップＳ２）。
【００１６】
割り込み処理手段２８２はカーネルスケジューラ手段２８３を起動し、カーネルスケジューラ手段２８３では、まず排他調停手段２８３１が実行される。第１のプロセッサ２７のカーネルスケジューラ手段２７３の処理が完了していないなど、他のプロセッサが排他制御変数３１を変更している場合は待機し（ステップＳ３）、いなければ排他制御変数３１を置き換えて、以降の操作に必要なディスパッチキュー３３等の領域を、他のプロセッサがアクセスするのを防止する（ステップＳ４，Ｓ５）。
【００１７】
引続き、カーネルスケジューラ手段２８３内部のディスパッチキュー操作手段２８３２が、プロセッサ間割り込み通知装置２９および割り込み処理手段２８２の処理により新規に実行可能となったスレッドが存在するか判断し（ステップＳ６）、存在する場合にはコンテキスト退避領域３２からコンテキストをディスパッチキュー３３に追加登録する（ステップＳ７）。
【００１８】
図９の例では第３のスレッドを示す構造体３３３を第１のプロセッサ２７によって登録した以降には、新規に実行可能となったスレッドが存在していないとしている。
【００１９】
さらに、起動対象選択手段２８３３が、ディスパッチキュー３３に待機するスレッドの内、優先度が最高位のスレッドを検索し（ステップＳ８）、また優先度リスト３８から実行中スレッドの優先度が最低のプロセッサを検索する（ステップＳ９）。図９の例では、この検索により、ディスパッチキュー３３から優先度「１１５」の第３のスレッドが得られ、優先度リスト３８から優先度「１００」を実行中の第２のプロセッサが得られる。
【００２０】
次に起動対象選択手段２８３３は、ディスパッチキュー３３に待機するスレッドの内の最高優先度である第３のスレッドを示す構造体３３３の優先度「１１５」が、優先度リスト３８中、最低優先度である第２のプロセッサで実行中のスレッドの優先度「１００」を上回っているかを調べる（ステップＳ１０）。今の場合、上回っているので、更に、自プロセッサが優先度最低のスレッドを実行中かを調べる（ステップＳ１１）。今の場合、実行中である。この例のように、ディスパッチキュー３３で待機中のスレッドの優先度が自プロセッサで現在実行中の優先度よりも上位の場合、起動対象選択手段２８３３は、ディスパッチキュー３３に待機する最高優先度の第３のスレッドを次に実行するスレッドのコンテキストとして選択し（ステップＳ１３）、優先度リスト３８内の自プロセッサが実行するスレッドの優先度を次コンテキストの優先度に更新する（ステップＳ１４）。
【００２１】
最後に第２のプロセッサ２８は、排他制御変数３１を元の状態に戻すことで排他条件を解除し（ステップＳ１５）、次コンテキストを読み込んで新しいスレッド、即ち第３のスレッドの実行に移る。
【００２２】
【発明が解決しようとする課題】
上記したように、従来においては、各プロセッサでのカーネルスケジューラ手段がそれぞれ次に実行すべきスレッドを優先度を基に検出し、相互にプロセッサ間割り込み通知装置を用いてカーネルスケジューラ手段を起動することで、複数のプロセッサ間での複数のスレッドの起動処理を実現している。しかし、このような従来方法では、次のような問題が生じる。
【００２３】
第１の問題点は、プロセッサ間で相互のプロセッサが実行するスレッドがいつどのスレッドに切り替わるか、カーネルスケジューラ手段以外に同期手段を設けない限り厳密に判定できないということである。
【００２４】
つまり、従来では、各プロセッサで動作するカーネルスケジューラ手段は、基本的には独立して動作している。カーネルスケジューラ手段は、ディスパッチキュー上のスレッド構造体に収められた優先度が実行中のスレッドの優先度よりも上位であるならば、実行を移すという基本的な機能に、他に実行中のスレッドの優先度が低いプロセッサが存在するならば、プロセッサ間割り込み通知装置を使って新規スレッドの実行を依頼する機能を加え、さらにディスパッチキュー等の操作が競合しないよう排他調停手段を加えることで、複数プロセッサへの対応としているのである。そのため、あるプロセッサにおいてカーネルスケジューラ手段が、他のプロセッサに新規スレッドの実行を依頼したとしても、依頼先のプロセッサにおいて別の高優先度スレッドがディスパッチキューに登録される可能性があり、依頼元側のプロセッサは依頼の後、依頼先で実際にどのスレッドが起動されるか、カーネルスケジューラ手段以外に同期手段を設けて、監視する必要が発生する。
【００２５】
なお、依頼元のプロセッサが依頼先のプロセッサを監視している最中に、逆に他のプロセッサから依頼元のプロセッサに対して、別のスレッドの起動が要求された場合、依頼元側プロセッサが要求を受理できないと、実行されるべき優先を持つスレッドが長期間待たされる可能性がある。そのため、従来では依頼先プロセッサの監視の際には、依頼元プロセッサにおけるカーネルスケジューラ手段を完了させて、プロセッサ間割り込み要求が受理できる状態であるカーネルスケジューラ手段とは別の手段で改めて監視をしなければならない。
【００２６】
第２の問題点として、各プロセッサで実行されるスレッドの間で相互に同期的に動作しようとした場合、同期処理によるオーバーヘッドが大きくなることである。
【００２７】
その理由は、第１の問題点から同期相手となるスレッドを起動する際、カーネルスケジューラ手段によるスレッドの起動に加え、上記の監視機構を利用せねばならないためである。
【００２８】
そこで、本発明の目的は、各プロセッサ間で実行されるスレッドの切り替えに際し、複数のプロセッサで指定されたスレッドが同時に実行が開始されるようにすることにある。
【００２９】
また本発明の別の目的は、複数のスレッドを１つの単位として管理し、同じ単位のスレッドは複数のプロセッサで同時に実行が開始されるようにすることにある。
【００３０】
【課題を解決するための手段】
本発明は上記目的を達成するため、同時に実行すべき複数のスレッドを１つのスレッド集合とし、スレッド集合中の各スレッドのコンテキストを主記憶上のコンテキスト退避領域にスレッド集合に１対１に対応して設けたコンテキスト領域に格納し、マルチプロセッサシステムを構成する複数のプロセッサのうち一時には単一のプロセッサのみがカーネルスケジューラ実行権限を取得可能となるよう例外処理中に主記憶上の排他制御変数を用いて排他調停を行い、カーネルスケジューラ実行権限を取得したプロセッサが、次に実行すべきスレッド集合を主記憶上のディスパッチキューを用いて選択し、該選択したスレッド集合中の複数のスレッドを主記憶上の同期変数を用いて自プロセッサを含む複数のプロセッサで同時に実行させる制御を行う。また、前記排他調停の際、カーネルスケジューラ実行権限の取得に失敗したプロセッサは、カーネルスケジューラ実行権限を取得したプロセッサから、プロセッサ間割り込みを受理できるよう準備をして待機し、プロセッサ間割り込みを受理したならば待機中であった例外の発生条件を例外受理前の状態に戻すことで、スレッド切り替え後に例外が再発生するよう設定する。また、スレッド集合中の複数のスレッドのコンテキストを、各プロセッサで読み込んだ後、同期手段を用いて、各プロセッサが同時にスレッドの実行を開始するよう調停を行う。
【００３１】
より具体的には、本発明は、マルチプロセッサシステムにおいて複数のプロセッサで同時にスレッドの実行を開始させる方法において、
（ａ）一時には単一のプロセッサのみがカーネルスケジューラ実行権限を取得可能となるよう各プロセッサの例外処理中で主記憶上の排他制御変数を用いて排他調停を行うステップ、
（ｂ）カーネルスケジューラ実行権限を取得したプロセッサが、自プロセッサで実行中のスレッドのコンテキストを主記憶上のコンテキスト退避領域に退避すると共に、当該スレッドが属するスレッド集合中の他のスレッドの実行先プロセッサに対して主記憶上のコンテキスト退避領域内の場所を指定してコンテキスト退避要求にかかるプロセッサ間割り込みを発行するステップ、
（ｃ）前記コンテキスト退避要求にかかるプロセッサ間割り込みを受信したプロセッサが、指定された主記憶上のコンテキスト退避領域の場所に自プロセッサで実行中のスレッドのコンテキストを退避し、その完了を要求元プロセッサに主記憶上の同期変数により通知するステップ、
（ｄ）コンテキスト退避要求を出したプロセッサが、要求先の全てのプロセッサにおけるコンテキスト退避の完了を主記憶上の同期変数により確認後、次に実行すべきスレッド集合中の他プロセッサで実行すべきスレッドのコンテキストを記憶している主記憶上のコンテキスト退避領域の場所を指定してそのスレッドの実行先プロセッサに対してコンテキスト読み込み要求を出すと共に、次に実行すべきスレッド集合中の自プロセッサで実行すべきスレッドのコンテキストを主記憶上のコンテキスト退避領域から読み込んでコンテキストの復帰を行うステップ、
（ｅ）前記コンテキスト読み込み要求を受けたプロセッサが、指定された主記憶上のコンテキスト退避領域の場所からスレッドのコンテキストを読み込んでコンテキストの復帰を行い、その完了を当該スレッドが属するスレッド集合中のスレッドの全実行先プロセッサに主記憶上の完了同期変数により通知するステップ、
（ｆ）前記スレッド集合中のスレッドを実行する全てのプロセッサにおけるコンテキストの復帰が完了した時点で、当該全てのプロセッサが同時にスレッドの実行を開始するステップ、
とを含み、
（ｇ）前記ステップａにおける排他調停でカーネルスケジューラ実行権限の取得に失敗したプロセッサは、カーネルスケジューラ実行権限を取得したプロセッサから、プロセッサ間割り込みを受理できるよう準備をして待機し、プロセッサ間割り込みを受理したならば待機中であった例外の発生条件を例外受理前の状態に戻すことで、スレッド切り替え後に例外が再発生するよう設定するステップを含み、
複数のプロセッサで同時に実行すべき複数のスレッドを１つのスレッド集合として主記憶上のコンテキスト退避領域内のスレッド集合に１対１に対応するコンテキスト領域に格納している。
【００３２】
このように複数のプロセッサで同時に実行すべき複数のスレッドを１つのスレッド集合として扱い、カーネルスケジューラ実行権限を排他的に取得したプロセッサの制御の下に、複数のプロセッサが協調してスレッド集合単位でのコンテキストの退避および復帰を行うため、カーネルスケジューラの手順が完了した時点において、複数のプロセッサで同時にスレッドの実行が開始されることになる。
【００３３】
【発明の実施の形態】
次に本発明の実施の形態について図面を参照して詳細に説明する。
【００３４】
図１は本発明を適用したマルチプロセッサシステムの一例を示すブロック図であり、第１〜第ｎのプロセッサ２１〜２ｎと、これら複数のプロセッサ２１〜２ｎで共有される主記憶３，入力装置１，出力装置４およびプロセッサ間割り込み通知装置２９とを含む。
【００３５】
主記憶３は、第１〜第ｎのプロセッサ２１〜２ｎの全てからアクセス可能であり、排他制御変数３１と、コンテキスト退避領域３２と、ディスパッチキュー３３と、同期変数３４と、完了同期変数３５と、退避先アドレス指定変数３６とが設けられている。
【００３６】
排他制御変数３１は、各プロセッサ２１〜２ｎの各々でカーネルスケジューラが動作し得る当該マルチプロセッサシステムにおいて、一時には単一のプロセッサのみがカーネルスケジューラ実行権限を取得できるよう排他調停を行うための変数である。この変数３１を使った排他調停により、カーネルスケジューラ実行権限を取得したプロセッサは主位側プロセッサ、他のプロセッサは従位側プロセッサとなって、協調してコンテキストスイッチ等の処理を実行する。つまり、コンテキストの退避先や復帰するコンテキストの格納位置などは全て主位側プロセッサから従位側プロセッサに通知され、主位側プロセッサの主導の下にコンテキストスイッチが実行される。なお、従位側プロセッサには、一般のユーザレベルのスレッドを実行中のプロセッサと、主位側プロセッサになろうとしたが、変数３１による排他調停で実行権限の取得に失敗した例外処理中のプロセッサとがあり、後者のプロセッサを本明細書では劣位のプロセッサと呼んでいる。
【００３７】
コンテキスト退避領域３２は、当該マルチプロセッサシステムで実行されるスレッドのコンテキストを格納する領域であり、複数のプロセッサで同時に実行を開始すべきスレッドについては、それら複数のスレッドを１つのスレッド集合として管理し、そのスレッド集合に含まれる全スレッドのコンテキストを単一のコンテキスト領域に格納している。
【００３８】
図２にコンテキスト退避領域３２の構成例を示す。コンテキスト退避領域３２は、スレッド集合に１対１に対応するコンテキスト領域３２１を１以上含み、１つのコンテキスト領域３２１は、１つの主位側コンテキスト退避領域３２１１と、１つ以上の従位側コンテキスト退避領域３２１２とを含む。主位側コンテキスト退避領域３２１１は、主位側プロセッサの実行状態を退避する領域であり、従位側コンテキスト退避領域３２１２は、従位側プロセッサの実行状態を退避する領域である。例えば、主位側プロセッサにおいてスレッドＡ１が、従位側プロセッサにおいてスレッドＡ２がそれぞれ実行されている状態において、コンテキストスイッチが行われた場合、スレッドＡ１のコンテキストが主位側コンテキスト退避領域３２１１に退避され、スレッドＡ２のコンテキストが従位側コンテキスト退避領域３２１２に退避される。そして、当該スレッド集合の再開時には、主位側コンテキスト退避領域３２１１中のスレッドＡ１のコンテキストが主位側プロセッサに設定され、従位側コンテキスト退避領域３２１２中のスレッドＡ２のコンテキストが従位側プロセッサに設定され、スレッドＡ１およびスレッドＡ２の実行が同時に再開される。
【００３９】
ディスパッチキュー３３は、スレッドを示す構造体もしくはＩＤ番号をスレッド集合毎に登録するキューである。図３にディスパッチキュー３３の内容例を示す。この例では、第１のスレッド集合を示す構造体３３１と第２のスレッド集合を示す構造体３３２との２つが登録されている。また、各スレッド集合の優先度も併せて登録されている。つまり、本実施の形態では、複数のプロセッサで同時に実行を開始すべきスレッドについては、それらのスレッドを示す構造体を１つのスレッド集合として管理し、そのスレッド集合単位に優先度を付けてディスパッチキュー３３に登録するようにしている。
【００４０】
同期変数３４および完了同期変数３５は、主位側プロセッサと従位側プロセッサとの間で処理の同期をとるための変数である。このうち、同期変数３４は、従位側プロセッサがコンテキストの退避の完了を主位側プロセッサに通知するために使用され、完了同期変数３５は、従位側プロセッサがコンテキストの復帰の完了を主位側プロセッサを含めた他プロセッサに通知するために使用される。各変数３４，３５とも、各プロセッサ２１〜２ｎに１対１に対応するビットを持ち、自プロセッサに対応するビットの値を所定値とすることで、所定の処理の完了を通知する。
【００４１】
退避先アドレス指定変数３６は、主位側プロセッサが従位側プロセッサに対して、スレッドのコンテキストを退避する場所のアドレスや、復帰すべきコンテキストが格納されている場所のアドレスを通知するための変数である。退避先アドレス指定変数３６は任意の構成とすることができるが、本実施の形態では、各プロセッサ２１〜２ｎに１対１に対応するビット列を持ち、主位側プロセッサは、コンテキストの退避や復帰を要求する従位側プロセッサに対応するビット列にアドレスを設定する方法を採用している。
【００４２】
次に各プロセッサ２１〜２ｎの内部構成について説明する。
【００４３】
第１のプロセッサ２１から第ｎのプロセッサ２ｎまでの全プロセッサは、何れも主位側プロセッサ或いは従位側プロセッサとして動作し得るように同じ内部構成を有している。図１では、第１のプロセッサ２１のブロック内にのみ構成要素を描き、残りのプロセッサ２２〜２ｎのブロック内は図示を省略してある。
【００４４】
図１を参照すると、各プロセッサ２１〜２ｎは、例外管理装置２０１と、例外処理手段２０２と、劣位待機時プロセッサ間割り込み処理手段２０３と、プロセッサ間割り込み処理手段２０４と、従位側プロセッサ起動処理手段２０５と、カーネルスケジューラ手段２０６とを備える。以下、各々の部分について、その機能を説明する。
【００４５】
○例外管理装置２０１
例外管理装置２０１は、入力装置１からの外部割り込み要求信号およびプロセッサ間割り込み通知装置２９経由の他プロセッサからのプロセッサ間割り込みを外部からの入力とし、外部または内部で発生もしくは要求された例外について対応する手段を起動するなどの例外管理機能に加え、プロセッサ間割り込み通知装置２９を経由して任意のプロセッサに対して、プロセッサ間割り込みを通知する機能などを有している。例外管理装置２０１の構成例を図４に示す。
【００４６】
図４を参照すると、例外管理装置２０１は、例外認識装置２０１１と、優先順位判定装置２０１２と、非優先側例外保持装置２０１３と、許可例外優先順位保持装置２０１４と、起動対象判定装置２０１５と、例外禁止状態保持装置２０１６と、例外転送装置２０１８とを主要部として有する。
【００４７】
例外認識装置２０１１は、外部割り込み要求信号１２およびプロセッサ間割り込み通知装置２９経由で他プロセッサから送られてきたプロセッサ間割り込みにかかる例外、およびプロセッサ内部で発生した例外を認識する部分であり、認識した例外は優先順位判定装置２０１２に送られる。
【００４８】
許可例外優先順位保持装置２０１４は、どの優先順位までの例外が現在許可されているかの情報を保持する部分、例外禁止状態保持装置２０１６は、自プロセッサが例外を禁止している状態であるかどうかの情報を保持する部分であり、これらの装置２０１４，２０１６に保持された情報は優先順位判定装置２０１２によって参照される。
【００４９】
非優先側例外保持装置２０１３は、禁止されている例外および優先順位が低いために保留にすべきと判定された例外を保持する部分である。
【００５０】
優先順位判定装置２０１２は、例外認識装置２０１１において認識された例外および非優先側例外保持装置２０１３に保留されている例外について、その時点の許可例外優先順位保持装置２０１４および例外禁止状態保持装置２０１６の情報に基づいて、その例外を自プロセッサで実行するか、実行する場合にはどの例外を実行するか、或いは保留にするかを判定する部分である。保留にすると判定された例外は非優先側例外保持装置２０１３に保存される。また、実行すると判定された例外は、起動対象判定装置２０１５に渡される。
【００５１】
起動対象判定装置２０１５は、優先順位判定装置２０１２から渡された例外の種別に応じて、起動すべき処理に応じた手段を選定し、その手段を起動する部分である。また、起動対象判定装置２０１５は、起動対象となる処理に応じた手段を決定しプロセッサに実行を開始させる際、処理を開始する例外の優先度よりも劣位にある例外を保留するよう許可例外優先順位保持装置２０１４に情報を設定し、同時にプロセッサ間割り込みも保留するよう例外禁止状態保持装置２０１６に情報を設定する。
【００５２】
例外転送装置２０１８は、自プロセッサの例外処理手段２０２等からの要求に従ってプロセッサ間割り込み通知装置２９経由で他のプロセッサにプロセッサ間割り込みの転送を行う部分である。
【００５３】
また、例外管理装置２０１の各部は、自プロセッサで実行されるカーネルレベルの各手段、すなわち例外処理手段２０２、劣位待機時プロセッサ間割り込み処理手段２０３、プロセッサ間割り込み処理手段２０４、カーネルスケジューラ手段２０６、従位側プロセッサ起動処理手段２０５の、それぞれから操作ならびに設定が可能である。操作の種類としては、前述した例外転送装置２０１８に対して、プロセッサ間割り込み通知装置２９経由で他のプロセッサにプロセッサ間割り込みの転送を要求する操作や、例外管理装置２０１の例外状態を解除する操作などがある。また、設定の種類としては、例外禁止状態保持装置２０１６にプロセッサ間割り込みを禁止しないよう設定することや、非優先側例外保持装置２０１３に所定の例外（後述する例外状態巻き戻し手段２０３１によって巻き戻された例外）を登録して後刻に再度発生するように設定することなどが含まれる。
【００５４】
○例外処理手段２０２
例外処理手段２０２は、外部割り込み要求信号１２およびプロセッサ内部から要求される例外に対応する例外処理を実行する手段であり、例外管理装置２０１の起動対象判定装置２０１５によって起動される。内部には、排他調停手段２０２１、プロセッサ間例外許可手段２０２２、劣位待機手段２０２３、コンテキスト退避手段２０２４、プロセッサ間割り込み通知手段２０２５、従位側コンテキスト退避完了待機手段２０２９が含まれる。
【００５５】
排他調停手段２０２１は、当該例外処理の開始時に、排他制御変数３１を用いてプロセッサ間の排他的な処理を行うための手段である。排他制御変数３１を使った排他調停により、カーネルスケジューラの実行権限を取得できた場合、当該プロセッサは主位側プロセッサとなって、コンテキスト退避手段２０２４、プロセッサ間割り込み通知手段２０２５および従位側コンテキスト退避完了待機手段２０２９を実行し、カーネルスケジューラ手段２０６へと進む。他方、排他調停手段２０２１でカーネルスケジューラの実行権限を取得できなかった場合、当該プロセッサは劣位のプロセッサとなり、従位側プロセッサとしての動作に備えて、プロセッサ間例外許可手段２０２２、劣位待機手段２０２３へと進む。
【００５６】
コンテキスト退避手段２０２４は、自プロセッサ（主位側プロセッサ）の実行状態（コンテキスト）を、コンテキスト退避領域３２に退避する部分である。主位側プロセッサであるため、退避先は、図２に示したコンテキスト退避領域３２中の現実行中スレッド集合に対応するコンテキスト領域３２１における主位側コンテキスト退避領域３２１１である。
【００５７】
プロセッサ間割り込み通知手段２０２５は、退避先アドレス指定変数３６に従位側プロセッサのコンテキストを退避する退避先アドレスを設定した後に、例外管理装置２０１の例外転送装置２０１８を操作して、プロセッサ間割り込み通知装置２９経由で、従位側プロセッサに対してコンテキストの退避を要求するプロセッサ間割り込みを通知する部分である。指定する退避先アドレスは、図２に示したコンテキスト退避領域３２中の現実行中スレッド集合に対応するコンテキスト領域３２１における従位側コンテキスト退避領域３２１２である。プロセッサ間割り込みを通知するプロセッサは、スレッド集合を自プロセッサと共に並行して実行しているプロセッサである。通知先のプロセッサが複数存在する場合、つまり、３つ以上のスレッドを含むスレッド集合の場合、退避先アドレスを個別に通知する。
【００５８】
従位側コンテキスト退避完了待機手段２０２９は、プロセッサ間割り込み通知手段２０２５によってコンテキストの退避を要求した従位側プロセッサの全てが、コンテキストの退避を完了するまで待機し、その後にカーネルスケジューラ手段２０６を起動する部分である。後述するように、従位側プロセッサはコンテキストの退避を完了すると、同期変数３４の自プロセッサに対応するビットを操作するので、従位側コンテキスト退避完了待機手段２０２９は同期変数３４の該当ビットの変化を監視することで、従位側プロセッサの全てがコンテキストの退避を完了したかどうか判定することができる。なお、従位側コンテキスト退避完了待機手段２０２９は、従位側プロセッサの全てがコンテキストの退避を完了したことを確認した時点で、同期変数３４を初期化する。
【００５９】
他方、劣位のプロセッサとなった場合に実行されるプロセッサ間例外許可手段２０２２は、例外管理装置２０１の例外禁止状態保持装置２０１６の設定を変更することにより、例外処理手段２０２の開始時に例外管理装置２０１により禁止されていたプロセッサ間割り込みを許可し、従位側プロセッサとして主位側プロセッサからのコンテキスト退避要求にかかるプロセッサ間割り込みを受理できるようにする部分である。処理完了後は、次の劣位待機手段２０２３に実行が移る。
【００６０】
劣位待機手段２０２３は、排他制御変数３１が排他条件を取得した主位側プロセッサにより元の値に戻されるのを待ち、主位側プロセッサが自プロセッサに対してコンテキスト退避要求にかかるプロセッサ間割り込みを発行することなく排他処理を完了した場合に、自手段２０２３を完了し、排他調停手段２０２１に処理を戻す部分である。主位側プロセッサが自プロセッサに対してコンテキスト退避要求にかかるプロセッサ間割り込みを発行しない状況としては、主位側プロセッサがコンテキストスイッチを行おうとしているスレッド集合中のスレッドを自プロセッサが実行していない場合などがある。なお、劣位待機手段２０２３の実行中に、自プロセッサに対してコンテキスト退避要求にかかるプロセッサ間割り込みが発行された場合は、後述するように例外管理装置２０１から劣位待機時プロセッサ間割り込み処理手段２０３が起動される。
【００６１】
○カーネルスケジューラ手段２０６
カーネルスケジューラ手段２０６は、起動するスレッド集合を選択しコンテキストとして読み込む部分であり、ディスパッチキュー操作手段２０６２と、従位側プロセッサ起動手段２０６３と、コンテキスト復帰手段２０６４と、従位側プロセッサ起動完了待機手段２０６５とを有する。
【００６２】
ディスパッチキュー操作手段２０６２は、ディスパッチキュー３３に実行可能なスレッド集合を登録し、また、ディスパッチキュー３３から優先順位に応じて次に起動するスレッド集合を取得する部分である。
【００６３】
従位側プロセッサ起動手段２０６３は、ディスパッチキュー操作手段２０６２で次に起動すべきとされたスレッド集合に含まれるスレッドのうち、従位側プロセッサで実行するスレッドについて、そのスレッドのコンテキストが格納されているコンテキスト退避領域３２の場所のアドレスを退避先アドレス指定変数３６に設定した後に、例外管理装置２０１の例外転送装置２０１８を操作して、プロセッサ間割り込み通知装置２９経由で、従位側プロセッサに対してコンテキストの読み込みを要求するプロセッサ間割り込みを通知する部分である。指定するアドレスは、図２に示したコンテキスト退避領域３２中のコンテキスト領域３２１が次に起動すべきスレッド集合に対応するとすれば、従位側コンテキスト退避領域３２１２である。プロセッサ間割り込みを通知するプロセッサは、スレッド集合を自プロセッサと共に並行して実行させるプロセッサである。通知先のプロセッサが複数存在する場合、つまり、３つ以上のスレッドを含むスレッド集合の場合、コンテキストの読み込み先アドレスは個別に通知する。
【００６４】
コンテキスト復帰手段２０６４は、ディスパッチキュー操作手段２０６２が選択した次に起動するスレッド集合中の自プロセッサで実行するスレッドに関するコンテキストを、コンテキスト退避領域３２から読み込むことでスレッド起動の準備を行う部分である。つまり、コンテキスト退避領域３２中のコンテキスト領域３２１が次に起動すべきスレッド集合に対応するとすれば、主位側コンテキスト退避領域３２１１からコンテキストを読み込む。
【００６５】
従位側プロセッサ起動完了待機手段２０６５は、従位側プロセッサ起動手段２０６３によってコンテキストの読み込みを要求した従位側プロセッサの全てが、その処理を完了するまで待機し、しかる後に、カーネルスケジューラ手段２０６を終え、スレッドの実行を開始する部分である。後述するように、従位側プロセッサはコンテキストの読み込みを完了すると、完了同期変数３５の自プロセッサに対応するビットを操作するので、従位側コンテキスト起動完了待機手段２０６５は完了同期変数３５の該当ビットの変化を監視することで、従位側プロセッサの全てがコンテキストの読み込みを完了したかどうか判定することができる。なお、後述する従位側プロセッサ起動完了通知手段の処理に備えて、従位側プロセッサ起動完了待機手段２０６５は、完了同期変数３５の自プロセッサに対応するビットをコンテキストの復帰が完了した値に設定しておく。なお、完了同期変数３５は複数のプロセッサでスレッド集合中のスレッドが同時に実行を開始した時点で、従位側プロセッサ起動完了待機手段２０６５によって初期化される。
【００６６】
○劣位待機時プロセッサ間割り込み処理手段２０３
劣位待機時プロセッサ間割り込み処理手段２０３は、劣位となったプロセッサが劣位待機手段２０２３の実行中に、プロセッサ間割り込み通知装置２９経由でコンテキスト退避要求にかかるプロセッサ間割り込みが到着した場合に、例外管理装置２０１が呼び出す手段であり、例外状態巻戻し手段２０３１を有する。
【００６７】
例外状態巻戻し手段２０３１は、劣位待機の際に処理をしていた例外処理手段２０２の原因となった例外による状態を、一度例外管理装置２０１に受理される前、すなわち例外発生前の状態に戻す手段である。例外状態巻戻し手段２０３１は、例外処理を仕掛かり中であったプロセッサのレジスタなどのプロセッサの構成要素、および例外管理装置２０１の状態を操作することで、それらを例外発生前の状態に戻す。例外状態巻戻し手段２０３１の次には、プロセッサ間割り込み処理手段２０４が実行される。
【００６８】
○プロセッサ間割り込み処理手段２０４
プロセッサ間割り込み処理手段２０４は、例外処理手段２０２等のカーネル処理以外のユーザレベルの処理を行っている場合に、プロセッサ間割り込み通知装置２９経由で主位側プロセッサからコンテキスト退避要求にかかるプロセッサ間割り込みが到着した場合に、例外管理装置２０１から呼び出される。また、ユーザレベルの処理でなくカーネルレベルの例外処理中に、プロセッサ間割り込み通知装置２９経由でコンテキスト退避要求にかかるプロセッサ間割り込みが到着した場合には、前述したように、劣位待機時プロセッサ間割り込み処理手段２０３による処理を完了した後に、起動される。
【００６９】
プロセッサ間割り込み処理手段２０４は、主位側プロセッサからの要求に従って、自プロセッサにおけるコンテキストの退避を行い、その完了を主位側プロセッサに通知する部分であり、従位側コンテキスト退避手段２０４１と従位側コンテキスト退避完了通知手段２０４２とを有する。
【００７０】
従位側コンテキスト退避手段２０４１は、自プロセッサの実行状態（コンテキスト）をコンテキスト退避領域３２に退避する部分である。従位側コンテキスト退避手段２０４１は、退避先アドレス指定変数３６を参照して、コンテキスト退避領域３２の中で、自プロセッサがコンテキストを退避すべき領域を取得する。
【００７１】
従位側コンテキスト退避完了通知手段２０４２は、コンテキストの退避が完了したことを同期変数３４を用いて主位側プロセッサに通知する部分である。
【００７２】
○従位側プロセッサ起動処理手段２０５
従位側プロセッサ起動処理手段２０５は、従位側コンテキスト退避完了通知手段２０４２によりコンテキストの退避完了を同期変数３４を用いて主位側プロセッサに通知した後、例外管理装置２０１およびプロセッサ間割り込み通知装置２９経由で、主位側プロセッサからコンテキストの読み込み要求にかかるプロセッサ間割り込みを受けたとき、例外管理装置２０１によって起動される。
【００７３】
従位側プロセッサ起動処理手段２０５は、自プロセッサにおけるコンテキストの読み込みを行い、その完了を主位側プロセッサを含めスレッド集合を同時に実行する全てのプロセッサに通知し、スレッド集合の全スレッドにかかるコンテキストの読み込みが各プロセッサで完了したことを検出した時点で、前記読み込んだコンテキストでスレッドの実行を開始する部分であり、従位側コンテキスト復帰手段２０５１と従位側プロセッサ起動完了通知手段２０５２とを有する。
【００７４】
従位側コンテキスト復帰手段２０５１は、退避先アドレス指定変数３６の自プロセッサに対応するビット列から復帰対象となるコンテキストの読み込み先アドレスを取得し、コンテキスト退避領域３２における該当箇所からコンテキストを読み込んで自プロセッサの実行状態の復帰を行う。
【００７５】
従位側プロセッサ起動完了通知手段２０５２は、従位側コンテキスト復帰手段２０５１の処理が完了した時点で、完了同期変数３５の自プロセッサに対応するビットを復帰完了を示す値に設定することにより、スレッド集合を同時に実行する全てのプロセッサに自プロセッサのコンテキスト復帰の完了を通知する。そして、従位側プロセッサ起動完了通知手段２０５２は、完了同期変数３５を監視し、スレッド集合を同時に実行する全てのプロセッサがコンテキストの復帰を完了したことを確認した時点で、例外管理装置２０１を制御して例外状態を解除し、読み込んだコンテキストでスレッドの実行を開始する。
【００７６】
なお、図１においてＫは、ディスク，半導体メモリ，その他の機械読み取り可能な記録媒体であり、制御プログラムが記録されている。記録媒体Ｋに記録された制御プログラムは、第１のプロセッサ２１〜第ｎのプロセッサ２ｎに読み取られ、各プロセッサ上に、例外処理手段２０２、劣位待機時プロセッサ間割り込み処理手段２０３、プロセッサ間割り込み処理手段２０４、カーネルスケジューラ手段２０６、および従位側プロセッサ起動処理手段２０５を実現すると共に、主記憶３上に、排他制御変数３１、コンテキスト退避領域３２、ディスパッチキュー３３、同期変数３４、完了同期変数３５、退避先アドレス指定変数３６を初期生成する。
【００７７】
図５および図６は、本実施の形態の動作例を示す流れ図であり、以下、各図を参照して本実施の形態の動作について詳細に説明する。
【００７８】
ここで説明の便宜上、当該マルチプロセッサシステムで生成，実行される全てのスレッド集合は２つのスレッドを含むものとする。１つのスレッド集合に含まれる２つのスレッドの各々は、一般的には或るプログラムの別々のルーチンに対応する。なお、本来１つのスレッドで済む場合でも、本実施の形態ではスレッド数が２のスレッド集合を生成する。その方法としては、一方のスレッドのみを特定のルーチンに対応させ、他方のスレッドは実質的な処理を行わないダミー的なスレッドとする方法などがある。
【００７９】
また、第１〜第ｎのプロセッサ２１〜２ｎは、２台ずつがグループとなり、各グループでスレッド集合を同時に実行する。どのプロセッサをどのグループに含めるかは、例えばマルチプロセッサシステムの起動時にパラメータで設定し、各プロセッサに通知する。勿論、稼働中に全てのプロセッサを一時的に停止させ、再グループ化するようにしても良い。以下では、第１のプロセッサ２１と第２のプロセッサ２２とが同じグループに属するものとして説明する。
【００８０】
今、入力装置１から入力された外部割り込み要求信号１２が要求を行う先を例えば第１のプロセッサ２１とすると、外部割り込み要求信号１２は第１のプロセッサ２１の例外管理装置２０１に受信され、例外認識装置２０１１で認識される。その後、優先順位判定装置２０１２は、外部割り込み要求信号１２の優先順位と許可例外優先順位保持装置２０１４が保持する優先順位を比較し、さらに例外禁止状態保持装置２０１６で例外が禁止されていないかどうかを調査した上で、場合によっては非優先例外保持装置２０１３で保留した上で、起動対象判定装置２０１５に通知する。
【００８１】
起動対象判定装置２０１５は、例外の要求原因が外部割り込み要求信号１２であることから事前に登録された例外処理手段２０２を呼び出す（図５のステップＡ２０２０１）。なお、起動対象判定装置２０１５は、この時点で例外禁止状態保持装置２０１６の設定を変更してプロセッサ間割り込み禁止状態にする等の処理を行っている。
【００８２】
例外処理手段２０２は、排他調停手段２０２１により排他制御変数３１が他のプロセッサにより書き換えられているか確認し（ステップＡ２０２１１）、置き換えられていなければ排他制御変数３１を置き換えて（ステップＡ２０２１２）、さらにその置き換え処理が他のプロセッサと競合していなかったか確認を行う（ステップＡ２０２１３）。
【００８３】
ここまでの処理で、排他制御変数３１の置き換えが成功した場合、第１のプロセッサ２１は主位側プロセッサとしての動作を行うべくステップＡ２０２４以降の処理へと進み、置き換えに失敗した場合は、他の何れかのプロセッサが主位側プロセッサとして動作を開始しているため、主位側プロセッサになるのを保留してステップＡ２０２２１以降の処理へと進む。ここでは、置き換えに成功したために第１のプロセッサ２１が主位側プロセッサになったものとする。
【００８４】
第１のプロセッサ２１は、次にコンテキスト退避手段２０２４を実行し、自プロセッサの実行状態すなわちコンテキストをコンテキスト退避領域３２に退避する（ステップＡ２０２４）。即ち、第１のプロセッサ２１が図２のコンテキスト領域３２１に対応するスレッド集合中のスレッドを実行中であった場合、当該スレッドのコンテキストを主位側コンテキスト退避領域３２１１に退避する。さらに、プロセッサ間割り込み通知手段２０２５において、退避先アドレス指定変数３６を設定することで、スレッドの切り替えを同時に行う第２のプロセッサ２２がコンテキストを退避する領域を指定し（ステップＡ２０２５１）、例外管理装置２０１を経由してプロセッサ間割り込み通知装置２９に依頼を行い、第２のプロセッサ２２に対してコンテキスト退避要求にかかるプロセッサ間割り込みを通知する（ステップＡ２０２５２）。
【００８５】
次に第１のプロセッサ２１は、第２のプロセッサ２２がコンテキスト退避処理を完了するのを待つため、同期変数３４を参照し（ステップＡ２０２９１）、同期変数３４の該当ビットがコンテキスト退避処理の完了を示しているかチェックし（ステップＡ２０２９２）、完了していることを確認した時点で、カーネルスケジューラ手段２０６へ処理を進める。
【００８６】
カーネルスケジューラ手段２０６では、まずディスパッチキュー操作手段２０６２が実行され、例外処理手段２０２で新規に実行可能なスレッド集合が生じたか否かを判断し（ステップＡ２０６２１）、生じていればディスパッチキュー３３に登録する（  ステップＡ２０６２２）  。引き続いてディスパッチキュー３３から優先度が最高位にあるスレッド集合を検索し（ステップＡ２０６２３）、例外発生前に実行中であったスレッド集合の優先度と比較する（ステップＡ２０６２４）。ディスパッチキュー３３に登録されている実行可能なスレッド集合の方が優先度が高い場合には、そのディスパッチキュー３３に登録されているスレッド集合を次に実行するスレッド集合として選択し（ステップＡ２０６２５）、そうでない場合には、実行中であったスレッド集合を次に実行するスレッド集合として選択する（ステップＡ２０６２６）。
【００８７】
次に実行するスレッド集合を決定したならば、そのスレッド集合中の従位側プロセッサに実行させるスレッドの実行状態すなわちコンテキストを読み込んでくるコンテキスト退避領域３２中での位置を、退避先アドレス指定変数３６に設定し（ステップＡ２０６３１）、第２のプロセッサ２２に対して、例外管理装置２０１を経由してプロセッサ間割り込み通知装置２９によりコンテキスト読み込み要求にかかるプロセッサ間割り込みを通知する（ステップＡ２０６３２）。
【００８８】
第１のプロセッサ２１は、その後、自プロセッサのコンテキストもコンテキスト退避領域３３から読み込んだ後（ステップＡ２０６４）、第２のプロセッサ２２がコンテキストの読み込みが完了するのを完了同期変数３６を用いて監視する（ステップＡ２０６５１）。
【００８９】
第１のプロセッサ２１は、第２のプロセッサ２２でのコンテキスト読み込み完了を確認したならば、例外管理装置２０１を操作して例外状態を解除し、読み込んだコンテキストで実行を開始することでカーネルスケジューラの起動およびカーネルスケジューラ手段２０６の実行を完了する（ステップＡ２０６５２、Ａ２０６９）。
【００９０】
次に、第２のプロセッサ２２を例に、従位側プロセッサの動作を説明する。
【００９１】
第２のプロセッサ２２の例外管理装置２０１がプロセッサ間割り込み通知装置２９から第１のプロセッサ２１が発行したコンテキスト退避要求にかかるプロセッサ間割り込みを受信した時点では、第２のプロセッサ２２は一般のユーザレベルのスレッドを実行中であるか、または、排他調停手段２０２１により排他条件を取得できなかった劣位のプロセッサとして動作中である。何故ならば、プロセッサ間割り込みを発行した第１のプロセッサ２１は、排他調停手段２０２１で排他条件を取得しているからこそ、プロセッサ間割り込みが発行可能なのであり、第１のプロセッサ２１以外の、第２のプロセッサ２２を含む全てのプロセッサは、例外処理手段２０２を実行している場合、排他調停手段２０２１では必ず劣位に位置しているためである。
【００９２】
第２のプロセッサ２２がユーザレベルのスレッドを実行中であった場合、例外管理装置２０１の例外認識装置２０１１、優先順位判定装置２０１２は、受信したコンテキスト退避要求にかかるプロセッサ間割り込みにかかる例外を処理すべく起動対象判定装置２０１５に伝え、起動対象判定装置２０１５は、プロセッサ間割り込みの処理手段としてプロセッサ間割り込み処理手段２０４を選択する。これにより、第２のプロセッサ２２はプロセッサ間割り込み処理手段２０４の実行を開始する（図６のステップＡ２０４０１）。プロセッサ間割り込み処理手段２０４の実行を開始した後の動作は後述する。
【００９３】
他方、第２のプロセッサ２２が排他調停手段２０２１により排他条件を取得できなかった劣位のプロセッサであった場合、第２のプロセッサ２２がプロセッサ間例外許可手段２０２２の処理を完了する以前に第１のプロセッサ２１からのコンテキスト退避要求にかかるプロセッサ間割り込みを受信したときは、当該プロセッサ間割り込みは例外管理装置２０１において保留される。何故ならば、第２のプロセッサ２２が何らかの例外要因により例外処理手段２０２を起動する際、例外管理装置２０１の起動対象判定装置２０１５がプロセッサ間割り込みを留保するよう設定するためである。
【００９４】
しかし、この留保は、第２のプロセッサ２２がプロセッサ間例外許可手段２０２２の処理を完了した時点で解除され、留保された前記プロセッサ間割り込みが処理されることになる。何故なら、第２のプロセッサ２２は、プロセッサ間例外許可手段２０２２において、プロセッサ間割り込みにより従位のプロセッサとして動作する場合に備えて処理中の例外を一度例外管理装置２０１に受理される前の発生前の状態に戻せるようにプロセッサ内部のレジスタ値等に設定を行ってから（ステップＡ２０２２１）、例外禁止状態保持装置２０１６に設定を行うことでプロセッサ間割り込みを許可するからである（ステップＡ２０２２２）。
【００９５】
また、第１のプロセッサ２１からのコンテキスト退避要求にかかるプロセッサ間割り込みが、第２のプロセッサ２２がプロセッサ間例外許可手段２０２２の処理を完了した時点以後、つまり第２のプロセッサ２２が劣位待機手段２０２３を実行中に受信された場合には、既にプロセッサ間割り込みの禁止が解かれているので、当該プロセッサ間割り込みが保留されることなく直ちに処理される。
【００９６】
以上のようにして、第２のプロセッサ２２が劣位のプロセッサとして動作している最中に、第１のプロセッサ２１からのコンテキスト退避要求にかかるプロセッサ間割り込みにかかる例外の処理が開始されると、例外管理装置２０１の起動対象判定装置２０１５により劣位待機時プロセッサ間割り込み処理手段２０３が起動される（図６のステップＡ２０３０１）。
【００９７】
劣位待機時プロセッサ間割り込み処理手段２０３は、例外状態巻戻し手段２０３１により劣位待機していた際の例外要因を取得してから（ステップＡ２０３１１）、一度例外を受理し例外処理手段２０２を実行していたことを示すプロセッサのレジスタ値等を破棄し（ステップＡ２０３１２）、待機していた際の例外がスレッドの実行を再開した時に再度発生するよう例外管理装置２０１および第２のプロセッサのレジスタ値等を操作し（ステップＡ２０３１３）、プロセッサ間割り込み処理手段２０４に実行を移す（ステップＡ２０３１４）。
【００９８】
さて、プロセッサ間割り込み処理手段２０４では、従位側コンテキスト退避手段２０４１において、退避先アドレス指定変数３６を参照して自プロセッサのコンテキストの退避先を取得し（ステップＡ２０４１１）、自プロセッサの実行状態すなわちコンテキストを従位側コンテキストとして退避する（ステップＡ２０４１２）。
【００９９】
退避が完了したならば、従位側コンテキスト退避完了通知手段２０４２により、同期変数３４の自プロセッサに対応するビットの値を書き換えてプロセッサ間割り込みの通知元である第１のプロセッサ２１に対してコンテキスト退避の完了を通知する（ステップＡ２０４２１）。
【０１００】
その後、第１のプロセッサ２１からプロセッサ間割り込み通知装置２９経由でコンテキスト復帰要求にかかるプロセッサ間割り込みが第２のプロセッサ２２の例外管理装置２０１で受信されると、起動対象判定装置２０１５により、従位側プロセッサ起動処理手段２０５が起動される。
【０１０１】
従位側プロセッサ起動処理手段２０５では、従位側コンテキスト復帰手段２０５１により、退避先アドレス指定変数３６から復帰対象となるコンテキストの読み込み元を取得し（ステップＡ２０５１１）、自プロセッサの実行状態すなわち従位側コンテキストの復帰を行う（ステップＡ２０５１２）。その後、従位側プロセッサ起動完了通知手段２０５２により、完了同期変数３５の自プロセッサに対応するビットの値を書き換えて第１のプロセッサ２１に対してコンテキスト復帰の完了を通知する（ステップＡ２０５２１）。
【０１０２】
さらに、第２のプロセッサは完了同期変数３５を監視し、スレッド集合を同時に実行する全プロセッサ（今の場合は自プロセッサ以外の第１のプロセッサ２１だけ）のコンテキスト復帰が完了したことを確認した時点で（ステップＡ２０５２２）、例外管理装置２０１を制御して例外状態を解除し、読み込んだコンテキストで実行を開始することでカーネルスケジューラの起動および従位側プロセッサ起動処理手段２０５の実行を完了する（ステップＡ２０５２３、Ａ２０５９）。
【０１０３】
以上のようにして、第１のプロセッサ２１の主導の下で、第１のプロセッサ２１および第２のプロセッサ２２で実行されていたスレッド集合のコンテキストスイッチが同期して実行され、第１のプロセッサ２１および第２のプロセッサ２２に復帰したスレッド集合の各スレッドが同時に実行を開始する。
【０１０４】
なお、主位側プロセッサとなった第１のプロセッサ２１からプロセッサ間割り込みを受けない第３ないし第ｎのプロセッサでは、ユーザレベルのスレッドを実行中の場合は、支障なくスレッドの実行を継続することができ、また、別のスレッド集合のコンテキストスイッチを行うべく主位側プロセッサになろうとして劣位のプロセッサとなった場合は、劣位待機手段２０２３において自プロセッサ宛のプロセッサ間割り込みを受信することなく排他制御変数３１が第１のプロセッサ２１によって書き換えられたことを検出して排他調停手段２０２１に戻ることになる。
【０１０５】
以上説明したように本実施の形態では、複数のプロセッサにおいて例外処理を行っている場合でも排他調停手段２０２１によりカーネルスケジューラ手段２０６を実行するプロセッサを一つに絞り込め、またカーネルスケジューラ実行権限の取得に失敗したプロセッサを、カーネルスケジューラ実行権限を取得したプロセッサからプロセッサ間割り込みを受理できるよう準備をして待機させることができるため、複数のプロセッサで同時に別個な例外処理を実行していても、各プロセッサでスレッドの切り替え処理を完全に同時に行うことが可能である。また、劣位のプロセッサは、プロセッサ間割り込みを受理したならば待機中であった例外の発生条件を例外受理前の状態に戻すことで、スレッド切り替え後に例外が再発生するよう設定するため、スレッド切り替え後に例外を処理することが可能となる。このようにスレッド切り替え時点で既に同期がとれているので、結果的に、低オーバヘッドに複数のスレッドを同時に起動することを保障するカーネルスケジューラを実現可能である。
【０１０６】
次に、具体例をあげて本実施の形態の動作を説明する。
【０１０７】
図７に示すように、第１のプロセッサ２１および第２のプロセッサ２２が存在し、第１のプロセッサ２１および第２のプロセッサ２２が、第１のスレッド集合を実行している場合に、外部割り込み要求信号１２が第１のプロセッサ２１に受理され、例外管理装置２０１によって例外処理手段２０２が起動され、第１のプロセッサ２１が主位側プロセッサになったとする。
【０１０８】
第１のプロセッサ２１のコンテキスト退避手段２０２４は、コンテキスト退避領域３２の中の第１のスレッド集合のコンテキスト３２１に位置する主位側コンテキスト退避領域３２１１に、自プロセッサの実行状態を退避する。第１のプロセッサ２１のプロセッサ間割り込み通知手段２０２５は、退避先アドレス指定変数３６に第１のスレッド集合のコンテキスト３２１における従位側コンテキスト退避領域３２１２を指定する値を書き込み、第２のプロセッサ２２にコンテキスト退避要求にかかるプロセッサ間割り込みを発行する。
【０１０９】
第２のプロセッサ２２の例外管理装置２０１では、従位側コンテキスト退避手段２０４１が退避先アドレス指定変数３６を参照して取得した、第１のスレッド集合のコンテキスト３２１における従位側コンテキスト退避領域３２１２にコンテキストを退避する。
【０１１０】
第１のプロセッサ２１のディスパッチキュー操作手段２０６２は、ディスパッチキュー３３に収められた各スレッド集合の優先順位を参照し、図７の例では、第２のスレッド集合を次に実行するスレッド集合として選択する。
【０１１１】
第２のスレッド集合を次スレッド集合として選択した第１のプロセッサ２１は、従位側プロセッサ起動手段２０６３により、退避先アドレス指定変数３６を設定し、第２のスレッド集合のコンテキスト３２２中の従位側コンテキスト退避領域３２２２を従位側プロセッサに対して指示し、コンテキスト読み込み要求にかかるプロセッサ間割り込みを第２のプロセッサ２２に発行する。
【０１１２】
第２のプロセッサ２２は、従位側コンテキスト復帰手段２０５１により退避先アドレス指定変数３６を参照し、第２のスレッド集合のコンテキスト３２２に位置する従位側コンテキスト退避領域３２２２をコンテキストの読み込み元としてコンテキストの復帰処理を行う。
【０１１３】
その後、第１のプロセッサ２１は第２のプロセッサ２２のコンテキスト読み込み完了を確認し、また、第２のプロセッサ２２は第１のプロセッサ２１のコンテキスト読み込み完了を確認し、同時に第２のスレッド集合の実行を開始する。
【０１１４】
図８は各グループ単位で同時にスレッド集合を実行している様子を示すタイミングチャートである。グループＧ１に属する第１及び第２のプロセッサ２１，２２でスレッド集合Ａ中のスレッドＡ１，Ａ２が実行されており、グループＧ２に属する第３及び第４のプロセッサ２３，２４でスレッド集合Ｂ中のスレッドＢ１，Ｂ２が実行されている状況において、第１のプロセッサ２１に外部割り込み要求信号Ｘ１が入力されると、第１のプロセッサ２１が主位側プロセッサとなり、第２のプロセッサ２２と協調してコンテキストスイッチを行い、第１及び第２のプロセッサ２１，２２でスレッド集合Ｃ中のスレッドＣ１，Ｃ２が同時に実行を開始している。
【０１１５】
また、図８では、その後に第１のプロセッサ２１に外部割り込み要求信号Ｘ２が、第２のプロセッサ２２に外部割り込み要求信号Ｘ３がほぼ同時期に入力された状況が示されている。この場合、排他制御変数３１による排他調停でカーネルスケジューラ権限を早く取得した方が先に主位側プロセッサとなり、コンテキストスイッチを主導する。図８では、第２のプロセッサ２２が先に主位側プロセッサとなったため、第２のプロセッサ２２の主導の下でコンテキストスイッチが行われ、新たなスレッド集合Ｄ中のスレッドＤ１，Ｄ２が第１及び第２のプロセッサ２１，２２で同時に実行を開始している。そして、第１のプロセッサ２１では、スレッド切り替え後に外部割り込み要求信号Ｘ２にかかる例外が再度発生し、今度は第１のプロセッサ２１が主位側プロセッサとなってコンテキストスイッチが制御され、スレッド集合Ｄと新たに発生したスレッド集合Ｅとの優先度の関係で、スレッド集合Ｄに代わりスレッド集合Ｅ中のスレッドＥ１，Ｅ２が第１及び第２のプロセッサ２１，２２で同時に実行が開始されている。
【０１１６】
さらに、第３のプロセッサ２３は、自プロセッサに発生した外部割り込み要求信号Ｘ４により例外処理手段２０２を実行して主位側プロセッサになろうとしたタイミングで、第１のプロセッサ２１が既に主位側プロセッサになっていたため、劣位待機状態となり、自プロセッサ２３に対するプロセッサ間割り込みが発行されることなく排他制御変数３１による排他が解除されることにより、主位側プロセッサとなって、第４のプロセッサ２４と協調し、スレッド集合Ｂをスレッド集合Ｆにコンテキストスイッチしている。
【０１１７】
以上本発明の実施の形態について説明したが、本発明は以上の実施の形態にのみ限定されず、その他各種の付加変更が可能である。以下、幾つかの変形例を列挙する。
【０１１８】
前記実施の形態では、ディスパッチキュー３３にスレッド集合単位での優先度を付与していたが、明示的な優先度ではなく、キュー上の配置等によって暗黙的に優先度を保持する方法とする。
前記実施の形態では、例外処理手段２０２において排他調停手段２０２１の完了後コンテキスト退避手段２０２４に処理を進めている。これに加え、排他調停手段２０２１の完了後（ステップＡ２０２１３）、例外管理装置２０１が保持する例外要因等を調べ、例外の内容によっては即座に例外要因に応じた処理を完了させ、排他制御変数３１を初期化し、直接ステップＡ２０６５２へと進み、例外状態を解除し元の実行状態（コンテキスト）のまま実行を再開する処理を追加する。この場合、劣位待機手段２０２３において、主位側プロセッサが自プロセッサに対してコンテキスト退避要求にかかるプロセッサ間割り込みを発行しない状況として、主位側プロセッサがカーネルスケジューラ手順２０６を起動せずに即座に例外処理手段２０２を完了させる場合が新たに発生するが、劣位待機手段２０２３からの復帰手順などに影響は無い。
前記実施の形態では、主位側プロセッサの従位側プロセッサ起動手段２０６３からコンテキスト読み込み要求にかかるプロセッサ間割り込みを従位側プロセッサに発行することで、従位側プロセッサにおける従位側プロセッサ起動処理手段２０５を起動したが、同期変数３４を利用して起動する。つまり、従位側プロセッサにおける従位側コンテキスト退避完了通知手段２０４２は、同期変数３４の自プロセッサに対応するビットをコンテキスト退避完了を示す値に変更した後、そのビットの値の監視を続け、値が変化したら、コンテキスト読み込み要求があったものとして従位側プロセッサ起動処理手段２０５を起動する。従って、主位側プロセッサでは、従位側プロセッサ起動手段２０６３においてコンテキストの復帰を要求する先のプロセッサに対応する同期変数３４のビットの値を変化させることで、コンテキスト読み込み要求を行うことになる。
【０１１９】
前記実施の形態では、コンテキストの退避を完了したことを同期変数３４を使って従位側プロセッサから主位側プロセッサに通知したが、従位側プロセッサの従位側コンテキスト退避完了通知手段２０４２から例外管理装置２０１およびプロセッサ間割り込み通知装置２９経由で、主位側プロセッサにプロセッサ間割り込みを発行して、コンテキストの退避が完了したことを通知する。
【０１２０】
前記実施の形態では、従位側プロセッサ起動完了通知手段２０５２において完了同期変数３５を使ってコンテキストの読み込み完了を他プロセッサに通知したが、プロセッサ間割り込み通知装置２９を用いて同期処理を行う構成とする。その場合、コンテキスト読み込みを要求した主位側プロセッサも含めた、スレッド集合を起動する全てのプロセッサが、プロセッサ間割り込み通知装置２９を用いて同期処理を行うことも可能である。
前記実施の形態では、排他調停手段２０２１において排他制御変数３１を明示的に操作し、プロセッサ間割り込み通知手段２０２５において例外転送装置２０１８を明示的に操作し、従位側コンテキスト退避完了通知手段２０４２および従位側コンテキスト退避完了待機手段２０２９で同期変数３４を明示的に操作し、さらに、従位側プロセッサ起動完了通知手段２０５２および従位側プロセッサ起動完了待機手段２０６５で完了同期変数３５を明示的に操作している。であるが、全てあるいはいずれかの、明示的な変数操作や装置操作の代わりに、プロセッサの同期用命令によって装置を各手段からは暗黙の内にプロセッサが操作をして、同期を行う構成とする。
【０１２１】
前記実施の形態では、各スレッド集合に含まれるスレッドの数を２としたが、一般的には２以上の任意の整数値ｎにすることができる。その場合、ｎ台ずつのプロセッサを同一グループとすれば良い。
【０１２２】
【発明の効果】
以上説明したように本発明によれば、以下のような効果が得られる。
【０１２３】
一時には単一のプロセッサのみがカーネルスケジューラ実行権限を取得可能となるよう排他調停を行い、カーネルスケジューラ実行権限を取得したプロセッサが、次に同時に実行すべき複数のスレッドを選択して自プロセッサを含む複数のプロセッサで同時に実行させる制御を行うため、カーネルスケジューラの手順が完了した時点で、複数のプロセッサで同時に所定のスレッドの実行を開始させることができる。
【０１２４】
複数のスレッドを１つの単位として管理でき、同じ単位のスレッドは複数のプロセッサで同時に実行を開始させることができる。その理由は、同時に実行すべき複数のスレッドを１つのスレッド集合とし、スレッド集合中の各スレッドのコンテキストを主記憶上のコンテキスト退避領域にスレッド集合に１対１に対応して設けたコンテキスト領域に格納し、スレッド集合単位でのコンテキストスイッチを行うからである。
【０１２５】
複数のプロセッサで同時に別個な例外処理を実行していても、各プロセッサでスレッドの切り替え処理を完全に同時に行うことができ、また、例外処理もその後に実行することができる。その理由は、カーネルスケジューラ実行権限の取得に失敗したプロセッサは、カーネルスケジューラ実行権限を取得したプロセッサから、プロセッサ間割り込みを受理できるよう準備をして待機し、プロセッサ間割り込みを受理したならば待機中であった例外の発生条件を例外受理前の状態に戻すことで、スレッド切り替え後に例外が再発生するよう設定するからである。
【図面の簡単な説明】
【図１】本発明を適用したマルチプロセッサシステムの一実施の形態のブロック図である。
【図２】コンテキスト退避領域の構成例を示す図である。
【図３】ディスパッチキューの内容例を示す図である。
【図４】例外管理装置の構成例を示すブロック図である。
【図５】本発明の実施の形態の動作例を示す流れ図である。
【図６】本発明の実施の形態の動作例を示す流れ図である。
【図７】本発明の実施の形態の動作の具体例を示す図である。
【図８】本発明の実施の形態においてプロセッサの各グループ単位で同時にスレッド集合を実行している様子を示すタイミングチャートである。
【図９】従来の技術の一構成例を示すブロック図である。
【図１０】従来の技術の動作を説明するための流れ図である。
【符号の説明】
１…入力装置
１１…第１の例外要因
１２…外部割り込み要求信号
２１〜２ｎ…第１〜第ｎのプロセッサ
２０１…例外管理装置
２０１１…例外認識装置
２０１２…優先順位判定装置
２０１３…非優先側例外保持装置
２０１４…許可例外優先順位保持装置
２０１５…起動対象判定装置
２０１６…例外禁止状態保持装置
２０２…例外処理手段
２０２１…排他調停手段
２０２２…プロセッサ間例外許可手段
２０２３…劣位待機手段
２０２４…コンテキスト退避手段
２０２５…プロセッサ間割り込み通知手段
２０１９…従位側コンテキスト退避完了待機手段
２０３…劣位待機時プロセッサ間割り込み処理手段
２０３１…例外状態巻戻し手段
２０４…プロセッサ間割り込み処理手段
２０４１…従位側コンテキスト退避手段
２０４２…従位側コンテキスト退避完了通知手段
２０５…従位側プロセッサ起動処理手段
２０５１…従位側コンテキスト復帰手段
２０５２…従位側プロセッサ起動完了通知手段
２０６…カーネルスケジューラ手段
２０６２…ディスパッチキュー操作手段
２０６３…従位側プロセッサ起動手段
２０６４…コンテキスト復帰手段
２０６５…従位側プロセッサ起動完了待機手段
２９…プロセッサ間割り込み通知装置
３  …主記憶
３１…排他制御変数
３２…コンテキスト退避領域
３２１…第１のスレッド集合のコンテキスト領域
３２１１…主位側コンテキスト退避領域
３２１２…従位側コンテキスト退避領域
３２２…第２のスレッド集合のコンテキスト領域
３２２１…主位側コンテキスト退避領域
３２２２…従位側コンテキスト退避領域
３３…ディスパッチキュー
３３１…第１のスレッド集合を示す構造体
３３２…第２のスレッド集合を示す構造体
３４…同期変数
３５…完了同期変数
３６…退避先アドレス指定変数
４…出力装置
Ｋ…記憶媒体
【図１】
0003557947.tif 000002
【図２】
0003557947.tif 000003
【図３】
0003557947.tif 000004
【図４】
0003557947.tif 000005
【図５】
0003557947.tif 000006
【図６】
0003557947.tif 000007
【図７】
0003557947.tif 000008
【図８】
0003557947.tif 000009
【図９】
0003557947.tif 000010
【図１０】
0003557947.tif 000011