(57)【要約】【課題】リソースへのアクセスについての排他性を担保しつつフォールトトレラントなシステムを提供する。【解決手段】半導体装置１０は、複数の処理部１１と、複数の処理部１１により共有される共有リソース１２と、ガード部１３とを有する。ガード部１３は、アクセスの制限を行うことにより処理部１１による共有リソース１２へのアクセスを制御し、処理部１１が故障した場合に、故障した処理部１１の処理を引き継ぐ他の処理部１１による、故障した処理部１１に許可されていたアクセス先の少なくとも一部に対するアクセスを許可するようアクセスの制御を変更する。【選択図】図１
2017188072.tif 000002
【特許請求の範囲】
【請求項１】
複数の処理部と、
前記複数の処理部により共有される共有リソースと、
ガード部と
を有し、
前記ガード部は、
アクセスの制限を行うことにより前記処理部による前記共有リソースへのアクセスを制御し、
前記処理部が故障した場合に、故障した前記処理部の処理を引き継ぐ他の前記処理部による、故障した前記処理部に許可されていたアクセス先の少なくとも一部に対するアクセスを許可するようアクセスの制御を変更する
半導体装置。
【請求項２】
前記ガード部は、さらに、前記処理部が故障した場合に、故障した前記処理部によるアクセスを禁止するようアクセスの制御を変更する
請求項１に記載の半導体装置。
【請求項３】
前記処理部の故障が検知される毎に、該処理部をリセットするリセット部をさらに有し、
前記ガード部は、検知された故障の回数が予め定められた回数を超える前記処理部が発生した場合に、アクセスの制御を変更する
請求項１に記載の半導体装置。
【請求項４】
前記ガード部は、アクセスの制限を行うことによりさらに前記ガード部自体へのアクセスを制御し、前記ガード部へのアクセスが許可されている前記処理部が故障した場合に、故障した前記処理部以外の他の前記処理部による前記ガード部へのアクセスを許可するようアクセスの制御を変更する
請求項１に記載の半導体装置。
【請求項５】
前記ガード部は、
前記処理部による前記共有リソースへのアクセスの制限を規定するアクセス制限情報を記憶するアクセス制限情報記憶部と、
前記アクセス制限情報記憶部に記憶された前記アクセス制限情報に従って、前記処理部によるアクセスを制御するアクセス制御部と、
前記アクセス制限情報記憶部が記憶するアクセス制限情報を更新する更新部と
を有する請求項１に記載の半導体装置。
【請求項６】
前記ガード部は、さらに、
前記アクセス制限情報記憶部に記憶された前記アクセス制限情報を更新するための更新情報を記憶する更新情報記憶部を有し、
前記更新部は、前記更新情報記憶部に記憶された前記更新情報を用いて、前記アクセス制限情報記憶部が記憶するアクセス制限情報を更新する
請求項５に記載の半導体装置。
【請求項７】
前記処理部毎に、処理を識別する識別情報について、前記処理部が使用可能な前記識別情報を管理する管理部をさらに有し、
前記管理部は、前記処理部が故障した場合に、故障した前記処理部の処理を引き継ぐ他の前記処理部が、該処理に対応する前記識別情報を使用可能となるよう管理を変更し、
前記処理部は、該処理部が使用可能であると前記管理部に管理されている前記識別情報に対応する処理を実行し、前記共有リソースへのアクセスの際に、実行する処理に対応する前記識別情報を前記ガード部へ通知し、
前記ガード部は、前記識別情報に応じて前記処理部によるアクセスを制御し、前記処理部が故障した場合に、前記管理部による変更に応じて、アクセスの制御を変更する
請求項１に記載の半導体装置。
【請求項８】
前記管理部は、
前記処理部が使用可能な前記識別情報を規定する管理情報を記憶する管理情報記憶部と、
前記管理情報記憶部が記憶する管理情報を更新する管理情報更新部と
を有する請求項７に記載の半導体装置。
【請求項９】
前記管理部は、さらに、
前記管理情報記憶部に記憶された管理情報を更新するための更新情報を記憶する管理更新情報記憶部を有し、
前記管理情報更新部は、前記管理更新情報記憶部に記憶された更新情報を用いて、前記管理情報記憶部が記憶する管理情報を更新する
請求項８に記載の半導体装置。
【請求項１０】
複数の処理部と、
前記複数の処理部により共有される共有リソースと、
前記処理部毎に、処理を識別する識別情報について、前記処理部が使用可能な前記識別情報を管理する管理部と、
アクセスの制限を行うことにより前記処理部による前記共有リソースへのアクセスを制御するガード部と
を有し、
前記処理部は、該処理部が使用可能であると前記管理部に管理されている前記識別情報に対応する処理を実行し、前記共有リソースへのアクセスの際に、実行する処理に対応する前記識別情報を前記ガード部へ通知し、
前記管理部は、前記処理部が故障した場合に、故障した前記処理部の処理を引き継ぐ他の前記処理部が、該処理に対応する前記識別情報を使用可能となるよう管理を変更し、
前記ガード部は、前記識別情報に応じて前記処理部によるアクセスを制御する
半導体装置。
【請求項１１】
アクセスの制限を行うことにより、複数の処理部それぞれによる共有リソースへのアクセスを制御しつつ、前記処理部により処理を実行し、
前記複数の処理部の故障をそれぞれ検知し、
前記処理部が故障した場合に、故障した前記処理部の処理を引き継ぐ他の前記処理部による、故障した前記処理部に許可されていたアクセス先の少なくとも一部に対するアクセスを許可するよう、アクセスの制御を変更する
アクセス管理方法。
【請求項１２】
前記処理部が故障した場合に、さらに、故障した前記処理部によるアクセスを禁止するようアクセスの制御を変更する
請求項１１に記載のアクセス管理方法。
【請求項１３】
前記処理部の故障が検知される毎に、該処理部をリセットし、
検知された故障の回数が予め定められた回数を超える前記処理部が発生した場合に、故障した前記処理部の処理を引き継ぐ他の前記処理部による、故障した前記処理部に許可されていたアクセス先の少なくとも一部に対するアクセスを許可するよう、アクセスの制御を変更する
請求項１１に記載のアクセス管理方法。
【請求項１４】
前記処理部毎に、処理を識別する識別情報について、前記処理部が使用可能な前記識別情報を管理し、
前記処理部が故障した場合に、故障した前記処理部の処理を引き継ぐ他の前記処理部が、該処理に対応する前記識別情報を使用可能となるよう管理を変更し、
前記処理部は、該処理部が使用可能であると管理されている前記識別情報に対応する処理を実行し、前記共有リソースへのアクセスの際に、実行する処理に対応する前記識別情報を通知し、
前記処理部が実行した際に使用される前記識別情報に応じて前記処理部によるアクセスを制御し、
前記処理部が故障した場合に、前記管理の変更に応じて、アクセスの制御を変更する
請求項１１に記載のアクセス管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は半導体装置及びアクセス管理方法に関し、例えば共有リソースへのアクセスを制御する半導体装置及びアクセス管理方法に関する。
【背景技術】
【０００２】
何らかの障害が発生したとしても動作を続けることがシステムに求められる場合がある。このようなシステムはフォールトトレラントシステムとして様々なものが知られている。
【０００３】
例えば、特許文献１は、所定の機能を実行するプログラム群および諸情報などのデ−タ群を予め保持するデ−タベースと、複数のＣＰＵと、周辺装置に対するインタフェイスとを備える制御装置であって、次のような制御を行う制御装置について開示している。すなわち、特許文献１に開示された制御装置では、複数のＣＰＵにおける特定のＣＰＵは、他のＣＰＵの処理を管理する管理機能権を備え、この管理機能権に基づき、あるＣＰＵに異常が発生した場合、当該ＣＰＵが処理していたプログラムを他の正常なＣＰＵに処理させる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平５−２０４６８９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
排他性の観点によれば、あるＣＰＵがある処理を実行中は、その処理で使用されるリソースに対する他のＣＰＵからのアクセスを禁止すべき場合がある。しかしながら、特許文献１に記載されたシステムでは、各ＣＰＵが接続切替手段を変更出来るため、意図的か故障によるものかに関係なく、アクセス妨害、なりすまし等が可能であり、問題である。
したがって、リソースへのアクセスについての排他性を担保しつつフォールトトレラントなシステムを提供することが求められている。
【０００６】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００７】
一実施の形態によれば、ガード部は、処理部が故障した場合に、故障した処理部の処理を引き継ぐ他の処理部による、故障した処理部に許可されていたアクセス先の少なくとも一部に対するアクセスを許可するようアクセスの制御を変更する。
【発明の効果】
【０００８】
前記一実施の形態によれば、リソースへのアクセスについての排他性を担保しつつフォールトトレラントなシステムを提供することができる。
【図面の簡単な説明】
【０００９】
【図１】実施の形態にかかる半導体装置の概要構成例を示すブロック図である。
【図２】実施の形態１にかかる半導体装置の概要構成例を示すブロック図である。
【図３】実施の形態１の変形例にかかる半導体装置の一例を示すブロック図である。
【図４】実施の形態１にかかるレジスタＣの構成例について説明する図である。
【図５】実施の形態１にかかるレジスタＥ１の構成例について説明する図である。
【図６】実施の形態１にかかる半導体装置の動作の一例を示すフローチャートである。
【図７】実施の形態２にかかるレジスタＥ１の構成例について説明する図である。
【図８】実施の形態３にかかる半導体装置の概要構成例を示すブロック図である。
【図９】実施の形態３にかかる半導体装置の動作の一例を示すフローチャートである。
【図１０】実施の形態４にかかる半導体装置の概要構成例を示すブロック図である。
【図１１】実施の形態４にかかるレジスタＤの構成例について説明する図である。
【図１２】実施の形態４にかかるレジスタＦの構成例について説明する図である。
【図１３】実施の形態４にかかる半導体装置の動作の一例を示すフローチャートである。
【図１４】実施の形態５にかかる半導体装置の概要構成例を示すブロック図である。
【図１５】実施の形態５にかかる半導体装置の動作の一例を示すフローチャートである。
【図１６】実施の形態６にかかるレジスタＦの構成例について説明する図である。
【発明を実施するための形態】
【００１０】
説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【００１１】
＜実施の形態の概要＞
実施の形態の詳細を説明する前に、まず、概要について説明する。図１は、実施の形態にかかる半導体装置１０の概要構成例を示すブロック図である。半導体装置１０は、図１に示されるように、処理部１１Ａ、１１Ｂ、１１Ｃと、共有リソース１２と、ガード部１３とを有する。なお、図１では、処理部として３つの処理部が示されているが、半導体装置１０は複数の処理部を有していればよく、数は３に限定されない。なお、以下の説明において、複数の処理部１１Ａ、１１Ｂ、１１Ｃについて、これらを区別しないで言及する場合には、単に処理部１１という。半導体装置１０は、処理部１１が共有リソース１２にアクセスして処理を行う装置である。
【００１２】
処理部１１は、共有リソース１２にアクセスして処理を実行するハードウェア（回路）であり、例えば、ＣＰＵ（Central Processing Unit）又はＤＭＡＣ（Direct Memory Access controller）などの処理回路が該当するが、これらに限られない。
【００１３】
共有リソース１２は、複数の処理部１１により共有されるリソースであり、例えば、共有メモリ、ＣＡＮ（Controller Area Network）ユニットなどの通信ユニット、タイマ、ＡＤコンバータ（アナログデジタル変換器）などのリソースが該当するが、これらに限られない。また、共有リソース１２は、１つのリソースであってもよいし、複数のリソースであってもよい。
【００１４】
ガード部１３は、処理部１１による共有リソースに対するアクセスを制限するハードウェア（回路）である。ガード部１３は、アクセスの制限を行うことにより処理部１１による共有リソース１２へのアクセスを制御する。また、ガード部１３は、処理部１１のいずれかが故障した場合に、故障した処理部１１の処理を引き継ぐ他の処理部１１による、故障した処理部１１に許可されていたアクセス先の少なくとも一部に対するアクセスを許可するようアクセスの制御を変更する。例えば、第１の状態において、処理部１１Ａが共有リソース１２に対してアクセス可能であり、処理部１１Ｂ、１１Ｃが共有リソース１２へのアクセスが禁止されているものとする。すなわち、ガード部１３は、第１の状態において、処理部１１Ａについては共有リソース１２へのアクセスを許可する一方、処理部１１Ｂ及び処理部１１Ｃに対しては共有リソース１２へのアクセスを禁止する。ここで、処理部１１Ａが故障したとする。故障後の状態である第２の状態にあっては、ガード部１３は、処理部１１Ａの処理を引き継ぐことが予め定められている例えば処理部１１Ｂによる共有リソース１２へのアクセスを新たに許可するようアクセスの制御を変更する。このため、処理部１１Ｂは、処理部１１Ａの処理を引き継ぐことができる。
【００１５】
このように、半導体装置１０によれば、ガード部１３によるアクセスの制限によりリソースへのアクセスについての排他性を担保することができる。また、処理部１１の故障を契機として、ガード部１３は、故障した処理部１１の代わりに処理を引き継ぐ処理部１１の共有リソース１２へのアクセスを許可するようアクセスの制御を変更するため、所望の処理を継続することができる。すなわち、半導体装置１０によれば、リソースへのアクセスについての排他性を担保しつつフォールトトレラントなシステムを提供することができる。
【００１６】
＜実施の形態１＞
次に、実施の形態の詳細について説明する。図２は、実施の形態１にかかる半導体装置２０の概要構成例を示すブロック図である。半導体装置２０は、図２に示されるように、処理部２１０Ａと、処理部２１０Ｂと、共有メモリ２２０Ａと、周辺機能部２２０Ｂと、周辺機能部２２０Ｃと、ガード部２３０と、故障検知部２４０Ａと、故障検知部２４０Ｂと、割り込み制御部２５０とを有する。なお、図２では、処理部として２つの処理部が示されているが、半導体装置２０は複数の処理部を有していればよく、数は２に限定されない。なお、以下の説明において、複数の処理部２１０Ａ、２１０Ｂについて、これらを区別しないで言及する場合には、単に処理部２１０という。また、複数の故障検知部２４０Ａ、２４０Ｂについて、これらを区別しないで言及する場合には、単に故障検知部２４０という。
【００１７】
共有メモリ２２０Ａ、周辺機能部２２０Ｂ、２２０Ｃは、それぞれ上述の共有リソース１２の一例である。以下、共有メモリ２２０Ａ、周辺機能部２２０Ｂ、２２０Ｃについて、まとめて共有リソース２２０と称することとする。なお、図２では、共有リソース２２０として、共有メモリ２２０Ａ、周辺機能部２２０Ｂ、２２０Ｃからなる３つのリソースが示されているが、リソース数は１以上であればよく、３つに限られない。
半導体装置２０は、処理部２１０が共有リソース２２０にアクセスして処理を行う装置である。
【００１８】
処理部２１０は、上述の処理部１１に相当する。すなわち、処理部２１０は、共有リソース２２０にアクセスして処理を実行する。処理部２１０は、バス２６０を介して、割り込み制御部２５０、ガード部２３０、及び共有リソース２２０等と接続されている。ここで、処理部２１０Ａの故障を検知する機構として、故障検知部２４０Ａが設けられている。また、処理部２１０Ｂの故障を検知する機構として、故障検知部２４０Ｂが設けられている。
【００１９】
故障検知部２４０は、任意の公知の故障検知技術を用いて、処理部２１０の故障を検知する。例えば、故障検知部２４０は、ロックステップ等の技術を用いて、処理部２１０の故障を検知する。なお、故障検知部２４０は、例えば処理部２１０の故障を検知するハードウェア（回路）として実現されるが、ハードウェアによる実現に限らず、ハードウェア、ファームウェア、及びソフトウェアのうちのいずれかの組み合わせ等により実現してもよい。故障検知部２４０Ａ及び故障検知部２４０Ｂは、それぞれエラー信号Ｅｒを出力する。本実施の形態では、故障検知部２４０Ａと割り込み制御部２５０とが信号線により接続されており、さらに、故障検知部２４０Ａとガード部２３０の更新部２３２とが信号線により接続されている。このため、故障検知部２４０Ａが出力したエラー信号Ｅｒは、割り込み制御部２５０及びガード部２３０の更新部２３２にそれぞれ入力される。同様に、故障検知部２４０Ｂと割り込み制御部２５０とが信号線により接続されており、さらに、故障検知部２４０Ｂとガード部２３０の更新部２３２とが信号線により接続されている。このため、故障検知部２４０Ｂが出力したエラー信号Ｅｒは、割り込み制御部２５０及びガード部２３０の更新部２３２にそれぞれ入力される。故障検知部２４０Ａは、処理部２１０Ａの故障を検知すると、エラー信号Ｅｒを有効にする。また、故障検知部２４０Ｂは、処理部２１０Ｂの故障を検知すると、エラー信号Ｅｒを有効にする。なお、図２に示した例では、故障検知部２４０と更新部２３２とを直接、信号線により接続しているが、エラー信号Ｅｒの送受信のために、両者が割り込み制御部２５０等の他の構成要素を介して接続されてもよい。
【００２０】
割り込み制御部２５０は、割り込みを制御し、割り込み信号ＩＮＴを出力する割り込みコントローラである。割り込み制御部２５０は、有効となったエラー信号Ｅｒを受信すると、割り込み信号ＩＮＴを有効にする。本実施の形態では、割り込み制御部２５０と処理部２１０Ａとが信号線により接続されており、さらに、割り込み制御部２５０と処理部２１０Ｂとが信号線により接続されている。割り込み制御部２５０は、故障検知部２４０からの有効なエラー信号Ｅｒを受信した場合、故障検知部２４０の監視対象である処理部２１０による処理の引継ぎ先として予め定められた処理部２１０に、有効な割り込み信号ＩＮＴを出力する。例えば、処理部２１０Ａによる処理の引継ぎ先として予め定められた処理部２１０が処理部２１０Ｂである場合、割り込み制御部２５０は、故障検知部２４０Ａからの有効なエラー信号Ｅｒを受信すると、処理部２１０Ｂに対して有効な割り込み信号ＩＮＴを出力する。同様に、処理部２１０Ｂによる処理の引継ぎ先として予め定められた処理部２１０が処理部２１０Ａである場合、割り込み制御部２５０は、故障検知部２４０Ｂからの有効なエラー信号Ｅｒを受信すると、処理部２１０Ａに対して有効な割り込み信号ＩＮＴを出力する。なお、引継ぎ先の処理部２１０は、複数であってもよい。例えば、半導体装置２０が、３つの処理部２１０から構成されている場合、いずれか１つの処理部２１０が故障した場合に、他の２つの処理部２１０が、故障した処理部２１０の処理を引き継いでもよい。
【００２１】
本実施の形態では、上述のように、故障検知部２４０からの信号が、割り込み制御部２５０を介して、処理部２１０に通知される構成となっているが、必ずしもそのような構成でなくてもよい。例えば、故障検知部２４０からの信号が、他の構成要素を介して処理の引継ぎ先の処理部２１０に入力されてもよいし、処理の引継ぎ先の処理部２１０に直接入力されてもよい。つまり、ある処理部２１０の故障検知に起因した信号が、当該処理部２１０の処理を引き継ぐ処理部２１０に入力され、この処理を引き継ぐ処理部２１０が引き継いだ処理の実行を開始できるよう構成されていればよい。
【００２２】
図２に示すようにバス２６０の共有リソース２２０側には、上述のガード部１３に相当するガード部２３０が設けられている。ガード部２３０は、レジスタＣと、レジスタＥ１と、レジスタＥ２と、アクセス制御部２３１と、更新部２３２とを有する。なお、図２に示した例では、複数のリソースに対し１つのガード部２３０が設けられているが、図３に示すようにリソース毎にガード部２３０が設けられてもよい。したがって、ガード部２３０は、１以上あればよい。なお、図３では、図示内容の理解の容易化のため、故障検知部２４０からガード部２３０へのエラー信号Ｅｒの通知については図示を省略している。また、ガード部２３０は、共有リソース２２０に対してのみ設けるのではなく、割り込み制御部２５０に対しても設けられてもよい。
本実施の形態において、ガード部２３０は、処理部２１０による共有リソース２２０へのアクセス及びガード部２３０へのアクセスを制御する。
【００２３】
レジスタＣは、処理部２１０による共有リソース２２０及びガード部２３０へのアクセスの制限を規定するアクセス制限情報を記憶するアクセス制限情報記憶部の一例である。ここで、ガード部２３０へのアクセスとは、ガード部２３０のレジスタＣ又はレジスタＥ１、Ｅ２へのアクセスをいう。なお、本実施の形態ではレジスタによりアクセス制限情報記憶部を実現しているが、レジスタに限らず任意の記憶回路によりアクセス制限情報記憶部が実現されてもよい。
【００２４】
レジスタＥ１及びレジスタＥ２は、それぞれ、アクセス制限情報記憶部（すなわち、レジスタＣ）に記憶されたアクセス制限情報を更新するための更新情報を記憶する更新情報記憶部の一例である。なお、本実施の形態ではレジスタにより更新情報記憶部を実現しているが、レジスタに限らず任意の記憶回路により更新情報記憶部が実現されてもよい。ここで、レジスタＥ１は、処理部２１０Ａが故障した場合にアクセス制限情報を更新するための更新情報を記憶する。また、レジスタＥ２は、処理部２１０Ｂが故障した場合にアクセス制限情報を更新するための更新情報を記憶する。なお、更新情報記憶部は、処理部２１０と同じ数だけ実装するのが望ましいが、複数の処理部２１０に対して１つの更新情報記憶部を実装してもよい。
【００２５】
アクセス制御部２３１は、レジスタＣに記憶されたアクセス制限情報に従って、処理部２１０によるアクセスを制御する制御回路である。例えば、アクセス制御部２３１は、ある処理部２１０から、アクセス先へのアクセス要求があった場合に、レジスタＣのアクセス制限情報に従って、当該処理部２１０による当該アクセス先へのアクセスの可否を判定する。そして、アクセス制御部２３１は、当該アクセスが許可される場合にはアクセスが実現するよう制御し、当該アクセスが許可されない場合には、アクセスを禁止するよう制御する。
【００２６】
更新部２３２は、処理部２１０が故障した場合に、故障した処理部２１０の処理を引き継ぐ他の処理部２１０による、故障した処理部２１０に許可されていたアクセス先の少なくとも一部に対するアクセスを許可するよう、レジスタＣが記憶するアクセス制限情報を更新する。更新部２３２は、故障検知部２４０Ａから有効なエラー信号Ｅｒを受信すると、レジスタＥ１に記憶された更新情報を用いて、レジスタＣに記憶されたアクセス制限情報を更新する。また、更新部２３２は、故障検知部２４０Ｂから有効なエラー信号Ｅｒを受信すると、レジスタＥ２に記憶された更新情報を用いて、レジスタＣに記憶されたアクセス制限情報を更新する。
【００２７】
図４は、レジスタＣの構成例について説明する図である。図４に示した例では、レジスタＣは、ビット幅が８ビットのレジスタであり、その各ビットは次のような値を保持する。
【００２８】
ｂｉｔ７は、処理部２１０Ａからガード部２３０へのアクセスの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０Ａからガード部２３０へのアクセスが許可されていることを示し、０が保持される場合、処理部２１０Ａからガード部２３０へのアクセスが許可されていないことを示す。
【００２９】
ｂｉｔ６は、処理部２１０Ｂからガード部２３０へのアクセスの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０Ｂからガード部２３０へのアクセスが許可されていることを示し、０が保持される場合、処理部２１０Ｂからガード部２３０へのアクセスが許可されていないことを示す。
【００３０】
ｂｉｔ５は、処理部２１０Ａから周辺機能部２２０Ｂへのアクセスの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０Ａから周辺機能部２２０Ｂへのアクセスが許可されていることを示し、０が保持される場合、処理部２１０Ａから周辺機能部２２０Ｂへのアクセスが許可されていないことを示す。
【００３１】
ｂｉｔ４は、処理部２１０Ｂから周辺機能部２２０Ｂへのアクセスの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０Ｂから周辺機能部２２０Ｂへのアクセスが許可されていることを示し、０が保持される場合、処理部２１０Ｂから周辺機能部２２０Ｂへのアクセスが許可されていないことを示す。
【００３２】
ｂｉｔ３は、処理部２１０Ａから周辺機能部２２０Ｃへのアクセスの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０Ａから周辺機能部２２０Ｃへのアクセスが許可されていることを示し、０が保持される場合、処理部２１０Ａから周辺機能部２２０Ｃへのアクセスが許可されていないことを示す。
【００３３】
ｂｉｔ２は、処理部２１０Ｂから周辺機能部２２０Ｃへのアクセスの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０Ｂから周辺機能部２２０Ｃへのアクセスが許可されていることを示し、０が保持される場合、処理部２１０Ｂから周辺機能部２２０Ｃへのアクセスが許可されていないことを示す。
【００３４】
ｂｉｔ１は、処理部２１０Ａから共有メモリ２２０Ａへのアクセスの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０Ａから共有メモリ２２０Ａへのアクセスが許可されていることを示し、０が保持される場合、処理部２１０Ａから共有メモリ２２０Ａへのアクセスが許可されていないことを示す。
【００３５】
ｂｉｔ０は、処理部２１０Ｂから共有メモリ２２０Ａへのアクセスの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０Ｂから共有メモリ２２０Ａへのアクセスが許可されていることを示し、０が保持される場合、処理部２１０Ｂから共有メモリ２２０Ａへのアクセスが許可されていないことを示す。
【００３６】
なお、図４に示した例では、レジスタＣ（Ｃ［７：０］）は、初期値として、８ｂ’１０００＿００００を保持している。すなわち、レジスタＣがこの状態の場合、アクセス制御部２３１は、処理部２１０Ａからのガード部２３０へのアクセスのみを許可し、処理部２１０Ａからの共有リソース２２０へのアクセス並びに処理部２１０Ｂからのガード部２３０及び共有リソース２２０へのアクセスを禁止する。
【００３７】
次にレジスタＥ１及びＥ２の構成例について一例を示して説明する。なお、ここで挙げる例では、レジスタＥ１とレジスタＥ２は、対象とする処理部２１０が異なる点を除き同様の構成である。したがって、レジスタＥ１についての具体的構成例のみを示し、レジスタＥ２についての説明を省略する。図５は、レジスタＥ１の構成例について説明する図である。ここでは、レジスタＥ１及びレジスタＥ２は、それぞれ、ビット幅が８ビットのレジスタである。図５に示されるように、レジスタＥ１の各ビットは次のような値を保持する。
【００３８】
ｂｉｔ７は、処理部２１０Ａ（故障検知部２４０Ａ）からのエラー信号Ｅｒが有効になった際の、レジスタＣのｂｉｔ７への１の書込みの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ７の値が１に更新されることとなる。すなわち、更新部２３２による更新後、処理部２１０Ａからのガード部２３０へのアクセスが許可されることとなる。これに対し、０が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ７の値が１に更新されないこととなる。すなわち、更新部２３２による更新後も、処理部２１０Ａからのガード部２３０へのアクセスの可否状態は変更されない。
【００３９】
ｂｉｔ６は、処理部２１０Ａ（故障検知部２４０Ａ）からのエラー信号Ｅｒが有効になった際の、レジスタＣのｂｉｔ６への１の書込みの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ６の値が１に更新されることとなる。すなわち、更新部２３２による更新後、処理部２１０Ｂからのガード部２３０へのアクセスが許可されることとなる。これに対し、０が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ６の値が１に更新されないこととなる。すなわち、更新部２３２による更新後も、処理部２１０Ｂからのガード部２３０へのアクセスの可否状態は変更されない。
【００４０】
ｂｉｔ５は、処理部２１０Ａ（故障検知部２４０Ａ）からのエラー信号Ｅｒが有効になった際の、レジスタＣのｂｉｔ５への１の書込みの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ５の値が１に更新されることとなる。すなわち、更新部２３２による更新後、処理部２１０Ａからの周辺機能部２２０Ｂへのアクセスが許可されることとなる。これに対し、０が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ５の値が１に更新されないこととなる。すなわち、更新部２３２による更新後も、処理部２１０Ａからの周辺機能部２２０Ｂへのアクセスの可否状態は変更されない。
【００４１】
ｂｉｔ４は、処理部２１０Ａ（故障検知部２４０Ａ）からのエラー信号Ｅｒが有効になった際の、レジスタＣのｂｉｔ４への１の書込みの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ４の値が１に更新されることとなる。すなわち、更新部２３２による更新後、処理部２１０Ｂからの周辺機能部２２０Ｂへのアクセスが許可されることとなる。これに対し、０が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ４の値が１に更新されないこととなる。すなわち、更新部２３２による更新後も、処理部２１０Ｂからの周辺機能部２２０Ｂへのアクセスの可否状態は変更されない。
【００４２】
ｂｉｔ３は、処理部２１０Ａ（故障検知部２４０Ａ）からのエラー信号Ｅｒが有効になった際の、レジスタＣのｂｉｔ３への１の書込みの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ３の値が１に更新されることとなる。すなわち、更新部２３２による更新後、処理部２１０Ａからの周辺機能部２２０Ｃへのアクセスが許可されることとなる。これに対し、０が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ３の値が１に更新されないこととなる。すなわち、更新部２３２による更新後も、処理部２１０Ａからの周辺機能部２２０Ｃへのアクセスの可否状態は変更されない。
【００４３】
ｂｉｔ２は、処理部２１０Ａ（故障検知部２４０Ａ）からのエラー信号Ｅｒが有効になった際の、レジスタＣのｂｉｔ２への１の書込みの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ２の値が１に更新されることとなる。すなわち、更新部２３２による更新後、処理部２１０Ｂからの周辺機能部２２０Ｃへのアクセスが許可されることとなる。これに対し、０が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ２の値が１に更新されないこととなる。すなわち、更新部２３２による更新後も、処理部２１０Ｂからの周辺機能部２２０Ｃへのアクセスの可否状態は変更されない。
【００４４】
ｂｉｔ１は、処理部２１０Ａ（故障検知部２４０Ａ）からのエラー信号Ｅｒが有効になった際の、レジスタＣのｂｉｔ１への１の書込みの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ１の値が１に更新されることとなる。すなわち、更新部２３２による更新後、処理部２１０Ａからの共有メモリ２２０Ａへのアクセスが許可されることとなる。これに対し、０が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ１の値が１に更新されないこととなる。すなわち、更新部２３２による更新後も、処理部２１０Ａからの共有メモリ２２０Ａへのアクセスの可否状態は変更されない。
【００４５】
ｂｉｔ０は、処理部２１０Ａ（故障検知部２４０Ａ）からのエラー信号Ｅｒが有効になった際の、レジスタＣのｂｉｔ０への１の書込みの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ０の値が１に更新されることとなる。すなわち、更新部２３２による更新後、処理部２１０Ｂからの共有メモリ２２０Ａへのアクセスが許可されることとなる。これに対し、０が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ０の値が１に更新されないこととなる。すなわち、更新部２３２による更新後も、処理部２１０Ｂからの共有メモリ２２０Ａへのアクセスの可否状態は変更されない。
【００４６】
なお、図５に示した例では、レジスタＥ１（Ｅ１［７：０］）は、初期値として、８ｂ’００００＿００００を保持している。また、同様に、レジスタＥ２（Ｅ２［７：０］）も、初期値として、８ｂ’００００＿００００を保持してもよい。このような場合、更新部２３２は、処理部２１０が故障しても、レジスタＣの値を更新しないこととなる。本実施の形態では、後述するように、レジスタＣ、レジスタＥ１、及びレジスタＥ２の初期値は、初期設定動作により、変更されることとなる。
【００４７】
図４及び図５では、共有リソース２２０のリソース単位で、アクセスの許可又は不許可を規定する場合の例を示しているが、アクセスの許可または不許可を規定する単位は任意の単位が可能である。例えば、複数のリソースをまとめて１つの単位としてもよい。また、リソースを複数の領域に分割して、領域ごとにアクセスの許可または不許可を規定してもよい。また、アドレス範囲による分割が行われてもよい。例えば、システムのメモリアドレス空間がアドレス範囲で分割されてもよい。なお、このメモリアドレス空間には、複数のリソースの全部または一部が対応してもよい。
【００４８】
また、図４及び図５に示した例では、アクセス元ごとにアクセスの許可又は不許可を規定しているが、アクセス元と他の条件との組み合わせ毎に、許可又は不許可が規定されてもよい。ここで、他の条件としては、アクセス種別（アクセスが、リードであるのか又はライトであるのか）、アクセス元の動作モードの種別（モードが、ユーザモードであるのか特権モードであるのか）、プロセス等の情報などが挙げられる。この他の条件のいずれか１つ又は複数と、アクセス元との組み合わせ毎に、許可又は不許可が規定されてもよい。
【００４９】
なお、レジスタＣ、Ｅ１、Ｅ２は、それぞれ、図に示されるように１つのレジスタにまとめられてもよいが、複数のレジスタに分割して構成されてもよい。また、上述した、各レジスタの各ビットの初期値は一例であり、システムの特性に合わせて任意に変更可能である。
【００５０】
次に、半導体装置２０の動作について説明する。図６は、半導体装置２０の動作の一例を示すフローチャートである。以下、図６に示すフローチャートに沿って、半導体装置２０の動作について説明する。なお、ここでは、故障発生時の動作について説明するため、故障が発生する場合の動作例をフローチャートで示している。
【００５１】
ステップ１０（Ｓ１０）において、半導体装置２０は、システムの初期設定を実施する。例えば、処理部２１０Ａが、ガード部２３０のレジスタＣ、レジスタＥ１、レジスタＥ２のそれぞれに対し、値を設定する。ステップ１０においてレジスタＣに設定される値は、処理部２１０に故障が発生するまで、どの処理部２１０に、どの共有リソース２２０を使って処理を行わせるかというシステム仕様に基づいて定まる値である。また、ステップ１０においてレジスタＥ１に設定される値は、処理部２１０Ａに故障が発生した場合に、どの処理部２１０が処理部２１０Ａの実行していた処理（処理の全部又は一部）を引き継ぐかというシステム仕様に基づいて定まる値である。同様に、ステップ１０においてレジスタＥ２に設定される値は、処理部２１０Ｂに故障が発生した場合に、どの処理部２１０が処理部２１０Ｂの実行していた処理（処理の全部又は一部）を引き継ぐかというシステム仕様に基づいて定まる値である。
【００５２】
ここで、処理部２１０Ａが初期設定を行う例を述べたが、処理部２１０Ａが初期設定を行うためには、レジスタＣの初期値が図４に示したように予め設定されている必要がある。つまり、処理部２１０Ａによるガード部２３０へのアクセスが許可されている必要がある。前述の通りレジスタＣの初期値は、図４に示した値に限られないため、レジスタＣの初期値によっては、別の処理部２１０等が初期設定をすることになる。
【００５３】
また、ステップ１０では、上記システム仕様に基づいて、割り込み制御部２５０も設定される。具体的には、割り込み制御部２５０は、処理の引き継ぎ元の処理部２１０の故障を検知する故障検知部２４０のエラー信号Ｅｒが有効となった際に引き継ぎ先の処理部２１０に割り込み信号ＩＮＴにより通知するよう設定される。
【００５４】
次にステップ１１（Ｓ１１）において、半導体装置２０の各処理部２１０は、システムとして定義された処理をそれぞれ実行する。この処理には、故障した場合に引き継ぎが容易となるような手法が組み込まれることが望ましい。そのような手法として、種々の手法が適用可能であるが、一例としては、チェックポイントリスタートにおけるチェックポイントを共有メモリ２２０Ａ等に格納する手法があげられる。
【００５５】
次にステップ１２（Ｓ１２）において、故障検知部２４０が故障を検知する。故障検知部２４０は、故障を検知すると、エラー信号Ｅｒを有効にする。
【００５６】
次にステップ１３（Ｓ１３）において、ガード部２３０の更新部２３２は、エラー信号Ｅｒが有効になると、レジスタＥ１及びレジスタＥ２のうち故障した処理部２１０に対応するレジスタの値に基づいて、レジスタＣの値を更新する。また、割り込み制御部２５０は、故障検知部２４０からのエラー信号Ｅｒを、前述の初期設定に基づいて、割り込み信号ＩＮＴを有効にすることにより、引き継ぎ先の処理部２１０に通知する。
【００５７】
次にステップ１４（Ｓ１４）において、有効となった割り込み信号ＩＮＴを受信した処理部２１０は、故障した処理部２１０が実行していた処理のうち、予め定められた引き継ぎ対象の処理を引継いで実行する。なお、引き継ぎにおいては、上述のようにチェックポイントリスタート等の種々の手法を適用可能である。
【００５８】
ここで、ステップ１０における初期設定、及びステップ１３における更新の具体的な一例を示す。なお、レジスタＣ、レジスタＥ１、及びレジスタＥ２の初期設定前の値、すなわち初期値は次の通りであるものとする。レジスタＣは、初期値として、８ｂ’１０００＿００００を保持している。レジスタＥ１及びレジスタＥ２は、初期値として、８ｂ’００００＿００００を保持している。また、処理部２１０Ａが、処理部２１０Ａに故障が発生するまで、共有メモリ２２０Ａ及び周辺機能部２２０Ｂを用いた処理を行うことがシステム仕様により定められているものとする。同様に、処理部２１０Ｂが、処理部２１０Ｂに故障が発生するまで、共有メモリ２２０Ａ及び周辺機能部２２０Ｃを用いた処理を行うことがシステム仕様により定められているものとする。さらに、処理部２１０Ａが故障した場合、処理部２１０Ｂが処理を引き継ぐことがシステム仕様により定められているものとする。同様に、処理部２１０Ｂが故障した場合、処理部２１０Ａが処理を引き継ぐことがシステム仕様により定められているものとする。
【００５９】
このような場合、ステップ１０における初期設定により、レジスタＣ（Ｃ［７：０］）は、８ｂ’００１０＿０１１１を保持するよう設定される。また、レジスタＥ１（Ｅ１［７：０］）は、８ｂ’０００１＿００００を保持するよう設定される。また、レジスタＥ２（Ｅ２［７：０］）は、８ｂ’００００＿１０００を保持するよう設定される。
【００６０】
そして、ステップ１３では、処理部２１０Ａが故障した場合、レジスタＥ１に基づく更新により、レジスタＣ（Ｃ［７：０］）は、８ｂ’００１１＿０１１１を保持するよう設定される。これにより、処理部２１０Ｂは、周辺機能部２２０Ｂへのアクセスが新たに許可されることとなり、処理部２１０Ａの処理の引継ぎが可能となる。なお、この更新動作は、例えば、下記の式（１）に示されるように、レジスタＣのビット列とレジスタＥ１のビット列とをＯＲ演算することにより実現される。
Ｃ［７：０］＝Ｃ［７：０］｜Ｅ１［７：０］  ・・・（１）
【００６１】
また、ステップ１３では、処理部２１０Ｂが故障した場合、レジスタＥ２に基づく更新により、レジスタＣ（Ｃ［７：０］）は、８ｂ’００１０＿１１１１を保持するよう設定される。これにより、処理部２１０Ａは、周辺機能部２２０Ｃへのアクセスが新たに許可されることとなり、処理部２１０Ｂの処理の引継ぎが可能となる。なお、この更新動作も、例えば、上述のように、レジスタＣのビット列とレジスタＥ２のビット列とをＯＲ演算することにより実現される。
【００６２】
以上、実施の形態１について説明した。本実施の形態にかかる半導体装置２０によれば、ガード部２３０によるアクセスの制限によりリソースへのアクセスについての排他性を担保することができる。そして、処理部２１０における故障が故障検知部２４０により検知されると、ガード部２３０の更新部２３２は、故障した処理部２１０の処理を引き継ぐ処理部２１０が、引き継いだ処理の実行ができるよう、アクセス制限情報を更新する。したがって、半導体装置２０において、処理部２１０の故障が発生しても、処理を継続することができる。すなわち、本実施の形態にかかる半導体装置２０によれば、リソースへのアクセスについての排他性を担保しつつフォールトトレラントなシステムを提供することができる。
【００６３】
また、本実施の形態にかかる半導体装置２０によれば、ガード部２３０は、処理部２１０による共有リソース２２０へのアクセスのみならず、処理部２１０によるガード部２３０へのアクセスをも制御する。そして、ガード部２３０は、処理部２１０に故障が発生した場合、処理部２１０によるガード部２３０へのアクセスの制御も変更することができる。このため、ガード部２３０へのアクセスが許可されている処理部２１０が、初期設定の完了前に故障した場合であっても、他の処理部２１０がガード部２３０にアクセス可能になるよう、アクセス制御を変更することができる。したがって、ガード部２３０へのアクセスが許可されている処理部２１０が、初期設定の完了前に故障した場合であっても所望の処理を実行することができ、よりフォールトトレラントなシステムの提供をできる。なお、このような、ガード部２３０へのアクセスが許可されている処理部２１０の初期設定の完了前の故障に対応するためには、例えば、初期設定を引き継ぐ処理部２１０がガード部２３０にアクセスできるようにレジスタＥ１又はレジスタＥ２の初期値を設定しておけばよい。すなわち、ガード部２３０は、アクセスの制限を行うことによりガード部２３０自体へのアクセスを制御し、ガード部２３０へのアクセスが許可されている処理部２１０が故障した場合に、故障した処理部２１０以外の他の処理部２１０によるガード部２３０へのアクセスを許可するようアクセスの制御を変更してもよい。
【００６４】
＜実施の形態２＞
次に、実施の形態２について説明する。以下、実施の形態１と異なる点について、詳細に説明し、実施の形態１と同様の構成及び動作については説明を省略する。実施の形態１にかかる半導体装置２０は、処理部２１０に故障が発生した場合、ガード部２３０の更新部２３２は、故障した処理部２１０の処理を引き継ぐ他の処理部２１０が、処理の引継ぎに必要とされるアクセス先へのアクセスを行うことができるようアクセスの制御を変更した。
【００６５】
これに対し、本実施の形態にかかる半導体装置２０は、処理部２１０に故障が発生した場合に、実施の形態１に示したアクセス制御の変更を行うとともに、更に、所定の処理部２１０による所定のアクセス先へのアクセスを禁止するようアクセス制御を変更する。具体的には、本実施の形態にかかるガード部２３０の更新部２３２は、例えば、実施の形態１において示した制御の変更に加え、さらに、処理部２１０が故障した場合に、故障した処理部２１０によるアクセスを禁止するようアクセスの制御を変更する。なお、更新部２３２による更新は、実施の形態１と同様である。すなわち、本実施の形態にかかる更新部２３２は、故障検知部２４０Ａから有効なエラー信号Ｅｒを受信すると、レジスタＥ１に記憶された更新情報を用いて、レジスタＣに記憶されたアクセス制限情報を更新する。また、本実施の形態にかかる更新部２３２は、故障検知部２４０Ｂから有効なエラー信号Ｅｒを受信すると、レジスタＥ２に記憶された更新情報を用いて、レジスタＣに記憶されたアクセス制限情報を更新する。
【００６６】
図７は、実施の形態２にかかるレジスタＥ１の構成例について説明する図である。なお、ここで挙げる例においても、レジスタＥ１とレジスタＥ２は、対象とする処理部２１０が異なる点を除き同様の構成である。したがって、レジスタＥ１についての具体的構成例のみを示し、レジスタＥ２についての説明を省略する。ここでは、本実施の形態にかかるレジスタＥ１及びレジスタＥ２は、それぞれ、ビット幅が１６ビットのレジスタである。具体的には、本実施の形態にかかるレジスタＥ１及びレジスタＥ２は、実施の形態１において示した８ビットに、更に、アクセスを禁止するようアクセス制御を変更するためビットとして、８ビットが追加されている。なお、図７では、追加された上位８ビットについてのみ示している。図７に示した例では、レジスタＥ１は、実施の形態１において示した８ビットに、アクセスを禁止するようアクセス制御を変更するためビットとして、ｂｉｔ１５〜ｂｉｔ８が追加されている。例えば、図７に示されるように、レジスタＥ１の各ビットは次のような値を保持する。
【００６７】
ｂｉｔ１５は、処理部２１０Ａ（故障検知部２４０Ａ）からのエラー信号Ｅｒが有効になった際の、レジスタＣのｂｉｔ７への０の書込みの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ７の値が０に更新されることとなる。すなわち、更新部２３２による更新後、処理部２１０Ａからのガード部２３０へのアクセスが禁止されることとなる。これに対し、０が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ７の値が０に更新されないこととなる。すなわち、更新部２３２による更新後も、処理部２１０Ａからのガード部２３０へのアクセスの可否状態は変更されない。
【００６８】
ｂｉｔ１４は、処理部２１０Ａ（故障検知部２４０Ａ）からのエラー信号Ｅｒが有効になった際の、レジスタＣのｂｉｔ６への０の書込みの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ６の値が０に更新されることとなる。すなわち、更新部２３２による更新後、処理部２１０Ｂからのガード部２３０へのアクセスが禁止されることとなる。これに対し、０が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ６の値が０に更新されないこととなる。すなわち、更新部２３２による更新後も、処理部２１０Ｂからのガード部２３０へのアクセスの可否状態は変更されない。
【００６９】
ｂｉｔ１３は、処理部２１０Ａ（故障検知部２４０Ａ）からのエラー信号Ｅｒが有効になった際の、レジスタＣのｂｉｔ５への０の書込みの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ５の値が０に更新されることとなる。すなわち、更新部２３２による更新後、処理部２１０Ａからの周辺機能部２２０Ｂへのアクセスが禁止されることとなる。これに対し、０が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ５の値が０に更新されないこととなる。すなわち、更新部２３２による更新後も、処理部２１０Ａからの周辺機能部２２０Ｂへのアクセスの可否状態は変更されない。
【００７０】
ｂｉｔ１２は、処理部２１０Ａ（故障検知部２４０Ａ）からのエラー信号Ｅｒが有効になった際の、レジスタＣのｂｉｔ４への０の書込みの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ４の値が０に更新されることとなる。すなわち、更新部２３２による更新後、処理部２１０Ｂからの周辺機能部２２０Ｂへのアクセスが禁止されることとなる。これに対し、０が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ４の値が０に更新されないこととなる。すなわち、更新部２３２による更新後も、処理部２１０Ｂからの周辺機能部２２０Ｂへのアクセスの可否状態は変更されない。
【００７１】
ｂｉｔ１１は、処理部２１０Ａ（故障検知部２４０Ａ）からのエラー信号Ｅｒが有効になった際の、レジスタＣのｂｉｔ３への０の書込みの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ３の値が０に更新されることとなる。すなわち、更新部２３２による更新後、処理部２１０Ａからの周辺機能部２２０Ｃへのアクセスが禁止されることとなる。これに対し、０が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ３の値が０に更新されないこととなる。すなわち、更新部２３２による更新後も、処理部２１０Ａからの周辺機能部２２０Ｃへのアクセスの可否状態は変更されない。
【００７２】
ｂｉｔ１０は、処理部２１０Ａ（故障検知部２４０Ａ）からのエラー信号Ｅｒが有効になった際の、レジスタＣのｂｉｔ２への０の書込みの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ２の値が０に更新されることとなる。すなわち、更新部２３２による更新後、処理部２１０Ｂからの周辺機能部２２０Ｃへのアクセスが禁止されることとなる。これに対し、０が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ２の値が０に更新されないこととなる。すなわち、更新部２３２による更新後も、処理部２１０Ｂからの周辺機能部２２０Ｃへのアクセスの可否状態は変更されない。
【００７３】
ｂｉｔ９は、処理部２１０Ａ（故障検知部２４０Ａ）からのエラー信号Ｅｒが有効になった際の、レジスタＣのｂｉｔ１への０の書込みの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ１の値が０に更新されることとなる。すなわち、更新部２３２による更新後、処理部２１０Ａからの共有メモリ２２０Ａへのアクセスが禁止されることとなる。これに対し、０が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ１の値が０に更新されないこととなる。すなわち、更新部２３２による更新後も、処理部２１０Ａからの共有メモリ２２０Ａへのアクセスの可否状態は変更されない。
【００７４】
ｂｉｔ８は、処理部２１０Ａ（故障検知部２４０Ａ）からのエラー信号Ｅｒが有効になった際の、レジスタＣのｂｉｔ０への０の書込みの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ０の値が０に更新されることとなる。すなわち、更新部２３２による更新後、処理部２１０Ｂからの共有メモリ２２０Ａへのアクセスが禁止されることとなる。これに対し、０が保持される場合、処理部２１０Ａが故障したときに、更新部２３２によって、レジスタＣのｂｉｔ０の値が０に更新されないこととなる。すなわち、更新部２３２による更新後も、処理部２１０Ｂからの共有メモリ２２０Ａへのアクセスの可否状態は変更されない。
【００７５】
なお、図７に示した例では、レジスタＥ１（Ｅ１［１５：０］）は、初期値として、８ｂ’ ００００＿００００＿００００＿００００を保持している。また、同様に、レジスタＥ２（Ｅ２［１５：０］）も、初期値として、８ｂ’ ００００＿００００＿００００＿００００を保持してもよい。このような場合、更新部２３２は、処理部２１０が故障しても、レジスタＣの値を更新しないこととなる。
【００７６】
次に、本実施の形態にかかる半導体装置２０の動作について説明する。なお、以下の説明では、図６に示した、実施の形態１にかかる半導体装置２０のフローチャートを参照し、実施の形態１にかかる半導体装置２０の動作との差異を中心に、説明する。
【００７７】
ステップ１０（Ｓ１０）において、半導体装置２０は、システムの初期設定を実施する。ここで、本実施の形態にかかる半導体装置２０は、レジスタＥ１及びレジスタＥ２に対し、実施の形態１で示した８ビットに加え、さらに上述の８ビットについて値を設定する。なお、本実施の形態において、ステップ１０においてレジスタＥ１に設定される値は、処理部２１０Ａに故障が発生した場合に、どの処理部２１０が処理部２１０Ａの実行していた処理（処理の全部又は一部）を引き継ぐかというシステム仕様に基づいて定まる値と、処理部２１０Ａが故障した場合にどの処理部２１０によるどこへのアクセスを禁止するかというシステム仕様に基づいて定まる値である。アクセスの禁止に関する初期設定の一例としては、故障した処理部２１０Ａによる、許可されていたアクセス先へのアクセスを禁止するための値が設定される。同様に、本実施の形態において、ステップ１０においてレジスタＥ２に設定される値は、処理部２１０Ｂに故障が発生した場合に、どの処理部２１０が処理部２１０Ｂの実行していた処理（処理の全部又は一部）を引き継ぐかというシステム仕様に基づいて定まる値と、処理部２１０Ｂが故障した場合にどの処理部２１０によるどこへのアクセスを禁止するかというシステム仕様に基づいて定まる値である。アクセスの禁止に関する初期設定の一例としては、故障した処理部２１０Ｂによる、許可されていたアクセス先へのアクセスを禁止するための値が設定される。
【００７８】
次にステップ１１（Ｓ１１）において、半導体装置２０の各処理部２１０は、システムとして定義された処理をそれぞれ実行し、ステップ１２（Ｓ１２）において、故障検知部２４０が故障を検知する。
【００７９】
そして、ステップ１３（Ｓ１３）において、本実施の形態にかかる更新部２３２は、エラー信号Ｅｒが有効になると、レジスタＥ１及びレジスタＥ２のうち故障した処理部２１０に対応するレジスタの値に基づいて、故障した処理部２１０の処理を引き継ぐ他の処理部２１０が、処理の引継ぎに必要とされるアクセス先へのアクセスを行うことができるようアクセスの制御を変更するとともに、所定の処理部２１０（故障した処理部２１０）によるアクセスを禁止するようアクセスの制御を変更する。また、割り込み制御部２５０は、故障検知部２４０からのエラー信号Ｅｒを、割り込み信号ＩＮＴを有効にすることにより、引き継ぎ先の処理部２１０に通知する。
【００８０】
次にステップ１４（Ｓ１４）において、有効となった割り込み信号ＩＮＴを受信した処理部２１０は、故障した処理部２１０が実行していた処理のうち、予め定められた引き継ぎ対象の処理を引継いで実行する。
【００８１】
ここで、本実施の形態におけるレジスタの値の具体的な一例について示す。レジスタＣ、レジスタＥ１、及びレジスタＥ２の初期設定の完了前の値、すなわち初期値は次の通りであるものとする。レジスタＣは、初期値として、８ｂ’１０００＿００００を保持している。レジスタＥ１及びレジスタＥ２は、初期値として、８ｂ’００００＿００００＿００００＿００００を保持している。また、処理部２１０Ａが、処理部２１０Ａに故障が発生するまで、共有メモリ２２０Ａ及び周辺機能部２２０Ｂを用いた処理を行うことがシステム仕様により定められているものとする。同様に、処理部２１０Ｂが、処理部２１０Ｂに故障が発生するまで、共有メモリ２２０Ａ及び周辺機能部２２０Ｃを用いた処理を行うことがシステム仕様により定められているものとする。さらに、処理部２１０Ａが故障した場合、処理部２１０Ｂが処理を引き継ぐことがシステム仕様により定められているものとする。同様に、処理部２１０Ｂが故障した場合、処理部２１０Ａが処理を引き継ぐことがシステム仕様により定められているものとする。またさらに、処理部２１０Ａが故障した場合、処理部２１０Ａに許されていたアクセス先への、処理部２１０Ａによるアクセスを禁止することがシステム仕様により定められているものとする。同様に、処理部２１０Ｂが故障した場合、処理部２１０Ｂに許されていたアクセス先への、処理部２１０Ｂによるアクセスを禁止することがシステム仕様により定められているものとする。
【００８２】
このような場合、ステップ１０における初期設定により、レジスタＣ（Ｃ［７：０］）は、８ｂ’００１０＿０１１１を保持するよう設定される。また、レジスタＥ１（Ｅ１［７：０］）は、８ｂ’００１０＿００１０＿０００１＿００００を保持するよう設定される。また、レジスタＥ２（Ｅ２［７：０］）は、８ｂ’００００＿０１０１＿００００＿１０００を保持するよう設定される。
【００８３】
そして、ステップ１３では、処理部２１０Ａが故障した場合、レジスタＥ１に基づく更新により、レジスタＣ（Ｃ［７：０］）は、８ｂ’０００１＿０１０１を保持するよう設定される。これにより、処理部２１０Ｂは、周辺機能部２２０Ｂへのアクセスが新たに許可されることとなり、処理部２１０Ａの処理の引継ぎが可能となる。さらに、処理部２１０Ａは、共有メモリ２２０Ａ及び周辺機能部２２０Ｂへのアクセスが禁止されることとなる。なお、この更新動作は、例えば、下記の式（２）に示されるように、レジスタＣのビット列とレジスタＥ１の下位８ビットのビット列とをＯＲ演算した上で、その結果と、レジスタＥ１の上位８ビットのビット列の反転値とをＡＮＤ演算することにより実現される。
Ｃ［７：０］＝Ｃ［７：０］｜Ｅ１［７：０］＆！Ｅ１［１５：８］  ・・・（２）
【００８４】
また、ステップ１３では、処理部２１０Ｂが故障した場合、レジスタＥ２に基づく更新により、レジスタＣ（Ｃ［７：０］）は、８ｂ’００１０＿１０１０を保持するよう設定される。これにより、処理部２１０Ａは、周辺機能部２２０Ｃへのアクセスが新たに許可されることとなり、処理部２１０Ｂの処理の引継ぎが可能となる。さらに、処理部２１０Ｂは、共有メモリ２２０Ａ及び周辺機能部２２０Ｃへのアクセスが禁止されることとなる。なお、この更新動作も、例えば、上述のように、レジスタＣのビット列とレジスタＥ２の下位８ビットのビット列とをＯＲ演算した上で、その結果と、レジスタＥ２の上位８ビットのビット列の反転値とをＡＮＤ演算することにより実現される。
【００８５】
以上、実施の形態２について説明した。上述の通り、本実施の形態にかかる半導体装置２０は、処理部２１０に故障が発生した場合、故障した処理部２１０の処理を引き継ぐ他の処理部２１０が、処理の引継ぎに必要とされるアクセス先へのアクセスを行うことができるようアクセスの制御を変更するとともに、故障した処理部２１０によるアクセスを禁止するようアクセスの制御を変更する。このように、本実施の形態では、処理部２１０の故障時のレジスタＣの更新として、アクセス許可への更新だけでなく、アクセス不許可への更新も可能とした。これにより、故障した処理部２１０からのアクセスを遮断出来るため、故障した処理部２１０に起因する誤作動を抑制することができる。また、処理状態などを示す各種情報などが記憶されている場合、故障した処理部２１０からのアクセスにより、そのような各種情報が破壊されることを防ぐこともできる。このように、本実施の形態によれば、実施の形態１に示す半導体装置２０に比べ、さらにセキュアなシステムを提供することができる。なお、上記の例では、実施の形態１に示されるレジスタＥ１及びレジスタＥ２を拡張する例について示したが、レジスタＥ１及びレジスタＥ２の拡張ではなく、処理部２１０の故障時にアクセスを不許可にするための別のレジスタを設けてもよい。
【００８６】
＜実施の形態３＞
上記の実施の形態では、処理部２１０の故障が１回でも検知されると、アクセス制御が変更された。これに対し、本実施の形態では、同じ処理部２１０に対し、予め定められた回数を超えて故障が検知された場合に、アクセス制御が変更される。図８は、実施の形態３にかかる半導体装置３０の概要構成例を示すブロック図である。半導体装置３０は、図３に示されるように、リトライ部３００Ａ、３００Ｂが追加されている点で、半導体装置２０と異なる。以下、半導体装置３０の構成及び動作のうち、半導体装置２０と異なる点について詳細に説明し、同様な構成及び動作については説明を適宜省略する。なお、以下の説明において、複数のリトライ部３００Ａ、３００Ｂについて、これらを区別しないで言及する場合には、単にリトライ部３００という。なお、本実施の形態に示されるリトライ部３００は、実施の形態１にかかる半導体装置２０に付加されてもよいし、実施の形態２にかかる半導体装置２０に付加されてもよい。
【００８７】
リトライ部３００Ａは、処理部２１０Ａの故障が検知される毎に、処理部２１０Ａにリセット信号を送信して、処理部２１０Ａをリセットするリトライ制御回路である。リトライ部３００Ｂは、処理部２１０Ｂの故障が検知される毎に、処理部２１０Ｂにリセット信号を送信して、処理部２１０Ｂをリセットするリトライ制御回路である。なお、図８に示した例では、リトライ部３００Ａは、故障検知部２４０Ａから延びるエラー信号Ｅｒの信号線がガード部２３０及び割り込み制御部２５０に接続されるまでの間に設けられており、リトライ部３００Ｂは、故障検知部２４０Ｂから延びるエラー信号Ｅｒの信号線がガード部２３０及び割り込み制御部２５０に接続されるまでの間に設けられている。そして、リトライ部３００は、故障検知部２４０の出力するエラー信号Ｅｒが有効になると、故障が検知された処理部２１０をリセットする。
【００８８】
リトライ部３００Ａは、予め定められた回数を超えて故障検知部２４０Ａからのエラー信号Ｅｒが有効となった場合は、リトライ部３００Ａからガード部２３０に出力されるエラー信号Ｅｒ及びリトライ部３００Ａから割り込み制御部２５０に出力されるエラー信号Ｅｒをそれぞれ有効とする。また、同様に、リトライ部３００Ｂは、予め定められた回数を超えて故障検知部２４０Ｂからのエラー信号Ｅｒが有効となった場合は、リトライ部３００Ｂからガード部２３０に出力されるエラー信号Ｅｒ及びリトライ部３００Ｂから割り込み制御部２５０に出力されるエラー信号Ｅｒをそれぞれ有効とする。
【００８９】
リトライ部３００からのエラー信号Ｅｒが有効になると、実施の形態１又は実施の形態２で説明した通り、ガード部２３０によるアクセス制御が変更されるとともに、処理の引継ぎが行われる。したがって、本実施の形態にかかるガード部２３０は、検知された故障の回数が予め定められた回数を超える処理部２１０が発生した場合に、アクセスの制御を変更する。なお、全てのリトライ部３００において、予め定められた回数は同じであってもよいし、異なってもよい。また、閾値となる回数をリトライ部３００に設定するためのレジスタ等が設けられてもよいし、リトライ部３００によるリセット対象を設定するためのレジスタ等が設けられてもよい。なお、そのような場合には、リトライ部３００とバス２６０との間が接続されたり、その接続はガード部２３０を介したりするであろうが、適宜、種々の実装形態が用いられればよい。
【００９０】
なお、図８に示した構成例では、リトライ部３００は、故障が検知された処理部２１０にのみリセット信号を出力するものとして説明したが、リトライ部３００は、故障が検知された処理部２１０以外の構成要素に対してリセット信号を出力して当該構成要素のリセットを行ってもよい。例えば、リトライ部３００は、故障が検知された処理部２１０に加えて、当該処理部２１０によるアクセスが許可されている共有リソース２２０に対してもリセットを行ってもよい。処理部２１０による故障が検知された場合、その処理部２１０のアクセス先においても異常が発生することが考えられるが、このようにすることで、処理部２１０のみならずそのアクセス先についてもリセットを行うことができる。
【００９１】
また、図８に示した例では、リトライ部３００は、故障検知部２４０から延びるエラー信号Ｅｒの信号線がガード部２３０及び割り込み制御部２５０に接続されるまでの間に設けられているが、これは構成の一例であり、他の種々の実装が行われてもよい。例えば、リトライ部３００の上述の各機能の一部又は全部について、ガード部２３０又は割り込み制御部２５０の機能と統合されてもよい。すなわち、例えば、リトライ部３００における、故障検知部２４０からガード部２３０へのエラー信号Ｅｒを所定回数までマスクする機能は、ガード部２３０側で実装されてもよい。また、例えば、リトライ部３００における、故障検知部２４０から割り込み制御部２５０へのエラー信号Ｅｒを所定回数までマスクする機能は、割り込み制御部２５０側で実装されてもよい。
【００９２】
次に、半導体装置３０の動作について説明する。図９は、半導体装置３０の動作の一例を示すフローチャートである。以下、図９に示すフローチャートに沿って、半導体装置３０の動作について説明する。なお、ここでは、故障発生時の動作について説明するため、故障が発生する場合の動作例をフローチャートで示している。図９に示したフローチャートは、ステップ３０及びステップ３１が追加された点で、図６に示したフローチャートと異なる。以下、図６に示したフローチャートと異なる部分を中心に説明する。
【００９３】
初期設定から故障検知までの動作は、半導体装置２０と同じである。ここで、図６に示したフローチャートでは、処理は、ステップ１２の後、ステップ１３に移行したが、本実施の形態では、処理は、ステップ１２の後、ステップ３０に移行する。
【００９４】
ステップ３０（Ｓ３０）において、リトライ部３００は、同じ処理部２１０の故障の検知回数が、予め定められた回数を超えたか否かを判定する。同じ処理部２１０の故障の検知回数が、予め定められた回数を超えた場合（ステップ３０でＹｅｓ）、リトライ部３００は、割り込み制御部２５０及びガード部２３０に出力するエラー信号Ｅｒを有効にする。そして、処理はステップ１３に移行することとなる。これに対し、同じ処理部２１０の故障の検知回数が、予め定められた回数を超えていない場合（ステップ３０でＮｏ）、処理は、ステップ３１へ移行する。
ステップ３１（Ｓ３１）において、リトライ部３００は、故障が検知された処理部２１０をリセットする。そして、処理はステップ１１に戻る。
【００９５】
半導体装置３０では、ある処理部２１０に対応する故障検知部２４０が故障を検知すると、故障検知部２４０はエラー信号Ｅｒを有効にする。しかし、故障検知部２４０からのエラー信号Ｅｒが、リトライ部３００の実装によって規定された回数を超えて有効となるまでは、リトライ部３００からガード部２３０及び割り込み制御部２５０へ出力されるエラー信号Ｅｒは有効にならず、故障が検知された処理部２１０へのリセット信号が出力される。リセットにより再起動した処理部２１０は、チェックポイントリスタート等の手法を用いて、処理の再開を行う。そして、故障検知部２４０からのエラー信号Ｅｒが、規定された回数を超えて有効となると、リトライ部３００からガード部２３０及び割り込み制御部２５０に出力されるエラー信号Ｅｒが有効となり、図６に示したフローチャートのステップ１３以降の動作が行われることとなる。
【００９６】
半導体装置３０によれば、上述の通り、故障が検知されても、検知回数が所定回数を超えるまでは、アクセス制御の変更は行われない。したがって、ソフトエラー等による一過性の故障により、システムとしての総処理能力が低減してしまうことを抑制することができる。なお、上述した半導体装置３０では、予め定められた回数を超えて処理部２１０の故障が検知されるまで、ガード部２３０及び割り込み制御部２５０には何ら通知がされなかったが、予め定められた回数を超える前に、処理部２１０による故障が検知されたことを他の処理部２１０に通知するための信号が出力されてもよい。例えば、複数の処理部２１０が協調動作を行っているシステムにおいては、処理部２１０は、協調相手の処理部２１０において故障の検知にともなうリセットが行われることの影響を考慮して、処理をしなければならないことがある。このような場合には、処理部２１０による故障が１回でも検知された場合には、他の処理部２１０（すなわち協調相手の処理部２１０）に対して、リトライ部３００は処理部２１０による故障を通知することが望ましい。
【００９７】
＜実施の形態４＞
次に、実施の形態４について説明する。本実施の形態では、各処理部が、バスのサイドバンド情報として処理（タスク）に応じた識別情報（以下、タスクＩＤという）を送信し、ガード部がこの識別情報に応じて、アクセスの可否を制御するシステムについて説明する。なお、タスクＩＤとは、上述の通り、処理を識別する識別情報である。
【００９８】
図１０は、実施の形態４にかかる半導体装置４０の概要構成例を示すブロック図である。半導体装置４０は、図１０に示されるように、タスクＩＤ許可部４００が追加され、ガード部２３０がガード部４１０に置き換えられ、故障検知部２４０Ａが故障検知部４２０Ａに置き換えられ、故障検知部２４０Ｂが故障検知部４２０Ｂに置き換えられた点で、実施の形態１にかかる半導体装置２０と異なる。なお、本実施の形態においても処理部２１０の数は、２つに限らず３つ以上であってもよい。また、本実施の形態においても、共有リソース２２０として、共有メモリ２２０Ａ、周辺機能部２２０Ｂ、２２０Ｃからなる３つのリソースが示されているが、リソース数は１以上であればよく、３つに限られない。以下、半導体装置４０の構成及び動作のうち、半導体装置２０と異なる点について詳細に説明し、同様な構成及び動作については説明を適宜省略する。なお、以下の説明において、複数の故障検知部４２０Ａ、４２０Ｂについて、これらを区別しないで言及する場合には、単に故障検知部４２０という。
【００９９】
故障検知部４２０Ａは、エラー信号Ｅｒの出力先が異なる点を除き、故障検知部２４０Ａと同じである。同様に、故障検知部４２０Ｂは、エラー信号Ｅｒの出力先が異なる点を除き、故障検知部２４０Ｂと同じである。本実施の形態では、故障検知部４２０Ａと割り込み制御部２５０とが信号線により接続されており、さらに、故障検知部４２０ＡとタスクＩＤ許可部４００の後述する更新部４０１とが信号線により接続されている。このため、故障検知部４２０Ａが出力したエラー信号Ｅｒは、割り込み制御部２５０及びタスクＩＤ許可部４００の更新部４０１にそれぞれ入力される。同様に、故障検知部４２０Ｂと割り込み制御部２５０とが信号線により接続されており、さらに、故障検知部４２０ＢとタスクＩＤ許可部４００の更新部４０１とが信号線により接続されている。このため、故障検知部４２０Ｂが出力したエラー信号Ｅｒは、割り込み制御部２５０及びタスクＩＤ許可部４００の更新部４０１にそれぞれ入力される。なお、実施の形態１で述べた種々の変更例については、矛盾のない限り、本実施の形態においても適用可能である。例えば、図１０に示した例では、故障検知部４２０と更新部４０１とを直接、信号線により接続しているが、エラー信号Ｅｒの送受信のために、両者が割り込み制御部２５０等の他の構成要素を介して接続されてもよい。また、図１０に示す構成では、故障検知部４２０からの信号が、割り込み制御部２５０（割り込み信号ＩＮＴ）を介して、処理部２１０に通知される構成となっているが、必ずしもそのような構成でなくてもよい。例えば、故障検知部４２０からの信号が、他の構成要素を介して処理の引継ぎ先の処理部２１０に入力されてもよいし、処理の引継ぎ先の処理部２１０に直接入力されてもよい。つまり、ある処理部２１０の故障検知に起因した信号が、当該処理部２１０の処理を引き継ぐ処理部２１０に入力され、この処理を引き継ぐ処理部２１０が引き継いだ処理の実行を開始できるよう構成されていればよい。
【０１００】
タスクＩＤ許可部４００は、管理部とも称される。タスクＩＤ許可部４００は、バス２６０と接続している。したがって、処理部２１０は、バス２６０を介して、割り込み制御部２５０、タスクＩＤ許可部４００、共有リソース２２０に接続している。タスクＩＤ許可部４００は、処理部２１０毎に、タスクＩＤについて、処理部２１０が使用可能な識別情報を管理する。タスクＩＤ許可部４００は、レジスタＤ１と、レジスタＤ２と、レジスタＦ１−１と、レジスタＦ１−２と、レジスタＦ２−１と、レジスタＦ２−２と、更新部４０１とを有する。以下、レジスタＤ１及びレジスタＤ２について、これらを区別しないで言及する場合には、単にレジスタＤという。同様に、レジスタＦ１−１、レジスタＦ１−２、レジスタＦ２−１、及びレジスタＦ２−２について、これらを区別しないで言及する場合には、単にレジスタＦという。
【０１０１】
レジスタＤは、処理部２１０が使用可能なタスクＩＤを規定する管理情報を記憶する管理情報記憶部の一例である。管理情報は、各処理部２１０が使用可能なタスクＩＤを示す。図１０に示した構成例では、レジスタＤ１が処理部２１０Ａの使用可能なタスクＩＤを示す管理情報を格納し、レジスタＤ２が処理部２１０Ｂの使用可能なタスクＩＤを示す管理情報を格納する。なお、本実施の形態ではレジスタにより管理情報記憶部を実現しているが、レジスタに限らず任意の記憶回路により管理情報記憶部が実現されてもよい。
【０１０２】
レジスタＦは、管理情報記憶部（すなわち、レジスタＤ）に記憶された管理情報を更新するための更新情報を記憶する管理更新情報記憶部の一例である。この更新情報は、各処理部２１０が故障した場合に各レジスタＤをどの様に更新するかを示す。図１０に示した構成例では、レジスタＦ１−１が処理部２１０Ａの故障時のレジスタＤ１の更新に利用される更新情報を格納し、レジスタＦ１−２が処理部２１０Ｂの故障時のレジスタＤ１の更新に利用される更新情報を格納し、レジスタＦ２−１が処理部２１０Ａの故障時のレジスタＤ２の更新に利用される更新情報を格納し、レジスタＦ２−２が処理部２１０Ｂの故障時のレジスタＤ２の更新に利用される更新情報を格納する。なお、本実施の形態ではレジスタにより管理更新情報記憶部を実現しているが、レジスタに限らず任意の記憶回路により管理更新情報記憶部が実現されてもよい。
【０１０３】
レジスタＤは、図１０に示すように、処理部２１０の数と同じ数だけ実装されるのが望ましいが、複数の処理部２１０に対して１つのレジスタＤを実装する等、種々の構成が可能である。また、レジスタＦは、図１０に示すように、各レジスタＤに対して、それぞれ処理部２１０の数と同じ数だけ実装されるのが望ましいが、複数の処理部２１０の故障に対して１つのレジスタＦを実装する等、種々の構成が可能である。
【０１０４】
更新部４０１は、管理情報更新部とも称される。更新部４０１は、処理部２１０が故障した場合に、故障した処理部２１０の処理を引き継ぐ他の処理部２１０が、この処理に対応するタスクＩＤを使用可能となるよう管理を変更する。具体的には、更新部４０１は、レジスタＦに記憶された更新情報を用いて、レジスタＤが記憶する管理情報を更新する。すなわち、更新部４０１は、故障検知部４２０Ａから有効なエラー信号Ｅｒを受信すると、レジスタＦ１−１に記憶された更新情報を用いて、レジスタＤ１に記憶された管理情報を更新し、レジスタＦ２−１に記憶された更新情報を用いて、レジスタＤ２に記憶された管理情報を更新する。同様に、更新部４０１は、故障検知部４２０Ｂから有効なエラー信号Ｅｒを受信すると、レジスタＦ１−２に記憶された更新情報を用いて、レジスタＤ１に記憶された管理情報を更新し、レジスタＦ２−２に記憶された更新情報を用いて、レジスタＤ２に記憶された管理情報を更新する。
【０１０５】
次に、本実施の形態の処理部２１０について説明する。本実施の形態の処理部２１０は、上記実施の形態の処理部２１０と同様であるが、特に、本実施の形態では、処理部２１０は、処理部２１０が使用可能であるとタスクＩＤ許可部４００に管理されているタスクＩＤに対応する処理（タスク）を実行する。例えば、処理部２１０は、レジスタＤを参照し、使用が許可されているタスクＩＤに対応するタスクについては実行をし、使用が許可されていないタスクＩＤに対応するタスクについては実行しない。すなわち、本実施の形態では、タスクＩＤの設定により、各処理部２１０が実行可能なタスクを制限することができる。なお、タスクＩＤを用いた制限は、上述のように、処理部２１０の制御によって行われてもよいが、図示しない他の制御機構によって行われてもよい。また、本実施の形態の処理部２１０は、共有リソース２２０へのアクセスの際に、実行するタスクに対応するタスクＩＤをガード部４１０へ通知する。
【０１０６】
ガード部４１０は、処理部２１０から通知されるタスクＩＤに応じて処理部２１０によるアクセスを制御する。このため、本実施の形態では、ガード部４１０は、次のような動作を行うともいえる。ガード部４１０は、処理部２１０が故障した場合に、タスクＩＤ許可部４００による管理情報の変更に応じて、処理部２１０からのアクセスの制御を変更する。具体的には、処理部２１０が故障した場合、ガード部４１０は、管理情報の更新結果に従って、故障した処理部２１０の処理を引き継ぐ他の処理部２１０による、故障した処理部２１０に許可されていたアクセス先の少なくとも一部に対するアクセスを許可するようアクセスの制御を変更する。つまり、処理部２１０が故障した場合に、実施の形態１にかかるガード部２３０は、更新部２３２によるアクセス制限情報の更新結果に従って、このような制御の変更を行ったが、本実施の形態にかかるガード部４１０は、更新部４０１による管理情報の更新結果に従って、このような制御の変更を行う。
【０１０７】
ガード部４１０は、レジスタＧと、アクセス制御部４１１とを有する。なお、図１０に示した例では、複数のリソースに対し１つのガード部４１０が設けられているが、図３に示したのと同様、リソース毎にガード部４１０が設けられてもよい。したがって、ガード部４１０は、１以上あればよい。また、ガード部４１０は、共有リソース２２０に対してのみ設けるのではなく、割り込み制御部２５０又はタスクＩＤ許可部４００に対しても設けられてもよい。
【０１０８】
レジスタＧは、処理部２１０による共有リソース２２０及びガード部４１０へのアクセスの制限を規定するアクセス制限情報を記憶するアクセス制限情報記憶部の一例である。ここで、ガード部４１０へのアクセスとは、例えば、ガード部４１０のレジスタＧへのアクセスをいう。本実施の形態におけるレジスタＧは、例えば、アクセス制限情報として、共有リソース２２０及びガード部４１０のそれぞれに対し、タスクＩＤ毎のアクセス可否を示す情報を記憶する。ただし、これに限らず、レジスタＧは、タスクＩＤ許可部４００に対しても、タスクＩＤ毎のアクセス可否を示す情報を記憶してもよい。ここで、タスクＩＤ許可部４００へのアクセスとは、例えば、タスクＩＤ許可部４００のレジスタＤ及びレジスタＦへのアクセスをいう。なお、本実施の形態ではレジスタによりアクセス制限情報記憶部を実現しているが、レジスタに限らず任意の記憶回路によりアクセス制限情報記憶部が実現されてもよい。
【０１０９】
アクセス制御部４１１は、レジスタＧに記憶されたアクセス制限情報に従って、処理部２１０によるアクセスを制御する制御回路である。例えば、アクセス制御部４１１は、ある処理部２１０から、アクセス先へのアクセス要求があった場合に、このアクセス要求の際に通知されたタスクＩＤとレジスタＧのアクセス制限情報に従って、当該処理部２１０による当該アクセス先へのアクセスの可否を判定する。そして、アクセス制御部４１１は、当該アクセスが許可される場合にはアクセスが実現するよう制御し、当該アクセスが許可されない場合には、アクセスを禁止するよう制御する。
【０１１０】
上述の通り、タスクＩＤ許可部４００の更新部４０１は、処理部２１０が故障した場合に、故障した処理部２１０の処理を引き継ぐ他の処理部２１０が、この処理に対応するタスクＩＤを使用可能となるよう管理を変更する。このため、アクセス制御部４１１は、故障した処理部２１０の処理を引き継いだ他の処理部２１０が、この処理に対応するタスクＩＤを使用したアクセス要求を行ったとき、このアクセスを許可する。
【０１１１】
なお、本実施の形態では、タスクＩＤごとにアクセスの許可又は不許可が規定されているが、タスクＩＤだけでなく、アクセス元、アクセス種別、アクセス元の動作モードの種別などや、それらの組合せ毎にアクセスの許可、不許可の判定が行われてもよい。
【０１１２】
次に、タスクＩＤ許可部４００の各レジスタの具体例について説明する。図１１は、レジスタＤの構成例について説明する図である。なお、図１１及び後述する図１２は、各処理部２１０が、最大８種類のタスクＩＤの使用を許可されるようシステムが構成された場合の例である。図１１に示した例では、レジスタＤは、ビット幅が８ビットのレジスタであり、その各ビットは次のような値を保持する。ここで、８種類のタスクＩＤを、それぞれタスクＩＤ ０〜タスクＩＤ ７とする。
【０１１３】
ｂｉｔ７は、処理部２１０によるタスクＩＤ ７の使用の可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０によるタスクＩＤ ７の使用が許可されていることを示し、０が保持される場合、処理部２１０によるタスクＩＤ ７の使用が許可されていないことを示す。すなわち、例えば、レジスタＤ１のｂｉｔ７に１が保持されている場合、処理部２１０Ａは、タスクＩＤ ７に対応するタスクを実行できる。また、例えば、レジスタＤ１のｂｉｔ７に０が保持されている場合、処理部２１０Ａは、タスクＩＤ ７に対応するタスクを実行できない。レジスタＤのｂｉｔ６〜ｂｉｔ０についても同様である。すなわち、レジスタＤのｂｉｔＫ（Ｋは７〜０）は、処理部２１０によるタスクＩＤ Ｋの使用の可否を規定する値を保持する。
【０１１４】
なお、図１１に示した例では、レジスタＤ（Ｄ［７：０］）は、初期値として、８ｂ’１１１１＿１１１１を保持している。すなわち、レジスタＤがこの状態の場合、処理部２１０は、全てのタスクＩＤの使用が許可される。ただし、図１１に示した各ビットの初期値は一例であり、システムの特性に合わせて任意に変更可能である。
【０１１５】
図１２は、レジスタＦの構成例について説明する図である。図１２に示した例では、レジスタＦは、ビット幅が８ビットのレジスタであり、その各ビットは次のような値を保持する。
【０１１６】
ｂｉｔ７は、故障検知部４２０からのエラー信号Ｅｒが有効になった際の、レジスタＤのｂｉｔ７への１の書込みの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０が故障したときに、更新部４０１によって、レジスタＤのｂｉｔ７の値が１に更新されることとなる。すなわち、更新部４０１による更新後、このレジスタＤに対応する処理部２１０によるタスクＩＤ ７の使用が許可されることとなる。これに対し、０が保持される場合、処理部２１０が故障したときに、更新部４０１によって、レジスタＤのｂｉｔ７の値が１に更新されないこととなる。すなわち、このレジスタＤに対応する処理部２１０によるタスクＩＤ ７の使用の可否状態は変更されない。
【０１１７】
例えば、処理部２１０Ａに故障が発生した場合、レジスタＦ１−１を用いたレジスタＤ１の更新と、レジスタＦ２−１を用いたレジスタＤ２の更新とが行われることとなる。ここで、例えば、レジスタＦ１−１のｂｉｔ７に０が保持されている場合、レジスタＤ１が更新部４０１により更新されるものの、処理部２１０ＡによるタスクＩＤ ７の使用の可否状態は変更されない。また、例えば、レジスタＦ２−１のｂｉｔ７に１が保持されている場合、レジスタＤ２が更新部４０１により更新され、処理部２１０ＢによるタスクＩＤ ７の使用が許可されることとなる。
【０１１８】
レジスタＦのｂｉｔ６〜ｂｉｔ０についても同様である。すなわち、レジスタＦのｂｉｔＫ（Ｋは７〜０）は、故障検知部４２０からのエラー信号Ｅｒが有効になった際の、レジスタＤのｂｉｔＫへの１の書込みの可否を規定する値（タスクＩＤ Ｋの使用を許可するような変更の可否を規定する値）を保持する。
【０１１９】
なお、図１２に示した例では、レジスタＦ（Ｆ［７：０］）は、初期値として、８ｂ’００００＿００００を保持している。すなわち、レジスタＦがこの状態の場合、処理部２１０の故障の際、レジスタＤの値が変更されないこととなる。ただし、図１２に示した各ビットの初期値は一例であり、システムの特性に合わせて任意に変更可能である。
【０１２０】
次に、半導体装置４０の動作について説明する。図１３は、半導体装置４０の動作の一例を示すフローチャートである。以下、図１３に示すフローチャートに沿って、半導体装置４０の動作について説明する。なお、ここでは、故障発生時の動作について説明するため、故障が発生する場合の動作例をフローチャートで示している。
【０１２１】
ステップ５０（Ｓ５０）において、半導体装置４０は、システムの初期設定を実施する。例えば、処理部２１０Ａが、タスクＩＤ許可部４００のレジスタＤ１、レジスタＤ２、レジスタＦ１−１、レジスタＦ１−２、レジスタＦ２−１、レジスタＦ２−２、及びガード部４１０のレジスタＧのそれぞれに対し、値を設定する。ステップ５０においてレジスタＤに設定される値は、処理部２１０に故障が発生するまで、どの処理部２１０に、どのタスクＩＤを使って処理を行わせるかというシステム仕様に基づいて定まる値である。また、ステップ５０においてレジスタＦに設定される値は、処理部２１０に故障が発生した場合に、どの処理部２１０が故障した処理部２１０の実行していた処理（処理の全部又は一部）を引き継ぐかというシステム仕様に基づいて定まる値である。また、ステップ５０においてレジスタＧに設定される値は、どのタスクに対しどの共有リソース２２０へのアクセスを許可するかというシステム仕様に基づいて定まる値である。ここで、処理部２１０Ａが初期設定を行う例を述べたが、システムの構成によっては、他の構成要素が初期設定を行ってもよいことは言うまでもない。
【０１２２】
また、ステップ５０では、上記システム仕様に基づいて、割り込み制御部２５０も設定される。具体的には、例えば、割り込み制御部２５０は、処理の引き継ぎ元の処理部２１０の故障を検知する故障検知部４２０のエラー信号Ｅｒが有効となった際に引き継ぎ先の処理部２１０に割り込み信号ＩＮＴにより通知するよう設定される。
【０１２３】
次にステップ５１（Ｓ５１）において、半導体装置４０の各処理部２１０は、システムとして定義された処理をそれぞれ実行する。この処理には、故障した場合に引き継ぎが容易となるような手法が組み込まれることが望ましい。そのような手法として、種々の手法が適用可能であるが、一例としては、チェックポイントリスタートにおけるチェックポイントを共有メモリ２２０Ａ等に格納する手法があげられる。
【０１２４】
次にステップ５２（Ｓ５２）において、故障検知部４２０が故障を検知する。故障検知部４２０は、故障を検知すると、エラー信号Ｅｒを有効にする。
【０１２５】
次にステップ５３（Ｓ５３）において、タスクＩＤ許可部４００の更新部４０１は、エラー信号Ｅｒが有効になると、レジスタＦのうち故障した処理部２１０に対応するレジスタの値に基づいて、レジスタＤの値を更新する。また、割り込み制御部２５０は、故障検知部４２０からのエラー信号Ｅｒを、前述の初期設定に基づいて、割り込み信号ＩＮＴを有効にすることにより、引き継ぎ先の処理部２１０に通知する。
【０１２６】
次にステップ５４（Ｓ５４）において、有効となった割り込み信号ＩＮＴを受信した処理部２１０は、故障した処理部２１０が実行していた処理のうち、予め定められた引き継ぎ対象の処理を引継いで実行する。なお、引き継ぎにおいては、上述のようにチェックポイントリスタート等の種々の手法を適用可能である。
【０１２７】
以上、実施の形態４について説明した。本実施の形態にかかる半導体装置４０によれば、処理部２１０に故障が発生した場合に、タスクＩＤ許可部４００の管理情報が更新される。すなわち、処理部２１０が使用可能なタスクＩＤを、故障が発生した場合に変更することができる。つまり、設定変更がロックされている、又は、ガード部４１０でライト動作が禁止されている等の理由により、タスクＩＤ許可部４００のレジスタＤを処理部２１０が更新できない環境下においても、故障時にレジスタＤの更新が可能である。したがって、半導体装置４０によれば、各処理部２１０が実行可能なタスクを管理情報により制御するシステムにおいて、故障した処理部２１０の処理を他の処理部２１０が引き継ぐことを可能にすることができる。すなわち、本実施の形態にかかる半導体装置４０においても、リソースへのアクセスについての排他性を担保しつつフォールトトレラントなシステムを提供することができる。
【０１２８】
なお、上述の通り、ガード部４１０は、処理部２１０によるガード部４１０へのアクセス及びタスクＩＤ許可部４００へのアクセスも制御してもよい。そして、更新部４０１は、初期設定を行うタスクに対応するタスクＩＤの使用についての管理情報を、レジスタＦを用いて更新してもよい。この場合、更新部４０１は、初期設定を行う処理部２１０に故障が発生した場合、初期設定を行うタスクを他の処理部２１０が実行することができるよう変更することができる。したがって、初期設定を行う処理部２１０に故障が発生した場合、ガード部４１０は、更新部４０１による変更に応じて、処理部２１０によるガード部２３０及びタスクＩＤ許可部４００へのアクセスの制御を変更することができる。このため、初期設定を行う処理部２１０が、初期設定の完了前に故障した場合であっても、他の処理部２１０が初期設定の処理を実行することができ、よりフォールトトレラントなシステムの提供をできる。
【０１２９】
＜実施の形態５＞
実施の形態４についても、実施の形態３と同様、リトライ部を設けることができる。以下、重複する説明を避けつつ、実施の形態５について説明する。実施の形態５では、実施の形態３と同様、予め定められた回数を超えて故障が検知された場合に、処理部２１０による共有リソース２２０等へのアクセスの制御が変更されるよう、実施の形態４を変更している。つまり、実施の形態５では、予め定められた回数を超えて故障が検知された場合に、タスクＩＤ許可部４００の管理情報が更新され、これによって、処理部２１０による共有リソース２２０等へのアクセスの制御が変更される。
【０１３０】
図１４は、実施の形態５にかかる半導体装置５０の概要構成例を示すブロック図である。半導体装置５０は、リトライ部５００Ａ、５００Ｂが追加されている点で、実施の形態４の半導体装置４０と異なる。以下、半導体装置５０の構成及び動作のうち、半導体装置４０と異なる点について詳細に説明し、同様な構成及び動作については説明を適宜省略する。なお、以下の説明において、複数のリトライ部５００Ａ、５００Ｂについて、これらを区別しないで言及する場合には、単にリトライ部５００という。なお、本実施の形態に示されるリトライ部５００は、実施の形態４にかかる半導体装置４０に付加されてもよいし、後述する実施の形態６にかかる半導体装置４０に付加されてもよい。
【０１３１】
リトライ部５００Ａは、リトライ部３００Ａと同様の動作を行うリトライ制御回路であり、リトライ部５００Ｂは、リトライ部３００Ｂと同様の動作を行うリトライ制御回路である。なお、図１４に示した例では、リトライ部５００Ａは、故障検知部４２０Ａから延びるエラー信号Ｅｒの信号線がタスクＩＤ許可部４００及び割り込み制御部２５０に接続されるまでの間に設けられており、リトライ部５００Ｂは、故障検知部４２０Ｂから延びるエラー信号Ｅｒの信号線がタスクＩＤ許可部４００及び割り込み制御部２５０に接続されるまでの間に設けられている。そして、リトライ部５００は、故障検知部４２０の出力するエラー信号Ｅｒが有効になると、故障が検知された処理部２１０をリセットする。
【０１３２】
リトライ部５００は、リトライ部３００と同様、予め定められた回数を超えて故障検知部２４０からのエラー信号Ｅｒが有効となった場合は、リトライ部５００からタスクＩＤ許可部４００に出力されるエラー信号Ｅｒ及びリトライ部５００から割り込み制御部２５０に出力されるエラー信号Ｅｒをそれぞれ有効とする。
【０１３３】
リトライ部５００からのエラー信号Ｅｒが有効になると、実施の形態４で説明した通り、管理情報が変更されるとともに、処理の引継ぎが行われる。したがって、半導体装置５０においては、予め定められた回数を超えて故障が検知された場合に、タスクＩＤ許可部４００の管理情報が更新され、これによって、処理部２１０による共有リソース２２０へのアクセスの制御が変更される。すなわち、ガード部４１０による制御が変更される。なお、実施の形態３で述べた種々の変更例等については、矛盾のない限り、本実施の形態においても適用可能である。
【０１３４】
次に、半導体装置５０の動作について説明する。図１５は、半導体装置５０の動作の一例を示すフローチャートである。以下、図１５に示すフローチャートに沿って、半導体装置５０の動作について説明する。なお、ここでは、故障発生時の動作について説明するため、故障が発生する場合の動作例をフローチャートで示している。図１５に示したフローチャートは、ステップ５５及びステップ５６が追加された点で、図１３に示したフローチャートと異なる。以下、図１３に示したフローチャートと異なる部分を中心に説明する。
【０１３５】
初期設定から故障検知までの動作は、半導体装置４０と同じである。ここで、図１３に示したフローチャートでは、処理は、ステップ５２の後、ステップ５３に移行したが、本実施の形態では、処理は、ステップ５２の後、ステップ５５に移行する。
【０１３６】
ステップ５５（Ｓ５５）において、上述のステップ３０と同様の処理が行われる。すなわち、リトライ部５００は、同じ処理部２１０の故障の検知回数が、予め定められた回数を超えたか否かを判定する。同じ処理部２１０の故障の検知回数が、予め定められた回数を超えた場合（ステップ５５でＹｅｓ）、リトライ部５００は、割り込み制御部２５０及びタスクＩＤ許可部４００に出力するエラー信号Ｅｒを有効にする。そして、処理はステップ５３に移行することとなる。これに対し、同じ処理部２１０の故障の検知回数が、予め定められた回数を超えていない場合（ステップ５５でＮｏ）、処理は、ステップ５６へ移行する。
【０１３７】
ステップ５６（Ｓ５６）において、上述のステップ３１と同様の処理が行われる。すなわち、リトライ部５００は、故障が検知された処理部２１０をリセットする。そして、処理はステップ５１に戻る。
【０１３８】
半導体装置５０によれば、故障が検知されても、検知回数が所定回数を超えるまでは、処理の引継ぎのための動作は行われない。したがって、ソフトエラー等による一過性の故障により、システムとしての総処理能力が低減してしまうことを抑制することができる。
【０１３９】
＜実施の形態６＞
実施の形態４についても、実施の形態２と同様、更新情報を記憶するレジスタを拡張することができる。すなわち、レジスタＦについて、実施の形態２で示したのと同様な拡張を行うことができる。以下、重複する説明を避けつつ、実施の形態６について説明する。
【０１４０】
実施の形態４にかかる半導体装置４０は、処理部２１０に故障が発生した場合、タスクＩＤ許可部４００の更新部４０１は、故障した処理部２１０の処理を引き継ぐ他の処理部２１０が、処理の引継ぎに必要とされるタスクＩＤを使用できるよう管理情報を変更した。
【０１４１】
これに対し、本実施の形態にかかる半導体装置４０は、処理部２１０に故障が発生した場合に、更に、所定の処理部２１０による所定のタスクＩＤの使用を禁止するよう管理情報を変更する。すなわち、更新部４０１は、故障した処理部２１０による所定のタスクＩＤの使用を禁止するよう管理情報を更新する。これにより、ガード部４１０は、処理部２１０に故障が発生した場合に、処理を引継ぐ処理部２１０による共有リソース２２０へのアクセスを許可するとともに、故障した処理部２１０による共有リソース２２０へのアクセスを禁止するようアクセスの制御を変更することとなる。なお、更新部４０１による更新は、実施の形態４と同様である。すなわち、本実施の形態にかかる更新部４０１は、有効なエラー信号Ｅｒを受信すると、レジスタＦに記憶された管理更新情報を用いて、レジスタＤに記憶された管理情報を更新する。
【０１４２】
図１６は、実施の形態６にかかるレジスタＦの構成例について説明する図である。図１６に示した例では、レジスタＦは、ビット幅が１６ビットのレジスタである。具体的には、本実施の形態にかかるレジスタＦは、実施の形態４において示した８ビットに、更に、タスクＩＤの使用を禁止するよう変更するためのビットとして、８ビットが追加されている。なお、図１６では、追加された上位８ビットについてのみ示している。例えば、図１６に示されるように、レジスタＦの各ビットは次のような値を保持する。
【０１４３】
ｂｉｔ１５は、故障検知部４２０からのエラー信号Ｅｒが有効になった際の、レジスタＤのｂｉｔ７への０の書込みの可否を規定する値を保持する。ここで、１が保持される場合、処理部２１０が故障したときに、更新部４０１によって、レジスタＤのｂｉｔ７の値が０に更新されることとなる。すなわち、更新部４０１による更新後、このレジスタＤに対応する処理部２１０によるタスクＩＤ ７の使用が禁止されることとなる。これに対し、０が保持される場合、処理部２１０が故障したときに、更新部４０１によって、レジスタＤのｂｉｔ７の値が０に更新されないこととなる。すなわち、このレジスタＤに対応する処理部２１０によるタスクＩＤ ７の使用の可否状態は変更されない。
【０１４４】
例えば、処理部２１０Ａに故障が発生した場合、レジスタＦ１−１を用いたレジスタＤ１の更新と、レジスタＦ２−１を用いたレジスタＤ２の更新とが行われることとなる。ここで、例えば、レジスタＦ１−１のｂｉｔ１５に１が保持されている場合、レジスタＤ１が更新部４０１により更新され、処理部２１０ＡによるタスクＩＤ ７の使用が禁止されることとなる。また、例えば、レジスタＦ２−１のｂｉｔ１５に０が保持されている場合、レジスタＤ２が更新部４０１により更新されるものの、処理部２１０ＢによるタスクＩＤ ７の使用の可否状態は変更されない。
【０１４５】
レジスタＦのｂｉｔ１４〜ｂｉｔ８についても同様である。すなわち、レジスタＦのｂｉｔＫ（Ｋは１５〜８）は、故障検知部４２０からのエラー信号Ｅｒが有効になった際の、レジスタＤのｂｉｔ（Ｋ−８）への０の書込みの可否を規定する値（タスクＩＤ （Ｋ−８）の使用を禁止するような変更の可否を規定する値）を保持する。なお、図１６に示した各ビットの初期値は一例であり、システムの特性に合わせて任意に変更可能である。
【０１４６】
次に、本実施の形態にかかる半導体装置４０の動作について説明する。なお、以下の説明では、図１３に示した、実施の形態４にかかる半導体装置４０のフローチャートを参照し、実施の形態４にかかる半導体装置４０の動作との差異を中心に、説明する。
【０１４７】
ステップ５０（Ｓ５０）において、半導体装置４０は、システムの初期設定を実施する。ここで、本実施の形態にかかる半導体装置４０は、レジスタＦに対し、実施の形態４で示した８ビットに加え、さらに上述の８ビットについて値を設定する。これらの値の設定は、システム仕様に基づいて決定される。
【０１４８】
次にステップ５１（Ｓ５１）において、半導体装置４０の各処理部２１０は、システムとして定義された処理をそれぞれ実行し、ステップ５２（Ｓ５２）において、故障検知部２４０が故障を検知する。
【０１４９】
そして、ステップ５３（Ｓ５３）において、タスクＩＤ許可部４００の更新部４０１は、エラー信号Ｅｒが有効になると、レジスタＦのうち故障した処理部２１０に対応するレジスタの値に基づいて、レジスタＤの値を更新する。このとき、本実施の形態では、上述のように拡張されたレジスタＦの値に基づいて、レジスタＤの更新が行われる。また、割り込み制御部２５０は、故障検知部２４０からのエラー信号Ｅｒを、割り込み信号ＩＮＴを有効にすることにより、引き継ぎ先の処理部２１０に通知する。
【０１５０】
次にステップ５４（Ｓ５４）において、有効となった割り込み信号ＩＮＴを受信した処理部２１０は、故障した処理部２１０が実行していた処理のうち、予め定められた引き継ぎ対象の処理を引継いで実行する。
【０１５１】
以上、実施の形態６について説明した。上述の通り、本実施の形態にかかる半導体装置４０は、処理部２１０に故障が発生した場合、故障した処理部２１０の処理を引き継ぐ他の処理部２１０が処理の引継ぎに必要とされるタスクＩＤを使用することができるように管理情報を変更するとともに、故障した処理部２１０によるタスクＩＤの使用を禁止するよう管理情報を変更する。このように、本実施の形態では、処理部２１０の故障時のレジスタＤの更新として、タスクＩＤの使用許可への更新だけでなく、使用不許可への更新も可能とした。これにより、ガード部４１０により、故障した処理部２１０からのアクセスを遮断出来るため、故障した処理部２１０に起因する誤作動を抑制することができる。また、処理状態などを示す各種情報などが記憶されている場合、故障した処理部２１０からのアクセスにより、そのような各種情報が破壊されることを防ぐこともできる。なお、上記の例では、実施の形態４に示されるレジスタＦを拡張する例について示したが、レジスタＦの拡張ではなく、別のレジスタを設けてもよい。
【０１５２】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。例えば、上記の実施形態では、アクセス制限情報記憶部としてレジスタＣ、Ｇを設け、更新情報記憶部としてレジスタＥ１及びＥ２を設けられる例について示したが、ガード部２３０によるアクセス制御及び制御の更新を例えば組合せ回路により実現する場合などには、必ずしもアクセス制限情報記憶部及び更新情報記憶部について必要とされない。また、同様に、上記の実施形態では、管理情報記憶部としてレジスタＤを設け、管理更新情報記憶部としてレジスタＦが設けられる例について示したが、タスクＩＤ許可部４００による更新を例えば組合せ回路により実現する場合などには、必ずしも管理情報記憶部及び管理更新情報記憶部について必要とされない。
【０１５３】
また、上記の実施の形態では、処理部２１０の一つが故障する場合を例に説明したが、複数の処理部２１０が同時に故障した場合についても同様にガード部２３０、４１０によるアクセス制御の変更が可能であることは言うまでもない。なお、複数の処理部２１０の故障が同時に検知された場合、更新部２３２は、故障した処理部２１０に対応する更新情報記憶部のうち予め定められた優先されるものを参照してアクセス制限情報記憶部の内容を更新してもよいし、故障した処理部２１０に対応する全ての更新情報記憶部を参照して、これら更新情報記憶部に示される更新内容をマージして、アクセス制限情報記憶部の内容を更新してもよい。同様に、複数の処理部２１０の故障が同時に検知された場合、更新部４０１は、故障した処理部２１０に対応する管理更新情報記憶部のうち予め定められた優先されるものを参照して管理情報記憶部の内容を更新してもよいし、故障した処理部２１０に対応する全ての管理更新情報記憶部を参照して、これら管理更新情報記憶部に示される更新内容をマージして、管理情報記憶部の内容を更新してもよい。
【０１５４】
また、上記の実施の形態では、ガード部２３０、４１０に対する処理部２１０のアクセスについても、ガード部２３０、４１０が制御する構成例について示したが、ガード部２３０、４１０は、共有リソース２２０に対するアクセス制御のみを行ってもよいことは言うまでもない。
【符号の説明】
【０１５５】
１０、２０、３０、４０、５０    半導体装置
１１Ａ、１１Ｂ、１１Ｃ、２１０Ａ、２１０Ｂ    処理部
１２、２２０    共有リソース
１３、２３０    ガード部
２２０Ａ    共有メモリ
２２０Ｂ、２２０Ｃ    周辺機能部
２３１、４１１    アクセス制御部
２３２、４０１    更新部
２４０Ａ、２４０Ｂ、４２０Ａ、４２０Ｂ    故障検知部
２５０    割り込み制御部
２６０    バス
３００Ａ、３００Ｂ、５００Ａ、５００Ｂ    リトライ部
４００    タスクＩＤ許可部
Ｃ、Ｄ１、Ｄ２、Ｅ１、Ｅ２、Ｆ１−１、Ｆ１−２、Ｆ２−１、Ｆ２−１、Ｇ    レジスタ
【図１】
2017188072.tif 000003
【図２】
2017188072.tif 000004
【図３】
2017188072.tif 000005
【図４】
2017188072.tif 000006
【図５】
2017188072.tif 000007
【図６】
2017188072.tif 000008
【図７】
2017188072.tif 000009
【図８】
2017188072.tif 000010
【図９】
2017188072.tif 000011
【図１０】
2017188072.tif 000012
【図１１】
2017188072.tif 000013
【図１２】
2017188072.tif 000014
【図１３】
2017188072.tif 000015
【図１４】
2017188072.tif 000016
【図１５】
2017188072.tif 000017
【図１６】
2017188072.tif 000018