(57)【要約】  安価であり、かつ高性能なシステムをユーザに提供する。システム（１００）は、プロセッサを有するＳｏＣ（１０８）とメモリ（１０９）を含んだドメイン（１０７）の集合で構築されている。このとき、システム（１００）は、ドメイン（１０７＃０）内のプロセッサに、ドメイン（１０７＃０）〜ドメイン（１０７＃２）を管理するマスタ機構を設定する。同様に、システム（１００）は、ドメイン（１０７＃１）のプロセッサに、自身を管理するローカルマスタ機構と、マスタコンテキストを自ドメイン内のメモリ（１０９）にミラーリングする仮想マスタ機構と、を設定する。ドメイン（１０７＃０）内のプロセッサは、メモリ（１０９＃０）〜メモリ（１０９＃２）の論理アドレスが連続するようなオフセット値を、ドメイン（１０７＃０）〜ドメイン（１０７＃２）に通知する。
2012114443.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサのうちの一のプロセッサに前記複数のプロセッサを管理するマスタ機構を設定し、
前記複数のプロセッサのうちの前記一のプロセッサ以外のプロセッサのそれぞれに当該プロセッサを管理するローカルマスタ機構と仮想マスタ機構とを設定し、
前記マスタ機構によって管理される共有メモリが前記複数のプロセッサから連続したメモリとしてアクセスされるために、前記マスタ機構が前記複数のプロセッサにアドレスのオフセット値を通知すること
を特徴とするプロセッサ管理方法。
【請求項２】
前記オフセット値が通知された後に、前記ローカルマスタ機構は、前記オフセット値に基づいて前記共有メモリを前記ローカルマスタ機構が管理するメモリ領域へ割り当てること
を特徴とする請求項１に記載のプロセッサ管理方法。
【請求項３】
前記仮想マスタ機構は、前記マスタ機構から転送されるコンテキストデータを前記ローカルマスタ機構が管理するメモリ領域に格納すること
を特徴とする請求項１または請求項２に記載のプロセッサ管理方法。
【請求項４】
前記仮想マスタ機構は、前記マスタ機構に設定されたブレークポイントを検出したときに、前記マスタ機構のコンテキストデータを前記ローカルマスタ機構が管理するメモリ領域に格納すること
を特徴とする請求項１または請求項２に記載のプロセッサ管理方法。
【請求項５】
第１スレッドにおいて前記コンテキストデータを前記メモリ領域に格納するときに、更新された前記コンテキストデータが第２スレッドにおいて検出されるとき、前記第１スレッドの処理を中止すること
を特徴とする請求項４に記載のプロセッサ管理方法。
【請求項６】
前記マスタ機構または前記ローカルマスタ機構は、障害を検出するための処理を行うこと
を特徴とする請求項１乃至請求項５の何れか一に記載のプロセッサ管理方法。
【請求項７】
前記マスタ機構または前記ローカルマスタ機構は、前記マスタ機構のコンテキストデータにタイムスタンプまたは付随情報を所定周期毎に書き込み、
前記タイムスタンプまたは前記付随情報に基づいて前記障害を検出すること
を特徴とする請求項６に記載のプロセッサ管理方法。
【請求項８】
前記障害が検出されるとき、前記マスタ機構は少なくとも一部の処理を停止すること
を特徴とする請求項６または請求項７に記載のプロセッサ管理方法。
【請求項９】
前記障害が検出され、前記ローカルマスタ機構は前記マスタ機構に通知して前記障害が前記マスタ機構の障害であるか否かを判断し、
前記マスタ機構の障害であると判断されたとき、前記ローカルマスタ機構が前記複数のプロセッサを管理する状態にあるか否かを判断すること
を特徴とする請求項６または請求項７に記載のプロセッサ管理方法。
【請求項１０】
前記障害が検出され、前記マスタ機構への通知に対して応答がない場合に、前記ローカルマスタ機構は前記マスタ機構が制御可能な通話装置へ発信して前記マスタ機構と切断された状態か否かを判断し、
前記マスタ機構と切断された状態であると判断された場合、前記ローカルマスタ機構に設定されたプロセッサの動作を終了すること
を特徴とする請求項６に記載のプロセッサ管理方法。
【請求項１１】
前記ローカルマスタ機構が前記複数のプロセッサを管理する状態にあると判断されるとき、前記ローカルマスタ機構は新たなマスタ機構として設定すること
を特徴とする請求項６乃至請求項９の何れか一に記載のプロセッサ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサを管理するプロセッサ管理方法に関する。
【背景技術】
【０００２】
近年、携帯電話等の携帯端末は、用途が広範囲となり、機能も豊富となっている。このように携帯端末に求められる性能要求が高くなってきている。たとえば、高機能な携帯端末を提供できる技術として、携帯端末を画像入出力用ユニットと音声受信ユニットというように、ユニットごとに分離可能な技術が開示されている（たとえば、下記特許文献１、２を参照。）。これにより、ユーザは、通話を行いつつ、画像閲覧を行うといった高機能なサービスを享受することができる。【０００３】
また、各ユニットをドッキング可能な携帯端末について、各ユニットを、バスを介してデバイスと接続可能にする技術が開示されている（たとえば、下記特許文献３を参照。）。また、携帯端末の各ユニット内で、異常、故障を診断する自己診断回路を有する技術が開示されている（たとえば、下記特許文献４を参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−１７６３７１号公報
【特許文献２】特開平１０−２２８４５８号公報
【特許文献３】特公平６−６６０５７号公報
【特許文献４】特開平３−２１７１３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した従来技術において、特許文献１〜４にかかる技術では、高性能が求められる分、各ユニットに搭載されるプロセッサが高性能のプロセッサとなるため、コストの増加を招いてしまうという問題があった。具体的には、複数のユニットに分割可能な携帯端末は、複数のユニットに分割されたことによるバックアップ処理や、機能のミラーリングを行う場合に、高性能プロセッサを複数配置しておくことが要求されるため、コストが増加してしまっていた。【０００６】
本発明は、上述した従来技術による問題点を解消するため、安価であり、かつ高性能なシステムをユーザに提供できるプロセッサ管理方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、複数のプロセッサのうちの一のプロセッサに複数のプロセッサを管理するマスタ機構を設定し、複数のプロセッサのうちの一のプロセッサ以外のプロセッサのそれぞれに当該プロセッサを管理するローカルマスタ機構と仮想マスタ機構とを設定し、マスタ機構によって管理される共有メモリが複数のプロセッサから連続したメモリとしてアクセスされるために、マスタ機構が複数のプロセッサにアドレスのオフセット値を通知するプロセッサ管理方法が提案される。
【発明の効果】
【０００８】
本発明の一側面によれば、安価であり、かつ高性能なシステムをユーザに提供できるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、本実施の形態にかかるシステム１００の破損前と破損後の動作を示す説明図である。
【図２】図２は、システム１００のハードウェアを示すブロック図である。
【図３】図３は、システム１００の機能を示すブロック図である。
【図４】図４は、システム１００のソフトウェアを示すブロック図である。
【図５Ａ】図５Ａは、スレーブドメイン破損時による障害ドメイン検出動作を示す説明図（その１）である。
【図５Ｂ】図５Ｂは、スレーブドメイン破損時による障害ドメイン検出動作を示す説明図（その２）である。
【図６Ａ】図６Ａは、スレーブドメイン破損後の復元動作を示す説明図（その１）である。
【図６Ｂ】図６Ｂは、スレーブドメイン破損後の復元動作を示す説明図（その２）である。
【図７Ａ】図７Ａは、マスタドメイン破損時の動作を示す説明図（その１）である。
【図７Ｂ】図７Ｂは、マスタドメイン破損時の動作を示す説明図（その２）である。
【図８Ａ】図８Ａは、分離状態で破損した場合の動作を示す説明図（その１）である。
【図８Ｂ】図８Ｂは、分離状態で破損した場合の動作を示す説明図（その２）である。
【図９】図９は、ステータステーブル３０３の記憶内容の一例を示す説明図である。
【図１０】図１０は、起動処理を示すフローチャートである。
【図１１】図１１は、マスタドメイン、スレーブドメインの運用時処理を示すフローチャート（その１）である。
【図１２】図１２は、マスタドメイン、スレーブドメインの運用時処理を示すフローチャート（その２）である。
【図１３】図１３は、マスタコンテキスト転送処理１を示すフローチャートである。
【図１４】図１４は、マスタコンテキスト転送処理２を示すフローチャートである。
【図１５】図１５は、ハードチェックスレッド（マスタ）の処理を示すフローチャートである。
【図１６】図１６は、ハードチェックスレッド（スレーブ）処理を示すフローチャートである。
【図１７】図１７は、障害ドメイン検出処理を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に添付図面を参照して、開示のプロセッサ管理方法の実施の形態を詳細に説明する。なお、下記説明では、プロセッサ管理方法を適用したシステムについて説明を行う。
【００１１】
図１は、本実施の形態にかかるシステム１００の破損前と破損後の動作を示す説明図である。符号１０１で示す説明図では、複数のプロセッサを有するシステム１００の破損前の状態を示しており、符号１０２で示す説明図では、システム１００の破損後の状態を示している。
【００１２】
始めに、符号１０１で示す図の説明を行う。システム１００は、ディスプレイユニット１０３と、キーボードユニット１０４を含む。ディスプレイユニット１０３は、ディスプレイ１０５を含むユニットである。キーボードユニット１０４は、キーボード１０６を含むユニットである。
【００１３】
また、システム１００は、独立して１つのコンピュータシステムとして動作可能であるドメイン単位で分割されている。具体的には、ディスプレイユニット１０３にはドメイン１０７＃０が含まれ、キーボードユニット１０４にはドメイン１０７＃１、ドメイン１０７＃２が含まれる。以下、接尾記号となる“＃０”〜“＃２”が付与されたハードウェアは、対応するドメイン１０７内に含まれるハードウェアであることを示す。同様に、“＃０”〜“＃２”が付与されたソフトウェアは、対応するドメイン１０７内のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）によって実行されるソフトウェアであることを示す。
【００１４】
ドメイン１０７には、ＳｏＣ（Ｓｙｓｔｅｍ−ｏｎ−ａ−Ｃｈｉｐ）１０８、メモリ１０９が含まれる。具体的には、ドメイン１０７＃０にはＳｏＣ１０８＃０とメモリ１０９＃０が含まれ、ドメイン１０７＃１にはＳｏＣ１０８＃１とメモリ１０９＃１が含まれ、ドメイン１０７＃２にはＳｏＣ１０８＃２とメモリ１０９＃２が含まれる。なお、ドメイン１０７、ＳｏＣ１０８、メモリ１０９の詳細については、図２にて後述する。なお、ＳｏＣ１０８は、単なる携帯電話機能を実現する簡易的なＳｏＣを想定している。簡易的なＳｏＣであるため、ＳｏＣ１０８のコストは低く抑えることができる。
【００１５】
またドメイン１０７＃０〜ドメイン１０７＃２は、バス１１０で接続されている。バス１１０は、たとえば、フレキシブルケーブル等を採用することができる。または、ドメイン１０７＃０〜ドメイン１０７＃２の接続方法は、有線でなく無線であってもよい。たとえば、ドメイン１０７＃０〜ドメイン１０７＃２は、ＩＥＥＥ８０２．１５．１規格に代表される近接無線通信部を含み、近接無線通信部によってドメイン間通信を行ってもよい。
【００１６】
また、ドメイン１０７＃０〜ドメイン１０７＃２は、仮想的に１つのコンピュータシステムをユーザに提供するＯＳを実行する。これにより、システム１００は、３ドメインを含んだシステムとなる。たとえば、ＳｏＣ１０８＃０〜ＳｏＣ１０８＃２内にＣＰＵが１つずつ存在する場合、システム１００は３つのＣＰＵを有するシステム１００となる。
【００１７】
なお、図１では、ドメイン１０７＃０内のＣＰＵに、システム１００を管理するマスタ機構が設定され、ドメイン１０７＃１、ドメイン１０７＃２のＣＰＵに、自身を管理するローカルマスタ機構が設定された場合を想定している。
【００１８】
また、メモリ１０９＃０〜メモリ１０９＃２は、連続した共有メモリ空間となるように物理アドレスからのオフセット値が設定されている。具体的なオフセット値については、図４にて後述する。オフセット値によって、メモリ１０９＃０の論理アドレスは０ｘ０００〜０ｘ０ｆｆとなり、メモリ１０９＃１の論理アドレスは０ｘ１００〜０ｘ１ｆｆとなり、メモリ１０９＃２の論理アドレスは０ｘ２００〜０ｘ２ｆｆとなる。最終的に、メモリ１０９＃０〜メモリ１０９＃２は、論理アドレス０ｘ０００〜０ｘ２ｆｆを各ドメインに提供することができる。
【００１９】
このように、システム１００は、各ドメインのメモリサイズが小さくとも、複数のドメインを接続することで、各ドメインに、より広いアドレスを提供することができる。広いアドレスを利用できるようになったシステム１００は、同時に多くのアプリケーションソフトウェア（以下、「アプリ」と称する）を起動することができ、高性能なサービスをユーザに提供できる。
【００２０】
また、ドメイン１０７＃０〜ドメイン１０７＃２は、相互に他のドメインを診断している。具体的には、ドメイン１０７＃０は、ドメイン１０７＃１とドメイン１０７＃２を診断し、ドメイン１０７＃１は、ドメイン１０７＃０とドメイン１０７＃２を診断し、ドメイン１０７＃２は、ドメイン１０７＃０とドメイン１０７＃１を診断している。これにより、ドメイン１０７＃０〜ドメイン１０７＃２のうちいずれかのドメインに障害が発生した場合、他のドメインは障害の発生を検出できる。なお、具体的な診断方法としては、図９にて後述する。なお、符号１０１に示す図では、ドメイン１０７＃０〜ドメイン１０７＃２は正常動作しているため、診断ＯＫとなる。
【００２１】
続けて、符号１０２で示す図の説明を行う。符号１０２で示すシステム１００は、システム１００に加えられた衝撃等により、ディスプレイユニット１０３とキーボードユニット１０４との結合部分が破損した状態である。さらに、システム１００は、衝撃によってＳｏＣ１０８＃１が破損した状態である。ＳｏＣ１０８＃１が破損した結果、ドメイン１０７＃１は、コンピュータシステムとして動作不可能な状態である。なお、バス１１０は、断線が発生しておらず、ドメイン１０７＃０とドメイン１０７＃２間の通信を行える状態である。
【００２２】
ドメイン１０７＃１の診断結果がＮＧとなり、障害が発生したという情報は、ドメイン１０７＃０による診断、またドメイン１０７＃２による診断によって検出される。検出を受けたシステム１００は、３ドメインから２ドメインの動作に切り替える。これにより、システム１００は、障害発生時に、機能や性能の制限を最小限にしつつ、継続的に利用することができる。
【００２３】
（システム１００のハードウェア）
図２は、システム１００のハードウェアを示すブロック図である。図２において、システム１００は、ディスプレイ１０５と、キーボード１０６と、ドメイン１０７＃０〜ドメイン１０７＃２と、フラッシュＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０１と、フラッシュＲＯＭコントローラ２０２と、フラッシュＲＯＭ２０３と、を含む。また、ドメイン１０７＃０には、ＣＰＵ２０４＃０と、ペリフェラル２０５＃０と、電力制御回路２０６＃０と、ＤＢＢ（Ｄｉｇｉｔａｌ  Ｂａｓｅ  Ｂａｎｄ）２０７＃０と、自己診断回路２０８＃０、メモリ１０９＃０を含む。なお、図２で示すシステム１００は、３つのドメインを含むが、２以上のドメインを含んでいてもよい。
【００２４】
また、メモリ１０９＃０、ＣＰＵ２０４＃０〜自己診断回路２０８＃０は、ＳｏＣ内部バス２０９＃０で接続されている。同様に、ドメイン１０７＃１には、メモリ１０９＃１、ＣＰＵ２０４＃１〜自己診断回路２０８＃１を含み、ＳｏＣ内部バス２０９＃１で接続されている。また、ドメイン１０７＃２には、メモリ１０９＃２、ＣＰＵ２０４＃２〜自己診断回路２０８＃２を含み、ＳｏＣ内部バス２０９＃２で接続されている。
【００２５】
また、ドメイン１０７＃０について、ＳｏＣ１０８＃０は、ＣＰＵ２０４＃０〜ＤＢＢ２０７＃０を含み、自己診断回路２０８＃０とメモリ１０９＃０は、ＳｏＣ１０８＃０の外部に存在する。ドメイン１０７＃１、ドメイン１０７＃２についても同様である。以下、ドメイン１０７＃０に含まれるハードウェアについて説明を行うが、ドメイン１０７＃１、ドメイン１０７＃２に含まれるハードウェアも同様の機能を有する。
【００２６】
ＣＰＵ２０４＃０は、システム１００の全体の制御を司る。ペリフェラル２０５＃０は、ＣＰＵ２０４＃０以外の周辺機器を示している。たとえば、ペリフェラル２０５＃０は、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）であったり、ＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）であってもよい。または、ペリフェラル２０５＃０は、ディスプレイ１０５等を制御するコントローラであったりしてもよい。
【００２７】
電力制御回路２０６＃０は、ＣＰＵ２０４＃０、ペリフェラル２０５＃０、ＤＢＢ２０７＃０の電力を制御する回路である。さらに、電力制御回路２０６＃０は、ＳｏＣ１０８＃０の外部にある自己診断回路２０８＃０と、メモリ１０９＃０の電力を制御してもよい。たとえば、電力制御回路２０６＃０は、ペリフェラル２０５＃０が未使用である場合に、ペリフェラル２０５＃０に提供する電力を停止してもよい。
【００２８】
ＤＢＢ２０７＃０は、通信、通話機能を実行する通話装置である。具体的に、ＤＢＢ２０７＃０は、通信相手を特定する機能や、データに誤り制御符号を付与するといった機能を有する。また、ＤＢＢ２０７＃０は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークに接続され、ネットワークを介して他の装置に接続される。なお、ＤＢＢ２０７＃０は、ＤＢＢ２０７＃１、ＤＢＢ２０７＃２とも通信可能である。
【００２９】
自己診断回路２０８＃０は、ドメイン１０７＃０内の各装置が正常に動作しているかを診断する機能を有する回路である。たとえば、自己診断回路２０８＃０は、ＳｏＣ１０８＃０内の電流、電圧、温度を測定し、異常値になった場合に診断ＮＧとして出力する。
【００３０】
なお、電流、電圧が異常値となる場合としては、たとえば、ドメイン１０７＃０への衝撃、または、装置内の劣化に伴って電気回路が短絡した場合、ドメイン１０７＃０に設計値を超える電流が流れる可能性がある。または、温度が異常値となる場合としては、ドメイン１０７＃０で実行中のソフトウェアによって、ＣＰＵ２０４＃０が熱暴走した場合である。自己診断回路２０８＃０は、このような状態を検出し、診断ＮＧとして出力する。
【００３１】
メモリ１０９＃０は、データを記憶できる記憶装置である。たとえば、メモリ１０９＃０は、ＲＯＭ、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等である。たとえば、ＲＯＭは、ブートプログラムなどのプログラムを記憶している。また、ＲＡＭは、ＣＰＵ２０４＃０のワークエリアとして使用される。なお、ＳｏＣ内部バス２０９＃０は、ＣＰＵ２０４＃０とワークエリアとなるメモリ１０９＃０を接続しており、ＣＰＵ２０４＃０の能力を発揮させるため、高速転送が可能であることが好ましい。
【００３２】
ディスプレイ１０５は、カーソル、アイコンあるいはツールボックスを始め、文書、画像、機能情報などのデータを表示する。ディスプレイ１０５は、たとえば、ＴＦＴ（Ｔｈｉｎ  Ｆｉｌｍ  Ｔｒａｎｓｉｓｔｏｒ）液晶ディスプレイなどを採用することができる。キーボード１０６は、文字、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード１０６は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００３３】
フラッシュＲＯＭ２０１は、読出し速度が高速なフラッシュＲＯＭであり、たとえば、ＮＯＲ型フラッシュメモリである。フラッシュＲＯＭ２０１は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などのシステムソフトウェアやアプリなどを記憶している。たとえば、ＯＳを更新する場合、システム１００は、ＤＢＢ２０７を経由して新しいＯＳを受信し、フラッシュＲＯＭ２０１に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００３４】
フラッシュＲＯＭコントローラ２０２は、ＣＰＵ２０４＃０〜ＣＰＵ２０４＃２の制御にしたがってフラッシュＲＯＭ２０３に対するデータのリード／ライトを制御する。フラッシュＲＯＭ２０３は、データの保存、運搬を主な目的としたフラッシュＲＯＭであり、たとえば、ＮＡＮＤ型フラッシュメモリである。また、フラッシュＲＯＭ２０３は、フラッシュＲＯＭコントローラ２０２の制御で書き込まれたデータを記憶する。データの具体例としては、システム１００を使用するユーザがＤＢＢ２０７を通して取得した画像データ、映像データや、本実施の形態であるプロセッサ管理方法を実行するプログラムが格納されていてもよい。フラッシュＲＯＭ２０３は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００３５】
（システム１００の機能）
次に、システム１００の機能について説明する。図３は、システム１００の機能を示すブロック図である。システム１００は、検出部３１１と、転送部３１２と、判断部３１３と、設定部３１４と、通知部３１５と、割当部３１６と、格納部３１７と、設定部３１８と、終了部３１９と、を含む。この制御部となる機能（検出部３１１〜終了部３１９）は、記憶装置に記憶されたプログラムをＣＰＵ２０４＃０〜ＣＰＵ２０４＃２が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図１、図２に示したメモリ１０９、フラッシュＲＯＭ２０１、フラッシュＲＯＭ２０３などである。
【００３６】
なお、図３では、ＣＰＵ２０４＃０がシステム１００全体を制御することを想定している。それに関連して、図３では、各機能部のうち、検出部３１１、割当部３１６は、ＣＰＵ２０４＃０〜ＣＰＵ２０４＃２が実行することを想定している。また、転送部３１２、設定部３１４、通知部３１５は、システム１００全体を制御するＣＰＵ２０４＃０が実行することを想定している。また、判断部３１３、格納部３１７、設定部３１８、終了部３１９は、ＣＰＵ２０４＃１、ＣＰＵ２０４＃２が実行することを想定している。したがって、たとえば、ＣＰＵ２０４＃１がシステム１００全体を制御する場合、ＣＰＵ２０４＃１が、転送部３１２、設定部３１４、通知部３１５を有していてもよい。
【００３７】
また、システム１００は、メモリ１０９内に格納されているマスタコンテキスト３０１、ミラーリングマスタコンテキスト３０２にアクセス可能である。マスタコンテキスト３０１は、システム１００の運用時に要求される情報群が格納されている。たとえば、マスタコンテキスト３０１は、システムの起動情報、時刻情報、ペリフェラル２０５の設定情報、メモリ１０９に割り当てたオフセット値、重要なプロセスのコンテキスト情報等を格納している。ミラーリングマスタコンテキスト３０２は、マスタコンテキスト３０１と同内容が記憶されている。なお、ミラーリングマスタコンテキスト３０２は、転送部３１２、格納部３１７の機能により、マスタコンテキスト３０１と同内容を記憶するように維持される。
【００３８】
また、マスタコンテキスト３０１、ミラーリングマスタコンテキスト３０２内には、ステータステーブル３０３が格納されている。ステータステーブル３０３は、自ドメイン内の診断情報として、診断時刻と診断結果が格納されている。ステータステーブル３０３の詳細については、図９にて後述する。
【００３９】
検出部３１１は、他ドメイン１０７の障害を検出する機能を有する。たとえば、検出部３１１＃０〜検出部３１１＃２は、他ドメイン１０７内の自己診断回路２０８に診断実行を要求して、診断結果を取得して他ドメイン１０７の障害を検出してもよい。また、検出部３１１は、マスタ機構のコンテキストデータにタイムスタンプまたは付随情報を所定周期毎に書き込み、タイムスタンプまたは付随情報に基づいて障害を検出してもよい。
【００４０】
たとえば、検出部３１１＃０〜検出部３１１＃２は、ステータステーブル３０３＃０に自身のドメインの診断結果を行った診断時刻と診断結果を１分毎に書き込む。書き込み後、検出部３１１＃０〜検出部３１１＃２は、自ドメイン内のステータステーブル３０３の診断時刻と診断結果に基づいて障害を検出する。なお、ステータステーブル３０３＃０に書き込まれた内容は、転送部３１２、格納部３１７の機能により、自ドメイン内のステータステーブル３０３に格納される。
【００４１】
具体的には、検出部３１１＃０〜検出部３１１＃２は、診断時刻が所定周期以上経過したドメインが存在する場合、他ドメインの障害を検出する。または、検出部３１１＃０〜検出部３１１＃２は、診断結果がＮＧとなったドメインが存在する場合、他ドメインの障害を検出する。なお、検出結果は、検出部３１１の機能を有するＣＰＵ２０４のレジスタ、キャッシュメモリ、メモリ１０９などの記憶領域に格納されてもよい。
【００４２】
転送部３１２は、複数のプロセッサのうちの一のプロセッサ以外のプロセッサに更新されたコンテキストデータを転送する機能を有する。たとえば、転送部３１２は、マスタコンテキスト３０１のうち更新されたデータと、更新されたアドレスをＣＰＵ２０４＃１、ＣＰＵ２０４＃２に通知する。なお、通知された結果は、ＣＰＵ２０４＃０のレジスタ、キャッシュメモリ、メモリ１０９＃０などの記憶領域に格納されてもよい。
【００４３】
判断部３１３は、検出部３１１＃１、検出部３１１＃２によって障害が検出されるときに、複数のプロセッサを管理する状態にあると判断する機能を有する。たとえば、判断部３１３＃２は、障害が検出された場合に、マスタ機構からの応答がない場合、ローカルマスタ機構を実行するＣＰＵのうちいずれか一つのＣＰＵを、複数のプロセッサを管理する状態にあると判断する。また、判断部３１３は、ローカルマスタ機構を実行するＣＰＵを順位づけしておき、順位が最も高いＣＰＵを複数のプロセッサを管理する状態にあると判断してもよい。
【００４４】
また、判断部３１３は、さらに、マスタ機構に通知して障害がマスタ機構の障害であるか否かを判断してもよい。たとえば、判断部３１３＃２は、バス１１０を経由してマスタ機構に設定されたＣＰＵ２０４＃０からの応答の有無によって、マスタ機構の障害の可能性があることを判断する。
【００４５】
さらに、判断部３１３は、マスタ機構への通知に対して応答がない場合に、マスタ機構が制御可能な通話装置へ発信してマスタ機構と切断された状態か否かを判断してもよい。具体的には、判断部３１３は、バス１１０を経由してＣＰＵ２０４＃０からの応答がない場合、ＤＢＢ２０７＃０に発信してマスタ機構と切断された状態か否かを判断する。なお、判断結果は、判断部３１３の機能を有するＣＰＵ２０４のレジスタ、キャッシュメモリ、メモリ１０９などの記憶領域に格納されてもよい。
【００４６】
設定部３１４は、複数のプロセッサのうちの一のプロセッサに複数のプロセッサを管理するマスタ機構を設定する機能を有する。たとえば、設定部３１４は、ＣＰＵ２０４＃０〜ＣＰＵ２０４＃２のうちドメイン１０７＃０のＣＰＵ２０４＃０にマスタ機構を設定する。なお、マスタ機構が設定されたＣＰＵは、マスタ機構スレッドを実行する。
【００４７】
また、設定部３１４は、複数のプロセッサのうちの一のプロセッサ以外のプロセッサのそれぞれに、自身を管理するローカルマスタ機構と仮想マスタ機構とを設定する。たとえば、設定部３１４は、ＣＰＵ２０４＃０〜ＣＰＵ２０４＃２のうちＣＰＵ２０４＃１とＣＰＵ２０４＃２に、ローカルマスタ機構と仮想マスタ機構を設定する。なお、ローカルマスタ機構が設定されたＣＰＵは、ローカルマスタ機構を実行する。同様に、仮想マスタ機構が設定されたＣＰＵは、仮想マスタ機構スレッドを実行する。
【００４８】
また、設定部３１４は、検出部３１１＃０によって障害が検出されるときに、少なくとも一部の処理を停止させる設定を行う。具体的には、設定部３１４は、障害が検出されたドメインに対して、該当ドメインのメモリ１０９に割り当てたメモリ空間解放を設定する。さらに、設定部３１４は、該当ドメインのメモリ１０９への書き込み禁止を設定し、さらに該当ドメインへのスレッド生成禁止を設定する。なお、設定された情報は、メモリ１０９、フラッシュＲＯＭ２０１等の記憶領域に記憶される。
【００４９】
通知部３１５は、マスタ機構によって管理される共有メモリが複数のプロセッサから連続したメモリとしてアクセスされるために、マスタ機構が複数のプロセッサにアドレスのオフセット値を通知する機能を有する。たとえば、メモリ１０９＃０〜メモリ１０９＃２の物理アドレスが０ｘ００〜０ｘｆｆであることを想定する。このとき、通知部３１５は、ＣＰＵ２０４＃０にオフセット値０を通知し、ＣＰＵ２０４＃１にオフセット値０ｘ１００を通知し、ＣＰＵ２０４＃２にオフセット値０ｘ２００を通知する。なお、通知されるオフセット値は、通知先ＣＰＵが管理するメモリ１０９に格納される。また、通知元となる、ＣＰＵ２０４＃０のレジスタ、キャッシュメモリ、メモリ１０９＃０などの記憶領域にオフセット値が格納されてもよい。
【００５０】
割当部３１６は、通知部３１５によってオフセット値が通知された後に、オフセット値に基づいて共有メモリをローカルマスタ機構が管理するメモリ領域へ割り当てる機能を有する。
【００５１】
たとえば、割当部３１６＃０は、メモリ１０９＃０の物理アドレスに通知されたオフセット値０を加算して、メモリ１０９＃０の論理アドレスを０ｘ０００〜０ｘ０ｆｆで割り当てる。同様に、割当部３１６＃１は、メモリ１０９＃１の物理アドレスに通知されたオフセット値０ｘ１００を加算して、メモリ１０９＃１の論理アドレスを０ｘ１００〜０ｘ１ｆｆで割り当てる。また、割当部３１６＃２は、メモリ１０９＃２の物理アドレスに通知されたオフセット値０ｘ２００を加算して、メモリ１０９＃２の論理アドレスを０ｘ２００〜０ｘ２ｆｆで割り当てる。なお、割り当てを行ったという情報は、割当部３１６の機能を有するＣＰＵ２０４のレジスタ、キャッシュメモリ、メモリ１０９などの記憶領域に格納されてもよい。
【００５２】
格納部３１７は、転送部３１２から転送されるコンテキストデータをローカルマスタ機構が管理するメモリ領域に格納する機能を有する。たとえば、格納部３１７＃１は、更新されたコンテキストデータをミラーリングマスタコンテキスト３０２＃１に格納する。
【００５３】
また、格納部３１７は、マスタ機構に設定されたブレークポイントを検出したときに、マスタ機構のコンテキストデータをローカルマスタ機構が管理するメモリ領域に格納してもよい。たとえば、格納部３１７＃１は、マスタコンテキスト３０１に設定されたブレークポイントに対するライトアクセスを検出したときに、更新されたコンテキストデータをミラーリングマスタコンテキスト３０２＃１に格納する。
【００５４】
また、格納部３１７は、コンテキストデータをメモリ領域に格納する第１スレッドが実行される前に、前述のコンテキストデータがさらに更新されたコンテキストデータを格納する第２スレッドが実行されることが検出されるとき、第１スレッドを中止してもよい。
【００５５】
たとえば、第１スレッドが、アドレス０ｘ０４０に対して更新されたコンテキストデータを、ミラーリングマスタコンテキスト３０２＃１に格納するスレッドであることを想定する。このとき、格納部３１７＃１は、アドレス０ｘ０４０に対してさらに更新されたコンテキストデータをミラーリングマスタコンテキスト３０２＃１に格納する第２スレッドが実行されることが検出されると、第１スレッドの処理を中止する。なお、格納を行ったという結果は、格納部３１７の機能を有するＣＰＵ２０４のレジスタ、キャッシュメモリ、メモリ１０９などの記憶領域に格納されてもよい。
【００５６】
設定部３１８は、判断部３１３によって複数のプロセッサを管理する状態にあると判断されるとき、ローカルマスタ機構を新たなマスタ機構に設定する機能を有する。たとえば、設定部３１８＃１は、ＣＰＵ２０４＃１がＣＰＵ２０４＃０〜ＣＰＵ２０４＃２を管理する状態にあると判断されるときに、ＣＰＵ２０４＃１で実行するローカルマスタ機構を新たなマスタ機構に設定する。なお、設定結果は、設定部３１８の機能を有するＣＰＵ２０４のレジスタ、キャッシュメモリ、メモリ１０９などの記憶領域に格納されてもよい。
【００５７】
終了部３１９は、判断部３１３によってマスタ機構と切断された状態であると判断された場合に、ローカルマスタ機構に設定されたプロセッサの動作を終了する機能を有する。たとえば、終了部３１９＃２は、バス１１０が切断され、ＣＰＵ２０４＃０と切断された状態であると判断された場合に、ＣＰＵ２０４＃２をシャットダウンし、動作を終了する。また、シャットダウンとなる対象は、ローカルマスタ機構に設定されたプロセッサが含まれるドメイン内の全ての装置に対してであってもよい。動作を終了するという履歴は、フラッシュＲＯＭ２０１等の記憶領域に格納されてもよい。
【００５８】
以上、システム１００は、プロセッサと記憶領域とを含むドメインの集合のうち、システム１００を制御する特定のドメインの障害を、ドメインの集合のうち特定のドメイン以外の他のドメインによって検出する検出部３１１を含む。さらに、システム１００は、特定のドメイン内の記憶領域に記憶された自システムのコンテキストを、制御結果が更新されるたびに、他のドメインの記憶領域へ転送する転送部３１２を含む。検出部３１１によって特定のドメインの障害が検出された場合、システム１００は、転送部３１２によって他のドメインの記憶領域に転送されたコンテキストを用いて、他のドメインを、自システムを制御する新たな特定のドメインに設定する設定部３１８を含む。
【００５９】
図４は、システム１００のソフトウェアを示すブロック図である。システム１００は、図２で示したハードウェアを用いて、図４で示すソフトウェアを実行する。ＣＰＵ２０４＃０は、ＯＳが提供するソフトウェアとして、カーネル４０１＃０と、マスタ機構スレッド４０２＃０と、ＯＳ管理部４０３と、通信連携部４０４と、スケジューラ４０５とを実行する。また、ＣＰＵ２０４＃１は、カーネル４０１＃１と、仮想マスタ機構スレッド４０６＃１と、ローカルマスタ機構スレッド４０７＃１と、ＯＳ管理部４０３とを実行する。同様に、ＣＰＵ２０４＃２は、カーネル４０１＃２と、仮想マスタ機構スレッド４０６＃２と、ローカルマスタ機構スレッド４０７＃２と、ＯＳ管理部４０３を実行する。また、ＯＳ管理部４０３は、プロセス管理部４０８、メモリ管理部４０９を含む。
【００６０】
また、システム１００は、ＯＳの機能を利用して、ユーザにサービスを提供するアプリとして、プロセス４１０〜プロセス４１３を実行している。なお、ＣＰＵ２０４＃０がプロセス４１０を実行し、ＣＰＵ２０４＃１がプロセス４１１、プロセス４１２を実行し、ＣＰＵ２０４＃２がプロセス４１３を実行している。
【００６１】
カーネル４０１は、ＣＰＵ２０４＃０〜ＣＰＵ２０４＃２を制御するプログラムである。カーネル４０１は、ＯＳの中核の機能であり、たとえば、システム１００のリソースを管理し、スレッドなどのソフトウェアがハードウェアにアクセスできるようにする。
【００６２】
また、カーネル４０１は、ＣＰＵ２０４＃０〜ＣＰＵ２０４＃２のうち、いずれか１つのＣＰＵをマスタＣＰＵに設定し、マスタ機構スレッド４０２を起動させ、その他のＣＰＵに仮想マスタ機構スレッド４０６、ローカルマスタ機構スレッド４０７を起動させる。以降の説明では、マスタ機構スレッド４０２を実行しているＣＰＵが含まれるドメイン１０７をマスタドメインと定義し、ローカルマスタ機構スレッド４０７を実行しているＣＰＵが含まれるドメイン１０７をスレーブドメインと定義する。
【００６３】
また、カーネル４０１は、スレーブドメイン群に対して順位づけを行う。たとえば、カーネル４０１は、ドメイン１０７＃１をスレーブドメイン順位１と設定し、ドメイン１０７＃２をスレーブドメイン順位２と設定する。なお、ドメイン１０７内でのマスタドメイン設定、およびスレーブドメイン設定は、ドメイン１０７＃０〜ドメイン１０７＃２のうち、いずれのドメイン１０７がマスタドメインとなってもよい。たとえば、マスタドメインは、設計時点にて設計者によって設定されていてもよい。また、システム１００は、マスタドメインを、ディスプレイ１０５にメインメニューを表示するドメイン１０７に設定してもよい。
【００６４】
なお、ＳｏＣ内部バス２０９はバス１１０より高速である。このように、カーネル４０１は、システム１００を、仮想的なマルチコアプロセッサシステムとして、ユーザに提供する。また、カーネル４０１によって１つの仮想的なマルチコアプロセッサシステムとなったシステム１００は、ＣＰＵに専用のメモリを有するという、分散メモリ型のマルチコアプロセッサシステムという形態になる。
【００６５】
マスタ機構スレッド４０２は、システム１００全体の動作を制御するプログラムである。具体的に、マスタ機構スレッド４０２は、ペリフェラル２０５＃０〜ペリフェラル２０５＃２、ディスプレイ１０５、キーボード１０６、フラッシュＲＯＭコントローラ２０２等の初期化処理を行ったり、時刻の設定処理を行ったりする。なお、マスタ機構スレッド４０２は、システム１００の起動情報、時刻情報、ペリフェラル２０５＃０〜ペリフェラル２０５＃２等の情報、また、ＯＳ管理部４０３による実行結果を、マスタコンテキスト３０１に記録する。
【００６６】
ＯＳ管理部４０３は、システム１００を１コンピュータシステムとして提供するために、ドメイン１０７内ローカルの機能を有する。ＯＳ管理部４０３は前述の機能を満たすために、プロセス管理部４０８、メモリ管理部４０９を含む。具体的には、ＣＰＵ２０４＃０は、プロセス管理部４０８＃０とメモリ管理部４０９＃０を実行する。同様に、ＣＰＵ２０４＃１は、プロセス管理部４０８＃１とメモリ管理部４０９＃１を実行し、ＣＰＵ２０４＃２は、プロセス管理部４０８＃２とメモリ管理部４０９＃２を実行する。
【００６７】
通信連携部４０４は、マスタドメインが実行する機能であり、自ドメインのＤＢＢ２０７と連携して通信機能を行う機能を有する。図４の例では、通信連携部４０４は、ＤＢＢ２０７＃０と連携して通信機能を実行する。なお、他ドメインのＤＢＢ２０７は、使用しないため電源の供給を受けていない状態である。
【００６８】
スケジューラ４０５は、システム１００内のドメイン１０７＃０〜ドメイン１０７＃２に割り当てるプロセスを決定する機能を有する。プロセスとは、ＣＰＵの処理するプログラムの実行単位である。具体的に、スケジューラ４０５は、プロセス４１０をドメイン１０７＃０に割り当て、プロセス４１１とプロセス４１２をドメイン１０７＃１に割り当て、プロセス４１３をドメイン１０７＃２に割り当てる。
【００６９】
仮想マスタ機構スレッド４０６は、マスタ機構スレッド４０２が更新するマスタコンテキストを自ドメイン内のメモリ１０９にミラーリングする機能を有する。ミラーリングの形式としては、下記２つの方法が適用可能である。１つ目の処理方法は、ドメイン１０７間で同期を取り、マスタドメインが更新部分をスレーブドメインに通知する処理である。２つ目の処理方法は、ドメイン１０７間で同期を取らず、マスタドメインが更新部分をスレーブドメインに通知後他の処理に移り、スレーブドメインは、通知を受けて更新部分を反映する処理である。マスタコンテキスト転送処理１、マスタコンテキスト転送処理２の詳細については、図１３、図１４にて後述する。
【００７０】
ローカルマスタ機構スレッド４０７は、スレーブドメイン内の管理を行うスレッドである。たとえば、ローカルマスタ機構スレッド４０７＃１、ローカルマスタ機構スレッド４０７＃２は、マスタ機構スレッド４０２＃０から通知された処理内容を実行し、ログとして記録する。
【００７１】
また、マスタ機構スレッド４０２とローカルマスタ機構スレッド４０７は、自己診断回路２０８から診断ＯＫの通知を受け取り、自ドメインが動作中であることを他ドメインのマスタ機構スレッド４０２、またはローカルマスタ機構スレッド４０７に通知する。さらに、マスタ機構スレッド４０２とローカルマスタ機構スレッド４０７は、他ドメインが診断ＯＫか否かを判断する。
【００７２】
なお、具体的には、マスタ機構スレッド４０２とローカルマスタ機構スレッド４０７は、ハードチェックスレッドを起動し、ハードチェックスレッドが定期的に自己診断回路２０８に診断を実行させる。また、ハードチェックスレッドは、自己診断回路２０８によって診断ＯＫを受けたドメインを生存ドメインに設定する。また、ハードチェックスレッドは、自己診断回路２０８によって診断ＮＧを受けたドメイン、または所定周期を経過しても自己診断回路２０８によって診断が実行されていないドメインを障害ドメインに設定する。また、具体的な他ドメインの診断判断方法については、図９にて後述する。
【００７３】
プロセス管理部４０８は、ドメイン１０７に割り当てられたプロセスを管理する機能を有する。プロセス管理部４０８の動作モードは、マスタモードとスレーブモードが存在する。スレーブモードで動作するプロセス管理部４０８は、自ドメインに割り当てられたプロセスの生成、実行、終了を管理する。また、マスタモードで動作するプロセス管理部４０８＃０は、スレーブモードで動作する機能に加えて、システム１００のハードウェア等のリソースを管理する。
【００７４】
たとえば、スレーブモードで動作するプロセス管理部４０８＃１は、ドメイン１０７＃１に割り当てられたプロセス４１１とプロセス４１２を時分割にしたがってＣＰＵ２０４＃１に割り当てる。また、マスタモードで動作するプロセス管理部４０８＃０は、たとえば、フラッシュＲＯＭコントローラ２０２へのアクセス権を、プロセス４１３に付与する。
【００７５】
メモリ管理部４０９は、メモリ１０９＃０〜メモリ１０９＃２を仮想共有メモリ空間４１４としてプロセス４１０〜プロセス４１３に提供する機能を有する。たとえば、メモリ１０９＃０、メモリ１０９＃１、メモリ１０９＃２の物理アドレスが０ｘ００〜０ｘｆｆであると想定する。
【００７６】
このとき、メモリ管理部４０９＃０は、メモリ１０９＃０の論理アドレスを、メモリ１０９＃１の物理アドレスにオフセット値±０を加算した０ｘ０００〜０ｘ０ｆｆとしてプロセス４１０に提供する。さらに、メモリ管理部４０９＃０は、メモリ１０９＃１の論理アドレスを、メモリ１０９＃１の物理アドレスにオフセット値＋０ｘ１００を加算した０ｘ１００〜０ｘ１ｆｆとしてプロセス４１０に提供する。
【００７７】
さらに、メモリ管理部４０９＃０は、メモリ１０９＃２の論理アドレスを、メモリ１０９＃１の物理アドレスにオフセット値＋０ｘ２００を加算した０ｘ２００〜０ｘ２ｆｆとしてプロセス４１０に提供する。これにより、メモリ管理部４０９＃０は、プロセス４１０に論理アドレスを０ｘ０００〜０ｘ２ｆｆとなる仮想共有メモリ空間４１４を提供することができる。
【００７８】
同様に、メモリ管理部４０９＃１、メモリ管理部４０９＃２も、メモリ１０９＃０の論理アドレスを、物理アドレスにオフセット値±０を加算した値でプロセス４１０〜プロセス４１３に提供する。続けて、メモリ管理部４０９＃１、メモリ管理部４０９＃２は、メモリ１０９＃１の論理アドレスを、物理アドレスにオフセット値＋０ｘ１００を加算した値でプロセス４１０〜プロセス４１３に提供する。最後に、メモリ管理部４０９＃１、メモリ管理部４０９＃２は、メモリ１０９＃２の論理アドレスを、物理アドレスにオフセット値＋０ｘ２００を加算した値でプロセス４１０〜プロセス４１３に提供する。
【００７９】
これにより、メモリ管理部４０９＃１、メモリ管理部４０９＃２も、プロセス４１０〜プロセス４１３に論理アドレスを０ｘ００〜０ｘ２ｆｆとなる仮想共有メモリ空間４１４を提供することができる。
【００８０】
なお、オフセット値の設定方法としては、たとえば、メモリ管理部４０９は、マスタドメインのメモリ１０９の論理アドレスを０ｘ００から開始するアドレスに設定する。もし、マスタドメインのメモリ１０９の物理アドレスが０ｘ００より大きいアドレスで開始する場合、メモリ管理部４０９は、論理アドレス０ｘ００となるオフセット値を設定する。続けて、メモリ管理部４０９は、スレーブドメイン順位１のメモリ１０９の論理アドレスのオフセット値を、マスタドメインのメモリ１０９の論理アドレスの終了アドレスに設定する。以下、メモリ管理部４０９は、スレーブドメイン順位ｎのメモリ１０９の論理アドレスのオフセット値を、スレーブドメイン順位ｎ−１のメモリ１０９の論理アドレスの終了アドレスに設定する。なお、ｎは１以上の整数である。
【００８１】
以下、図４に示したソフトウェアの機能を利用して、図５Ａ〜図８Ｂにて、ドメイン１０７のいずれかが破損した場合の検出動作および復元動作を説明する。
【００８２】
図５Ａ、図５Ｂは、スレーブドメイン破損時による障害ドメイン検出動作を示す説明図である。図５Ａでは、システム１００が破損された状態を示している。図５Ａに示すシステム１００は、プロセス４１１によって生成された画面をディスプレイ１０５に表示中に、スレーブドメインとなるドメイン１０７＃１が破損した状態を示している。
【００８３】
このとき、図５Ｂで示すマスタ機構スレッド４０２＃０とローカルマスタ機構スレッド４０７＃２は、ドメイン１０７＃１が障害ドメインとなったことを検出する。検出後、スレーブドメインに属するローカルマスタ機構スレッド４０７＃２は、バス１１０を経由して、マスタドメインが生存ドメインであるかを確認する。図５Ａに示すシステム１００は、マスタドメインとなるドメイン１０７＃０が生存ドメインであるため、ローカルマスタ機構スレッド４０７＃２は、障害ドメイン検出時の処理を終了し、通常処理を続行する。また、マスタドメインに属するマスタ機構スレッド４０２＃０は、破損したドメイン１０７＃１を障害ドメインとして検出すると、復元動作に移行する。後述する図６Ａ、図６Ｂにて、スレーブドメイン破損後の復元動作について説明する。
【００８４】
図６Ａ、図６Ｂは、スレーブドメイン破損後の復元動作を示す説明図である。図６Ａに示すシステム１００は、スレーブドメインとなるドメイン１０７＃１が破損し障害ドメインとなったことを、マスタドメインに属するマスタ機構スレッド４０２＃０が検出した状態である。検出後、マスタ機構スレッド４０２＃０は、ドメイン１０７＃１に属するメモリ１０９＃１の論理アドレス０ｘ１００〜０ｘ１ｆｆを書き込み禁止に設定する。
【００８５】
書き込み禁止に設定することで、たとえばドメイン１０７＃１がソフトウェア暴走によって障害ドメインとなった場合に、システム１００は、暴走中のソフトウェアによるメモリ破壊、自動リセットによるメモリクリアを防止できる。なお、メモリ１０９＃１への読み込みについては許可される。これにより、たとえばドメイン１０７＃１で暴走していないソフトウェアがメモリ１０９＃１に出力したデータを、生存ドメインで実行中のソフトウェアが読み込むことが可能になるため、生存ドメインで実行中のソフトウェアの処理を継続することができる。
【００８６】
次に、マスタ機構スレッド４０２＃０は、障害ドメインへのスレッド生成禁止処理を実行する。なお、障害ドメインへのスレッド生成禁止は、障害ドメインが修復されるまで継続される。これにより、システム１００は、２ドメインで動作を継続できる。たとえば、ユーザは、システム１００のうち破損したドメインを含むユニットを修理にだしつつ、残ったユニットでシステム１００を稼働し続ける、といった運用が可能になる。図６Ａの例では、システム１００は、図５Ａにて示したプロセス４１１を終了し、メインメニューをディスプレイ１０５に表示している。
【００８７】
図７Ａ、図７Ｂは、マスタドメイン破損時の動作を示す説明図である。図７Ａに示すシステム１００は、ディスプレイユニット１０３に衝撃等が入り、マスタドメインとなるドメイン１０７＃０が破損した状態を示している。
【００８８】
このとき、図７Ｂで示すローカルマスタ機構スレッド４０７＃１とローカルマスタ機構スレッド４０７＃２は、ドメイン１０７＃０が破損し、ドメイン１０７＃０が障害ドメインとなったことを検出する。検出後、ローカルマスタ機構スレッド４０７＃１、ローカルマスタ機構スレッド４０７＃２は、それぞれ、バス１１０を経由して、マスタドメインの生存確認を行う。図７Ｂに示すシステム１００ではマスタドメインとなるドメイン１０７＃０が破損しているため、バス１１０を経由した生存確認は失敗する。
【００８９】
続けて、ローカルマスタ機構スレッド４０７＃１、ローカルマスタ機構スレッド４０７＃２は、ＤＢＢ２０７を利用して、マスタドメインの生存確認を行う。これにより、システム１００は、バス１１０が断線したためマスタドメインと通信が行えなくなっている状態か否かを判断できる。
【００９０】
具体的なＤＢＢ２０７を利用した生存確認とは、ローカルマスタ機構スレッド４０７＃１が、ＤＢＢ２０７＃１から、ＤＢＢ２０７＃０に対して通信発信する。ローカルマスタ機構スレッド４０７＃１は、発信に対して応答があればマスタドメインが生存していると判断し、発信に対して応答がなければマスタドメインが破損していると判断する。同様に、ローカルマスタ機構スレッド４０７＃２は、ＤＢＢ２０７＃２から、ＤＢＢ２０７＃０に対して通信発信することで、マスタドメインの生存確認を行う。
【００９１】
図７Ｂに示すシステム１００ではマスタドメインとなるドメイン１０７＃０が破損しているため、ＤＢＢ２０７＃０は、ＤＢＢ２０７＃１とＤＢＢ２０７＃２に対する通信発信に応答できない。したがって、ローカルマスタ機構スレッド４０７＃１とローカルマスタ機構スレッド４０７＃２は、マスタドメインが破損していると判断する。判断後、スレーブドメインの順位が最上位となるドメイン１０７＃１が、新たなマスタドメインとして運用を続行することになる。
【００９２】
具体的に、ローカルマスタ機構スレッド４０７＃１は、仮想マスタ機構スレッド４０６＃１を終了し、ローカルマスタ機構スレッド４０７＃１の出力先として、ミラーリングマスタコンテキスト３０２＃１を新たなマスタコンテキストに設定する。続けて、ローカルマスタ機構スレッド４０７＃１は、ローカルマスタ機構スレッド４０７＃１をマスタ機構スレッド４０２＃１として起動処理を実行する。これにより、システム１００は、スレーブドメインであったドメイン１０７＃１をマスタドメインとして設定し、運用を続行することができる。
【００９３】
図８Ａ、図８Ｂは、分離状態で破損した場合の動作を示す説明図である。図８Ａに示すシステム１００は、スレーブドメインとなるドメイン１０７＃１とバス１１０が破損した状態を示している。なお、図８Ａでは、バス１１０が有線であり、バス１１０が切断された状態を示している。もし、バス１１０として無線が採用されていた場合、図８Ａに示すシステム１００は、近接無線通信部が破損し、ドメイン間通信が行えない状態として想定する。
【００９４】
このとき、図８Ｂに示すマスタ機構スレッド４０２＃０とローカルマスタ機構スレッド４０７＃２は、ドメイン１０７＃１の破損を検出する。検出後、スレーブドメインに属するローカルマスタ機構スレッド４０７＃２は、バス１１０を経由して、マスタドメインが生存しているかを確認する。図８Ｂに示すシステム１００には、マスタドメインとなるドメイン１０７＃０が生存しているが、バス１１０が切断されているため、ローカルマスタ機構スレッド４０７＃２は、ドメイン１０７＃０の生存を確認できず、生存していないと判断する。続けて、ローカルマスタ機構スレッド４０７＃２は、ＤＢＢ２０７＃２を利用して、マスタドメインの生存確認を行う。
【００９５】
図８Ｂに示すシステム１００ではマスタドメインとなるドメイン１０７＃０が生存しているため、ＤＢＢ２０７＃２に対する通信発信に応答できる。したがって、ローカルマスタ機構スレッド４０７＃２は、マスタドメインが生存していると判断する。これにより、ローカルマスタ機構スレッド４０７＃２はバス１１０が断線したためマスタドメインと通信が行えなくなっている状態であると判断する。この状態では、ドメイン１０７＃２は、マスタドメインとなるドメイン１０７＃０の指示を受けることができなくなるため、シャットダウンし、動作を終了する。
【００９６】
なお、マスタドメインとバス１１０に障害が発生し、分離状態となる場合もありうる。たとえば、図８Ｂの状態で、ドメイン１０７＃１がマスタドメインと設定されており、ドメイン１０７＃０がスレーブドメイン順位１と設定されており、ドメイン１０７＃２がスレーブドメイン順位２と設定された状態を想定する。このとき、スレーブドメイン順位１であるドメイン１０７＃０が新たなマスタドメインとなり、起動処理を再実行する。起動時に、ドメイン１０７＃０は、スレーブドメイン順位２であったドメイン１０７＃２と通信できないため、起動処理時にシステム１００から切り離されることになる。
【００９７】
図９は、ステータステーブル３０３の記憶内容の一例を示す説明図である。なお、図９で示すステータステーブル３０３は、現在時刻が１２：３４：００以降の状態を示している。ステータステーブル３０３は、ドメイン種別、診断時刻、診断結果という３つのフィールドを含む。ドメイン種別フィールドには、ドメイン１０７の種別として、マスタドメインか、スレーブドメインか、またスレーブドメインであればスレーブドメイン順位が格納される。なお、ドメイン種別フィールドは、ドメイン１０７が一意に特定できればどのような値であってもよいので、たとえば、ドメイン１０７のＩＤ（ＩＤｅｎｔｉｆｉｃａｔｉｏｎ）であってもよい。
【００９８】
診断時刻フィールドには、自己診断回路２０８が診断を行った時刻が格納される。診断結果フィールドには、自己診断回路２０８による診断結果が格納される。たとえば、システム１００は、所定周期となる１分毎に自己診断回路２０８にて診断を行うことを想定している。この状態で、図９に示すステータステーブル３０３について、マスタドメインの自己診断回路２０８が、１２：３４：００にマスタドメインを診断し、診断結果がＯＫであることを示している。同様に、スレーブドメイン順位１の自己診断回路２０８が、１２：３４：００にスレーブドメイン順位１を診断し、診断結果がＯＫであることを示している。また、スレーブドメイン順位２の自己診断回路２０８が、１２：３３：００にスレーブドメイン順位２を診断し、診断結果がＯＫであることを示している。
【００９９】
また、スレーブドメイン順位２について１２：３４：００に診断が行われていないため、マスタドメインとスレーブドメイン順位１は、スレーブドメイン順位２が障害ドメインとなったことを検出する。また、図９には図示していないが、自己診断回路２０８の診断の結果、診断結果がＮＧとなり、診断結果フィールドにＮＧが記載される場合も存在する。このような場合も、他ドメインは診断結果フィールドにＮＧと記載されているドメインを障害ドメインとして検出する。
【０１００】
図１０は、起動処理を示すフローチャートである。システム１００は、電源投入される（ステップＳ１００１）と、マスタドメイン、スレーブドメイン順位１〜スレーブドメイン順位ｎをブート開始する（ステップＳ１００２〜ステップＳ１００４）。以降、マスタドメインがステップＳ１００５〜ステップＳ１００９を実行し、スレーブドメイン順位１がステップＳ１０１０〜ステップＳ１０１４を実行し、スレーブドメイン順位ｎがステップＳ１０１５〜ステップＳ１０１９を実行する。なお、スレーブドメイン順位ｎによるステップＳ１０１５〜ステップＳ１０１９の処理は、ステップＳ１０１０〜ステップＳ１０１４と等しいため、説明を省略する。
【０１０１】
マスタドメインは、仮想共有メモリ空間４１４を初期化する（ステップＳ１００５）。初期化後、マスタドメインは、アドレスのオフセット値を通知する（ステップＳ１００６）。通知後、マスタドメインは、メモリ１０９の物理アドレスからのオフセット値で設定される論理アドレスにメモリ１０９を割り当てる（ステップＳ１００７）。割り当て後、マスタドメインは、プロセス管理部４０８をマスタモードで起動し（ステップＳ１００８）、さらに、マスタ機構スレッド４０２を起動し（ステップＳ１００９）、起動処理を終了する。マスタドメインは、起動処理終了後、運用時処理に遷移する。
【０１０２】
また、スレーブドメイン順位１は、オフセット値の通知を受け付けたか否かを判断する（ステップＳ１０１０）。オフセット値の通知を受け付けていない場合（ステップＳ１０１０：Ｎｏ）、スレーブドメイン順位１は、再度ステップＳ１０１０の処理を実行する。オフセット値の通知を受け付けた場合（ステップＳ１０１０：Ｙｅｓ）、スレーブドメイン順位１は、メモリ１０９の物理アドレスからのオフセット値で設定される論理アドレスにメモリ１０９を割り当てる（ステップＳ１０１１）。割り当て後、スレーブドメイン順位１は、プロセス管理部４０８をスレーブモードで起動する（ステップＳ１０１２）。
【０１０３】
続けて、スレーブドメイン順位１は、仮想マスタ機構スレッド４０６を起動し（ステップＳ１０１３）、さらに、ローカルマスタ機構スレッド４０７を起動し（ステップＳ１０１４）、起動処理を終了する。スレーブドメイン順位１は、起動処理終了後、運用時処理に遷移する。
【０１０４】
起動処理が終了した、マスタドメイン、スレーブドメインは、運用時処理に遷移する。図１１、図１２では、マスタドメイン、スレーブドメインの運用時処理を説明する。マスタドメインは、運用時処理をマスタ機構スレッド４０２による機能によって実行する。同様に、スレーブドメインは、運用時処理をローカルマスタ機構スレッド４０７、仮想マスタ機構スレッド４０６による機能によって実行する。
【０１０５】
また、ステップＳ１１０３、ステップＳ１１０４、ステップＳ１１０９、ステップＳ１１１０の処理は、スレーブドメイン順位１〜スレーブドメイン順位ｎのうち、いずれかのスレーブドメインが実行する。図１１では、説明の簡略化のため、スレーブドメイン順位１が実行すると仮定して説明を行う。なお、図１２で示すステップＳ１２０１、ステップＳ１２０４、ステップＳ１２０５の処理は、スレーブドメイン順位１〜スレーブドメイン順位ｎ全てのスレーブドメインが実行する。
【０１０６】
図１１は、マスタドメイン、スレーブドメインの運用時処理を示すフローチャート（その１）である。マスタ機構スレッド４０２は、他ドメインへのメモリアクセスが発生したか否かを判断する（ステップＳ１１０１）。他ドメインへのメモリアクセスが発生した場合（ステップＳ１１０１：Ｙｅｓ）、マスタ機構スレッド４０２は、メモリ管理部４０９により、他ドメインのメモリ１０９へのアクセス要求を通知する（ステップＳ１１０２）。
【０１０７】
ステップＳ１１０３、ステップＳ１１０４では、他ドメインがスレーブドメイン順位１である場合を想定する。ローカルマスタ機構スレッド４０７＃１は、自ドメインへのメモリアクセス要求を受け付けたか否かを判断する（ステップＳ１１０３）。メモリアクセス要求を受け付けた場合（ステップＳ１１０３：Ｙｅｓ）、ローカルマスタ機構スレッド４０７＃１は、メモリアクセス応答を行い（ステップＳ１１０４）、要求元に応答の結果をマスタ機構スレッド４０２に送信する。応答の結果を送信後、またはメモリアクセス要求を受け付けていない場合（ステップＳ１１０３：Ｎｏ）、ローカルマスタ機構スレッド４０７＃１は、ステップＳ１１０９の処理に移行する。
【０１０８】
アクセスに対する応答受信後、または他ドメインへのメモリアクセスが発生していない場合（ステップＳ１１０１：Ｎｏ）、マスタ機構スレッド４０２は、ユーザの操作を受け付けたかを判断する（ステップＳ１１０５）。操作を受け付けた場合（ステップＳ１１０５：Ｙｅｓ）、マスタ機構スレッド４０２は、ユーザの操作受付処理を実行する（ステップＳ１１０６）。なお、具体的なユーザの操作受付処理とは、たとえば、キーボード１０６の操作によってＧＵＩ上で選択されたアプリの起動処理、またはアプリの終了処理等を実行する。操作受付処理を実行後、マスタ機構スレッド４０２は、ユーザの操作によってスレッド生成要求が発生したか否かを判断する（ステップＳ１１０７）。
【０１０９】
スレッド生成要求が発生した場合（ステップＳ１１０７：Ｙｅｓ）、マスタ機構スレッド４０２は、スケジューラ４０５により、いずれかのスレーブドメインへスレッド生成要求を通知する（ステップＳ１１０８）。なお、スケジューラ４０５によるドメインの選択方法は、たとえば、スレーブドメイン順位１〜スレーブドメイン順位ｎ内のＣＰＵ２０４のうち、最も負荷の低いＣＰＵを含むドメインであってもよい。図１１では、スレーブドメイン順位１に通知した場合を想定する。
【０１１０】
ローカルマスタ機構スレッド４０７＃１は、自ドメインへのスレッド生成要求を受け付けたか否かを判断する（ステップＳ１１０９）。スレッド生成要求を受け付けた場合（ステップＳ１１０９：Ｙｅｓ）、ローカルマスタ機構スレッド４０７＃１は、スレッド生成処理を行う（ステップＳ１１１０）。生成終了後、またはスレッド生成要求を受け付けていない場合（ステップＳ１１０９：Ｎｏ）、ローカルマスタ機構スレッド４０７＃１は、図１２で示すステップＳ１２０４に移行する。
【０１１１】
スレッド生成要求通知後か、スレッド生成要求が発生していない場合（ステップＳ１１０７：Ｎｏ）か、または操作を受け付けていない場合（ステップＳ１１０５：Ｎｏ）、マスタ機構スレッド４０２は、ステップＳ１２０１の処理に移行する。
【０１１２】
図１２は、マスタドメイン、スレーブドメインの運用時処理を示すフローチャート（その２）である。マスタ機構スレッド４０２、仮想マスタ機構スレッド４０６＃１〜仮想マスタ機構スレッド４０６＃ｎは、マスタコンテキスト転送処理を実行する（ステップＳ１２０１）。マスタコンテキスト転送処理の詳細は、図１３、図１４にて後述する。処理終了後、マスタ機構スレッド４０２は、所定周期が経過したかを判断する（ステップＳ１２０２）。所定周期が経過した場合（ステップＳ１２０２：Ｙｅｓ）、マスタ機構スレッド４０２は、ハードチェックスレッド処理（マスタ）を実行する（ステップＳ１２０３）。ハードチェックスレッド処理（マスタ）の詳細は、図１５にて後述する。
【０１１３】
処理終了後、または所定周期が経過していない場合（ステップＳ１２０２：Ｎｏ）、マスタ機構スレッド４０２は、ステップＳ１１０１の処理に移行する。仮想マスタ機構スレッド４０６＃１〜仮想マスタ機構スレッド４０６＃ｎは、マスタコンテキスト転送処理の終了後、再びステップＳ１２０１の処理を実行する。
【０１１４】
また、ローカルマスタ機構スレッド４０７＃１〜ローカルマスタ機構スレッド４０７＃ｎは、所定周期が経過したか否かを判断する（ステップＳ１２０４）。所定周期が経過した場合（ステップＳ１２０４：Ｙｅｓ）、ローカルマスタ機構スレッド４０７＃１〜ローカルマスタ機構スレッド４０７＃ｎは、ハードチェックスレッド処理（スレーブ）を実行する（ステップＳ１２０５）。処理終了後、または所定周期が経過していない場合（ステップＳ１２０４：Ｎｏ）、ローカルマスタ機構スレッド４０７＃１〜ローカルマスタ機構スレッド４０７＃ｎは、ステップＳ１１０３の処理に移行する。
【０１１５】
図１３、図１４では、マスタコンテキスト転送処理の説明を行う。システム１００が実行するマスタコンテキスト転送処理は、図１３に示すマスタコンテキスト転送処理１か、または図１４に示すマスタコンテキスト転送処理２のいずれか一方の処理が適用される。
【０１１６】
図１３は、マスタコンテキスト転送処理１を示すフローチャートである。マスタ機構スレッド４０２は、マスタコンテキスト３０１に対する書込イベントが発生したかを判断する（ステップＳ１３０１）。書込イベントが発生した場合（ステップＳ１３０１：Ｙｅｓ）、マスタ機構スレッド４０２は、メモリ更新要求を仮想マスタ機構スレッド４０６＃１〜仮想マスタ機構スレッド４０６＃ｎに通知する（ステップＳ１３０２）。通知後、マスタ機構スレッド４０２は、バリア同期を発行し、メモリロックする（ステップＳ１３０３）。
【０１１７】
なお、バリア同期を行ったマスタ機構スレッド４０２は、同一のバリア同期グループとなる仮想マスタ機構スレッド４０６＃１〜仮想マスタ機構スレッド４０６＃ｎがバリア同期を実行するまで待機する。具体的に、マスタ機構スレッド４０２は、仮想マスタ機構スレッド４０６＃１がステップＳ１３０５の処理を実行し、かつ、仮想マスタ機構スレッド４０６＃ｎがステップＳ１３０７を実行するまで待機する。
【０１１８】
続けて、仮想マスタ機構スレッド４０６＃１は、メモリ更新要求を受け付けたか否かを判断する（ステップＳ１３０４）。メモリ更新要求を受け付けていない場合（ステップＳ１３０４：Ｎｏ）、仮想マスタ機構スレッド４０６＃１は、再びステップＳ１３０４の処理を実行する。メモリ更新要求を受け付けている場合（ステップＳ１３０４：Ｙｅｓ）、仮想マスタ機構スレッド４０６＃１は、バリア同期を発行し、メモリロックする（ステップＳ１３０５）。同様に、仮想マスタ機構スレッド４０６＃ｎも、ステップＳ１３０６、ステップＳ１３０７を実行する。なお、ステップＳ１３０６、ステップＳ１３０７の処理は、ステップＳ１３０４、ステップＳ１３０５の処理と等しいため、説明を省略する。
【０１１９】
マスタ機構スレッド４０２、仮想マスタ機構スレッド４０６＃１〜仮想マスタ機構スレッド４０６＃ｎ全てがバリア同期を発行した場合、マスタ機構スレッド４０２は、更新されたマスタコンテキストデータを転送する（ステップＳ１３０８）。転送先は、仮想マスタ機構スレッド４０６＃１〜仮想マスタ機構スレッド４０６＃ｎとなる。転送後、マスタ機構スレッド４０２は、メモリアンロックし、バリア同期を発行する（ステップＳ１３０９）。
【０１２０】
続けて、仮想マスタ機構スレッド４０６＃１は、受信したマスタコンテキストデータをミラーリングマスタコンテキスト３０２＃１に格納し（ステップＳ１３１０）、格納後、メモリアンロックし、バリア同期を発行する（ステップＳ１３１１）。同様に、仮想マスタ機構スレッド４０６＃ｎは、受信したマスタコンテキストデータをミラーリングマスタコンテキスト３０２＃ｎに格納し（ステップＳ１３１２）、格納後、メモリアンロックし、バリア同期を発行する（ステップＳ１３１３）。
【０１２１】
マスタ機構スレッド４０２、仮想マスタ機構スレッド４０６＃１〜＃ｎ全てがバリア同期を発行した場合、マスタ機構スレッド４０２、仮想マスタ機構スレッド４０６＃１〜仮想マスタ機構スレッド４０６＃ｎは、マスタコンテキスト転送処理１を終了する。また、書込イベントが発生していない場合（ステップＳ１３０１：Ｎｏ）、マスタ機構スレッド４０２は、マスタコンテキスト転送処理１を終了する。
【０１２２】
このように、マスタコンテキスト転送処理１は、マスタコンテキスト３０１内の同期部分の転送領域を更新箇所に絞ることで、データ転送量を抑えることを実現している。なお、マスタコンテキスト転送処理１は、メモリロック期間が発生するため、バス１１０の転送速度が高速であることが好ましい。
【０１２３】
図１４は、マスタコンテキスト転送処理２を示すフローチャートである。なお、図１４の説明において、仮想マスタ機構スレッド４０６＃１〜仮想マスタ機構スレッド４０６＃ｎによって実行されるステップＳ１４０３〜ステップＳ１４０５の処理は同一である。したがって、図１４の説明では、仮想マスタ機構スレッド４０６＃１の実行例を想定して説明する。
【０１２４】
マスタ機構スレッド４０２は、マスタコンテキスト３０１に対する書込イベントが発生したか否かを判断する（ステップＳ１４０１）。書込イベントが発生した場合（ステップＳ１４０１：Ｙｅｓ）、マスタ機構スレッド４０２は、マスタコンテキスト３０１を更新する（ステップＳ１４０２）。更新後、または書込イベントが発生していない場合（ステップＳ１４０１：Ｎｏ）、マスタ機構スレッド４０２は、マスタコンテキスト転送処理２を終了する。
【０１２５】
また、仮想マスタ機構スレッド４０６＃１は、マスタコンテキスト３０１の記憶領域に、ブレークポイントを設定する（ステップＳ１４０３）。なお、ステップＳ１４０３で設定するブレークポイントは、ライトアクセスに反応するブレークポイントであることが好ましい。また、ブレークポイントの設定後、仮想マスタ機構スレッド４０６＃１は、ブレークポイントに対してライトアクセスが発生したか否か判断する（ステップＳ１４０４）。
【０１２６】
ライトアクセスが発生していない場合（ステップＳ１４０４：Ｎｏ）、仮想マスタ機構スレッド４０６＃１は、再びステップＳ１４０４の処理に移行する。ライトアクセスが発生した場合（ステップＳ１４０４：Ｙｅｓ）、仮想マスタ機構スレッド４０６＃１は、ライトアクセスが発生した転送領域アドレスと更新されたマスタコンテキストデータを引数として、コンテキストデータ転送スレッドを生成し起動する（ステップＳ１４０５）。起動後、仮想マスタ機構スレッド４０６＃１は、マスタコンテキスト転送処理２を終了する。
【０１２７】
なお、コンテキストデータ転送スレッドは、ステップＳ１４０５が実行されるたびに新たに生成される。また、コンテキストデータ転送スレッドは各ドメインで個別に生成される。以下の説明では、仮想マスタ機構スレッド４０６＃１が属するスレーブドメインで起動されたコンテキストデータ転送スレッドであることを想定して説明を行う。
【０１２８】
新たに起動されたコンテキストデータ転送スレッドは、自身のスレッドＩＤと、転送領域アドレスを、転送領域管理テーブルに格納する（ステップＳ１４０６）。なお、転送領域管理テーブルは、スレッドＩＤフィールドと、転送領域アドレスフィールドを含むテーブルである。格納後、コンテキストデータ転送スレッドは、転送領域アドレスが一致する既存のコンテキストデータ転送スレッドが存在するか否かを判断する（ステップＳ１４０７）。
【０１２９】
既存のコンテキストデータ転送スレッドが存在する場合（ステップＳ１４０７：Ｙｅｓ）、コンテキストデータ転送スレッドは、既存のコンテキストデータ転送スレッドの終了通知を発行する（ステップＳ１４０８）。具体的な発行方法としては、コンテキストデータ転送スレッドは、ＯＳ等が提供しているＡＰＩ群のうちスレッドを終了するＡＰＩを、転送領域管理テーブルのスレッドＩＤを引数として実行する。
【０１３０】
既存のコンテキストデータ転送スレッドが存在しない場合（ステップＳ１４０７：Ｎｏ）、コンテキストデータ転送スレッドは、受信したマスタコンテキストデータをミラーリングマスタコンテキスト３０２＃１に格納する（ステップＳ１４０９）。格納後、コンテキストデータ転送スレッドは、転送領域管理テーブルから自身のスレッドＩＤが設定されたレコードを削除し（ステップＳ１４１０）、スレッド実行を終了する。
【０１３１】
このように、マスタコンテキスト転送処理２は、バス１１０の転送速度が遅く、頻繁にステータステーブル３０３が更新される場合でも対応可能である。具体的に、マスタコンテキスト転送処理２を適用したシステム１００は、受信したマスタコンテキストデータをミラーリングマスタコンテキスト３０２＃１に格納する前に、マスタコンテキストが書き換わってもよい。
【０１３２】
図１５は、ハードチェックスレッド（マスタ）の処理を示すフローチャートである。図１５では、マスタドメインで実行されるハードチェックスレッドの処理を示す。ハードチェックスレッドは、障害ドメイン検出処理を実行する（ステップＳ１５０１）。障害ドメイン検出処理の詳細は、図１７にて後述する。処理後、ハードチェックスレッドは、障害ドメインが検出されたか否かを判断する（ステップＳ１５０２）。障害ドメインが検出された場合（ステップＳ１５０２：Ｙｅｓ）、ハードチェックスレッドは、障害ドメインのメモリ１０９に割り当てた仮想メモリ空間解放を設定する（ステップＳ１５０３）。
【０１３３】
続けて、ハードチェックスレッドは、障害ドメインのメモリ１０９への書き込み禁止を設定し（ステップＳ１５０４）、さらに障害ドメインへのスレッド生成禁止を設定し（ステップＳ１５０５）、スレッド実行を終了する。なお、障害ドメインが複数検出される場合も存在する。この場合、ハードチェックスレッドは、検出された全ての障害ドメインに対して、ステップＳ１５０３〜ステップＳ１５０５の処理を実行する。また、障害ドメインが検出されなかった場合（ステップＳ１５０２：Ｎｏ）、ハードチェックスレッドは、スレッド実行を終了する。
【０１３４】
図１６は、ハードチェックスレッド（スレーブ）処理を示すフローチャートである。図１６では、スレーブドメイン順位１〜スレーブドメイン順位ｎで実行されるハードチェックスレッドの処理を示す。ハードチェックスレッドは、障害ドメイン検出処理を実行する（ステップＳ１６０１）。障害ドメイン検出処理の詳細は、図１７にて後述する。処理後、ハードチェックスレッドは、障害ドメインが検出されたか否かを判断する（ステップＳ１６０２）。
【０１３５】
障害ドメインが検出された場合（ステップＳ１６０２：Ｙｅｓ）、ハードチェックスレッドは、マスタドメインがバス１１０を経由して通信可能か否かを判断する（ステップＳ１６０３）。なお、通信可能か否かの判断方法として、ハードチェックスレッドは、１００プロセッサ間通信であるＩＰＣ（Ｉｎｔｅｒ  Ｐｒｏｃｅｓｓｏｒ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ）等のＡＰＩを用いて判断することができる。
【０１３６】
マスタドメインが通信可能でない場合（ステップＳ１６０３：Ｎｏ）、ハードチェックスレッドは、自ドメインのＤＢＢ２０７をアクティベートし（ステップＳ１６０４）、マスタドメインのＤＢＢ２０７に通信発信する（ステップＳ１６０５）。なお、各ドメインのＤＢＢ２０７は、それぞれ固有のＩＤを有しており、固有のＩＤを用いて発信することで、システム１００内の他のＤＢＢ２０７に発信することができる。
【０１３７】
発信後、ハードチェックスレッドは、マスタドメインから応答があったか否かを判断する（ステップＳ１６０６）。マスタドメインから応答があった場合（ステップＳ１６０６：Ｙｅｓ）、ハードチェックスレッドは、自ドメインをシャットダウンする（ステップＳ１６０７）。ステップＳ１６０７の処理後、自ドメインをシャットダウンするため、ハードチェックスレッドは、スレッド実行を終了する。なお、ステップＳ１６０６：Ｙｅｓとなった場合とは、マスタドメインと物理的に切断されてしまったケースである。
【０１３８】
マスタドメインから応答がない場合（ステップＳ１６０６：Ｎｏ）、ハードチェックスレッドは、自ドメインが最高位の生存ドメインか否かを判断する（ステップＳ１６０８）。自ドメインが最高位の生存ドメインである場合（ステップＳ１６０８：Ｙｅｓ）、ハードチェックスレッドは、仮想マスタ機構スレッド４０６を終了させる（ステップＳ１６０９）。なお、ステップＳ１６０８：Ｙｅｓとなった場合とは、マスタドメインが障害ドメインとなり、自ドメインがマスタドメインの代替となるケースである。
【０１３９】
続けて、ハードチェックスレッドは、ローカルマスタ機構スレッド４０７にミラーリングマスタコンテキスト３０２を括り付ける（ステップＳ１６１０）。具体的に、ハードチェックスレッドは、ローカルマスタ機構スレッド４０７がアクセスするデータを、ローカルマスタ機構スレッド４０７が出力していたログからミラーリングマスタコンテキスト３０２へと切り替える。
【０１４０】
括り付け後、ハードチェックスレッドは、ローカルマスタ機構スレッド４０７を新たなマスタ機構スレッド４０２として起動する（ステップＳ１６１１）。なお、新たなマスタ機構スレッド４０２は、起動処理として、ステップＳ１００５の処理から実行を開始する。起動後、ハードチェックスレッドは、スレッド実行を終了する。
【０１４１】
自ドメインが最高位の生存ドメインでない場合（ステップＳ１６０８：Ｎｏ）、ハードチェックスレッドは、スレッド実行を終了する。なお、ステップＳ１６０８：Ｎｏとなった場合とは、マスタドメインが障害ドメインとなり、他のスレーブドメインがマスタドメインとなり、自ドメインは引き続きスレーブドメインとして動作するケースである。
【０１４２】
マスタドメインが通信可能である場合（ステップＳ１６０３：Ｙｅｓ）、ハードチェックスレッドは、スレッド実行を終了する。ステップＳ１６０３：Ｙｅｓとなった場合とは、スレーブドメインのいずれかが障害ドメインとなったケースである。障害ドメインが検出されていない場合（ステップＳ１６０２：Ｎｏ）、ハードチェックスレッドは、スレッド実行を終了する。
【０１４３】
図１７は、障害ドメイン検出処理を示すフローチャートである。障害ドメイン検出処理は、マスタドメイン、スレーブドメイン順位１〜スレーブドメイン順位ｎが実行するハードチェックスレッドにて実行される。
【０１４４】
ハードチェックスレッドは、自ドメイン内の自己診断回路２０８を起動し、診断実行させる（ステップＳ１７０１）。続けて、ハードチェックスレッドは、ステータステーブル３０３＃０のうち、ドメイン種別フィールドが自ドメインであるレコードを選択する（ステップＳ１７０２）。選択後、ハードチェックスレッドは、自己診断回路２０８の結果を、選択したレコードの診断結果フィールドに書き込む（ステップＳ１７０３）。書き込み後、ハードチェックスレッドは、自ドメイン内のステータステーブル３０３のレコードのうち、診断結果がＮＧとなるレコードが存在するかを判断する（ステップＳ１７０４）。ＮＧとなるレコードが存在する場合（ステップＳ１７０４：Ｙｅｓ）、ハードチェックスレッドは、存在したレコードに対するドメインを障害ドメインとして検出する（ステップＳ１７０５）。
【０１４５】
障害ドメインを検出後、またはＮＧとなるレコードが存在しない場合（ステップＳ１７０４：Ｎｏ）、ハードチェックスレッドは、診断時刻フィールドが所定周期以上更新されていないレコードが存在するか否かを判断する（ステップＳ１７０６）。所定周期以上更新されていないレコードが存在しない場合（ステップＳ１７０６：Ｎｏ）、ハードチェックスレッドは、障害ドメイン検出処理を終了する。
【０１４６】
または所定周期以上更新されていないレコードが存在する場合（ステップＳ１７０６：Ｙｅｓ）、ハードチェックスレッドは、存在したレコードに対するドメインを障害ドメインとして検出する（ステップＳ１７０７）。出力後、ハードチェックスレッドは、障害ドメイン検出処理を終了する。
【０１４７】
以上説明したように、プロセッサ管理方法によれば、安価なＳｏＣとメモリを含むドメイン群でシステムを構築し、各ドメインのメモリにオフセット値を設定してメモリ空間を連結する。これにより、プロセッサ管理方法を適用したシステムは、各ドメインは広いメモリ空間を利用でき、安価で高性能なシステムをユーザに提供できる。メモリ空間が広くなることで、システムは複数のアプリを同時に実行することが容易になる。
【０１４８】
また、プロセッサ管理方法によれば、更新されたコンテキストデータをマスタドメインからスレーブドメインに転送し、スレーブドメイン内のメモリに格納してもよい。これにより、マスタドメインに障害が発生した場合、スレーブドメインは、自身のメモリ内にコンテキストデータを用いて、システムを続行することができる。さらに、システムは、更新箇所に絞れるため、転送量を抑えることができる。
【０１４９】
また、プロセッサ管理方法によれば、マスタドメイン内に設定したブレークポイントに対するライトアクセスを検出したときに、ブレークポイントに対する更新されたコンテキストデータをスレーブドメイン内のメモリに格納してもよい。これにより、マスタドメインに障害が発生した場合、スレーブドメインは、自身のメモリ内にコンテキストデータを用いて、システムを続行することができる。さらに、システムの形態が、ドメイン間のバスが遅く、頻繁にマスタコンテキストが変更になる場合でも対応することができる。
【０１５０】
また、プロセッサ管理方法によれば、ブレークポイントに対するデータをスレーブドメイン内のメモリに格納する第１スレッドが実行完了する前に、同一のアドレスに対してメモリに格納する第２スレッドを検出した場合、第１スレッドの処理を中止してもよい。これにより、ブレークポイントを利用した更新方法の場合について、余計な処理を行わずに済ませることができる。
【０１５１】
また、プロセッサ管理方法によれば、他ドメインの障害を検出してもよい。これにより、マスタドメインの障害、または、ドメイン間のバスに障害が発生したことを検出することができる。
【０１５２】
また、プロセッサ管理方法によれば、自ドメインの診断結果と診断時刻を、マスタコンテキストに書き込み、転送された自ドメイン内のミラーリングされたマスタコンテキスト内の診断結果と診断時刻に基づいて、他ドメインの障害を検出してもよい。これにより、ドメインの診断回数を最小限に抑え、他ドメインの診断結果を参照することができる。
【０１５３】
また、プロセッサ管理方法によれば、障害が検出されるとき、マスタドメインは障害となったドメインに対して、一部の処理を停止してもよい。具体的には、マスタドメインは、該当ドメインのメモリに割り当てたメモリ空間解放を設定する。これにより、システムは、障害ドメインのメモリが新たに使用されることを防止することができる。また、マスタドメインは、該当ドメインのメモリへの書き込み禁止を設定する。これにより、システムは、該当ドメイン内で暴走中のアプリによるメモリ破壊、または、自動リセットによるメモリクリアを回避できる。また、マスタドメインは、該当ドメインへのスレッド生成禁止を設定する。これにより、システムは、アプリを正常に実行できないドメインを避けてアプリを割り当てることができる。
【０１５４】
また、プロセッサ管理方法によれば、障害が検出されるときに、ローカルマスタ機構がマスタ機構に通知して障害がマスタ機構の障害であるか否かを判断する。さらに、プロセッサ管理方法によれば、マスタ機構の障害であるときに、ローカルマスタ機構が複数のプロセッサを管理する状態にあるか否かを判断してもよい。これにより、プロセッサ管理方法を適用したシステムは、マスタドメインの障害時に、スレーブドメインの中から、次にドメインとなるドメインを判断することができる。
【０１５５】
また、プロセッサ管理方法によれば、マスタドメインへの通知に対して応答がない場合、マスタドメインのＤＢＢへ発信してマスタ機構と切断された状態か否かを判断し、切断された状態であれば、自身のドメインの動作を終了してもよい。これにより、マスタドメインが動作しているにも関わらず、障害により分離状態となってしまった場合、分離されたドメインが動作し続けることがなくなり、無駄な消費電力を削減することができる。
【０１５６】
また、プロセッサ管理方法によれば、複数のプロセッサを管理する状態にあると判断されるとき、スレーブドメインを新たなマスタドメインに設定してもよい。これにより、プロセッサ管理方法を適用したシステムは、障害発生時に対して、新たなマスタドメインの実行により機能や性能の制限を最小限にしつつ、継続的に利用することができる。また、これらの動作により、プロセッサ管理方法を適用したシステムを使用するユーザは、障害発生したドメインを含むユニットを修理サービスなどに預けつつ、一方で、残余のドメインにより継続的にシステムを利用することができる。
【０１５７】
なお、本実施の形態で説明したプロセッサ管理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション、携帯電話等のコンピュータで実行することにより実現することができる。本プロセッサ管理方法を実行するプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＳＤカード等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本プロセッサ管理方法を実行するプログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０１５８】
１００  システム
１０９  メモリ
１１０  バス
２０４  ＣＰＵ
３０１  マスタコンテキスト
３０２  ミラーリングマスタコンテキスト
３０３  ステータステーブル
３１１  検出部
３１２  転送部
３１３  判断部
３１４  設定部
３１５  通知部
３１６  割当部
３１７  格納部
３１８  設定部
３１９  終了部
【図１】
2012114443.tif 000003
【図２】
2012114443.tif 000004
【図３】
2012114443.tif 000005
【図４】
2012114443.tif 000006
【図５Ａ】
2012114443.tif 000007
【図５Ｂ】
2012114443.tif 000008
【図６Ａ】
2012114443.tif 000009
【図６Ｂ】
2012114443.tif 000010
【図７Ａ】
2012114443.tif 000011
【図７Ｂ】
2012114443.tif 000012
【図８Ａ】
2012114443.tif 000013
【図８Ｂ】
2012114443.tif 000014
【図９】
2012114443.tif 000015
【図１０】
2012114443.tif 000016
【図１１】
2012114443.tif 000017
【図１２】
2012114443.tif 000018
【図１３】
2012114443.tif 000019
【図１４】
2012114443.tif 000020
【図１５】
2012114443.tif 000021
【図１６】
2012114443.tif 000022
【図１７】
2012114443.tif 000023
【手続補正書】
【提出日】平成25年9月4日(2013.9.4)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のプロセッサのうちの一のプロセッサに前記複数のプロセッサを管理するマスタ機構を設定し、
前記複数のプロセッサのうちの前記一のプロセッサ以外のプロセッサのそれぞれに当該プロセッサを管理するローカルマスタ機構と仮想マスタ機構とを設定し、
前記マスタ機構によって管理される共有メモリが前記複数のプロセッサから連続したメモリとしてアクセスされるために、前記マスタ機構が前記複数のプロセッサにアドレスのオフセット値を通知すること
を特徴とするプロセッサ管理方法。
【請求項２】
前記オフセット値が通知された後に、前記ローカルマスタ機構は、前記オフセット値に基づいて前記共有メモリを前記ローカルマスタ機構が管理するメモリ領域へ割り当てること
を特徴とする請求項１に記載のプロセッサ管理方法。
【請求項３】
前記仮想マスタ機構は、前記マスタ機構から転送されるコンテキストデータを前記ローカルマスタ機構が管理するメモリ領域に格納すること
を特徴とする請求項１または請求項２に記載のプロセッサ管理方法。
【請求項４】
前記仮想マスタ機構は、前記マスタ機構に設定されたブレークポイントを検出したときに、前記マスタ機構のコンテキストデータを前記ローカルマスタ機構が管理するメモリ領域に格納すること
を特徴とする請求項１または請求項２に記載のプロセッサ管理方法。
【請求項５】
第１スレッドにおいて前記コンテキストデータを前記メモリ領域に格納するときに、更新された前記コンテキストデータが第２スレッドにおいて検出されるとき、前記第１スレッドの処理を中止すること
を特徴とする請求項４に記載のプロセッサ管理方法。
【請求項６】
前記マスタ機構または前記ローカルマスタ機構は、障害を検出するための処理を行うこと
を特徴とする請求項１乃至請求項５の何れか一に記載のプロセッサ管理方法。
【請求項７】
前記マスタ機構または前記ローカルマスタ機構は、前記マスタ機構のコンテキストデータにタイムスタンプまたは付随情報を所定周期毎に書き込み、
前記タイムスタンプまたは前記付随情報に基づいて前記障害を検出すること
を特徴とする請求項６に記載のプロセッサ管理方法。
【請求項８】
前記障害が検出されるとき、前記マスタ機構は少なくとも一部の処理を停止すること
を特徴とする請求項６または請求項７に記載のプロセッサ管理方法。
【請求項９】
前記障害が検出され、前記ローカルマスタ機構は前記マスタ機構に通知して前記障害が前記マスタ機構の障害であるか否かを判断し、
前記マスタ機構の障害であると判断されたとき、前記ローカルマスタ機構が前記複数のプロセッサを管理する状態にあるか否かを判断すること
を特徴とする請求項６または請求項７に記載のプロセッサ管理方法。
【請求項１０】
前記ローカルマスタ機構が前記複数のプロセッサを管理する状態にあると判断されるとき、前記ローカルマスタ機構は新たなマスタ機構として設定すること
を特徴とする請求項６乃至請求項９の何れか一に記載のプロセッサ管理方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサを管理するプロセッサ管理方法に関する。
【背景技術】
【０００２】
近年、携帯電話等の携帯端末は、用途が広範囲となり、機能も豊富となっている。このように携帯端末に求められる性能要求が高くなってきている。たとえば、高機能な携帯端末を提供できる技術として、携帯端末を画像入出力用ユニットと音声受信ユニットというように、ユニットごとに分離可能な技術が開示されている（たとえば、下記特許文献１、２を参照。）。これにより、ユーザは、通話を行いつつ、画像閲覧を行うといった高機能なサービスを享受することができる。
【０００３】
また、各ユニットをドッキング可能な携帯端末について、各ユニットを、バスを介してデバイスと接続可能にする技術が開示されている（たとえば、下記特許文献３を参照。）。また、携帯端末の各ユニット内で、異常、故障を診断する自己診断回路を有する技術が開示されている（たとえば、下記特許文献４を参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−１７６３７１号公報
【特許文献２】特開平１０−２２８４５８号公報
【特許文献３】特公平６−６６０５７号公報
【特許文献４】特開平３−２１７１３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した従来技術において、特許文献１〜４にかかる技術では、高性能が求められる分、各ユニットに搭載されるプロセッサが高性能のプロセッサとなるため、コストの増加を招いてしまうという問題があった。具体的には、複数のユニットに分割可能な携帯端末は、複数のユニットに分割されたことによるバックアップ処理や、機能のミラーリングを行う場合に、高性能プロセッサを複数配置しておくことが要求されるため、コストが増加してしまっていた。
【０００６】
本発明は、上述した従来技術による問題点を解消するため、安価であり、かつ高性能なシステムをユーザに提供できるプロセッサ管理方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、複数のプロセッサのうちの一のプロセッサに複数のプロセッサを管理するマスタ機構を設定し、複数のプロセッサのうちの一のプロセッサ以外のプロセッサのそれぞれに当該プロセッサを管理するローカルマスタ機構と仮想マスタ機構とを設定し、マスタ機構によって管理される共有メモリが複数のプロセッサから連続したメモリとしてアクセスされるために、マスタ機構が複数のプロセッサにアドレスのオフセット値を通知するプロセッサ管理方法が提案される。
【発明の効果】
【０００８】
本発明の一側面によれば、安価であり、かつ高性能なシステムをユーザに提供できるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、本実施の形態にかかるシステム１００の破損前と破損後の動作を示す説明図である。
【図２】図２は、システム１００のハードウェアを示すブロック図である。
【図３】図３は、システム１００の機能を示すブロック図である。
【図４】図４は、システム１００のソフトウェアを示すブロック図である。
【図５Ａ】図５Ａは、スレーブドメイン破損時による障害ドメイン検出動作を示す説明図（その１）である。
【図５Ｂ】図５Ｂは、スレーブドメイン破損時による障害ドメイン検出動作を示す説明図（その２）である。
【図６Ａ】図６Ａは、スレーブドメイン破損後の復元動作を示す説明図（その１）である。
【図６Ｂ】図６Ｂは、スレーブドメイン破損後の復元動作を示す説明図（その２）である。
【図７Ａ】図７Ａは、マスタドメイン破損時の動作を示す説明図（その１）である。
【図７Ｂ】図７Ｂは、マスタドメイン破損時の動作を示す説明図（その２）である。
【図８Ａ】図８Ａは、分離状態で破損した場合の動作を示す説明図（その１）である。
【図８Ｂ】図８Ｂは、分離状態で破損した場合の動作を示す説明図（その２）である。
【図９】図９は、ステータステーブル３０３の記憶内容の一例を示す説明図である。
【図１０】図１０は、起動処理を示すフローチャートである。
【図１１】図１１は、マスタドメイン、スレーブドメインの運用時処理を示すフローチャート（その１）である。
【図１２】図１２は、マスタドメイン、スレーブドメインの運用時処理を示すフローチャート（その２）である。
【図１３】図１３は、マスタコンテキスト転送処理１を示すフローチャートである。
【図１４】図１４は、マスタコンテキスト転送処理２を示すフローチャートである。
【図１５】図１５は、ハードチェックスレッド（マスタ）の処理を示すフローチャートである。
【図１６】図１６は、ハードチェックスレッド（スレーブ）処理を示すフローチャートである。
【図１７】図１７は、障害ドメイン検出処理を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に添付図面を参照して、開示のプロセッサ管理方法の実施の形態を詳細に説明する。なお、下記説明では、プロセッサ管理方法を適用したシステムについて説明を行う。
【００１１】
図１は、本実施の形態にかかるシステム１００の破損前と破損後の動作を示す説明図である。符号１０１で示す説明図では、複数のプロセッサを有するシステム１００の破損前の状態を示しており、符号１０２で示す説明図では、システム１００の破損後の状態を示している。
【００１２】
始めに、符号１０１で示す図の説明を行う。システム１００は、ディスプレイユニット１０３と、キーボードユニット１０４を含む。ディスプレイユニット１０３は、ディスプレイ１０５を含むユニットである。キーボードユニット１０４は、キーボード１０６を含むユニットである。
【００１３】
また、システム１００は、独立して１つのコンピュータシステムとして動作可能であるドメイン単位で分割されている。具体的には、ディスプレイユニット１０３にはドメイン１０７＃０が含まれ、キーボードユニット１０４にはドメイン１０７＃１、ドメイン１０７＃２が含まれる。以下、接尾記号となる"＃０"〜"＃２"が付与されたハードウェアは、対応するドメイン１０７内に含まれるハードウェアであることを示す。同様に、"＃０"〜"＃２"が付与されたソフトウェアは、対応するドメイン１０７内のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）によって実行されるソフトウェアであることを示す。
【００１４】
ドメイン１０７には、ＳｏＣ（Ｓｙｓｔｅｍ−ｏｎ−ａ−Ｃｈｉｐ）１０８、メモリ１０９が含まれる。具体的には、ドメイン１０７＃０にはＳｏＣ１０８＃０とメモリ１０９＃０が含まれ、ドメイン１０７＃１にはＳｏＣ１０８＃１とメモリ１０９＃１が含まれ、ドメイン１０７＃２にはＳｏＣ１０８＃２とメモリ１０９＃２が含まれる。なお、ドメイン１０７、ＳｏＣ１０８、メモリ１０９の詳細については、図２にて後述する。なお、ＳｏＣ１０８は、単なる携帯電話機能を実現する簡易的なＳｏＣを想定している。簡易的なＳｏＣであるため、ＳｏＣ１０８のコストは低く抑えることができる。
【００１５】
またドメイン１０７＃０〜ドメイン１０７＃２は、バス１１０で接続されている。バス１１０は、たとえば、フレキシブルケーブル等を採用することができる。または、ドメイン１０７＃０〜ドメイン１０７＃２の接続方法は、有線でなく無線であってもよい。たとえば、ドメイン１０７＃０〜ドメイン１０７＃２は、ＩＥＥＥ８０２．１５．１規格に代表される近接無線通信部を含み、近接無線通信部によってドメイン間通信を行ってもよい。
【００１６】
また、ドメイン１０７＃０〜ドメイン１０７＃２は、仮想的に１つのコンピュータシステムをユーザに提供するＯＳを実行する。これにより、システム１００は、３ドメインを含んだシステムとなる。たとえば、ＳｏＣ１０８＃０〜ＳｏＣ１０８＃２内にＣＰＵが１つずつ存在する場合、システム１００は３つのＣＰＵを有するシステム１００となる。
【００１７】
なお、図１では、ドメイン１０７＃０内のＣＰＵに、システム１００を管理するマスタ機構が設定され、ドメイン１０７＃１、ドメイン１０７＃２のＣＰＵに、自身を管理するローカルマスタ機構が設定された場合を想定している。
【００１８】
また、メモリ１０９＃０〜メモリ１０９＃２は、連続した共有メモリ空間となるように物理アドレスからのオフセット値が設定されている。具体的なオフセット値については、図４にて後述する。オフセット値によって、メモリ１０９＃０の論理アドレスは０ｘ０００〜０ｘ０ｆｆとなり、メモリ１０９＃１の論理アドレスは０ｘ１００〜０ｘ１ｆｆとなり、メモリ１０９＃２の論理アドレスは０ｘ２００〜０ｘ２ｆｆとなる。最終的に、メモリ１０９＃０〜メモリ１０９＃２は、論理アドレス０ｘ０００〜０ｘ２ｆｆを各ドメインに提供することができる。
【００１９】
このように、システム１００は、各ドメインのメモリサイズが小さくとも、複数のドメインを接続することで、各ドメインに、より広いアドレスを提供することができる。広いアドレスを利用できるようになったシステム１００は、同時に多くのアプリケーションソフトウェア（以下、「アプリ」と称する）を起動することができ、高性能なサービスをユーザに提供できる。
【００２０】
また、ドメイン１０７＃０〜ドメイン１０７＃２は、相互に他のドメインを診断している。具体的には、ドメイン１０７＃０は、ドメイン１０７＃１とドメイン１０７＃２を診断し、ドメイン１０７＃１は、ドメイン１０７＃０とドメイン１０７＃２を診断し、ドメイン１０７＃２は、ドメイン１０７＃０とドメイン１０７＃１を診断している。これにより、ドメイン１０７＃０〜ドメイン１０７＃２のうちいずれかのドメインに障害が発生した場合、他のドメインは障害の発生を検出できる。なお、具体的な診断方法としては、図９にて後述する。なお、符号１０１に示す図では、ドメイン１０７＃０〜ドメイン１０７＃２は正常動作しているため、診断ＯＫとなる。
【００２１】
続けて、符号１０２で示す図の説明を行う。符号１０２で示すシステム１００は、システム１００に加えられた衝撃等により、ディスプレイユニット１０３とキーボードユニット１０４との結合部分が破損した状態である。さらに、システム１００は、衝撃によってＳｏＣ１０８＃１が破損した状態である。ＳｏＣ１０８＃１が破損した結果、ドメイン１０７＃１は、コンピュータシステムとして動作不可能な状態である。なお、バス１１０は、断線が発生しておらず、ドメイン１０７＃０とドメイン１０７＃２間の通信を行える状態である。
【００２２】
ドメイン１０７＃１の診断結果がＮＧとなり、障害が発生したという情報は、ドメイン１０７＃０による診断、またドメイン１０７＃２による診断によって検出される。検出を受けたシステム１００は、３ドメインから２ドメインの動作に切り替える。これにより、システム１００は、障害発生時に、機能や性能の制限を最小限にしつつ、継続的に利用することができる。
【００２３】
（システム１００のハードウェア）
図２は、システム１００のハードウェアを示すブロック図である。図２において、システム１００は、ディスプレイ１０５と、キーボード１０６と、ドメイン１０７＃０〜ドメイン１０７＃２と、フラッシュＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０１と、フラッシュＲＯＭコントローラ２０２と、フラッシュＲＯＭ２０３と、を含む。また、ドメイン１０７＃０には、ＣＰＵ２０４＃０と、ペリフェラル２０５＃０と、電力制御回路２０６＃０と、ＤＢＢ（Ｄｉｇｉｔａｌ  Ｂａｓｅ  Ｂａｎｄ）２０７＃０と、自己診断回路２０８＃０、メモリ１０９＃０を含む。なお、図２で示すシステム１００は、３つのドメインを含むが、２以上のドメインを含んでいてもよい。
【００２４】
また、メモリ１０９＃０、ＣＰＵ２０４＃０〜自己診断回路２０８＃０は、ＳｏＣ内部バス２０９＃０で接続されている。同様に、ドメイン１０７＃１には、メモリ１０９＃１、ＣＰＵ２０４＃１〜自己診断回路２０８＃１を含み、ＳｏＣ内部バス２０９＃１で接続されている。また、ドメイン１０７＃２には、メモリ１０９＃２、ＣＰＵ２０４＃２〜自己診断回路２０８＃２を含み、ＳｏＣ内部バス２０９＃２で接続されている。
【００２５】
また、ドメイン１０７＃０について、ＳｏＣ１０８＃０は、ＣＰＵ２０４＃０〜ＤＢＢ２０７＃０を含み、自己診断回路２０８＃０とメモリ１０９＃０は、ＳｏＣ１０８＃０の外部に存在する。ドメイン１０７＃１、ドメイン１０７＃２についても同様である。以下、ドメイン１０７＃０に含まれるハードウェアについて説明を行うが、ドメイン１０７＃１、ドメイン１０７＃２に含まれるハードウェアも同様の機能を有する。
【００２６】
ＣＰＵ２０４＃０は、システム１００の全体の制御を司る。ペリフェラル２０５＃０は、ＣＰＵ２０４＃０以外の周辺機器を示している。たとえば、ペリフェラル２０５＃０は、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）であったり、ＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）であってもよい。または、ペリフェラル２０５＃０は、ディスプレイ１０５等を制御するコントローラであったりしてもよい。
【００２７】
電力制御回路２０６＃０は、ＣＰＵ２０４＃０、ペリフェラル２０５＃０、ＤＢＢ２０７＃０の電力を制御する回路である。さらに、電力制御回路２０６＃０は、ＳｏＣ１０８＃０の外部にある自己診断回路２０８＃０と、メモリ１０９＃０の電力を制御してもよい。たとえば、電力制御回路２０６＃０は、ペリフェラル２０５＃０が未使用である場合に、ペリフェラル２０５＃０に提供する電力を停止してもよい。
【００２８】
ＤＢＢ２０７＃０は、通信、通話機能を実行する通話装置である。具体的に、ＤＢＢ２０７＃０は、通信相手を特定する機能や、データに誤り制御符号を付与するといった機能を有する。また、ＤＢＢ２０７＃０は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークに接続され、ネットワークを介して他の装置に接続される。なお、ＤＢＢ２０７＃０は、ＤＢＢ２０７＃１、ＤＢＢ２０７＃２とも通信可能である。
【００２９】
自己診断回路２０８＃０は、ドメイン１０７＃０内の各装置が正常に動作しているかを診断する機能を有する回路である。たとえば、自己診断回路２０８＃０は、ＳｏＣ１０８＃０内の電流、電圧、温度を測定し、異常値になった場合に診断ＮＧとして出力する。
【００３０】
なお、電流、電圧が異常値となる場合としては、たとえば、ドメイン１０７＃０への衝撃、または、装置内の劣化に伴って電気回路が短絡した場合、ドメイン１０７＃０に設計値を超える電流が流れる可能性がある。または、温度が異常値となる場合としては、ドメイン１０７＃０で実行中のソフトウェアによって、ＣＰＵ２０４＃０が熱暴走した場合である。自己診断回路２０８＃０は、このような状態を検出し、診断ＮＧとして出力する。
【００３１】
メモリ１０９＃０は、データを記憶できる記憶装置である。たとえば、メモリ１０９＃０は、ＲＯＭ、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等である。たとえば、ＲＯＭは、ブートプログラムなどのプログラムを記憶している。また、ＲＡＭは、ＣＰＵ２０４＃０のワークエリアとして使用される。なお、ＳｏＣ内部バス２０９＃０は、ＣＰＵ２０４＃０とワークエリアとなるメモリ１０９＃０を接続しており、ＣＰＵ２０４＃０の能力を発揮させるため、高速転送が可能であることが好ましい。
【００３２】
ディスプレイ１０５は、カーソル、アイコンあるいはツールボックスを始め、文書、画像、機能情報などのデータを表示する。ディスプレイ１０５は、たとえば、ＴＦＴ（Ｔｈｉｎ  Ｆｉｌｍ  Ｔｒａｎｓｉｓｔｏｒ）液晶ディスプレイなどを採用することができる。キーボード１０６は、文字、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード１０６は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００３３】
フラッシュＲＯＭ２０１は、読出し速度が高速なフラッシュＲＯＭであり、たとえば、ＮＯＲ型フラッシュメモリである。フラッシュＲＯＭ２０１は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などのシステムソフトウェアやアプリなどを記憶している。たとえば、ＯＳを更新する場合、システム１００は、ＤＢＢ２０７を経由して新しいＯＳを受信し、フラッシュＲＯＭ２０１に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００３４】
フラッシュＲＯＭコントローラ２０２は、ＣＰＵ２０４＃０〜ＣＰＵ２０４＃２の制御にしたがってフラッシュＲＯＭ２０３に対するデータのリード／ライトを制御する。フラッシュＲＯＭ２０３は、データの保存、運搬を主な目的としたフラッシュＲＯＭであり、たとえば、ＮＡＮＤ型フラッシュメモリである。また、フラッシュＲＯＭ２０３は、フラッシュＲＯＭコントローラ２０２の制御で書き込まれたデータを記憶する。データの具体例としては、システム１００を使用するユーザがＤＢＢ２０７を通して取得した画像データ、映像データや、本実施の形態であるプロセッサ管理方法を実行するプログラムが格納されていてもよい。フラッシュＲＯＭ２０３は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００３５】
（システム１００の機能）
次に、システム１００の機能について説明する。図３は、システム１００の機能を示すブロック図である。システム１００は、検出部３１１と、転送部３１２と、判断部３１３と、設定部３１４と、通知部３１５と、割当部３１６と、格納部３１７と、設定部３１８と、終了部３１９と、を含む。この制御部となる機能（検出部３１１〜終了部３１９）は、記憶装置に記憶されたプログラムをＣＰＵ２０４＃０〜ＣＰＵ２０４＃２が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図１、図２に示したメモリ１０９、フラッシュＲＯＭ２０１、フラッシュＲＯＭ２０３などである。
【００３６】
なお、図３では、ＣＰＵ２０４＃０がシステム１００全体を制御することを想定している。それに関連して、図３では、各機能部のうち、検出部３１１、割当部３１６は、ＣＰＵ２０４＃０〜ＣＰＵ２０４＃２が実行することを想定している。また、転送部３１２、設定部３１４、通知部３１５は、システム１００全体を制御するＣＰＵ２０４＃０が実行することを想定している。また、判断部３１３、格納部３１７、設定部３１８、終了部３１９は、ＣＰＵ２０４＃１、ＣＰＵ２０４＃２が実行することを想定している。したがって、たとえば、ＣＰＵ２０４＃１がシステム１００全体を制御する場合、ＣＰＵ２０４＃１が、転送部３１２、設定部３１４、通知部３１５を有していてもよい。
【００３７】
また、システム１００は、メモリ１０９内に格納されているマスタコンテキスト３０１、ミラーリングマスタコンテキスト３０２にアクセス可能である。マスタコンテキスト３０１は、システム１００の運用時に要求される情報群が格納されている。たとえば、マスタコンテキスト３０１は、システムの起動情報、時刻情報、ペリフェラル２０５の設定情報、メモリ１０９に割り当てたオフセット値、重要なプロセスのコンテキスト情報等を格納している。ミラーリングマスタコンテキスト３０２は、マスタコンテキスト３０１と同内容が記憶されている。なお、ミラーリングマスタコンテキスト３０２は、転送部３１２、格納部３１７の機能により、マスタコンテキスト３０１と同内容を記憶するように維持される。
【００３８】
また、マスタコンテキスト３０１、ミラーリングマスタコンテキスト３０２内には、ステータステーブル３０３が格納されている。ステータステーブル３０３は、自ドメイン内の診断情報として、診断時刻と診断結果が格納されている。ステータステーブル３０３の詳細については、図９にて後述する。
【００３９】
検出部３１１は、他ドメイン１０７の障害を検出する機能を有する。たとえば、検出部３１１＃０〜検出部３１１＃２は、他ドメイン１０７内の自己診断回路２０８に診断実行を要求して、診断結果を取得して他ドメイン１０７の障害を検出してもよい。また、検出部３１１は、マスタ機構のコンテキストデータにタイムスタンプまたは付随情報を所定周期毎に書き込み、タイムスタンプまたは付随情報に基づいて障害を検出してもよい。
【００４０】
たとえば、検出部３１１＃０〜検出部３１１＃２は、ステータステーブル３０３＃０に自身のドメインの診断結果を行った診断時刻と診断結果を１分毎に書き込む。書き込み後、検出部３１１＃０〜検出部３１１＃２は、自ドメイン内のステータステーブル３０３の診断時刻と診断結果に基づいて障害を検出する。なお、ステータステーブル３０３＃０に書き込まれた内容は、転送部３１２、格納部３１７の機能により、自ドメイン内のステータステーブル３０３に格納される。
【００４１】
具体的には、検出部３１１＃０〜検出部３１１＃２は、診断時刻が所定周期以上経過したドメインが存在する場合、他ドメインの障害を検出する。または、検出部３１１＃０〜検出部３１１＃２は、診断結果がＮＧとなったドメインが存在する場合、他ドメインの障害を検出する。なお、検出結果は、検出部３１１の機能を有するＣＰＵ２０４のレジスタ、キャッシュメモリ、メモリ１０９などの記憶領域に格納されてもよい。
【００４２】
転送部３１２は、複数のプロセッサのうちの一のプロセッサ以外のプロセッサに更新されたコンテキストデータを転送する機能を有する。たとえば、転送部３１２は、マスタコンテキスト３０１のうち更新されたデータと、更新されたアドレスをＣＰＵ２０４＃１、ＣＰＵ２０４＃２に通知する。なお、通知された結果は、ＣＰＵ２０４＃０のレジスタ、キャッシュメモリ、メモリ１０９＃０などの記憶領域に格納されてもよい。
【００４３】
判断部３１３は、検出部３１１＃１、検出部３１１＃２によって障害が検出されるときに、複数のプロセッサを管理する状態にあると判断する機能を有する。たとえば、判断部３１３＃２は、障害が検出された場合に、マスタ機構からの応答がない場合、ローカルマスタ機構を実行するＣＰＵのうちいずれか一つのＣＰＵを、複数のプロセッサを管理する状態にあると判断する。また、判断部３１３は、ローカルマスタ機構を実行するＣＰＵを順位づけしておき、順位が最も高いＣＰＵを複数のプロセッサを管理する状態にあると判断してもよい。
【００４４】
また、判断部３１３は、さらに、マスタ機構に通知して障害がマスタ機構の障害であるか否かを判断してもよい。たとえば、判断部３１３＃２は、バス１１０を経由してマスタ機構に設定されたＣＰＵ２０４＃０からの応答の有無によって、マスタ機構の障害の可能性があることを判断する。
【００４５】
さらに、判断部３１３は、マスタ機構への通知に対して応答がない場合に、マスタ機構が制御可能な通話装置へ発信してマスタ機構と切断された状態か否かを判断してもよい。具体的には、判断部３１３は、バス１１０を経由してＣＰＵ２０４＃０からの応答がない場合、ＤＢＢ２０７＃０に発信してマスタ機構と切断された状態か否かを判断する。なお、判断結果は、判断部３１３の機能を有するＣＰＵ２０４のレジスタ、キャッシュメモリ、メモリ１０９などの記憶領域に格納されてもよい。
【００４６】
設定部３１４は、複数のプロセッサのうちの一のプロセッサに複数のプロセッサを管理するマスタ機構を設定する機能を有する。たとえば、設定部３１４は、ＣＰＵ２０４＃０〜ＣＰＵ２０４＃２のうちドメイン１０７＃０のＣＰＵ２０４＃０にマスタ機構を設定する。なお、マスタ機構が設定されたＣＰＵは、マスタ機構スレッドを実行する。
【００４７】
また、設定部３１４は、複数のプロセッサのうちの一のプロセッサ以外のプロセッサのそれぞれに、自身を管理するローカルマスタ機構と仮想マスタ機構とを設定する。たとえば、設定部３１４は、ＣＰＵ２０４＃０〜ＣＰＵ２０４＃２のうちＣＰＵ２０４＃１とＣＰＵ２０４＃２に、ローカルマスタ機構と仮想マスタ機構を設定する。なお、ローカルマスタ機構が設定されたＣＰＵは、ローカルマスタ機構を実行する。同様に、仮想マスタ機構が設定されたＣＰＵは、仮想マスタ機構スレッドを実行する。
【００４８】
また、設定部３１４は、検出部３１１＃０によって障害が検出されるときに、少なくとも一部の処理を停止させる設定を行う。具体的には、設定部３１４は、障害が検出されたドメインに対して、該当ドメインのメモリ１０９に割り当てたメモリ空間解放を設定する。さらに、設定部３１４は、該当ドメインのメモリ１０９への書き込み禁止を設定し、さらに該当ドメインへのスレッド生成禁止を設定する。なお、設定された情報は、メモリ１０９、フラッシュＲＯＭ２０１等の記憶領域に記憶される。
【００４９】
通知部３１５は、マスタ機構によって管理される共有メモリが複数のプロセッサから連続したメモリとしてアクセスされるために、マスタ機構が複数のプロセッサにアドレスのオフセット値を通知する機能を有する。たとえば、メモリ１０９＃０〜メモリ１０９＃２の物理アドレスが０ｘ００〜０ｘｆｆであることを想定する。このとき、通知部３１５は、ＣＰＵ２０４＃０にオフセット値０を通知し、ＣＰＵ２０４＃１にオフセット値０ｘ１００を通知し、ＣＰＵ２０４＃２にオフセット値０ｘ２００を通知する。なお、通知されるオフセット値は、通知先ＣＰＵが管理するメモリ１０９に格納される。また、通知元となる、ＣＰＵ２０４＃０のレジスタ、キャッシュメモリ、メモリ１０９＃０などの記憶領域にオフセット値が格納されてもよい。
【００５０】
割当部３１６は、通知部３１５によってオフセット値が通知された後に、オフセット値に基づいて共有メモリをローカルマスタ機構が管理するメモリ領域へ割り当てる機能を有する。
【００５１】
たとえば、割当部３１６＃０は、メモリ１０９＃０の物理アドレスに通知されたオフセット値０を加算して、メモリ１０９＃０の論理アドレスを０ｘ０００〜０ｘ０ｆｆで割り当てる。同様に、割当部３１６＃１は、メモリ１０９＃１の物理アドレスに通知されたオフセット値０ｘ１００を加算して、メモリ１０９＃１の論理アドレスを０ｘ１００〜０ｘ１ｆｆで割り当てる。また、割当部３１６＃２は、メモリ１０９＃２の物理アドレスに通知されたオフセット値０ｘ２００を加算して、メモリ１０９＃２の論理アドレスを０ｘ２００〜０ｘ２ｆｆで割り当てる。なお、割り当てを行ったという情報は、割当部３１６の機能を有するＣＰＵ２０４のレジスタ、キャッシュメモリ、メモリ１０９などの記憶領域に格納されてもよい。
【００５２】
格納部３１７は、転送部３１２から転送されるコンテキストデータをローカルマスタ機構が管理するメモリ領域に格納する機能を有する。たとえば、格納部３１７＃１は、更新されたコンテキストデータをミラーリングマスタコンテキスト３０２＃１に格納する。
【００５３】
また、格納部３１７は、マスタ機構に設定されたブレークポイントを検出したときに、マスタ機構のコンテキストデータをローカルマスタ機構が管理するメモリ領域に格納してもよい。たとえば、格納部３１７＃１は、マスタコンテキスト３０１に設定されたブレークポイントに対するライトアクセスを検出したときに、更新されたコンテキストデータをミラーリングマスタコンテキスト３０２＃１に格納する。
【００５４】
また、格納部３１７は、コンテキストデータをメモリ領域に格納する第１スレッドが実行される前に、前述のコンテキストデータがさらに更新されたコンテキストデータを格納する第２スレッドが実行されることが検出されるとき、第１スレッドを中止してもよい。
【００５５】
たとえば、第１スレッドが、アドレス０ｘ０４０に対して更新されたコンテキストデータを、ミラーリングマスタコンテキスト３０２＃１に格納するスレッドであることを想定する。このとき、格納部３１７＃１は、アドレス０ｘ０４０に対してさらに更新されたコンテキストデータをミラーリングマスタコンテキスト３０２＃１に格納する第２スレッドが実行されることが検出されると、第１スレッドの処理を中止する。なお、格納を行ったという結果は、格納部３１７の機能を有するＣＰＵ２０４のレジスタ、キャッシュメモリ、メモリ１０９などの記憶領域に格納されてもよい。
【００５６】
設定部３１８は、判断部３１３によって複数のプロセッサを管理する状態にあると判断されるとき、ローカルマスタ機構を新たなマスタ機構に設定する機能を有する。たとえば、設定部３１８＃１は、ＣＰＵ２０４＃１がＣＰＵ２０４＃０〜ＣＰＵ２０４＃２を管理する状態にあると判断されるときに、ＣＰＵ２０４＃１で実行するローカルマスタ機構を新たなマスタ機構に設定する。なお、設定結果は、設定部３１８の機能を有するＣＰＵ２０４のレジスタ、キャッシュメモリ、メモリ１０９などの記憶領域に格納されてもよい。
【００５７】
終了部３１９は、判断部３１３によってマスタ機構と切断された状態であると判断された場合に、ローカルマスタ機構に設定されたプロセッサの動作を終了する機能を有する。たとえば、終了部３１９＃２は、バス１１０が切断され、ＣＰＵ２０４＃０と切断された状態であると判断された場合に、ＣＰＵ２０４＃２をシャットダウンし、動作を終了する。また、シャットダウンとなる対象は、ローカルマスタ機構に設定されたプロセッサが含まれるドメイン内の全ての装置に対してであってもよい。動作を終了するという履歴は、フラッシュＲＯＭ２０１等の記憶領域に格納されてもよい。
【００５８】
以上、システム１００は、プロセッサと記憶領域とを含むドメインの集合のうち、システム１００を制御する特定のドメインの障害を、ドメインの集合のうち特定のドメイン以外の他のドメインによって検出する検出部３１１を含む。さらに、システム１００は、特定のドメイン内の記憶領域に記憶された自システムのコンテキストを、制御結果が更新されるたびに、他のドメインの記憶領域へ転送する転送部３１２を含む。検出部３１１によって特定のドメインの障害が検出された場合、システム１００は、転送部３１２によって他のドメインの記憶領域に転送されたコンテキストを用いて、他のドメインを、自システムを制御する新たな特定のドメインに設定する設定部３１８を含む。
【００５９】
図４は、システム１００のソフトウェアを示すブロック図である。システム１００は、図２で示したハードウェアを用いて、図４で示すソフトウェアを実行する。ＣＰＵ２０４＃０は、ＯＳが提供するソフトウェアとして、カーネル４０１＃０と、マスタ機構スレッド４０２＃０と、ＯＳ管理部４０３と、通信連携部４０４と、スケジューラ４０５とを実行する。また、ＣＰＵ２０４＃１は、カーネル４０１＃１と、仮想マスタ機構スレッド４０６＃１と、ローカルマスタ機構スレッド４０７＃１と、ＯＳ管理部４０３とを実行する。同様に、ＣＰＵ２０４＃２は、カーネル４０１＃２と、仮想マスタ機構スレッド４０６＃２と、ローカルマスタ機構スレッド４０７＃２と、ＯＳ管理部４０３を実行する。また、ＯＳ管理部４０３は、プロセス管理部４０８、メモリ管理部４０９を含む。
【００６０】
また、システム１００は、ＯＳの機能を利用して、ユーザにサービスを提供するアプリとして、プロセス４１０〜プロセス４１３を実行している。なお、ＣＰＵ２０４＃０がプロセス４１０を実行し、ＣＰＵ２０４＃１がプロセス４１１、プロセス４１２を実行し、ＣＰＵ２０４＃２がプロセス４１３を実行している。
【００６１】
カーネル４０１は、ＣＰＵ２０４＃０〜ＣＰＵ２０４＃２を制御するプログラムである。カーネル４０１は、ＯＳの中核の機能であり、たとえば、システム１００のリソースを管理し、スレッドなどのソフトウェアがハードウェアにアクセスできるようにする。
【００６２】
また、カーネル４０１は、ＣＰＵ２０４＃０〜ＣＰＵ２０４＃２のうち、いずれか１つのＣＰＵをマスタＣＰＵに設定し、マスタ機構スレッド４０２を起動させ、その他のＣＰＵに仮想マスタ機構スレッド４０６、ローカルマスタ機構スレッド４０７を起動させる。以降の説明では、マスタ機構スレッド４０２を実行しているＣＰＵが含まれるドメイン１０７をマスタドメインと定義し、ローカルマスタ機構スレッド４０７を実行しているＣＰＵが含まれるドメイン１０７をスレーブドメインと定義する。
【００６３】
また、カーネル４０１は、スレーブドメイン群に対して順位づけを行う。たとえば、カーネル４０１は、ドメイン１０７＃１をスレーブドメイン順位１と設定し、ドメイン１０７＃２をスレーブドメイン順位２と設定する。なお、ドメイン１０７内でのマスタドメイン設定、およびスレーブドメイン設定は、ドメイン１０７＃０〜ドメイン１０７＃２のうち、いずれのドメイン１０７がマスタドメインとなってもよい。たとえば、マスタドメインは、設計時点にて設計者によって設定されていてもよい。また、システム１００は、マスタドメインを、ディスプレイ１０５にメインメニューを表示するドメイン１０７に設定してもよい。
【００６４】
なお、ＳｏＣ内部バス２０９はバス１１０より高速である。このように、カーネル４０１は、システム１００を、仮想的なマルチコアプロセッサシステムとして、ユーザに提供する。また、カーネル４０１によって１つの仮想的なマルチコアプロセッサシステムとなったシステム１００は、ＣＰＵに専用のメモリを有するという、分散メモリ型のマルチコアプロセッサシステムという形態になる。
【００６５】
マスタ機構スレッド４０２は、システム１００全体の動作を制御するプログラムである。具体的に、マスタ機構スレッド４０２は、ペリフェラル２０５＃０〜ペリフェラル２０５＃２、ディスプレイ１０５、キーボード１０６、フラッシュＲＯＭコントローラ２０２等の初期化処理を行ったり、時刻の設定処理を行ったりする。なお、マスタ機構スレッド４０２は、システム１００の起動情報、時刻情報、ペリフェラル２０５＃０〜ペリフェラル２０５＃２等の情報、また、ＯＳ管理部４０３による実行結果を、マスタコンテキスト３０１に記録する。
【００６６】
ＯＳ管理部４０３は、システム１００を１コンピュータシステムとして提供するために、ドメイン１０７内ローカルの機能を有する。ＯＳ管理部４０３は前述の機能を満たすために、プロセス管理部４０８、メモリ管理部４０９を含む。具体的には、ＣＰＵ２０４＃０は、プロセス管理部４０８＃０とメモリ管理部４０９＃０を実行する。同様に、ＣＰＵ２０４＃１は、プロセス管理部４０８＃１とメモリ管理部４０９＃１を実行し、ＣＰＵ２０４＃２は、プロセス管理部４０８＃２とメモリ管理部４０９＃２を実行する。
【００６７】
通信連携部４０４は、マスタドメインが実行する機能であり、自ドメインのＤＢＢ２０７と連携して通信機能を行う機能を有する。図４の例では、通信連携部４０４は、ＤＢＢ２０７＃０と連携して通信機能を実行する。なお、他ドメインのＤＢＢ２０７は、使用しないため電源の供給を受けていない状態である。
【００６８】
スケジューラ４０５は、システム１００内のドメイン１０７＃０〜ドメイン１０７＃２に割り当てるプロセスを決定する機能を有する。プロセスとは、ＣＰＵの処理するプログラムの実行単位である。具体的に、スケジューラ４０５は、プロセス４１０をドメイン１０７＃０に割り当て、プロセス４１１とプロセス４１２をドメイン１０７＃１に割り当て、プロセス４１３をドメイン１０７＃２に割り当てる。
【００６９】
仮想マスタ機構スレッド４０６は、マスタ機構スレッド４０２が更新するマスタコンテキストを自ドメイン内のメモリ１０９にミラーリングする機能を有する。ミラーリングの形式としては、下記２つの方法が適用可能である。１つ目の処理方法は、ドメイン１０７間で同期を取り、マスタドメインが更新部分をスレーブドメインに通知する処理である。２つ目の処理方法は、ドメイン１０７間で同期を取らず、マスタドメインが更新部分をスレーブドメインに通知後他の処理に移り、スレーブドメインは、通知を受けて更新部分を反映する処理である。マスタコンテキスト転送処理１、マスタコンテキスト転送処理２の詳細については、図１３、図１４にて後述する。
【００７０】
ローカルマスタ機構スレッド４０７は、スレーブドメイン内の管理を行うスレッドである。たとえば、ローカルマスタ機構スレッド４０７＃１、ローカルマスタ機構スレッド４０７＃２は、マスタ機構スレッド４０２＃０から通知された処理内容を実行し、ログとして記録する。
【００７１】
また、マスタ機構スレッド４０２とローカルマスタ機構スレッド４０７は、自己診断回路２０８から診断ＯＫの通知を受け取り、自ドメインが動作中であることを他ドメインのマスタ機構スレッド４０２、またはローカルマスタ機構スレッド４０７に通知する。さらに、マスタ機構スレッド４０２とローカルマスタ機構スレッド４０７は、他ドメインが診断ＯＫか否かを判断する。
【００７２】
なお、具体的には、マスタ機構スレッド４０２とローカルマスタ機構スレッド４０７は、ハードチェックスレッドを起動し、ハードチェックスレッドが定期的に自己診断回路２０８に診断を実行させる。また、ハードチェックスレッドは、自己診断回路２０８によって診断ＯＫを受けたドメインを生存ドメインに設定する。また、ハードチェックスレッドは、自己診断回路２０８によって診断ＮＧを受けたドメイン、または所定周期を経過しても自己診断回路２０８によって診断が実行されていないドメインを障害ドメインに設定する。また、具体的な他ドメインの診断判断方法については、図９にて後述する。
【００７３】
プロセス管理部４０８は、ドメイン１０７に割り当てられたプロセスを管理する機能を有する。プロセス管理部４０８の動作モードは、マスタモードとスレーブモードが存在する。スレーブモードで動作するプロセス管理部４０８は、自ドメインに割り当てられたプロセスの生成、実行、終了を管理する。また、マスタモードで動作するプロセス管理部４０８＃０は、スレーブモードで動作する機能に加えて、システム１００のハードウェア等のリソースを管理する。
【００７４】
たとえば、スレーブモードで動作するプロセス管理部４０８＃１は、ドメイン１０７＃１に割り当てられたプロセス４１１とプロセス４１２を時分割にしたがってＣＰＵ２０４＃１に割り当てる。また、マスタモードで動作するプロセス管理部４０８＃０は、たとえば、フラッシュＲＯＭコントローラ２０２へのアクセス権を、プロセス４１３に付与する。
【００７５】
メモリ管理部４０９は、メモリ１０９＃０〜メモリ１０９＃２を仮想共有メモリ空間４１４としてプロセス４１０〜プロセス４１３に提供する機能を有する。たとえば、メモリ１０９＃０、メモリ１０９＃１、メモリ１０９＃２の物理アドレスが０ｘ００〜０ｘｆｆであると想定する。
【００７６】
このとき、メモリ管理部４０９＃０は、メモリ１０９＃０の論理アドレスを、メモリ１０９＃１の物理アドレスにオフセット値±０を加算した０ｘ０００〜０ｘ０ｆｆとしてプロセス４１０に提供する。さらに、メモリ管理部４０９＃０は、メモリ１０９＃１の論理アドレスを、メモリ１０９＃１の物理アドレスにオフセット値＋０ｘ１００を加算した０ｘ１００〜０ｘ１ｆｆとしてプロセス４１０に提供する。
【００７７】
さらに、メモリ管理部４０９＃０は、メモリ１０９＃２の論理アドレスを、メモリ１０９＃１の物理アドレスにオフセット値＋０ｘ２００を加算した０ｘ２００〜０ｘ２ｆｆとしてプロセス４１０に提供する。これにより、メモリ管理部４０９＃０は、プロセス４１０に論理アドレスを０ｘ０００〜０ｘ２ｆｆとなる仮想共有メモリ空間４１４を提供することができる。
【００７８】
同様に、メモリ管理部４０９＃１、メモリ管理部４０９＃２も、メモリ１０９＃０の論理アドレスを、物理アドレスにオフセット値±０を加算した値でプロセス４１０〜プロセス４１３に提供する。続けて、メモリ管理部４０９＃１、メモリ管理部４０９＃２は、メモリ１０９＃１の論理アドレスを、物理アドレスにオフセット値＋０ｘ１００を加算した値でプロセス４１０〜プロセス４１３に提供する。最後に、メモリ管理部４０９＃１、メモリ管理部４０９＃２は、メモリ１０９＃２の論理アドレスを、物理アドレスにオフセット値＋０ｘ２００を加算した値でプロセス４１０〜プロセス４１３に提供する。
【００７９】
これにより、メモリ管理部４０９＃１、メモリ管理部４０９＃２も、プロセス４１０〜プロセス４１３に論理アドレスを０ｘ００〜０ｘ２ｆｆとなる仮想共有メモリ空間４１４を提供することができる。
【００８０】
なお、オフセット値の設定方法としては、たとえば、メモリ管理部４０９は、マスタドメインのメモリ１０９の論理アドレスを０ｘ００から開始するアドレスに設定する。もし、マスタドメインのメモリ１０９の物理アドレスが０ｘ００より大きいアドレスで開始する場合、メモリ管理部４０９は、論理アドレス０ｘ００となるオフセット値を設定する。続けて、メモリ管理部４０９は、スレーブドメイン順位１のメモリ１０９の論理アドレスのオフセット値を、マスタドメインのメモリ１０９の論理アドレスの終了アドレスに設定する。以下、メモリ管理部４０９は、スレーブドメイン順位ｎのメモリ１０９の論理アドレスのオフセット値を、スレーブドメイン順位ｎ−１のメモリ１０９の論理アドレスの終了アドレスに設定する。なお、ｎは１以上の整数である。
【００８１】
以下、図４に示したソフトウェアの機能を利用して、図５Ａ〜図８Ｂにて、ドメイン１０７のいずれかが破損した場合の検出動作および復元動作を説明する。
【００８２】
図５Ａ、図５Ｂは、スレーブドメイン破損時による障害ドメイン検出動作を示す説明図である。図５Ａでは、システム１００が破損された状態を示している。図５Ａに示すシステム１００は、プロセス４１１によって生成された画面をディスプレイ１０５に表示中に、スレーブドメインとなるドメイン１０７＃１が破損した状態を示している。
【００８３】
このとき、図５Ｂで示すマスタ機構スレッド４０２＃０とローカルマスタ機構スレッド４０７＃２は、ドメイン１０７＃１が障害ドメインとなったことを検出する。検出後、スレーブドメインに属するローカルマスタ機構スレッド４０７＃２は、バス１１０を経由して、マスタドメインが生存ドメインであるかを確認する。図５Ａに示すシステム１００は、マスタドメインとなるドメイン１０７＃０が生存ドメインであるため、ローカルマスタ機構スレッド４０７＃２は、障害ドメイン検出時の処理を終了し、通常処理を続行する。また、マスタドメインに属するマスタ機構スレッド４０２＃０は、破損したドメイン１０７＃１を障害ドメインとして検出すると、復元動作に移行する。後述する図６Ａ、図６Ｂにて、スレーブドメイン破損後の復元動作について説明する。
【００８４】
図６Ａ、図６Ｂは、スレーブドメイン破損後の復元動作を示す説明図である。図６Ａに示すシステム１００は、スレーブドメインとなるドメイン１０７＃１が破損し障害ドメインとなったことを、マスタドメインに属するマスタ機構スレッド４０２＃０が検出した状態である。検出後、マスタ機構スレッド４０２＃０は、ドメイン１０７＃１に属するメモリ１０９＃１の論理アドレス０ｘ１００〜０ｘ１ｆｆを書き込み禁止に設定する。
【００８５】
書き込み禁止に設定することで、たとえばドメイン１０７＃１がソフトウェア暴走によって障害ドメインとなった場合に、システム１００は、暴走中のソフトウェアによるメモリ破壊、自動リセットによるメモリクリアを防止できる。なお、メモリ１０９＃１への読み込みについては許可される。これにより、たとえばドメイン１０７＃１で暴走していないソフトウェアがメモリ１０９＃１に出力したデータを、生存ドメインで実行中のソフトウェアが読み込むことが可能になるため、生存ドメインで実行中のソフトウェアの処理を継続することができる。
【００８６】
次に、マスタ機構スレッド４０２＃０は、障害ドメインへのスレッド生成禁止処理を実行する。なお、障害ドメインへのスレッド生成禁止は、障害ドメインが修復されるまで継続される。これにより、システム１００は、２ドメインで動作を継続できる。たとえば、ユーザは、システム１００のうち破損したドメインを含むユニットを修理にだしつつ、残ったユニットでシステム１００を稼働し続ける、といった運用が可能になる。図６Ａの例では、システム１００は、図５Ａにて示したプロセス４１１を終了し、メインメニューをディスプレイ１０５に表示している。
【００８７】
図７Ａ、図７Ｂは、マスタドメイン破損時の動作を示す説明図である。図７Ａに示すシステム１００は、ディスプレイユニット１０３に衝撃等が入り、マスタドメインとなるドメイン１０７＃０が破損した状態を示している。
【００８８】
このとき、図７Ｂで示すローカルマスタ機構スレッド４０７＃１とローカルマスタ機構スレッド４０７＃２は、ドメイン１０７＃０が破損し、ドメイン１０７＃０が障害ドメインとなったことを検出する。検出後、ローカルマスタ機構スレッド４０７＃１、ローカルマスタ機構スレッド４０７＃２は、それぞれ、バス１１０を経由して、マスタドメインの生存確認を行う。図７Ｂに示すシステム１００ではマスタドメインとなるドメイン１０７＃０が破損しているため、バス１１０を経由した生存確認は失敗する。
【００８９】
続けて、ローカルマスタ機構スレッド４０７＃１、ローカルマスタ機構スレッド４０７＃２は、ＤＢＢ２０７を利用して、マスタドメインの生存確認を行う。これにより、システム１００は、バス１１０が断線したためマスタドメインと通信が行えなくなっている状態か否かを判断できる。
【００９０】
具体的なＤＢＢ２０７を利用した生存確認とは、ローカルマスタ機構スレッド４０７＃１が、ＤＢＢ２０７＃１から、ＤＢＢ２０７＃０に対して通信発信する。ローカルマスタ機構スレッド４０７＃１は、発信に対して応答があればマスタドメインが生存していると判断し、発信に対して応答がなければマスタドメインが破損していると判断する。同様に、ローカルマスタ機構スレッド４０７＃２は、ＤＢＢ２０７＃２から、ＤＢＢ２０７＃０に対して通信発信することで、マスタドメインの生存確認を行う。
【００９１】
図７Ｂに示すシステム１００ではマスタドメインとなるドメイン１０７＃０が破損しているため、ＤＢＢ２０７＃０は、ＤＢＢ２０７＃１とＤＢＢ２０７＃２に対する通信発信に応答できない。したがって、ローカルマスタ機構スレッド４０７＃１とローカルマスタ機構スレッド４０７＃２は、マスタドメインが破損していると判断する。判断後、スレーブドメインの順位が最上位となるドメイン１０７＃１が、新たなマスタドメインとして運用を続行することになる。
【００９２】
具体的に、ローカルマスタ機構スレッド４０７＃１は、仮想マスタ機構スレッド４０６＃１を終了し、ローカルマスタ機構スレッド４０７＃１の出力先として、ミラーリングマスタコンテキスト３０２＃１を新たなマスタコンテキストに設定する。続けて、ローカルマスタ機構スレッド４０７＃１は、ローカルマスタ機構スレッド４０７＃１をマスタ機構スレッド４０２＃１として起動処理を実行する。これにより、システム１００は、スレーブドメインであったドメイン１０７＃１をマスタドメインとして設定し、運用を続行することができる。
【００９３】
図８Ａ、図８Ｂは、分離状態で破損した場合の動作を示す説明図である。図８Ａに示すシステム１００は、スレーブドメインとなるドメイン１０７＃１とバス１１０が破損した状態を示している。なお、図８Ａでは、バス１１０が有線であり、バス１１０が切断された状態を示している。もし、バス１１０として無線が採用されていた場合、図８Ａに示すシステム１００は、近接無線通信部が破損し、ドメイン間通信が行えない状態として想定する。
【００９４】
このとき、図８Ｂに示すマスタ機構スレッド４０２＃０とローカルマスタ機構スレッド４０７＃２は、ドメイン１０７＃１の破損を検出する。検出後、スレーブドメインに属するローカルマスタ機構スレッド４０７＃２は、バス１１０を経由して、マスタドメインが生存しているかを確認する。図８Ｂに示すシステム１００には、マスタドメインとなるドメイン１０７＃０が生存しているが、バス１１０が切断されているため、ローカルマスタ機構スレッド４０７＃２は、ドメイン１０７＃０の生存を確認できず、生存していないと判断する。続けて、ローカルマスタ機構スレッド４０７＃２は、ＤＢＢ２０７＃２を利用して、マスタドメインの生存確認を行う。
【００９５】
図８Ｂに示すシステム１００ではマスタドメインとなるドメイン１０７＃０が生存しているため、ＤＢＢ２０７＃２に対する通信発信に応答できる。したがって、ローカルマスタ機構スレッド４０７＃２は、マスタドメインが生存していると判断する。これにより、ローカルマスタ機構スレッド４０７＃２はバス１１０が断線したためマスタドメインと通信が行えなくなっている状態であると判断する。この状態では、ドメイン１０７＃２は、マスタドメインとなるドメイン１０７＃０の指示を受けることができなくなるため、シャットダウンし、動作を終了する。
【００９６】
なお、マスタドメインとバス１１０に障害が発生し、分離状態となる場合もありうる。たとえば、図８Ｂの状態で、ドメイン１０７＃１がマスタドメインと設定されており、ドメイン１０７＃０がスレーブドメイン順位１と設定されており、ドメイン１０７＃２がスレーブドメイン順位２と設定された状態を想定する。このとき、スレーブドメイン順位１であるドメイン１０７＃０が新たなマスタドメインとなり、起動処理を再実行する。起動時に、ドメイン１０７＃０は、スレーブドメイン順位２であったドメイン１０７＃２と通信できないため、起動処理時にシステム１００から切り離されることになる。
【００９７】
図９は、ステータステーブル３０３の記憶内容の一例を示す説明図である。なお、図９で示すステータステーブル３０３は、現在時刻が１２：３４：００以降の状態を示している。ステータステーブル３０３は、ドメイン種別、診断時刻、診断結果という３つのフィールドを含む。ドメイン種別フィールドには、ドメイン１０７の種別として、マスタドメインか、スレーブドメインか、またスレーブドメインであればスレーブドメイン順位が格納される。なお、ドメイン種別フィールドは、ドメイン１０７が一意に特定できればどのような値であってもよいので、たとえば、ドメイン１０７のＩＤ（ＩＤｅｎｔｉｆｉｃａｔｉｏｎ）であってもよい。
【００９８】
診断時刻フィールドには、自己診断回路２０８が診断を行った時刻が格納される。診断結果フィールドには、自己診断回路２０８による診断結果が格納される。たとえば、システム１００は、所定周期となる１分毎に自己診断回路２０８にて診断を行うことを想定している。この状態で、図９に示すステータステーブル３０３について、マスタドメインの自己診断回路２０８が、１２：３４：００にマスタドメインを診断し、診断結果がＯＫであることを示している。同様に、スレーブドメイン順位１の自己診断回路２０８が、１２：３４：００にスレーブドメイン順位１を診断し、診断結果がＯＫであることを示している。また、スレーブドメイン順位２の自己診断回路２０８が、１２：３３：００にスレーブドメイン順位２を診断し、診断結果がＯＫであることを示している。
【００９９】
また、スレーブドメイン順位２について１２：３４：００に診断が行われていないため、マスタドメインとスレーブドメイン順位１は、スレーブドメイン順位２が障害ドメインとなったことを検出する。また、図９には図示していないが、自己診断回路２０８の診断の結果、診断結果がＮＧとなり、診断結果フィールドにＮＧが記載される場合も存在する。このような場合も、他ドメインは診断結果フィールドにＮＧと記載されているドメインを障害ドメインとして検出する。
【０１００】
図１０は、起動処理を示すフローチャートである。システム１００は、電源投入される（ステップＳ１００１）と、マスタドメイン、スレーブドメイン順位１〜スレーブドメイン順位ｎをブート開始する（ステップＳ１００２〜ステップＳ１００４）。以降、マスタドメインがステップＳ１００５〜ステップＳ１００９を実行し、スレーブドメイン順位１がステップＳ１０１０〜ステップＳ１０１４を実行し、スレーブドメイン順位ｎがステップＳ１０１５〜ステップＳ１０１９を実行する。なお、スレーブドメイン順位ｎによるステップＳ１０１５〜ステップＳ１０１９の処理は、ステップＳ１０１０〜ステップＳ１０１４と等しいため、説明を省略する。
【０１０１】
マスタドメインは、仮想共有メモリ空間４１４を初期化する（ステップＳ１００５）。初期化後、マスタドメインは、アドレスのオフセット値を通知する（ステップＳ１００６）。通知後、マスタドメインは、メモリ１０９の物理アドレスからのオフセット値で設定される論理アドレスにメモリ１０９を割り当てる（ステップＳ１００７）。割り当て後、マスタドメインは、プロセス管理部４０８をマスタモードで起動し（ステップＳ１００８）、さらに、マスタ機構スレッド４０２を起動し（ステップＳ１００９）、起動処理を終了する。マスタドメインは、起動処理終了後、運用時処理に遷移する。
【０１０２】
また、スレーブドメイン順位１は、オフセット値の通知を受け付けたか否かを判断する（ステップＳ１０１０）。オフセット値の通知を受け付けていない場合（ステップＳ１０１０：Ｎｏ）、スレーブドメイン順位１は、再度ステップＳ１０１０の処理を実行する。オフセット値の通知を受け付けた場合（ステップＳ１０１０：Ｙｅｓ）、スレーブドメイン順位１は、メモリ１０９の物理アドレスからのオフセット値で設定される論理アドレスにメモリ１０９を割り当てる（ステップＳ１０１１）。割り当て後、スレーブドメイン順位１は、プロセス管理部４０８をスレーブモードで起動する（ステップＳ１０１２）。
【０１０３】
続けて、スレーブドメイン順位１は、仮想マスタ機構スレッド４０６を起動し（ステップＳ１０１３）、さらに、ローカルマスタ機構スレッド４０７を起動し（ステップＳ１０１４）、起動処理を終了する。スレーブドメイン順位１は、起動処理終了後、運用時処理に遷移する。
【０１０４】
起動処理が終了した、マスタドメイン、スレーブドメインは、運用時処理に遷移する。図１１、図１２では、マスタドメイン、スレーブドメインの運用時処理を説明する。マスタドメインは、運用時処理をマスタ機構スレッド４０２による機能によって実行する。同様に、スレーブドメインは、運用時処理をローカルマスタ機構スレッド４０７、仮想マスタ機構スレッド４０６による機能によって実行する。
【０１０５】
また、ステップＳ１１０３、ステップＳ１１０４、ステップＳ１１０９、ステップＳ１１１０の処理は、スレーブドメイン順位１〜スレーブドメイン順位ｎのうち、いずれかのスレーブドメインが実行する。図１１では、説明の簡略化のため、スレーブドメイン順位１が実行すると仮定して説明を行う。なお、図１２で示すステップＳ１２０１、ステップＳ１２０４、ステップＳ１２０５の処理は、スレーブドメイン順位１〜スレーブドメイン順位ｎ全てのスレーブドメインが実行する。
【０１０６】
図１１は、マスタドメイン、スレーブドメインの運用時処理を示すフローチャート（その１）である。マスタ機構スレッド４０２は、他ドメインへのメモリアクセスが発生したか否かを判断する（ステップＳ１１０１）。他ドメインへのメモリアクセスが発生した場合（ステップＳ１１０１：Ｙｅｓ）、マスタ機構スレッド４０２は、メモリ管理部４０９により、他ドメインのメモリ１０９へのアクセス要求を通知する（ステップＳ１１０２）。
【０１０７】
ステップＳ１１０３、ステップＳ１１０４では、他ドメインがスレーブドメイン順位１である場合を想定する。ローカルマスタ機構スレッド４０７＃１は、自ドメインへのメモリアクセス要求を受け付けたか否かを判断する（ステップＳ１１０３）。メモリアクセス要求を受け付けた場合（ステップＳ１１０３：Ｙｅｓ）、ローカルマスタ機構スレッド４０７＃１は、メモリアクセス応答を行い（ステップＳ１１０４）、要求元に応答の結果をマスタ機構スレッド４０２に送信する。応答の結果を送信後、またはメモリアクセス要求を受け付けていない場合（ステップＳ１１０３：Ｎｏ）、ローカルマスタ機構スレッド４０７＃１は、ステップＳ１１０９の処理に移行する。
【０１０８】
アクセスに対する応答受信後、または他ドメインへのメモリアクセスが発生していない場合（ステップＳ１１０１：Ｎｏ）、マスタ機構スレッド４０２は、ユーザの操作を受け付けたかを判断する（ステップＳ１１０５）。操作を受け付けた場合（ステップＳ１１０５：Ｙｅｓ）、マスタ機構スレッド４０２は、ユーザの操作受付処理を実行する（ステップＳ１１０６）。なお、具体的なユーザの操作受付処理とは、たとえば、キーボード１０６の操作によってＧＵＩ上で選択されたアプリの起動処理、またはアプリの終了処理等を実行する。操作受付処理を実行後、マスタ機構スレッド４０２は、ユーザの操作によってスレッド生成要求が発生したか否かを判断する（ステップＳ１１０７）。
【０１０９】
スレッド生成要求が発生した場合（ステップＳ１１０７：Ｙｅｓ）、マスタ機構スレッド４０２は、スケジューラ４０５により、いずれかのスレーブドメインへスレッド生成要求を通知する（ステップＳ１１０８）。なお、スケジューラ４０５によるドメインの選択方法は、たとえば、スレーブドメイン順位１〜スレーブドメイン順位ｎ内のＣＰＵ２０４のうち、最も負荷の低いＣＰＵを含むドメインであってもよい。図１１では、スレーブドメイン順位１に通知した場合を想定する。
【０１１０】
ローカルマスタ機構スレッド４０７＃１は、自ドメインへのスレッド生成要求を受け付けたか否かを判断する（ステップＳ１１０９）。スレッド生成要求を受け付けた場合（ステップＳ１１０９：Ｙｅｓ）、ローカルマスタ機構スレッド４０７＃１は、スレッド生成処理を行う（ステップＳ１１１０）。生成終了後、またはスレッド生成要求を受け付けていない場合（ステップＳ１１０９：Ｎｏ）、ローカルマスタ機構スレッド４０７＃１は、図１２で示すステップＳ１２０４に移行する。
【０１１１】
スレッド生成要求通知後か、スレッド生成要求が発生していない場合（ステップＳ１１０７：Ｎｏ）か、または操作を受け付けていない場合（ステップＳ１１０５：Ｎｏ）、マスタ機構スレッド４０２は、ステップＳ１２０１の処理に移行する。
【０１１２】
図１２は、マスタドメイン、スレーブドメインの運用時処理を示すフローチャート（その２）である。マスタ機構スレッド４０２、仮想マスタ機構スレッド４０６＃１〜仮想マスタ機構スレッド４０６＃ｎは、マスタコンテキスト転送処理を実行する（ステップＳ１２０１）。マスタコンテキスト転送処理の詳細は、図１３、図１４にて後述する。処理終了後、マスタ機構スレッド４０２は、所定周期が経過したかを判断する（ステップＳ１２０２）。所定周期が経過した場合（ステップＳ１２０２：Ｙｅｓ）、マスタ機構スレッド４０２は、ハードチェックスレッド処理（マスタ）を実行する（ステップＳ１２０３）。ハードチェックスレッド処理（マスタ）の詳細は、図１５にて後述する。
【０１１３】
処理終了後、または所定周期が経過していない場合（ステップＳ１２０２：Ｎｏ）、マスタ機構スレッド４０２は、ステップＳ１１０１の処理に移行する。仮想マスタ機構スレッド４０６＃１〜仮想マスタ機構スレッド４０６＃ｎは、マスタコンテキスト転送処理の終了後、再びステップＳ１２０１の処理を実行する。
【０１１４】
また、ローカルマスタ機構スレッド４０７＃１〜ローカルマスタ機構スレッド４０７＃ｎは、所定周期が経過したか否かを判断する（ステップＳ１２０４）。所定周期が経過した場合（ステップＳ１２０４：Ｙｅｓ）、ローカルマスタ機構スレッド４０７＃１〜ローカルマスタ機構スレッド４０７＃ｎは、ハードチェックスレッド処理（スレーブ）を実行する（ステップＳ１２０５）。処理終了後、または所定周期が経過していない場合（ステップＳ１２０４：Ｎｏ）、ローカルマスタ機構スレッド４０７＃１〜ローカルマスタ機構スレッド４０７＃ｎは、ステップＳ１１０３の処理に移行する。
【０１１５】
図１３、図１４では、マスタコンテキスト転送処理の説明を行う。システム１００が実行するマスタコンテキスト転送処理は、図１３に示すマスタコンテキスト転送処理１か、または図１４に示すマスタコンテキスト転送処理２のいずれか一方の処理が適用される。
【０１１６】
図１３は、マスタコンテキスト転送処理１を示すフローチャートである。マスタ機構スレッド４０２は、マスタコンテキスト３０１に対する書込イベントが発生したかを判断する（ステップＳ１３０１）。書込イベントが発生した場合（ステップＳ１３０１：Ｙｅｓ）、マスタ機構スレッド４０２は、メモリ更新要求を仮想マスタ機構スレッド４０６＃１〜仮想マスタ機構スレッド４０６＃ｎに通知する（ステップＳ１３０２）。通知後、マスタ機構スレッド４０２は、バリア同期を発行し、メモリロックする（ステップＳ１３０３）。
【０１１７】
なお、バリア同期を行ったマスタ機構スレッド４０２は、同一のバリア同期グループとなる仮想マスタ機構スレッド４０６＃１〜仮想マスタ機構スレッド４０６＃ｎがバリア同期を実行するまで待機する。具体的に、マスタ機構スレッド４０２は、仮想マスタ機構スレッド４０６＃１がステップＳ１３０５の処理を実行し、かつ、仮想マスタ機構スレッド４０６＃ｎがステップＳ１３０７を実行するまで待機する。
【０１１８】
続けて、仮想マスタ機構スレッド４０６＃１は、メモリ更新要求を受け付けたか否かを判断する（ステップＳ１３０４）。メモリ更新要求を受け付けていない場合（ステップＳ１３０４：Ｎｏ）、仮想マスタ機構スレッド４０６＃１は、再びステップＳ１３０４の処理を実行する。メモリ更新要求を受け付けている場合（ステップＳ１３０４：Ｙｅｓ）、仮想マスタ機構スレッド４０６＃１は、バリア同期を発行し、メモリロックする（ステップＳ１３０５）。同様に、仮想マスタ機構スレッド４０６＃ｎも、ステップＳ１３０６、ステップＳ１３０７を実行する。なお、ステップＳ１３０６、ステップＳ１３０７の処理は、ステップＳ１３０４、ステップＳ１３０５の処理と等しいため、説明を省略する。
【０１１９】
マスタ機構スレッド４０２、仮想マスタ機構スレッド４０６＃１〜仮想マスタ機構スレッド４０６＃ｎ全てがバリア同期を発行した場合、マスタ機構スレッド４０２は、更新されたマスタコンテキストデータを転送する（ステップＳ１３０８）。転送先は、仮想マスタ機構スレッド４０６＃１〜仮想マスタ機構スレッド４０６＃ｎとなる。転送後、マスタ機構スレッド４０２は、メモリアンロックし、バリア同期を発行する（ステップＳ１３０９）。
【０１２０】
続けて、仮想マスタ機構スレッド４０６＃１は、受信したマスタコンテキストデータをミラーリングマスタコンテキスト３０２＃１に格納し（ステップＳ１３１０）、格納後、メモリアンロックし、バリア同期を発行する（ステップＳ１３１１）。同様に、仮想マスタ機構スレッド４０６＃ｎは、受信したマスタコンテキストデータをミラーリングマスタコンテキスト３０２＃ｎに格納し（ステップＳ１３１２）、格納後、メモリアンロックし、バリア同期を発行する（ステップＳ１３１３）。
【０１２１】
マスタ機構スレッド４０２、仮想マスタ機構スレッド４０６＃１〜＃ｎ全てがバリア同期を発行した場合、マスタ機構スレッド４０２、仮想マスタ機構スレッド４０６＃１〜仮想マスタ機構スレッド４０６＃ｎは、マスタコンテキスト転送処理１を終了する。また、書込イベントが発生していない場合（ステップＳ１３０１：Ｎｏ）、マスタ機構スレッド４０２は、マスタコンテキスト転送処理１を終了する。
【０１２２】
このように、マスタコンテキスト転送処理１は、マスタコンテキスト３０１内の同期部分の転送領域を更新箇所に絞ることで、データ転送量を抑えることを実現している。なお、マスタコンテキスト転送処理１は、メモリロック期間が発生するため、バス１１０の転送速度が高速であることが好ましい。
【０１２３】
図１４は、マスタコンテキスト転送処理２を示すフローチャートである。なお、図１４の説明において、仮想マスタ機構スレッド４０６＃１〜仮想マスタ機構スレッド４０６＃ｎによって実行されるステップＳ１４０３〜ステップＳ１４０５の処理は同一である。したがって、図１４の説明では、仮想マスタ機構スレッド４０６＃１の実行例を想定して説明する。
【０１２４】
マスタ機構スレッド４０２は、マスタコンテキスト３０１に対する書込イベントが発生したか否かを判断する（ステップＳ１４０１）。書込イベントが発生した場合（ステップＳ１４０１：Ｙｅｓ）、マスタ機構スレッド４０２は、マスタコンテキスト３０１を更新する（ステップＳ１４０２）。更新後、または書込イベントが発生していない場合（ステップＳ１４０１：Ｎｏ）、マスタ機構スレッド４０２は、マスタコンテキスト転送処理２を終了する。
【０１２５】
また、仮想マスタ機構スレッド４０６＃１は、マスタコンテキスト３０１の記憶領域に、ブレークポイントを設定する（ステップＳ１４０３）。なお、ステップＳ１４０３で設定するブレークポイントは、ライトアクセスに反応するブレークポイントであることが好ましい。また、ブレークポイントの設定後、仮想マスタ機構スレッド４０６＃１は、ブレークポイントに対してライトアクセスが発生したか否か判断する（ステップＳ１４０４）。
【０１２６】
ライトアクセスが発生していない場合（ステップＳ１４０４：Ｎｏ）、仮想マスタ機構スレッド４０６＃１は、再びステップＳ１４０４の処理に移行する。ライトアクセスが発生した場合（ステップＳ１４０４：Ｙｅｓ）、仮想マスタ機構スレッド４０６＃１は、ライトアクセスが発生した転送領域アドレスと更新されたマスタコンテキストデータを引数として、コンテキストデータ転送スレッドを生成し起動する（ステップＳ１４０５）。起動後、仮想マスタ機構スレッド４０６＃１は、マスタコンテキスト転送処理２を終了する。
【０１２７】
なお、コンテキストデータ転送スレッドは、ステップＳ１４０５が実行されるたびに新たに生成される。また、コンテキストデータ転送スレッドは各ドメインで個別に生成される。以下の説明では、仮想マスタ機構スレッド４０６＃１が属するスレーブドメインで起動されたコンテキストデータ転送スレッドであることを想定して説明を行う。
【０１２８】
新たに起動されたコンテキストデータ転送スレッドは、自身のスレッドＩＤと、転送領域アドレスを、転送領域管理テーブルに格納する（ステップＳ１４０６）。なお、転送領域管理テーブルは、スレッドＩＤフィールドと、転送領域アドレスフィールドを含むテーブルである。格納後、コンテキストデータ転送スレッドは、転送領域アドレスが一致する既存のコンテキストデータ転送スレッドが存在するか否かを判断する（ステップＳ１４０７）。
【０１２９】
既存のコンテキストデータ転送スレッドが存在する場合（ステップＳ１４０７：Ｙｅｓ）、コンテキストデータ転送スレッドは、既存のコンテキストデータ転送スレッドの終了通知を発行する（ステップＳ１４０８）。具体的な発行方法としては、コンテキストデータ転送スレッドは、ＯＳ等が提供しているＡＰＩ群のうちスレッドを終了するＡＰＩを、転送領域管理テーブルのスレッドＩＤを引数として実行する。
【０１３０】
既存のコンテキストデータ転送スレッドが存在しない場合（ステップＳ１４０７：Ｎｏ）、コンテキストデータ転送スレッドは、受信したマスタコンテキストデータをミラーリングマスタコンテキスト３０２＃１に格納する（ステップＳ１４０９）。格納後、コンテキストデータ転送スレッドは、転送領域管理テーブルから自身のスレッドＩＤが設定されたレコードを削除し（ステップＳ１４１０）、スレッド実行を終了する。
【０１３１】
このように、マスタコンテキスト転送処理２は、バス１１０の転送速度が遅く、頻繁にステータステーブル３０３が更新される場合でも対応可能である。具体的に、マスタコンテキスト転送処理２を適用したシステム１００は、受信したマスタコンテキストデータをミラーリングマスタコンテキスト３０２＃１に格納する前に、マスタコンテキストが書き換わってもよい。
【０１３２】
図１５は、ハードチェックスレッド（マスタ）の処理を示すフローチャートである。図１５では、マスタドメインで実行されるハードチェックスレッドの処理を示す。ハードチェックスレッドは、障害ドメイン検出処理を実行する（ステップＳ１５０１）。障害ドメイン検出処理の詳細は、図１７にて後述する。処理後、ハードチェックスレッドは、障害ドメインが検出されたか否かを判断する（ステップＳ１５０２）。障害ドメインが検出された場合（ステップＳ１５０２：Ｙｅｓ）、ハードチェックスレッドは、障害ドメインのメモリ１０９に割り当てた仮想メモリ空間解放を設定する（ステップＳ１５０３）。
【０１３３】
続けて、ハードチェックスレッドは、障害ドメインのメモリ１０９への書き込み禁止を設定し（ステップＳ１５０４）、さらに障害ドメインへのスレッド生成禁止を設定し（ステップＳ１５０５）、スレッド実行を終了する。なお、障害ドメインが複数検出される場合も存在する。この場合、ハードチェックスレッドは、検出された全ての障害ドメインに対して、ステップＳ１５０３〜ステップＳ１５０５の処理を実行する。また、障害ドメインが検出されなかった場合（ステップＳ１５０２：Ｎｏ）、ハードチェックスレッドは、スレッド実行を終了する。
【０１３４】
図１６は、ハードチェックスレッド（スレーブ）処理を示すフローチャートである。図１６では、スレーブドメイン順位１〜スレーブドメイン順位ｎで実行されるハードチェックスレッドの処理を示す。ハードチェックスレッドは、障害ドメイン検出処理を実行する（ステップＳ１６０１）。障害ドメイン検出処理の詳細は、図１７にて後述する。処理後、ハードチェックスレッドは、障害ドメインが検出されたか否かを判断する（ステップＳ１６０２）。
【０１３５】
障害ドメインが検出された場合（ステップＳ１６０２：Ｙｅｓ）、ハードチェックスレッドは、マスタドメインがバス１１０を経由して通信可能か否かを判断する（ステップＳ１６０３）。なお、通信可能か否かの判断方法として、ハードチェックスレッドは、１００プロセッサ間通信であるＩＰＣ（Ｉｎｔｅｒ  Ｐｒｏｃｅｓｓｏｒ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ）等のＡＰＩを用いて判断することができる。
【０１３６】
マスタドメインが通信可能でない場合（ステップＳ１６０３：Ｎｏ）、ハードチェックスレッドは、自ドメインのＤＢＢ２０７をアクティベートし（ステップＳ１６０４）、マスタドメインのＤＢＢ２０７に通信発信する（ステップＳ１６０５）。なお、各ドメインのＤＢＢ２０７は、それぞれ固有のＩＤを有しており、固有のＩＤを用いて発信することで、システム１００内の他のＤＢＢ２０７に発信することができる。
【０１３７】
発信後、ハードチェックスレッドは、マスタドメインから応答があったか否かを判断する（ステップＳ１６０６）。マスタドメインから応答があった場合（ステップＳ１６０６：Ｙｅｓ）、ハードチェックスレッドは、自ドメインをシャットダウンする（ステップＳ１６０７）。ステップＳ１６０７の処理後、自ドメインをシャットダウンするため、ハードチェックスレッドは、スレッド実行を終了する。なお、ステップＳ１６０６：Ｙｅｓとなった場合とは、マスタドメインと物理的に切断されてしまったケースである。
【０１３８】
マスタドメインから応答がない場合（ステップＳ１６０６：Ｎｏ）、ハードチェックスレッドは、自ドメインが最高位の生存ドメインか否かを判断する（ステップＳ１６０８）。自ドメインが最高位の生存ドメインである場合（ステップＳ１６０８：Ｙｅｓ）、ハードチェックスレッドは、仮想マスタ機構スレッド４０６を終了させる（ステップＳ１６０９）。なお、ステップＳ１６０８：Ｙｅｓとなった場合とは、マスタドメインが障害ドメインとなり、自ドメインがマスタドメインの代替となるケースである。
【０１３９】
続けて、ハードチェックスレッドは、ローカルマスタ機構スレッド４０７にミラーリングマスタコンテキスト３０２を括り付ける（ステップＳ１６１０）。具体的に、ハードチェックスレッドは、ローカルマスタ機構スレッド４０７がアクセスするデータを、ローカルマスタ機構スレッド４０７が出力していたログからミラーリングマスタコンテキスト３０２へと切り替える。
【０１４０】
括り付け後、ハードチェックスレッドは、ローカルマスタ機構スレッド４０７を新たなマスタ機構スレッド４０２として起動する（ステップＳ１６１１）。なお、新たなマスタ機構スレッド４０２は、起動処理として、ステップＳ１００５の処理から実行を開始する。起動後、ハードチェックスレッドは、スレッド実行を終了する。
【０１４１】
自ドメインが最高位の生存ドメインでない場合（ステップＳ１６０８：Ｎｏ）、ハードチェックスレッドは、スレッド実行を終了する。なお、ステップＳ１６０８：Ｎｏとなった場合とは、マスタドメインが障害ドメインとなり、他のスレーブドメインがマスタドメインとなり、自ドメインは引き続きスレーブドメインとして動作するケースである。
【０１４２】
マスタドメインが通信可能である場合（ステップＳ１６０３：Ｙｅｓ）、ハードチェックスレッドは、スレッド実行を終了する。ステップＳ１６０３：Ｙｅｓとなった場合とは、スレーブドメインのいずれかが障害ドメインとなったケースである。障害ドメインが検出されていない場合（ステップＳ１６０２：Ｎｏ）、ハードチェックスレッドは、スレッド実行を終了する。
【０１４３】
図１７は、障害ドメイン検出処理を示すフローチャートである。障害ドメイン検出処理は、マスタドメイン、スレーブドメイン順位１〜スレーブドメイン順位ｎが実行するハードチェックスレッドにて実行される。
【０１４４】
ハードチェックスレッドは、自ドメイン内の自己診断回路２０８を起動し、診断実行させる（ステップＳ１７０１）。続けて、ハードチェックスレッドは、ステータステーブル３０３＃０のうち、ドメイン種別フィールドが自ドメインであるレコードを選択する（ステップＳ１７０２）。選択後、ハードチェックスレッドは、自己診断回路２０８の結果を、選択したレコードの診断結果フィールドに書き込む（ステップＳ１７０３）。書き込み後、ハードチェックスレッドは、自ドメイン内のステータステーブル３０３のレコードのうち、診断結果がＮＧとなるレコードが存在するかを判断する（ステップＳ１７０４）。ＮＧとなるレコードが存在する場合（ステップＳ１７０４：Ｙｅｓ）、ハードチェックスレッドは、存在したレコードに対するドメインを障害ドメインとして検出する（ステップＳ１７０５）。
【０１４５】
障害ドメインを検出後、またはＮＧとなるレコードが存在しない場合（ステップＳ１７０４：Ｎｏ）、ハードチェックスレッドは、診断時刻フィールドが所定周期以上更新されていないレコードが存在するか否かを判断する（ステップＳ１７０６）。所定周期以上更新されていないレコードが存在しない場合（ステップＳ１７０６：Ｎｏ）、ハードチェックスレッドは、障害ドメイン検出処理を終了する。
【０１４６】
または所定周期以上更新されていないレコードが存在する場合（ステップＳ１７０６：Ｙｅｓ）、ハードチェックスレッドは、存在したレコードに対するドメインを障害ドメインとして検出する（ステップＳ１７０７）。出力後、ハードチェックスレッドは、障害ドメイン検出処理を終了する。
【０１４７】
以上説明したように、プロセッサ管理方法によれば、安価なＳｏＣとメモリを含むドメイン群でシステムを構築し、各ドメインのメモリにオフセット値を設定してメモリ空間を連結する。これにより、プロセッサ管理方法を適用したシステムは、各ドメインは広いメモリ空間を利用でき、安価で高性能なシステムをユーザに提供できる。メモリ空間が広くなることで、システムは複数のアプリを同時に実行することが容易になる。
【０１４８】
また、プロセッサ管理方法によれば、更新されたコンテキストデータをマスタドメインからスレーブドメインに転送し、スレーブドメイン内のメモリに格納してもよい。これにより、マスタドメインに障害が発生した場合、スレーブドメインは、自身のメモリ内にコンテキストデータを用いて、システムを続行することができる。さらに、システムは、更新箇所に絞れるため、転送量を抑えることができる。
【０１４９】
また、プロセッサ管理方法によれば、マスタドメイン内に設定したブレークポイントに対するライトアクセスを検出したときに、ブレークポイントに対する更新されたコンテキストデータをスレーブドメイン内のメモリに格納してもよい。これにより、マスタドメインに障害が発生した場合、スレーブドメインは、自身のメモリ内にコンテキストデータを用いて、システムを続行することができる。さらに、システムの形態が、ドメイン間のバスが遅く、頻繁にマスタコンテキストが変更になる場合でも対応することができる。
【０１５０】
また、プロセッサ管理方法によれば、ブレークポイントに対するデータをスレーブドメイン内のメモリに格納する第１スレッドが実行完了する前に、同一のアドレスに対してメモリに格納する第２スレッドを検出した場合、第１スレッドの処理を中止してもよい。これにより、ブレークポイントを利用した更新方法の場合について、余計な処理を行わずに済ませることができる。
【０１５１】
また、プロセッサ管理方法によれば、他ドメインの障害を検出してもよい。これにより、マスタドメインの障害、または、ドメイン間のバスに障害が発生したことを検出することができる。
【０１５２】
また、プロセッサ管理方法によれば、自ドメインの診断結果と診断時刻を、マスタコンテキストに書き込み、転送された自ドメイン内のミラーリングされたマスタコンテキスト内の診断結果と診断時刻に基づいて、他ドメインの障害を検出してもよい。これにより、ドメインの診断回数を最小限に抑え、他ドメインの診断結果を参照することができる。
【０１５３】
また、プロセッサ管理方法によれば、障害が検出されるとき、マスタドメインは障害となったドメインに対して、一部の処理を停止してもよい。具体的には、マスタドメインは、該当ドメインのメモリに割り当てたメモリ空間解放を設定する。これにより、システムは、障害ドメインのメモリが新たに使用されることを防止することができる。また、マスタドメインは、該当ドメインのメモリへの書き込み禁止を設定する。これにより、システムは、該当ドメイン内で暴走中のアプリによるメモリ破壊、または、自動リセットによるメモリクリアを回避できる。また、マスタドメインは、該当ドメインへのスレッド生成禁止を設定する。これにより、システムは、アプリを正常に実行できないドメインを避けてアプリを割り当てることができる。
【０１５４】
また、プロセッサ管理方法によれば、障害が検出されるときに、ローカルマスタ機構がマスタ機構に通知して障害がマスタ機構の障害であるか否かを判断する。さらに、プロセッサ管理方法によれば、マスタ機構の障害であるときに、ローカルマスタ機構が複数のプロセッサを管理する状態にあるか否かを判断してもよい。これにより、プロセッサ管理方法を適用したシステムは、マスタドメインの障害時に、スレーブドメインの中から、次にドメインとなるドメインを判断することができる。
【０１５５】
また、プロセッサ管理方法によれば、マスタドメインへの通知に対して応答がない場合、マスタドメインのＤＢＢへ発信してマスタ機構と切断された状態か否かを判断し、切断された状態であれば、自身のドメインの動作を終了してもよい。これにより、マスタドメインが動作しているにも関わらず、障害により分離状態となってしまった場合、分離されたドメインが動作し続けることがなくなり、無駄な消費電力を削減することができる。
【０１５６】
また、プロセッサ管理方法によれば、複数のプロセッサを管理する状態にあると判断されるとき、スレーブドメインを新たなマスタドメインに設定してもよい。これにより、プロセッサ管理方法を適用したシステムは、障害発生時に対して、新たなマスタドメインの実行により機能や性能の制限を最小限にしつつ、継続的に利用することができる。また、これらの動作により、プロセッサ管理方法を適用したシステムを使用するユーザは、障害発生したドメインを含むユニットを修理サービスなどに預けつつ、一方で、残余のドメインにより継続的にシステムを利用することができる。
【０１５７】
なお、本実施の形態で説明したプロセッサ管理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション、携帯電話等のコンピュータで実行することにより実現することができる。本プロセッサ管理方法を実行するプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＳＤカード等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本プロセッサ管理方法を実行するプログラムは、インターネット等のネットワークを介して配布してもよい。
【０１５８】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１５９】
（付記１）複数のプロセッサのうちの一のプロセッサに前記複数のプロセッサを管理するマスタ機構を設定し、
前記複数のプロセッサのうちの前記一のプロセッサ以外のプロセッサのそれぞれに当該プロセッサを管理するローカルマスタ機構と仮想マスタ機構とを設定し、
前記マスタ機構によって管理される共有メモリが前記複数のプロセッサから連続したメモリとしてアクセスされるために、前記マスタ機構が前記複数のプロセッサにアドレスのオフセット値を通知すること
を特徴とするプロセッサ管理方法。
【０１６０】
（付記２）前記オフセット値が通知された後に、前記ローカルマスタ機構は、前記オフセット値に基づいて前記共有メモリを前記ローカルマスタ機構が管理するメモリ領域へ割り当てること
を特徴とする付記１に記載のプロセッサ管理方法。
【０１６１】
（付記３）前記仮想マスタ機構は、前記マスタ機構から転送されるコンテキストデータを前記ローカルマスタ機構が管理するメモリ領域に格納すること
を特徴とする付記１または付記２に記載のプロセッサ管理方法。
【０１６２】
（付記４）前記仮想マスタ機構は、前記マスタ機構に設定されたブレークポイントを検出したときに、前記マスタ機構のコンテキストデータを前記ローカルマスタ機構が管理するメモリ領域に格納すること
を特徴とする付記１または付記２に記載のプロセッサ管理方法。
【０１６３】
（付記５）第１スレッドにおいて前記コンテキストデータを前記メモリ領域に格納するときに、更新された前記コンテキストデータが第２スレッドにおいて検出されるとき、前記第１スレッドの処理を中止すること
を特徴とする付記４に記載のプロセッサ管理方法。
【０１６４】
（付記６）前記マスタ機構または前記ローカルマスタ機構は、障害を検出するための処理を行うこと
を特徴とする付記１乃至付記５の何れか一に記載のプロセッサ管理方法。
【０１６５】
（付記７）前記マスタ機構または前記ローカルマスタ機構は、前記マスタ機構のコンテキストデータにタイムスタンプまたは付随情報を所定周期毎に書き込み、
前記タイムスタンプまたは前記付随情報に基づいて前記障害を検出すること
を特徴とする付記６に記載のプロセッサ管理方法。
【０１６６】
（付記８）前記障害が検出されるとき、前記マスタ機構は少なくとも一部の処理を停止すること
を特徴とする付記６または付記７に記載のプロセッサ管理方法。
【０１６７】
（付記９）前記障害が検出され、前記ローカルマスタ機構は前記マスタ機構に通知して前記障害が前記マスタ機構の障害であるか否かを判断し、
前記マスタ機構の障害であると判断されたとき、前記ローカルマスタ機構が前記複数のプロセッサを管理する状態にあるか否かを判断すること
を特徴とする付記６または付記７に記載のプロセッサ管理方法。
【０１６８】
（付記１０）前記障害が検出され、前記マスタ機構への通知に対して応答がない場合に、前記ローカルマスタ機構は前記マスタ機構が制御可能な通話装置へ発信して前記マスタ機構と切断された状態か否かを判断し、
前記マスタ機構と切断された状態であると判断された場合、前記ローカルマスタ機構に設定されたプロセッサの動作を終了すること
を特徴とする付記６に記載のプロセッサ管理方法。
【０１６９】
（付記１１）前記ローカルマスタ機構が前記複数のプロセッサを管理する状態にあると判断されるとき、前記ローカルマスタ機構は新たなマスタ機構として設定すること
を特徴とする付記６乃至付記９の何れか一に記載のプロセッサ管理方法。
【符号の説明】
【０１７０】
１００  システム
１０９  メモリ
１１０  バス
２０４  ＣＰＵ
３０１  マスタコンテキスト
３０２  ミラーリングマスタコンテキスト
３０３  ステータステーブル
３１１  検出部
３１２  転送部
３１３  判断部
３１４  設定部
３１５  通知部
３１６  割当部
３１７  格納部
３１８  設定部
３１９  終了部
【国際調査報告】
2012114443.tif 000024
2012114443.tif 000025
2012114443.tif 000026
2012114443.tif 000027