(57)【特許請求の範囲】
【請求項１】
複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を有する計算機システムであって、
前記複数のＣＰＵがＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）及び前記ＯＳ上で動作するプログラムの実行を分担している際に、
前記複数のＣＰＵのうちの特定のＣＰＵが、
前記ＯＳ及び前記プログラムの実行の分担を停止し、前記ＯＳを代替する代替ＯＳを起動し、前記プログラムが動作するＯＳを前記ＯＳから前記代替ＯＳに切り替え、
前記特定のＣＰＵ以外のＣＰＵである他のＣＰＵが、
前記プログラムが動作するＯＳが前記代替ＯＳに切り替わった後に、前記ＯＳの実行を終了することを特徴とする計算機システム。
【請求項２】
前記他のＣＰＵは、
前記ＯＳの実行を終了した後に、前記特定のＣＰＵと、前記代替ＯＳ及び前記代替ＯＳ上で動作するプログラムの実行を分担することを特徴とする請求項１に記載の計算機システム。
【請求項３】
前記複数のＣＰＵが前記ＯＳ及び前記ＯＳ上で動作するプログラムの実行を分担している際に、前記ＯＳに関連した障害が検知された場合に、
前記特定のＣＰＵが、
前記ＯＳ及び前記プログラムの実行の分担を停止し、前記特定のＣＰＵを再稼動し、前記代替ＯＳを起動し、前記プログラムが動作するＯＳを前記ＯＳから前記代替ＯＳに切り替え、
前記他のＣＰＵが、
前記プログラムが動作するＯＳが前記代替ＯＳに切り替わった後に、前記ＯＳの実行を終了し、前記他のＣＰＵを再稼動することを特徴とする請求項１又は２に記載の計算機システム。
【請求項４】
前記計算機システムは、
前記ＯＳ及び前記代替ＯＳによりアクセスされるデバイスに接続されており、
前記特定のＣＰＵは、
前記代替ＯＳによる前記デバイスへのアクセスが発生しない前記代替ＯＳの第１の初期化処理を行い、前記第１の初期化処理を行ったことを前記他のＣＰＵに通知し、前記代替ＯＳによる前記デバイスへのアクセスが許可されたことが前記他のＣＰＵから通知された場合に、前記代替ＯＳによる前記デバイスへのアクセスが発生する前記代替ＯＳの第２の初期化処理を行って、前記代替ＯＳを起動し、
前記他のＣＰＵは、
前記第１の初期化処理が行われたことが前記特定のＣＰＵから通知された場合に、前記ＯＳによる前記デバイスへのアクセスを禁止し、前記代替ＯＳによる前記デバイスへのアクセスを許可することを前記特定のＣＰＵに通知することを特徴とする請求項１〜３のいずれかに記載の計算機システム。
【請求項５】
前記計算機システムは、更に、
前記複数のＣＰＵが共有する共有メモリを有し、
前記特定のＣＰＵは、
前記第２の初期化処理を行った場合に、前記第２の初期化処理を行ったことを前記他のＣＰＵに通知し、前記プログラムのコンテキスト情報が前記共有メモリに格納されたことが前記他のＣＰＵから通知された場合に、前記プログラムが動作するＯＳを前記ＯＳから前記代替ＯＳに切り替え、前記共有メモリに格納された前記コンテキスト情報を用いて前記代替ＯＳ上で前記プログラムを実行し、
前記他のＣＰＵは、
前記第２の初期化処理が行われたことが前記特定のＣＰＵから通知された場合に、前記プログラムのコンテキスト情報を前記共有メモリに格納し、前記コンテキスト情報を前記共有メモリに格納したことを前記特定のＣＰＵに通知することを特徴とする請求項４に記載の計算機システム。
【請求項６】
複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を有する計算機システムで行われる制御方法であって、
前記複数のＣＰＵがＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）及び前記ＯＳ上で動作するプログラムの実行を分担している際に、
前記複数のＣＰＵのうちの特定のＣＰＵが、
前記ＯＳ及び前記プログラムの実行の分担を停止し、前記ＯＳを代替する代替ＯＳを起動し、前記プログラムが動作するＯＳを前記ＯＳから前記代替ＯＳに切り替え、
前記特定のＣＰＵ以外のＣＰＵである他のＣＰＵが、
前記プログラムが動作するＯＳが前記代替ＯＳに切り替わった後に、前記ＯＳの実行を終了することを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を用いてＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）を実行する技術に関する。
【背景技術】
【０００２】
例えば、特許文献１では、計算機システムの安定動作のために、マルチコアを用いて複数のＯＳ（ドメイン）を動作させる。
そして、特許文献１では、１つのドメインに異常が発生した場合に、異常が発生したドメインの処理を他のドメインで引継ぎ、異常が発生したドメインが再起動され、再起動されたドメインの処理が回復する。
また、特許文献２では、共有メモリを用いることでオーバヘッドが少なく迅速に処理をドメイン間で引き継ぐことができる方法が示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−０２０６２１号公報
【特許文献２】特開２０１２−０９９０００号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
計算機システムを安定して動作させるために、上記の特許文献１及び特許文献２のように、非対称型マルチプロセッサ（ＡＭＰ：Ａｓｙｍｍｅｔｒｉｃ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ）により、複数のＯＳをマルチコア上で定常的に動作させることが考えられる。
しかし、ＡＭＰにより定常的に複数のＯＳをマルチコア上で並列に動作させると、各ＯＳがそれぞれメモリを消費し効率が悪く、スループットが低下するという課題がある。
一方で、複数のＣＰＵコアに処理を分散させる対称型マルチプロセッサ（ＳＭＰ：Ｓｙｍｍｅｔｒｉｃ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ）では、使用可能なＣＰＵコア数が多いほど、スループットが向上する。【０００５】
この発明は、このような事情に鑑みたものであり、ＳＭＰによりスループットの向上を図りながら、計算機システムを安定的に動作させることを主な目的とする。
【課題を解決するための手段】
【０００６】
本発明に係る計算機システムは、
複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を有する計算機システムであって、
前記複数のＣＰＵがＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）及び前記ＯＳ上で動作するプログラムの実行を分担している際に、
前記複数のＣＰＵのうちの特定のＣＰＵが、
前記ＯＳ及び前記プログラムの実行の分担を停止し、前記ＯＳを代替する代替ＯＳを起動し、前記プログラムが動作するＯＳを前記ＯＳから前記代替ＯＳに切り替え、
前記特定のＣＰＵ以外のＣＰＵである他のＣＰＵが、
前記プログラムが動作するＯＳが前記代替ＯＳに切り替わった後に、前記ＯＳの実行を終了することを特徴とする。
【発明の効果】
【０００７】
本発明によれば、ＳＭＰにより、複数のＣＰＵがＯＳ及び前記ＯＳ上で動作するプログラムの実行を分担しており、スループットの向上が図られる。
更に、例えばＯＳに関連する障害が発生した場合に、特定のＣＰＵがＯＳ及びプログラムの分担を停止し、代替ＯＳを起動し、プログラムが動作するＯＳを代替ＯＳに切り替える。
このため、ＯＳに関連する障害が発生した場合にも、プログラムを代替ＯＳで継続して実行することができる。
【図面の簡単な説明】
【０００８】
【図１】実施の形態１に係る計算機システムの構成例を示す図。
【図２】実施の形態１に係るＲＯＭに保存されるデータの例を示す図。
【図３】実施の形態１に係るＲＡＭに保存されるデータの例を示す図。
【図４】実施の形態１に係る計算機システムの動作例を説明する図。
【図５】実施の形態１に係る計算機システムの動作例を説明する図。
【図６】実施の形態１に係る計算機システムの動作例を説明する図。
【図７】実施の形態１に係る計算機システムの動作例を説明する図。
【図８】実施の形態１に係るＣＰＵコア（１）の動作例を示すフローチャート図。
【図９】実施の形態１に係るＣＰＵコア（１）の動作例を示すフローチャート図。
【図１０】実施の形態１に係るＣＰＵコア（２）の動作例を示すフローチャート図。
【図１１】実施の形態１に係るＣＰＵコア（２）の動作例を示すフローチャート図。
【発明を実施するための形態】
【０００９】
実施の形態１．
本実施の形態では、平時は対称型マルチプロセッサ（ＳＭＰ）で動作し、障害が発生した際に、一時的に非対称型マルチプロセッサ（ＡＭＰ）で動作してＯＳの切り替えを行い、ＯＳの切り替え後はＳＭＰに戻る計算機システムを説明する。
【００１０】
図１は、本実施の形態に係る計算機システム１０の構成例を示す。
【００１１】
計算機システム１０は、ハードウェアとしては、マルチコアプロセッサ１００、バス１１０、ＲＡＭ１１１、ＲＯＭ１１２、ＩＯ装置１１３を有する。
マルチコアプロセッサ１００は、ＣＰＵコア（１）１０１及びＣＰＵコア（２）１０２を有する。
バス１１０は、マルチコアプロセッサ１００、ＲＡＭ１１１、ＲＯＭ１１２、ＩＯ装置１１３を接続する。
ＲＡＭ１１１は、バス１１０に接続される揮発性メモリである。
ＲＯＭ１１２は、バス１１０に接続される不揮発性メモリである。
ＩＯ装置１１３は、バス１１０に接続され、後述するＯＳ（１）２０１及びＯＳ（２）２１１によりアクセスされる。
【００１２】
また、計算機システム１０は、ソフトウェアとしては、ブートローダ２００、ＯＳ（１）２０１、プログラム（Ａ）２０４、プログラム（Ｂ）２０５を有する。
また、ＯＳ（１）２０１は、スケジューラ２０２及び不安定検知部２０３を有する。
ブートローダ２００は、マルチコアプロセッサ１００の起動時に、ＣＰＵコア（１）１０１或いはＣＰＵコア（２）１０２によってＲＯＭ１１２から読み出され、ハードウェアの初期化処理を行い、ＲＯＭ１１２内の後述するＯＳ実行イメージ３０２をバス１１０を介してＲＡＭ１１１に展開して実行する。
ＯＳ（１）２０１は、マルチコアプロセッサ１００で動作するオペレーティングシステムである。
プログラム（Ａ）２０４及びプログラム（Ｂ）２０５は、ＯＳ（１）２０１上で動作するアプリケーションプログラムである。
スケジューラ２０２は、ＯＳ（１）２０１で動作するプログラムをＣＰＵコア（１）１０１或いはＣＰＵコア（２）１０２に割り当てて、実行させる機能を持つ。
不安定検知部２０３は、ＯＳ（１）２０１で動作するプログラムがメモリリークや、指定範囲外のアドレスに対するアクセスを行った時に、ＯＳ（１）２０１に対して異常を通知する機能を持つ。
【００１３】
なお、図１では、ＯＳ（１）２０１のみを図示しているが、図６に示すように、計算機システム１０には、ＯＳ（２）２１１も含まれている。
ＯＳ（２）２１１は、マルチコアプロセッサ１００においてＯＳ（１）２０１とは別個に動作する。
ＯＳ（２）２１１の内部構成もＯＳ（１）２０１と同様であり、スケジューラ２１２と不安定検知部２１３が含まれる。
スケジューラ２１２は、スケジューラ２０２と同様であり、不安定検知部２１３は不安定検知部２０３と同様である。
【００１４】
マルチコアプロセッサ１００は、ＣＰＵコア（１）１０１及びＣＰＵコア（２）１０２を用いて動作するＳＭＰを構成する。
ＣＰＵコア（１）１０１及びＣＰＵコア（２）１０２は、互いに割り込み信号を発生させる、ＣＰＵ間割込み機構を有する。
ＯＳ（１）２０１及びＯＳ（２）２１１は、マルチコアプロセッサ１００においてＳＭＰ対応のＯＳとして動作する。
また、ＳＭＰのみでなく、ＣＰＵコア（１）１０１が単独でＯＳ（１）２０１を実行する場合もあり、また、ＣＰＵコア（２）１０２が単独でＯＳ（１）２０１を実行する場合もある。
同様に、ＣＰＵコア（１）１０１が単独でＯＳ（２）２１１を実行する場合もあり、また、ＣＰＵコア（２）１０２が単独でＯＳ（２）２１１を実行する場合もある。
【００１５】
本実施の形態では、ＣＰＵコア（１）１０１とＣＰＵコア（２）１０２がＳＭＰによりＯＳ（１）２０１を実行している際にＯＳ（１）２０１に関連して障害が発生した場合に、ＣＰＵコア（２）１０２が分離される。
つまり、ＣＰＵコア（２）１０２がＯＳ（１）２０１の実行の分担を停止し、ＣＰＵコア（２）１０２が再稼動し、再稼動したＣＰＵコア（２）１０２がＯＳ（２）２１１を起動する。
本実施の形態では、ＯＳ（２）２１１はＯＳ（１）２０１を代替するＯＳであり、代替ＯＳの例に相当する。
そして、ＣＰＵコア（２）１０２がＯＳ（２）２１１を起動した後に、ＣＰＵコア（１）１０１がＯＳ（１）２０１の実行を終了し、ＣＰＵコア（１）１０１が再稼動する。
ＣＰＵコア（１）１０１が再稼動した後は、ＣＰＵコア（１）１０１とＣＰＵコア（２）１０２がＳＭＰによりＯＳ（２）２１１を実行する。
なお、ＣＰＵコア（２）１０２の再稼動とは、ブートローダ２００を起動し、ＣＰＵコア（２）１０２用に確保されていたＲＡＭ１１１内の領域のデータを初期化し、ＣＰＵコア（２）１０２内のレジスタのデータを初期化することである。
同様に、ＣＰＵコア（１）１０１の再稼動とは、ブートローダ２００を起動し、ＣＰＵコア（１）１０１用に確保されていたＲＡＭ１１１内の領域のデータを初期化し、ＣＰＵコア（１）１０１内のレジスタのデータを初期化することである。
【００１６】
図２は、ＲＯＭ１１２に保存されるデータの例を示す。
【００１７】
図２において、ブートローダ実行イメージ３０１は、ブートローダ２００の実行イメージである。
ＯＳ実行イメージ３０２は、ＯＳの実行イメージである。
図１及び図６では、ＯＳ実行イメージ３０２がマルチコアプロセッサ１００により実行されている状態が、ＯＳ（１）２０１又はＯＳ（２）２１１として表現されている。
アプリケーションイメージ３０３は、アプリケーションプログラムの実行イメージを示す。
図１及び図６では、アプリケーションイメージ３０３がマルチコアプロセッサ１００により実行されている状態が、プログラム（Ａ）２０４及びプログラム（Ｂ）２０５として表現されている。
スナップショットイメージ（１）３０４は、ＯＳ（１）２０１においてＯＳ（１）２０１及びデバイスドライバの初期化完了時のワークメモリの内容をデータとして保存したスナップショットイメージである。
スナップショットイメージ（２）３０５は、ＯＳ（２）２１１においてＯＳ（２）２１１及びデバイスドライバの初期化完了時のワークメモリの内容をデータとして保存したスナップショットイメージである。
【００１８】
図３は、ＲＡＭ１１１に保存されるデータを示す。
【００１９】
ＯＳ（１）実行領域３１１は、ＯＳ（１）２０１がマルチコアプロセッサ１００により実行される際に、ＯＳ実行イメージ３０２がロードされる物理メモリ領域である。
ＯＳ（２）実行領域３１２は、ＯＳ（２）２１１がマルチコアプロセッサ１００により実行される際に、ＯＳ実行イメージ３０２がロードされる物理メモリ領域である。
共有メモリ領域３１３は、ＯＳ（１）２０１とＯＳ（２）２１１が同時に動作した際にＣＰＵコア（１）１０１とＣＰＵコア（２）１０２によりアクセスされる物理メモリ領域である。
ＯＳ（１）専用領域３２１は、ＯＳ（１）２０１のみ（つまり、ＯＳ（１）２０１を実行しているＣＰＵコアのみ）が書き込みできる物理メモリ領域である。
ＯＳ（２）専用領域３２２は、ＯＳ（２）２１１のみ（つまり、ＯＳ（２）２１１を実行しているＣＰＵコアのみ）が書き込みできる物理メモリ領域である。
【００２０】
起動フラグ３３１は、ＯＳ（２）２１１の起動モードを通知するためのフラグである。
起動フラグ３３１では、ＯＳ（２）２１１をＳＭＰにより実行するための起動モード（定常起動モード）、または、ＯＳ（２）２１１をＣＰＵコア（２）１０２のみで実行するための起動モード（分離ＯＳ起動モード）が示される。
ＯＳ起動許可フラグ３３３は、ＯＳ（２）２１１によるＩＯ装置１１３へのアクセス（以下、ＩＯ装置１１３へのアクセスをＩＯアクセスともいう）の許否を通知するためのフラグである。
プロセス移行フラグ３３４は、ＯＳ（１）２０１で処理されていたプロセスのコンテキスト情報の保存が完了したことを通知するためのフラグである。
ＣＰＵ待機フラグ３３５は、ＣＰＵコア（１）１０１の再稼動によってＣＰＵコア（１）１０１の初期化が完了し、ＣＰＵコア（１）１０１が処理待ち状態（アイドル）になっていることを通知するためのフラグである。
再稼動動作フラグ３３６は、ＣＰＵコア（１）１０１に、再稼動時にＯＳを起動するか、処理待ち状態（アイドル）で待機するかを指示するフラグである。
準備完了フラグ３３２は、ＣＰＵコア（２）１０２がＩＯアクセスを伴わないＯＳ（２）２１１の起動を完了したことを通知するフラグである。
【００２１】
なお、ＣＰＵコア間の通知は共有メモリ領域３１３を介して行う。
また、ＯＳ（１）２０１からＯＳ（２）２１１への通知並びにＣＰＵコア（１）１０１からＣＰＵコア（２）１０２への通知はＯＳ（１）専用領域３２１が用いられ、ＯＳ（２）２１１からＯＳ（１）２０１への通知並びに、ＣＰＵコア（２）１０２からＣＰＵコア（１）１０１への通知はＯＳ（２）専用領域３２２が用いられる。
【００２２】
次に、図４〜図７を用いて、本実施の形態に係る計算機システム１０の動作例を説明する。
【００２３】
図４では、ＳＭＰにより、ＣＰＵコア（１）１０１及びＣＰＵコア（２）１０２がＯＳ（１）２０１を分担して実行し、ＯＳ（１）２０１上でプログラム（Ａ）２０４及びプログラム（Ｂ）２０５が動作している状態を表している。
このとき、プログラム（Ｂ）２０５の動作が不安定となり、プログラム（Ｂ）２０５の不安定な動作がシステム全体に影響を与えることを不安定検知部２０３が検知すると、ＣＰＵコア（１）１０１は、スケジューラ２０２を実行し、ＣＰＵコア（２）１０２をＯＳ（１）２０１から切り離すために、ＣＰＵコア（２）１０２への処理割り当てを停止する。
【００２４】
処理の割り当てが発生しなくなったＣＰＵコア（２）１０２は、割り当てられていた処理を終了すると、処理待ちのアイドル状態となる。
つまり、ＣＰＵコア（２）１０２は、ＯＳ（１）２０１及びプログラム（Ａ）２０４の実行の分担を停止する。
これにより、ＣＰＵコア（１）１０１のみがＯＳ（１）２０１を実行し、ＯＳ（１）２０１上で動作するプログラム（Ａ）２０４及びプログラム（Ｂ）２０５も必然的にＣＰＵコア（１）１０１のみが実行する（図５）。
【００２５】
次に、ＣＰＵコア（１）１０１が、ＣＰＵコア（２）１０２にＯＳ（２）２１１を起動するように通知する。
この通知は、ＣＰＵコア（１）１０１が起動フラグ３３１（図３）に「分離ＯＳ起動モード」を表す値を設定することにより行われる。
また、ＣＰＵコア（１）１０１はＣＰＵコア（２）１０２の再稼動を要求する。
この要求は、ＣＰＵコア（１）１０１からＣＰＵコア（２）１０２へのＣＰＵ間割込み或いは、ＣＰＵコア（１）１０１のレジスタ操作によるＣＰＵコア（２）１０２のリセットにより行われる。
【００２６】
ＣＰＵコア（１）１０１から再稼動を要求されたＣＰＵコア（２）１０２は、再稼動を行う。
ＣＰＵコア（２）１０２は、ブートローダ２００を起動し、初期化処理を行い、ＯＳ実行イメージ３０２（図２）をＲＯＭ１１２から読み出し、ＯＳ（２）２１１を起動する（図６）。
なお、この時、ＣＰＵコア（１）１０１が実行中のＯＳ（１）２０１の動作を阻害しないように、ＣＰＵコア（２）１０２は、ＩＯ装置１１３へのアクセスを伴わないＯＳ初期化処理（第１の初期化処理に相当）を行う。
このＯＳ初期化処理は、予めＲＯＭ１１２に保存しておいたスナップショットイメージ（２）３０５をＲＡＭ１１１に展開してＯＳ及びデバイスドライバの初期化を短縮化する起動手法を用いてもよい。
ＯＳ（２）２１１についてＩＯ装置１１３へのアクセスを伴わないＯＳ初期化処理を完了すると、ＣＰＵコア（２）１０２は、起動フラグ３３１の値を読み、「分離ＯＳ起動モード」を表す値が設定されていることを検知する。
そして、ＣＰＵコア（２）１０２は、ＣＰＵコア（１）１０１に、ＯＳ（２）２１１が動作可能であることを通知する。
この通知は、所定の値を準備完了フラグ３３２に設定することにより行われる。
次に、ＣＰＵコア（１）１０１は、動作不安定となったプログラム（Ｂ）２０５の終了処理を行う。
また、ＣＰＵコア（１）１０１は、プログラム（Ａ）２０４の実行主体をＯＳ（２）２１１へ切り替えるために、プログラム（Ａ）２０４のコンテキスト情報をＯＳ（１）専用領域３２１に格納する。
また、ＣＰＵコア（１）１０１は、コンテキスト情報の格納が完了したことを表す値をプロセス移行フラグ３３４に設定する。
更に、ＣＰＵコア（１）１０１は、ＯＳ（２）２１１からＩＯ装置１１３にアクセス可能であることをＣＰＵコア（２）１０２に通知する。
この通知は、所定の値をＯＳ起動許可フラグ３３３に設定することにより行われる。
ＣＰＵコア（２）１０２は、ＯＳ起動許可フラグ３３３の値を読み、ＯＳ（２）２１１によるＩＯ装置１１３へのアクセスが許可されていることを検知し、ＩＯ装置１１３のアクセスを伴うＯＳ初期化処理（第２の処理化処理に相当）を行う。
また、ＣＰＵコア（２）１０２は、プロセス移行フラグ３３４の値に基づき、プログラム（Ａ）２０４のコンテキスト情報を読み出し、プログラム（Ａ）２０４のＯＳ（２）２１１での動作の再開を行う。
また、ＣＰＵコア（２）１０２は、プログラム（Ｂ）２０５を新たにＯＳ（２）２１１上で実行する。
そして、ＣＰＵコア（１）１０１は、ＯＳ（１）２０１の実行を終了し、再稼動を行う。
【００２７】
ＣＰＵコア（１）１０１は、ブートローダ２００を実行し、ＣＰＵコア（１）１０１の初期化処理完了の後、ＣＰＵコア（１）１０１がアイドル状態であることを示す値をＣＰＵ待機フラグ３３５に設定する。
また、ＣＰＵコア（１）１０１は、ＣＰＵ待機フラグ３３５に値を設定したことを、ＣＰＵ間割込みでＣＰＵコア（２）１０２に対して通知し、ＣＰＵコア（１）１０１はアイドル状態で待機する。
プログラム（Ａ）２０４の動作再開後、ＣＰＵコア（２）１０２が、ＣＰＵ待機フラグ３３５を読み、ＣＰＵコア（１）１０１がアイドル状態であることを検知すると、ＯＳ（２）２１１のスケジューラ２１２がＣＰＵコア（１）１０１への処理割り当てを開始する。
この結果、ＯＳ（２）２１１は、ＳＭＰ対応ＯＳとして、ＣＰＵコア（１）１０１及びＣＰＵコア（２）１０２によって実行される（図７）。
【００２８】
次に、図８及び図９を用いて、ＣＰＵコア（１）１０１の動作例を説明する。
【００２９】
図４の状態において、ＣＰＵコア（１）１０１が不安定検知部２０３を実行して、ＯＳ（１）２０１で動作するプログラムの動作を監視する（Ｓ４０１）。
例えばプログラム（Ｂ）２０５の動作が不安定であることを判断すると（Ｓ４０２でＹＥＳ）、ＣＰＵコア（１）１０１は、スケジューラ２０２を実行し、動作が不安定なプログラム（Ｂ）２０５をスケジューラ２０２の待ち行列から外す等の処理で不安定動作のプログラム（Ｂ）２０５の実行を停止する（Ｓ４０３）。
その後、ＣＰＵコア（１）１０１は、スケジューラ２０２の実行により、ＣＰＵコア（２）１０２に対してプログラムの割り当てを中止する（Ｓ４０４）。
更に、ＣＰＵコア（１）１０１は、スケジューラ２０２の実行により、ＣＰＵコア（２）１０２に既に割り当てられていた処理が終了したことを確認し（Ｓ４０５）、ＣＰＵコア（２）１０２がアイドル状態となったことを確認する（Ｓ４０６）。
ＣＰＵコア（２）１０２がアイドル状態となった後、ＣＰＵコア（１）１０１は、スケジューラ２０２の実行により、ＣＰＵコア（２）１０２を処理の割り当て対象から外す（Ｓ４０７）。
次に、ＣＰＵコア（１）１０１は、ＭＭＵ（Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）等を操作して、ＯＳ（１）２０１が管理しているＲＡＭ１１１の領域をＯＳ（２）２１１用に解放する（Ｓ４０８）。
次に、ＣＰＵコア（１）１０１は、起動フラグ３３１（図３）に、「分離ＯＳ起動モード」を表す値を設定する（Ｓ４０９）。
次に、ＣＰＵコア（１）１０１は、ＣＰＵコア（２）１０２へＣＰＵ間割込みやリセットによってＣＰＵコア（２）１０２の再稼動を要求する（Ｓ４１０）。
【００３０】
ＣＰＵコア（１）１０１は、ＣＰＵコア（２）１０２でＯＳ（２）２１１の起動準備が完了（第１の初期化処理が完了）するのを準備完了フラグ３３２（図３）を監視して待つ（Ｓ４１１）。
そして、ＯＳ（２）２１１の起動準備が完了したことを検知した場合（Ｓ４１１でＹＥＳ）に、ＣＰＵコア（１）１０１は、スケジューラ２０２を実行して、正常に動作しているプログラム（Ａ）２０４の動作を停止する（Ｓ４１２）。
また、ＣＰＵコア（１）１０１は、ＯＳ（１）２０１からＩＯ装置１１３へのＩＯアクセスが発生しないように制御し、ＯＳ起動許可フラグ３３３（図３）に、ＯＳ（２）２１１によるＩＯアクセスの許可を通知する値を設定する（Ｓ４１３）。
これにより、ＣＰＵコア（２）１０２は、ＩＯアクセスを伴うＯＳ（２）２１１のＯＳ初期化処理を実行することができる。
また、ＣＰＵコア（１）１０１は、ＯＳ（１）２０１で動作していた正常なプログラム（Ａ）２０４のコンテキスト情報をＯＳ（１）専用領域３２１へ書き出す（Ｓ４１４）。
更に、ＣＰＵコア（１）１０１は、Ｓ４１４で書き出したコンテキスト情報の利用許可を通知する値をプロセス移行フラグ３３４に設定する（Ｓ４１５）。
次に、ＣＰＵコア（１）１０１は、再稼動後にアイドル状態で待機するために、再稼動動作フラグ３３６（図３）に、「アイドル待機モード」を表す値を設定する（Ｓ４１６）。
そして、ＣＰＵコア（１）１０１は、ＯＳ（１）２０１の実行を終了し、再稼動を行う（Ｓ４１７）。
再稼動後に、ＣＰＵコア（１）１０１は、再稼動動作フラグ３３６の値を読み（Ｓ４１８）、再稼動動作フラグ３３６の値が「アイドル待機モード」なので、ＣＰＵコア（１）１０１が処理待ち状態（アイドル）であることを通知する値をＣＰＵ待機フラグ３３５（図３）に設定する（Ｓ４１９）。
そして、ＣＰＵコア（１）１０１はアイドル状態の無限待ちとなる（Ｓ４２０）。
一方で、Ｓ４１８において、再稼動動作フラグ３３６の値が「定常起動モード」であれば、ＳＭＰ用ＯＳとして、ＯＳ（１）２０１を通常通りに起動する（Ｓ４２１）。
【００３１】
次に、図１０及び図１１を用いて、ＣＰＵコア（２）１０２の動作例を説明する。
【００３２】
図８のＳ４１０で行われた再稼動要求に基づき、ＣＰＵコア（２）１０２は、ブートローダ２００を起動する（Ｓ５０１）。
また、ＣＰＵコア（２）１０２は、所定の初期化処理も行う。
次に、ＣＰＵコア（２）１０２は、ＲＡＭ１１１のＯＳ（２）実行領域３１２に、ＲＯＭ１１２内のＯＳ実行イメージ３０２をロードする（Ｓ５０２）。
次に、ＣＰＵコア（２）１０２は、ＯＳ（２）２１１の初期化処理を開始する（Ｓ５０３）。
Ｓ５０３では、ＣＰＵコア（２）１０２は、ＩＯアクセスを伴わない初期化のみを行う。
次に、ＣＰＵコア（２）１０２は、ＲＯＭ１１２内のスナップショットイメージ（２）３０５を用いて、システムの初期化状態を復帰させる（Ｓ５０４）。
次に、ＣＰＵコア（２）１０２は、起動フラグ３３１の値を確認し（Ｓ５０５）、起動フラグ３３１の値が「定常起動モード」を表す値であれば、ＳＭＰ用ＯＳとしてＯＳ（２）２１１を通常通りに起動する（Ｓ５０６）。
一方、起動フラグ３３１の値が「分離ＯＳ起動モード」を表す値であれば、ＣＰＵコア（２）１０２は、ＩＯアクセスを伴わないＯＳ（２）２１１の起動を完了したことを通知する値を準備完了フラグ３３２に設定する（Ｓ５０７）。
また、ＣＰＵコア（２）１０２は、ＣＰＵコア（１）１０１によりＯＳ起動許可フラグ３３３（図３）が設定されるのを待つ（Ｓ５０８）。
ＯＳ起動許可フラグ３３３の値が、ＩＯアクセスの許可を通知する値になると（Ｓ５０８で「起動指示あり」）、ＣＰＵコア（２）１０２は、ＩＯアクセスを伴うＯＳ（２）２１１の初期化処理を行う（Ｓ５０９）。
【００３３】
更に、ＣＰＵコア（２）１０２は、ＯＳ（２）２１１のスケジューラ２１２を起動し（Ｓ５１０）、ＯＳ（２）２１１の定常動作を開始させる。
また、ＣＰＵコア（２）１０２は、プロセス移行フラグ３３４（図３）を監視し（Ｓ５１１）、プロセス移行フラグ３３４の値が有効になると、ＯＳ（１）２０１で正常に動作していたプログラム（Ａ）２０４のコンテキスト情報をＯＳ（１）専用領域３２１から読み出し、プログラム（Ａ）２０４の動作をＯＳ（２）２１１で再開させる（Ｓ５１２）。
次に、ＣＰＵコア（２）１０２は、ＣＰＵ待機フラグ３３５を参照して、ＣＰＵコア（１）１０１がアイドル状態であるか否かを確認する（Ｓ５１３）。
ＣＰＵコア（１）１０１がアイドル状態である場合（Ｓ５１３でＹＥＳ）は、ＣＰＵコア（２）１０２は、ＣＰＵコア（１）１０１をスケジューラ２１２の管理下に組込み（Ｓ５１４）、ＯＳ（２）２１１をＳＭＰ用ＯＳとして動作させる。
また、ＣＰＵコア（２）１０２は、ＯＳ（１）２０１が使用していたＯＳ（１）実行領域３１１をＯＳ（２）２１１用に新たに確保し、ＯＳ（２）２１１の管理下に加える（Ｓ５１５）。
【００３４】
このように、本実施の形態に係る計算機システムでは、マルチコアプロセッサを用いて処理を継続しつつシステムの安定性を担保することができる。
以上の説明では、ＯＳ（１）２０１上のプログラムで不安定動作が発生した際にＯＳ（２）２１１を用いて安定状態へ復帰する手順を示した。
ＯＳ（２）２１１上のプログラムに不安定動作が発生した場合も同様に、ＯＳ（１）２０１を用いて安定状態へと復帰することができる。
また、以上では、マルチコアプロセッサ１００を構成するＣＰＵコアが２個の例を説明した。
なお、ＣＰＵコアが３個以上のコアの場合でも、同様に一部のＣＰＵコアを切り離して、安定状態への復帰が可能である。
また、以上では、複数のＣＰＵコアが含まれるマルチコアプロセッサ１００の計算機システムを説明したが、複数のプロセッサ（ＣＰＵ）で構成される計算機システムにも、本実施の形態を適用することができる。
また、本実施の形態に示した手順により、本発明に係る制御方法を実現することができる。
【００３５】
以上、本実施の形態では、
マルチコアプロセッサにおいて動作中のＣＰＵコアを途中で分離し、
分離したＣＰＵコアで新たにＯＳを動作させ、
すでに動作していたＯＳでの処理を新たに動作させたＯＳで引き継がせることにより
システムの安定化を行う高可用性計算機方式を説明した。
【００３６】
また、本実施の形態では、
新たに動作するＯＳが、
動作していたＯＳで使用していたＣＰＵコアを統合して処理を継続する高可用性計算機方式を説明した。
【００３７】
また、本実施の形態では、
ＯＳの使用するメモリを動的に変更する高可用性計算機方式を説明した。
【符号の説明】
【００３８】
１０  計算機システム、１００  マルチコアプロセッサ、１０１  ＣＰＵコア（１）、１０２  ＣＰＵコア（２）、１１０  バス、１１１  ＲＡＭ、１１２  ＲＯＭ、１１３  ＩＯ装置、２００  ブートローダ、２０１  ＯＳ（１）、２０２  スケジューラ、２０３  不安定検知部、２０４  プログラム（Ａ）、２０５  プログラム（Ｂ）、２１１  ＯＳ（２）、２１２  スケジューラ、２１３  不安定検知部、３０１  ブートローダ実行イメージ、３０２  ＯＳ実行イメージ、３０３  アプリケーションイメージ、３０４  スナップショットイメージ（１）、３０５  スナップショットイメージ（２）、３１１  ＯＳ（１）実行領域、３１２  ＯＳ（２）実行領域、３１３  共有メモリ領域、３２１  ＯＳ（１）専用領域、３２２  ＯＳ（２）専用領域、３３１  起動フラグ、３３２  準備完了フラグ、３３３  ＯＳ起動許可フラグ、３３４  プロセス移行フラグ、３３５  ＣＰＵ待機フラグ、３３６  再稼動動作フラグ。
【図１】
0005996110.tif 000002
【図２】
0005996110.tif 000003
【図３】
0005996110.tif 000004
【図４】
0005996110.tif 000005
【図５】
0005996110.tif 000006
【図６】
0005996110.tif 000007
【図７】
0005996110.tif 000008
【図８】
0005996110.tif 000009
【図９】
0005996110.tif 000010
【図１０】
0005996110.tif 000011
【図１１】
0005996110.tif 000012