(57)【要約】【課題】ハードウェアの追加なしに、フェールソフト動作を保証する。【解決手段】プロセッサ１１、１２に対して現用系と予備系の割り付けを行うＯＳ１３１を有するマルチプロセッサ制御システムであって、ＯＳ１３１は、システム起動時に、プロセッサ１１、１２のうち、プロセッサ実行権獲得処理プログラム１３２、１３３を最初に実行した方に、アプリケーションの実行権を獲得させ、実行権を獲得したプロセッサを現用系とし、実行権の獲得がなされなかった残りのプロセッサを予備系として割り付ける。アプリケーションの実行後に、現用系のプロセッサからアプリケーションの実行に伴う動作の異常が発生した旨の例外指示を受信すると、実行権を解放し、該解放した実行権を予備系のプロセッサに獲得させる。【選択図】図１
2008077388.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションを実行可能な複数のプロセッサと、
前記複数のプロセッサによって共通に使用されるメモリと、を有し、
前記メモリは、
前記複数のプロセッサのそれぞれによって個別に実行される複数のプロセッサ実行権獲得処理プログラムと、
前記複数のプロセッサに対して現用系と予備系の割り付けを行うオペレーティングシステムと、を有し、
前記オペレーティングシステムは、
システム起動時に、前記複数のプロセッサのうちの所定数のプロセッサに対して、プロセッサ実行権獲得処理プログラムを実行した順番に、前記アプリケーションの実行権を獲得させ、実行権を獲得した前記所定数のプロセッサを現用系とし、実行権の獲得がなされなかった残りのプロセッサを予備系として割り付けて、現用系のプロセッサに前記アプリケーションを実行させ、
前記アプリケーションの実行後に、前記現用系のプロセッサのいずれかから、前記アプリケーションの実行に伴う動作の異常が発生した旨の例外指示を受信すると、該例外指示を送出したプロセッサが獲得した実行権を解放し、該解放した実行権を、前記予備系のプロセッサに獲得させる、ことを特徴とする、マルチプロセッサ制御システム。
【請求項２】
前記オペレーティングシステムは、
前記アプリケーションの実行権を獲得するための実行権獲得関数と、
前記複数のプロセッサの数から１を減算した値が初期値としてセットされる実行権カウンタと、
前記実行権獲得関数による実行権の獲得処理の実行中はセマフォ獲得不可状態とされ、該獲得処理の実行中以外は、セマフォ獲得可状態とされる実行権カウンタセマフォと、を有し、
前記複数のプロセッサ実行権獲得処理プログラムのそれぞれは、前記実行権獲得関数を呼び出して前記実行権を獲得するための処理を実行し、
呼び出された前記実行権獲得関数は、前記実行権カウンタセマフォの状態が前記セマフォ獲得可状態で、かつ、前記実行権カウンタの値が０より大きな場合にのみ、実行権を獲得した旨を対応するプロセッサに送信して、前記実行権カウンタの値を１だけデクリメントする、請求項１に記載のマルチプロセッサ制御システム。
【請求項３】
前記オペレーティングシステムは、
獲得した実行権を解放するための実行権解放関数と、
前記複数のプロセッサのそれぞれによって個別に使用される複数の例外ハンドラと、をさらに有し、
前記複数の例外ハンドラのそれぞれは、対応するプロセッサから前記例外指示を受信すると、前記実行権解放関数を呼び出して、獲得した実行権を解放するための処理を実行し、
呼び出された前記実行権解放関数は、前記実行権カウンタセマフォの状態が前記セマフォ獲得可状態で、かつ、前記実行権カウンタの値が前記複数のプロセッサの数から２を減算した値以下の場合にのみ、獲得した前記実行権を解放した旨を対応するプロセッサに送信して、前記実行権カウンタの値を１だけインクリメントする、請求項２に記載のマルチプロセッサ制御システム。
【請求項４】
アプリケーションを実行可能な複数のプロセッサと、前記複数のプロセッサによって共通に使用されるメモリと、を有するシステムにおいて行われるマルチプロセッサ制御方法であって、
前記複数のプロセッサのそれぞれが個別にプロセッサ実行権獲得処理プログラムを実行するステップと、
オペレーティングシステムが、システム起動時に、前記複数のプロセッサのうちの所定数のプロセッサに対して、プロセッサ実行権獲得処理プログラムを実行した順番に、前記アプリケーションの実行権を獲得させ、実行権を獲得した前記所定数のプロセッサを現用系とし、実行権の獲得がなされなかった残りのプロセッサを予備系として割り付けて、現用系のプロセッサに前記アプリケーションを実行させるステップと、
前記アプリケーションの実行後に、前記オペレーティングシステムが、前記現用系のプロセッサのいずれかから、前記アプリケーションの実行に伴う動作の異常が発生した旨の例外指示を受信すると、該例外指示を送出したプロセッサが獲得した実行権を解放し、該解放した実行権を、前記予備系のプロセッサに獲得させるステップと、を含む、マルチプロセッサ制御方法。
【請求項５】
アプリケーションを実行可能な複数のプロセッサと、前記複数のプロセッサによって共通に使用されるメモリと、を有するコンピュータシステムにおいて用いられるプログラムであって、
システム起動時に、前記複数のプロセッサのそれぞれに、個別にプロセッサ実行権獲得処理を実行させ、
前記複数のプロセッサのうちの所定数のプロセッサに対して、プロセッサ実行権獲得処理を実行した順番に、前記アプリケーションの実行権を獲得させ、
実行権を獲得した前記所定数のプロセッサを現用系とし、実行権の獲得がなされなかった残りのプロセッサを予備系として割り付けて、現用系のプロセッサに前記アプリケーションを実行させ、
該アプリケーションの実行後に、前記現用系のプロセッサのいずれかから、前記アプリケーションの実行に伴う動作の異常が発生した旨の例外指示を受信すると、該例外指示を送出したプロセッサが獲得した実行権を解放し、該解放した実行権を、前記予備系のプロセッサに獲得させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサ環境における制御切り換えシステムに関する。
【背景技術】
【０００２】
シングルプロセッサによる制御環境下でファームウェアに基づく処理が実行されるシステムにおいて、原因不明のプログラム例外やＴＬＢ（Translation Look-aside buffer）例外などによる不具合が発生した場合には、プログラムが停止してしまう障害があった。システムの停止は、使用者に多大な迷惑をかけることになる。
【０００３】
プログラム例外やＴＬＢによるプログラム停止の障害に対する対策としては、例外ハンドラにプログラムの再起動やＣＰＵまたはシステムリセットの処理を埋め込み、システム全体を再初期化する方法がある。また、ハードウェアがプログラム停止信号をＣＰＵアラームとして検知し、上位の管理システムにアラーム通知する方法もある。しかし、これらの手法では、フェールセーフなシステム（障害が発生しても、処理機能の低下を最小限に抑え、全体としてシステムの安全性が保たれるような方式）は実現できるものの、フェールソフトなシステム（障害が発生して処理機能が低下しても基本的機能が継続して働く方式）を実現することはできない。
【０００４】
そこで、マルチプロセッサを備えた情報処理システムが提案されている（特許文献１参照）。この情報処理システムでは、少なくとも１つのプロセッサをシステム支援プロセッサＳＳＰとして動作させ、残りのプロセッサを命令プロセッサＩＰとして動作させる。ＳＳＰの障害発生時は、少なくとも１つのＩＰ上で動作しているＯＳに対して割り込みを発生させる。割り込みの発生によりＯＳが障害を検知し、ＩＰがＳＳＰの機能を引き継ぐ。
【特許文献１】特開平９−２５１４４３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に記載の情報処理システムでは、ＳＳＰやＩＰの役割定義をする必要があるため、そのまま、既存のマルチプロセッサシステムに適用することは困難である。また、ＳＳＰの障害発生時に、ＳＳＰの機能をＩＰに引き継がせるための切替手段（ハードウェア）を必要とする。このため、既存のマルチプロセッサシステムに適用するためには、切替手段（ハードウェア）を用意する必要があり、その分、コストが高くなる。
【０００６】
本発明の目的は、新たなハードウェアの追加なしに、プログラム例外やＴＬＢ例外などの障害発生時にもフェールソフト動作を保証することができるマルチプロセッサ制御システムを提供することにある。
【課題を解決するための手段】
【０００７】
上記目的を達成するため、本発明のマルチプロセッサ制御システムは、アプリケーションを実行可能な複数のプロセッサと、前記複数のプロセッサによって共通に使用されるメモリと、を有し、前記メモリは、前記複数のプロセッサのそれぞれによって個別に実行される複数のプロセッサ実行権獲得処理プログラムと、前記複数のプロセッサに対して現用系と予備系の割り付けを行うオペレーティングシステムと、を有し、前記オペレーティングシステムは、システム起動時に、前記複数のプロセッサのうちの所定数のプロセッサに対して、プロセッサ実行権獲得処理プログラムを実行した順番に、前記アプリケーションの実行権を獲得させ、実行権を獲得した前記所定数のプロセッサを現用系とし、実行権の獲得がなされなかった残りのプロセッサを予備系として割り付けて、現用系のプロセッサに前記アプリケーションを実行させ、前記アプリケーションの実行後に、前記現用系のプロセッサのいずれかから、前記アプリケーションの実行に伴う動作の異常が発生した旨の例外指示を受信すると、該例外指示を送出したプロセッサが獲得した実行権を解放し、該解放した実行権を、前記予備系のプロセッサに獲得させる、ことを特徴とする。
【０００８】
上記の構成によれば、オペレーティングシステムが、システム起動時に、現用系プロセッサと予備系プロセッサの割り当て、現用系プロセッサに障害が発生すると、障害の発生した現用系プロセッサの実行権を解放し、解放した実行権を予備系のプロセッサに獲得させる。予備系のプロセッサは、実行権を獲得すると、現用系プロセッサとして稼動する。このようにオペレーティングシステムが、現用系と予備系の切り替えを行うので、解析困難なプログラム例外やＴＬＢ例外発生時にもフェールセーフ動作を保証することが可能である。
【０００９】
加えて、オペレーティングシステムやプロセッサ実行権獲得処理プログラムなどのソフトウェアの更新・追加だけで、既存のマルチプロセッサシステムに適用することが可能であり、新規なハードウェアの追加は必要ない。
【発明の効果】
【００１０】
本発明によれば、ハードウェアの変更なしに、フェールソフトなマルチプロセッサ制御システムを低コストで構築できる、という効果がある。
【発明を実施するための最良の形態】
【００１１】
次に、本発明の実施形態について図面を参照して説明する。
【００１２】
図１は、本発明の一実施形態であるマルチプロセッサ制御システムの構成を示すブロック図である。図１を参照すると、マルチプロセッサ制御システム１は、ＳＭＰ（Symmetric Mult-Processor）対応のシステムであって、プログラムを実行するプロセッサ１１、１２と、これらプロセッサ１１、１２で共通に使用されるメモリ１３とからなる。
【００１３】
メモリ１３は、プログラムやデータを格納するものである。メモリ１３には、プロセッサ１１、１２上で動作するＯＳ（Operating system）１３１、およびプロセッサ実行権獲得処理プログラム１３２、１３３が格納されている。プロセッサ実行権獲得処理プログラム１３２は、プロセッサ１１が実行権を獲得するための処理を記述したプログラムである。プロセッサ実行権獲得処理プログラム１３３は、プロセッサ１２が実行権を獲得するための処理を記述したプログラムである。
【００１４】
ＯＳ１３１は、実行権カウンタ１３１１、実行権カウンタセマフォ１３１２、例外ハンドラ１３１３、１３１４、実行権獲得関数１３１５および実行権解放関数１３１６を有する。
【００１５】
実行権カウンタ１３１１は、プロセッサの実行権獲得処理で使用するカウンタであって、初期値は、「プロセッサ数−１」の値とされる。ここでは、プロセッサ数は２個であるので、初期値は「１」とされる。
【００１６】
実行権カウンタセマフォ１３１２は、プロセッサ実行権獲得処理プログラム１３２による実行権獲得処理とプロセッサ実行権獲得処理プログラム１３３による実行権獲得処理とが同時に実行されることを防止するために設けられたものでのであって、実行可の状態を示す値（ここでは、「０」）と、実行不可の状態を示す値（ここでは、「１」）とのいずれかの値が設定される。プロセッサ実行権獲得処理プログラム１３２、１３３は、実行権を獲得する際に、実行権獲得関数１３１５を呼び出して実行権カウンタセマフォ１３１２を獲得する必要がある。セマフォ値が「０」であれば、セマフォを獲得することができる。セマフォ値が「１」であれば、セマフォの獲得は失敗となる。セマフォ値が「１」にセットされた場合、その状態はセマフォが解放されるまで維持され、セマフォ解放時にセマフォ値は「０」に設定される。このようなセマフォを用いた操作により、各プロセッサ実行権獲得処理プログラムによる実行権獲得処理に対する排他制御を行うことができる。
【００１７】
実行権獲得関数１３１５は、実行権カウンタセマフォ１３１２を用いた一連の操作（セマフォの獲得および解放と実行権カウンタ１３１１のカウンタ値の更新に関わる制御など）を行うための関数からなる。
【００１８】
例外ハンドラ１３１３は、プロセッサ１１のプログラム例外やＴＬＢ例外を処理するものであって、プロセッサ１１からの例外指示により、実行権解放関数１３１６を呼び出して獲得した実行権を解放する。例外ハンドラ１３１４は、プロセッサ１２のプログラム例外やＴＬＢ例外を処理するものであって、プロセッサ１２からの例外指示により、実行権解放関数１３１６を呼び出して獲得した実行権を解放する。実行権解放関数１３１６は、例外ハンドラ１３１３、１３１４が実行権を解放するための一連の操作（セマフォの獲得および解放と実行権カウンタ１３１１のカウンタ値の更新に関わる制御など）を行うための関数である。
【００１９】
次に、本実施形態のマルチプロセッサ制御システム１の動作について詳細に説明する。
【００２０】
（１）実行権獲得処理
図２に、プロセッサ実行権獲得処理の手順を示し、図３に、実行権獲得の際に行われるセマフォ獲得処理の手順を示す。プロセッサ実行権獲得処理プログラム１３２、１３３によるプロセッサ実行権獲得処理は図２に示した手順で行われ、その際の実行権獲得関数によるセマフォ獲得処理は、図３に示した手順で行われる。以下、図１から図３を参照して、実行権獲得処理を詳細に説明する。
【００２１】
システム起動時（電源投入またはプロセッサのリセット）に、プロセッサ１１、１２のそれぞれによってプロセッサ実行権獲得処理プログラム１３２、１３３が実行される。そして、プロセッサ実行権獲得処理プログラム１３２、１３３のそれぞれが、実行権獲得関数１３１５を呼び出し(図２のステップ２０１)、実行権を獲得できるまでスピンロックする(図２のステップ２０２)。
【００２２】
スピンロック後、プロセッサ実行権獲得処理プログラム１３２、１３３のそれぞれで呼び出した実行権獲得関数１３１５による実行権獲得処理が個別に実行される。各実行権獲得処理は、いずれも図３に示した以下のような手順で行われる。
【００２３】
実行権獲得関数１３１５は、実行権カウンタセマフォ１３１２の獲得を試る（図３のステップ３０１）。実行権カウンタセマフォ１３１２の獲得に失敗した場合は、実行権獲得失敗のリターン値を設定し(図３のステップ３０７)、呼び出し元に戻る（図２のステップ２０１への移行）。実行権カウンタセマフォ１３１２の獲得に成功した場合は、続いて、実行権カウンタ１３１１の値の判断を行う(図３のステップ３０２)。
【００２４】
ステップ３０２で、実行権カウンタ１３１１が０より大きいと判断した場合は、実行権カウンタ１３１１を「１」だけデクリメントし(図３のステップ３０３)、実行権カウンタセマフォ１３１２を解放する(図３のステップ３０４)。その後、獲得成功のリターン値を設定し(図３のステップ３０５)、呼び出し元に戻る（図２のステップ２０１への移行）。ステップ３０２で、実行権カウンタ１３１１が０以下であると判断した場合は、実行権カウンタセマフォを解放し(図３のステップ３０６)、実行権獲得失敗のリターン値を設定し(図３のステップ３０７)、呼び出し元に戻る（図２のステップ２０１への移行）。
【００２５】
上記の実行権獲得関数１３１５によるセマフォ獲得処理（排他制御）によれば、プロセッサ１１、１２のうち、少しでも早くプロセッサ実行権獲得処理プログラムを実行して実行権獲得関数１３１５を呼び出したプロセッサが実行権を獲得できる。
【００２６】
実行権獲得に成功したプロセッサは、ＯＳのスケジューラを呼び出し(図２のステップ２０３)、プロセッサ実行権獲得処理プログラムによる実行権獲得処理を終了する。その後、実行権を獲得したプロセッサは、現用系プロセッサとして、ユーザアプリケーションの動作を開始する。実行権を獲得できずに、スピンロック状態(図２のステップ２０２)のプロセッサは、予備系プロセッサとなる。
【００２７】
（２）例外発生時の動作
プロセッサ１１、１２が現用系および予備系に割り当てられた後、現用系プロセッサにおいて、プログラム例外やＴＬＢ例外など、プログラムの動作に伴う異常が発生すると、実行権を解放して、予備系プロセッサに実行権を与えるための処理が行われる。
【００２８】
図４に、プロセッサ実行権解放処理の手順を示し、図５に、実行権解放の際に行われるセマフォ獲得処理の手順を示す。例外ハンドラ１３１３、１３１４のうち、現用系プロセッサからの例外指示を受けた例外ハンドラにおいて、図４に示すプロセッサ実行権解放処理が実行され、その際の実行権解放関数によるセマフォ獲得処理は、図５に示した手順で行われる。
【００２９】
以下、図１、図４および図５を参照して、例外発生時の実行権解放処理を詳細に説明する。ここでは、プロセッサ１１が現用系プロセッサ、プロセッサ１２が予備系プロセッサとされてシステムが稼動している状態で、プロセッサ１１でプログラム例外またはＴＬＢ例外が発生した場合の動作を説明する。
【００３０】
プロセッサ１１で、プログラム例外またはＴＬＢ例外が発生すると、例外ハンドラ１３１３が起動される。例外ハンドラ１３１３は、実行権解放関数１３１６を呼び出し(図４のステップ４０１)、実行権を解放できるまでスピンロックする(図４のステップ４０２)。
【００３１】
実行権解放関数１３１６は、実行権カウンタセマフォ１３１２の獲得を試みる（図５のステップ５０１）。実行権カウンタセマフォ１３１２の獲得に失敗した場合は、実行権解放失敗のリターン値を設定し(図５のステップ５０７)、呼び出し元に戻る(図４のステップ４０１への移行)。実行権カウンタセマフォ１３１２の獲得に成功した場合は、実行権カウンタ１３１１の値の判断を行う(図５のステップ５０２)。
【００３２】
ステップ５０２で、実行権カウンタ１３１１が［(プロセッサ数）−２］の値以下であると判断した場合は、実行権カウンタ１３１１を「１」だけインクリメントし(図５のステップ５０３)、実行権カウンタセマフォ１３１２を解放する(図５のステップ５０４)。そして、解放成功のリターン値を設定し(図５のステップ５０５)、呼び出し元に戻る(図４のステップ４０１への移行)。
【００３３】
ステップ５０２で、実行権カウンタ１３１１が［(プロセッサ数）−２］の値より大きいと判断した場合は、実行権カウンタセマフォを解放する(図５のステップ５０６)。そして、実行権解放失敗のリターン値を設定し(図５のステップ５０７)、呼び出し元に戻る(図４のステップ４０１への移行)。
【００３４】
実行権を解放できた例外ハンドラ１３１３は、プロセッサ実行権獲得処理１３２を呼び出し(図４のステップ４０３)、実行権解放処理を終了する。
【００３５】
上記の実行権解放処理の終了時において、予備系プロセッサであるプロセッサ１２は、スピンロック状態(図２のステップ２０２)である。例外発生による実行権解放処理により、実行権カウンタ１３１１が０より大きな値（＝１）となるため、プロセッサ１２は、実行権を獲得することができる。実行権を獲得したプロセッサ１２は、現用系プロセッサとなり、ユーザアプリケーションの動作を開始する。一方、プロセッサ１１は、図４のステップ４０３でプロセッサ実行権獲得処理プログラム１３２を実行するものの、図２のステップ２０２でスピンロック状態となる。このため、現用系プロセッサとして動作していたプロセッサ１１は、例外発生後に、予備系プロセッサとなる。
【００３６】
以上説明した本実施形態のマルチプロセッサ制御システム１によれば、ＯＳ１３１が、システム起動時に、実行権を獲得した順番にプロセッサを現用系と予備系に割り付け、現用系に解析困難なプログラム例外やＴＬＢ例外などの障害が発生すると、障害が発生した現用系の実行権を解放して予備系に割り当てる。これにより、フェールセーフ動作を保証することが可能である。
【００３７】
加えて、ＯＳやプロセッサ実行権獲得処理プログラムなどのソフトウェアの更新・追加だけで、既存のマルチプロセッサシステムに適用することが可能であり、新規なハードウェアの追加は必要ない。
【００３８】
本実施形態のマルチプロセッサ制御システムにおいて、プロセッサ数に制限はない。プロセッサが３個以上のマルチ構成において適用することが可能である。３個以上のマルチ構成に適用する場合は、実行権獲得処理プログラムおよび例外ハンドラは、プロセッサ毎に設けられる。
【００３９】
（他の実施形態）
図６は、本発明の他の実施形態であるマルチプロセッサ制御システムの構成を示すブック図である。
【００４０】
図６を参照すると、マルチプロセッサ制御システム２は、３つのプロセッサ２１〜２３と、これらプロセッサによって共通に使用されるメモリ２４とを有する。メモリ２４は、ＯＳ２４１、初期化タスク２４２〜２４４およびユーザタスク２４５〜２４８を有する。初期化タスク２４２は、プロセッサ２１によって実行されるプロセッサ実行権獲得処理プログラム２４２１を有する。初期化タスク２４３は、プロセッサ２２によって実行されるプロセッサ実行権獲得処理プログラム２４３１を有する。初期化タスク２４４は、プロセッサ２３によって実行されるプロセッサ実行権獲得処理プログラム２４４１を有する。
【００４１】
ＯＳ２４１は、実行権カウンタ２４１１、実行権カウンタセマフォ２４１２、例外ハンドラ２４１３〜２４１５、実行権獲得関数２４１６および実行権解放関数２４１７を有する。例外ハンドラ２４１３、２４１４、２４１５のそれぞれは、プロセッサ２１、２２、２３からの例外指示に応じて、プログラム例外やＴＬＢ例外を処理するものであって、実行権解放関数１３１６を呼び出して獲得した実行権を解放する。
【００４２】
図６において、プロセッサ実行権獲得処理プログラム２４２１、２４３１、２４４１、実行権カウンタ２４１１、実行権カウンタセマフォ２４１２、例外ハンドラ２４１３〜２４１５、実行権獲得関数２４１６および実行権解放関数２４１７は、それぞれ図１に示したプロセッサ実行権獲得処理プログラム、実行権カウンタ、実行権カウンタセマフォ、例外ハンドラ、実行権獲得関数および実行権解放関数に対応する。なお、プロセッサ数が３であるため、実行権カウンタ２４１１の初期値は「２」とする。初期化タスク２４２、２４３、２４４とユーザタスク２４５、２４６、２４７、２４８は、ＯＳ２４１の管理下で動作する。
【００４３】
本実施形態のマルチプロセッサ制御システム２では、システム起動時に、プロセッサ２１、２２、２３がそれぞれ、初期化タスク２４２、２４３、２４４を実行する。初期化タスク２４２、２４３、２４４はそれぞれ、プロセッサ実行権獲得処理２４２１、２４３１、２４４１を呼び出す。プロセッサ実行権獲得処理２４２１、２４３１、２４４１は、実行権獲得関数２４１６を呼び出し(図２のステップ２０１)、実行権を獲得できるまでスピンロックする(図２のステップ２０２)。
【００４４】
ここで、プロセッサ２１、プロセッサ２２、プロセッサ２３の順番で実行権獲得関数２４１６が呼び出されたと仮定する。
【００４５】
プロセッサ実行権獲得処理プログラム２４２１によって呼び出された実行権獲得関数２４１６は、実行権カウンタセマフォ２４１２の獲得を試みる（図３のステップ３０１）。セマフォの獲得に成功すると、実行権獲得関数２４１６は、実行権カウンタ２４１１の値の判断を行う(図３のステップ３０２)。この時点では、実行権カウンタ２４１１の値は「２」となっているので、実行権獲得関数２４１６は、実行権カウンタ２４１１の値を「１」だけデクリメントし(図３のステップ３０３)、実行権カウンタセマフォ２４１２を解放し(図３のステップ３０４)、獲得成功のリターン値を設定し(図３のステップ３０５)、プロセッサ実行権獲得処理に戻る。
【００４６】
プロセッサ実行権獲得処理プログラム２４３１によって呼び出された実行権獲得関数２４１６は、実行権カウンタセマフォ２４１２の獲得を試みる（図３のステップ３０１）。セマフォの獲得に成功すると、実行権獲得関数２４１６は、実行権カウンタ２４１１の値の判断を行う(図３のステップ３０２)。この時点では、実行権カウンタ２４１１の値は「１」となっているので、実行権獲得関数２４１６は、実行権カウンタ２４１１を「１」だけデクリメントし(図３のステップ３０３)、実行権カウンタセマフォ２４１２を解放し(図３のステップ３０４)、獲得成功のリターン値を設定し(図３のステップ３０５)、プロセッサ実行権獲得処理に戻る。
【００４７】
プロセッサ実行権獲得処理２４４１によって呼び出された実行権獲得関数２４１６は、実行権カウンタセマフォ２４１２の獲得を試みる（図３のステップ３０１）。セマフォの獲得に成功すると、実行権獲得関数２４１６は、実行権カウンタ２４１１の値の判断を行う(図３のステップ３０２)。この時点では、実行権カウンタ２４１１は「０」になっているので、実行権獲得関数２４１６は、実行権カウンタセマフォ２４１２を解放し(図３のステップ３０６)、実行権獲得失敗のリターン値を設定し(図３のステップ３０７)、プロセッサ実行権獲得処理に戻る。
【００４８】
上記の一連の動作により、プロセッサ２１とプロセッサ２２が実行権を獲得できる。実行権獲得に成功したプロセッサ２１、２２は、ＯＳ２４１のスケジューラを呼び出し(図２のステップ２０３)、実行権獲得処理を終了する。実行権を獲得したプロセッサ２１、２２は、現用系プロセッサとして、ユーザタスクの動作を開始する。実行権を獲得できずにスピンロックした状態(図２のステップ２０２)のプロセッサ２３は、予備系プロセッサとなる。
【００４９】
次に、例外発生時の動作について説明する。
【００５０】
プロセッサ２１、２２が現用系とされ、プロセッサ２３が予備系とされた場合に、現用系プロセッサにおいて、プログラム例外やＴＬＢ例外など、プログラムの動作に伴う異常が発生すると、実行権を解放して、予備系プロセッサに実行権を与えるための処理が行われる。ここでは、ＯＳ２４１が、プロセッサ２１に対してユーザタスク２４５とユーザタスク２４６の実行割付けを行い、プロセッサ２２に対してユーザタスク２４７とユーザタスク２４８の実行割付けを行ったものとして、プロセッサ２１で例外が発生した時の動作を説明する。
【００５１】
プロセッサ２１で、ユーザタスク２４５の実行時に、プログラム例外またはＴＬＢ例外が発生すると、例外ハンドラ２４１３が起動される。例外ハンドラ２４１３は、実行権解放関数２４１７を呼び出し(図４のステップ４０１)、実行権を解放できるまでスピンロックする(図４のステップ４０２)。
【００５２】
実行権解放関数２４１７は、実行権カウンタセマフォ２４１２の獲得を試みる（図５のステップ５０１）。セマフォの獲得に成功すると、実行権解放関数２４１７は、実行権カウンタ２４１１の値の判断を行う(図５のステップ５０２)。この時点では、実行権カウンタ２４１１の値は「０」となっているので、［プロセッサ数−２］の値（＝１）以下の条件を満たす。したがって、実行権解放関数２４１７は、実行権カウンタ２４１１を「１」だけインクリメントし(図５のステップ５０３)、実行権カウンタセマフォ２４１２を解放し(図５のステップ５０４)、解放成功のリターン値を設定し(図５のステップ５０５)、例外処理（図４のステップ４０１）に戻る。
【００５３】
実行権を解放できた例外ハンドラ２４１３は、初期化タスク２４２を呼び出し(図４のステップ４０３)、実行権解放処理を終了する。
【００５４】
上記の実行権解放処理の終了時において、予備系プロセッサであるプロセッサ２３は、スピンロック状態(図２のステップ２０２)である。例外発生による実行権解放処理により、実行権カウンタ１３１１が０より大きな値（＝１）となるため、プロセッサ２３は、実行権を獲得することができる。実行権を獲得したプロセッサ２３は、現用系プロセッサとなり、ユーザタスク２４５、２４６の動作を再開する。一方、プロセッサ２１は、図４のステップ４０３でプロセッサ実行権獲得処理プログラム２４２１を実行するものの、図２のステップ２０２でスピンロック状態となる。このため、現用系プロセッサとして動作していたプロセッサ２１は、例外発生後に、予備系プロセッサとなる。
【図面の簡単な説明】
【００５５】
【図１】本発明の一実施形態であるマルチプロセッサ制御システムの構成を示すブロック図である。
【図２】プロセッサ実行権獲得処理の手順を示すフローチャートである。
【図３】実行権獲得の際に行われるセマフォ獲得処理の手順を示すフローチャートである。
【図４】プロセッサ実行権解放処理の手順を示すフローチャートである。
【図５】実行権解放の際に行われるセマフォ獲得処理の手順を示すフローチャートである。
【図６】本発明の他の実施形態であるマルチプロセッサ制御システムの構成を示すブック図である。
【符号の説明】
【００５６】
１  マルチプロセッサ制御システム
１１、１２  プロセッサ
１３  メモリ
１３１  オペレーティングシステム
１３２、１３３  プロセッサ実行権獲得処理プログラム
１３１１  実行権カウンタ
１３１２  実行権カウンタセマフォ
１３１３、１３１４  例外ハンドラ
１３１５  実行権獲得関数
１３１６  実行権解放関数
【図１】
2008077388.tif 000003
【図２】
2008077388.tif 000004
【図３】
2008077388.tif 000005
【図４】
2008077388.tif 000006
【図５】
2008077388.tif 000007
【図６】
2008077388.tif 000008