(57)【要約】  割り当て装置１００の各読み出し部は、グループ分け情報１０１、優先順位情報１０２、クラス情報１０３、進捗情報１０４をそれぞれ読み出す。割り当て部１０９は、読み出された各情報に基づいて、複数の診断処理のうちで診断部１１１に割り当て可能な診断処理を選択し、選択した診断処理とクラス情報１０３とグループ分け情報１０１とに基づいて進捗情報１０４を書き換え、選択した診断処理を診断部１１１に割り当てる。診断部１１１が割り当てられた診断処理を終了すると、終了部１１０は、割り当てられた診断処理とクラス情報１０３とグループ分け情報１０１とに基づいて進捗情報１０４を書き換える。
2009050764.tif 000002
【特許請求の範囲】
【請求項１】
記憶部と複数の診断処理部を有し、複数の診断処理の各々を前記複数の診断処理部のいずれかに実行させることにより自己診断処理を行う情報処理装置において、
前記複数の診断処理間の依存関係に基づく実行順序の優先順位を表す優先順位情報を、前記記憶部から読み出す優先順位情報読み出し部と、
前記診断処理を実行すべき診断処理部の範囲を前記診断処理毎に表すクラス情報を、前記記憶部から読み出すクラス情報読み出し部と、
前記複数の診断処理のうち、完了した診断処理と未完了の診断処理の情報を表す進捗情報を、前記記憶部から読み出す進捗情報読み出し部と、
未実行の診断処理を、前記優先順位情報と前記クラス情報と前記進捗情報に基づいて、前記複数の診断処理部のいずれかに割り当てるとともに、前記進捗情報を書き換える割り当て部を有することを特徴とする情報処理装置。
【請求項２】
前記診断処理部が割り当てられた診断処理を終了した場合に、前記割り当てられた診断処理を完了したものとして前記進捗情報を書き換える終了部をさらに有することを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記割り当て部は、複数の前記未実行の診断処理を、前記複数の診断処理部に同時に割り当てることを特徴とする請求項１記載の情報処理装置。
【請求項４】
前記進捗情報は、前記複数の診断処理のうち、完了した診断処理と実行中の診断処理と未実行の診断処理の情報を表し、
前記割り当て部は、前記診断処理部が割り当てられた診断処理を実行中である場合に、前記割り当てられた診断処理が実行中であるとして前記進捗情報を書き換えることを特徴とする請求項１記載の情報処理装置。
【請求項５】
前記情報処理装置は、さらに、
前記クラス情報毎に、前記診断処理部が属するグループを表すとともに、全ての前記診断処理部が属する最上位のグループと１つの診断処理部のみが属する複数の最下位のグループを有するグループ分け情報を、前記記憶部から読み出すグループ分け情報読み出し部を有し、
前記割り当て部は、前記未実行の診断処理を、前記優先順位情報と前記クラス情報と前記グループ分け情報に基づいて、前記複数の診断処理部のいずれかに割り当てることを特徴とする請求項１記載の情報処理装置。
【請求項６】
記憶部と複数の診断処理部を有し、複数の診断処理の各々を前記複数の診断処理部のいずれかに実行させる情報処理装置の自己診断処理方法において、
優先順位情報読み出し部が、前記複数の診断処理間の依存関係に基づく実行順序の優先順位を表す優先順位情報を、前記記憶部から読み出すステップと、
クラス情報読み出し部が、前記診断処理を実行すべき診断処理部の範囲を前記診断処理毎に表すクラス情報を、前記記憶部から読み出すステップと、
進捗情報読み出し部が、前記複数の診断処理のうち、完了した診断処理と未完了の診断処理の情報を表す進捗情報を、前記記憶部から読み出すステップと、
割り当て部が、未実行の診断処理を、前記優先順位情報と前記クラス情報と前記進捗情報に基づいて、前記複数の診断処理部のいずれかに割り当てるとともに、前記進捗情報を書き換えるステップを有することを特徴とする自己診断処理方法。
【請求項７】
終了部が、前記診断処理部が割り当てられた診断処理を終了した場合に、前記割り当てられた診断処理を完了したものとして前記進捗情報を書き換えるステップをさらに有することを特徴とする請求項６記載の自己診断処理方法。
【請求項８】
前記割り当て部は、複数の前記未実行の診断処理を、前記複数の診断処理部に同時に割り当てることを特徴とする請求項６記載の自己診断処理方法。
【請求項９】
前記進捗情報は、前記複数の診断処理のうち、完了した診断処理と実行中の診断処理と未実行の診断処理の情報を表し、
前記割り当て部は、前記診断処理部が割り当てられた診断処理を実行中である場合に、前記割り当てられた診断処理が実行中であるとして前記進捗情報を書き換えることを特徴とする請求項６記載の自己診断処理方法。
【請求項１０】
前記情報処理装置は、さらに、
前記クラス情報毎に、前記診断処理部が属するグループを表すとともに、全ての前記診断処理部が属する１つの最上位のグループと１つの診断処理部のみが属する複数の最下位のグループを有するグループ分け情報を、前記記憶部から読み出すグループ分け情報読み出し部を有し、
前記割り当て部は、前記未実行の診断処理を、前記優先順位情報と前記クラス情報と前記グループ分け情報に基づいて、前記複数の診断処理部のいずれかに割り当てることを特徴とする請求項６記載の自己診断処理方法。
【請求項１１】
記憶部と複数の診断処理部を有し、複数の診断処理の各々を前記複数の診断処理部のいずれかに実行させる情報処理装置の自己診断処理プログラムにおいて、
前記情報処理装置に、
優先順位情報読み出し部が、前記複数の診断処理間の依存関係に基づく実行順序の優先順位を表す優先順位情報を、前記記憶部から読み出すステップと、
クラス情報読み出し部が、前記診断処理を実行すべき診断処理部の範囲を前記診断処理毎に表すクラス情報を、前記記憶部から読み出すステップと、
進捗情報読み出し部が、前記複数の診断処理のうち、完了した診断処理と未完了の診断処理の情報を表す進捗情報を、前記記憶部から読み出すステップと、
割り当て部が、未実行の診断処理を、前記優先順位情報と前記クラス情報と前記進捗情報に基づいて、前記複数の診断処理部のいずれかに割り当てるとともに、前記進捗情報を書き換えるステップを実行させることを特徴とする自己診断処理プログラム。
【請求項１２】
終了部が、前記診断処理部が割り当てられた診断処理を終了した場合に、前記割り当てられた診断処理を完了したものとして前記進捗情報を書き換えるステップを、
前記情報処理装置にさらに実行させることを特徴とする請求項１１記載の自己診断処理プログラム。
【請求項１３】
前記割り当て部は、複数の前記未実行の診断処理を、前記複数の診断処理部に同時に割り当てることを特徴とする請求項１１記載の自己診断処理プログラム。
【請求項１４】
前記進捗情報は、前記複数の診断処理のうち、完了した診断処理と実行中の診断処理と未実行の診断処理の情報を表し、
前記割り当て部は、前記診断処理部が割り当てられた診断処理を実行中である場合に、前記割り当てられた診断処理が実行中であるとして前記進捗情報を書き換えることを特徴とする請求項１１記載の自己診断処理プログラム。
【請求項１５】
前記情報処理装置は、さらに、
前記クラス情報毎に、前記診断処理部が属するグループを表すとともに、全ての前記診断処理部が属する１つの最上位のグループと１つの診断処理部のみが属する複数の最下位のグループを有するグループ分け情報を、前記記憶部から読み出すグループ分け情報読み出し部を有し、
前記割り当て部は、前記未実行の診断処理を、前記優先順位情報と前記クラス情報と前記グループ分け情報に基づいて、前記複数の診断処理部のいずれかに割り当てることを特徴とする請求項１１記載の自己診断処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は自己診断処理を行う情報処理装置、自己診断処理方法及び自己診断処理プログラムに関する。
【背景技術】
【０００２】
コンピュータに電源を投入したときや、コンピュータをリセットしたとき、各種デバイスの診断が行われる。この診断は、ＰＯＳＴ（Power On Self Test；電源投入時自己診断）と呼ばれる。【０００３】
複数のＣＰＵ（Central Processing Unit）を有する装置では通常、複数のＣＰＵが分担してＰＯＳＴを実行する。診断の種類によっては、各ＣＰＵに実行すべき診断を割り当てるために、排他制御が必要となる場合がある。【０００４】
例えば、特許文献１には、複数のＣＰＵが１つの記憶装置を共有する記憶装置における、システム内のリソースを占有した試験環境を必要とする試験プログラムの実行の制御方法が記載されている。【０００５】
特許文献１に記載の制御方法は、メモリ領域を論理的に分割して各ＣＰＵに割り当て、各々のメモリ領域に試験プログラムの実行を制御するモニタプログラムをロードすることを含む。そして、同時に１つの試験プログラムが複数のＣＰＵで実行されないようにする排他制御が、モニタプログラムにより実現される。【０００６】
しかし、単純で一律な排他制御ではなく、ハードウェア構成に応じた範囲での排他制御を行うべき場合もある。また、一般に、各ＣＰＵに実行すべき診断を割り当てるには、診断の実行順序に関する制約も考慮すべきである。【０００７】
そこで、図１のハードウェア構成を持つサーバ装置３０を例として、複数のＣＰＵが同じ診断を重複して実行してよいか否かという制約と、診断の実行順序に関する制約とをともに考慮して各ＣＰＵに実行すべき診断を割り当てる従来の方法について説明する。【０００８】
図１のサーバ装置３０は、２枚の基板がクロスバースイッチ（以下、ＸＢと略す）２０で接続された装置である。以下ではサーバ装置３０が備える基板をシステムボートと呼び、ＳＢと略す。ＳＢ０は、ＣＰＵ００と、ＣＰＵ０１と、ＤＩＭＭ（Dual Inline Memory Module）０２と、ＤＩＭＭ０２へのデータの書き込みおよびＤＩＭＭ０２からのデータの読み出しを制御するＭＣ（Memory Controller）０３と、入出力部（Ｉ／Ｏと略す）０４と、ＳＲＡＭ（Static Random Access Memory）０５と、ＲＯＭ（Read Only Memory）０６と、制御部（以下、システムコントローラと呼び、ＳＣと略す）０７とを備える。ＳＢ１もＳＢ０と同様の構成である。【０００９】
ＳＢ０上のＳＣ０７は、ＳＢ０上のＣＰＵ００、ＣＰＵ０１、ＭＣ０３、Ｉ／Ｏ０４、ＳＲＡＭ０５、およびＲＯＭ０６とバスで接続されている。ＳＣ０７は、ＳＢ内のユニット間のデータ転送を制御し、また、ＸＢ２０を介したＳＢ１との間のデータ転送をも制御する。ＳＢ１上のＳＣ１７もＳＣ０７と同様である。【００１０】
例えば、ＳＢ０上のＣＰＵ００がＳＢ１上のＤＩＭＭ１２からデータを読み出すとき、データは、ＳＢ０上のＳＣ０７とＳＢ１上のＳＣ１７の制御にしたがって読み出される。つまり、データは、ＳＢ１上でＤＩＭＭ１２から読み出され、ＭＣ１３を経由してＳＣ１７へと送られ、ＸＢ２０を介してＳＢ０に送られ、ＳＢ０上でＳＣ０７からＣＰＵ００へと送られる。このようにデータ転送が可能な範囲を「ドメイン」と呼ぶことにすると、図１では、各ＳＢ内のユニット同士がバスで接続されており、ＳＢ０とＳＢ１がＸＢ２０で接続されているため、サーバ装置３０全体が１つのドメインである。【００１１】
このような図１のサーバ装置３０において、各ＣＰＵに実行すべき診断を割り当てる際には、以下の第１と第２の要件を考慮しなくてはならない。
第１の要件は、診断の性質に応じた排他制御を行わなくてはならないという要件である。具体的には、まず、性質に応じて診断を次の３つのクラスに分類する。【００１２】
・クラス１：１つのドメイン内で１つのＣＰＵのみが行うべき診断のクラス
・クラス２：１つのＳＢ内で１つのＣＰＵのみが行うべき診断のクラス
・クラス３：各ＣＰＵが行うべき診断のクラス
クラス１の診断は、主にドメインに付随する部分を対象とする診断である。例えば、ＸＢ２０を対象とする診断は、クラス１に分類することが適当である。【００１３】
クラス２の診断は、主にＳＢに付随する部分を対象とする診断である。例えば、ＤＩＭＭやＩ／Ｏなどの、ＳＢごとに備えられたハードウェアを対象とする診断は、クラス２に分類することが適当である。【００１４】
クラス３の診断は、主に各ＣＰＵを対象とする診断である。例えば、通常はＣＰＵ００内のレジスタやキャッシュメモリに他のＣＰＵからアクセスすることは不可能である。つまり、ＣＰＵ００内のレジスタやキャッシュメモリは、ＣＰＵ００自身によってのみ診断することができる。よって、ＣＰＵ内のレジスタやキャッシュメモリなどを対象とする診断は、クラス３に分類することが適当である。【００１５】
このようなクラス分けに基づいて説明すると、第１の要件は、クラス１の診断が同一ドメイン内の複数のＣＰＵによって重複して行われないように、かつ、クラス２の診断が同一ＳＢ内の複数のＣＰＵによって重複して行われないように、排他制御をしなくてはならないという要件である。一方で、第１の要件は、クラス３の診断についてはＣＰＵ間の排他制御が不要であることを示してもいる。【００１６】
そして、第２の要件は、診断同士の依存関係などに応じて決められた順序を守って診断を実行しなくてはならないという要件である。
例えば、ＣＰＵ内のキャッシュメモリの診断は、メインメモリとして使われるＤＩＭＭからデータを読み出してキャッシュメモリに書き込むことや、キャッシュメモリからデータを読み出してＤＩＭＭに書き込むことを含む。つまり、キャッシュメモリの診断は、ＤＩＭＭのライト／リードを必要とする。したがって、キャッシュメモリの診断の前に、ＤＩＭＭの診断を行って、ＤＩＭＭのライト／リードが正常に実行可能であることを確認しておく必要がある。【００１７】
以上の第１と第２の要件を満たすため、従来は次のような方法が採用されてきた。
まず、第１の要件を満たすために、ドメイン内の１つのＣＰＵが予め静的にドメインマスタＣＰＵとして選択され、各ＳＢ内の１つのＣＰＵが予め静的にＳＢマスタＣＰＵとして選択される。【００１８】
ドメインマスタＣＰＵ以外のＣＰＵがクラス１の診断を行うことは禁じられる。また、ＳＢマスタＣＰＵ以外のＣＰＵがクラス２の診断を行うことも禁じられる。
なお、ＳＢマスタＣＰＵに許されるクラス２の診断は、当該ＳＢマスタＣＰＵを含むＳＢに対する診断に限定される。例えば、ＳＢ０におけるＳＢマスタＣＰＵがＣＰＵ００であり、ＳＢ１におけるＳＢマスタＣＰＵがＣＰＵ１０である場合、ＣＰＵ００は、ＳＢ０を対象とするクラス２の診断を行うが、ＳＢ１を対象とするクラス２の診断を行ってはいけない。【００１９】
さらに、第２の要件を満たすため、図２に例示されたような診断順序テーブルが予め作成され、例えばＲＯＭ０６と１６にそれぞれ格納される。図２の診断順序テーブルは、この診断順序テーブルに記載された順序どおりに診断を実行すべきことを規定している。【００２０】
図２の診断順序テーブルはまた、第１と第２の要件を合わせて考慮するために、第１の要件に関する情報も含んでいる。すなわち、診断順序テーブルの右列には、左列に示された診断を実行するＣＰＵが示されている。表中の「ドメイン内１ＣＰＵ」、「ＳＢ内１ＣＰＵ」、「全ＣＰＵ」という表記は、それぞれ、クラス１、２、３を示す。【００２１】
次に、図３のタイミングチャートを参照して、従来の方法による診断処理の流れを説明する。
この例では、図２に示したとおり、ＰＯＳＴは診断ａ〜診断ｍからなる。診断ａ〜診断ｍの実行順序は図２の診断順序テーブルで規定されているとおりである。そして、ドメインマスタＣＰＵはＣＰＵ００であり、ＳＢ０におけるＳＢマスタＣＰＵがＣＰＵ００であり、ＳＢ１におけるＳＢマスタＣＰＵがＣＰＵ１０である。【００２２】
図３に示した従来の方法では、第１の要件を満たすために、１つの診断が終わるたびに全ＣＰＵで同期をとる。図中の“ｓｙｎｃ”が付された水平な点線が同期を取るタイミングを表す。【００２３】
すなわち、処理は次のように進む。図１の４つのＣＰＵはそれぞれ診断順序テーブルを参照し、最初に実行すべき診断が診断ａであり、診断ａはクラス３であることを認識し、診断ａを実行する。４つのＣＰＵが全て診断ａを実行し終わると、４つのＣＰＵが同期する。この同期により、４つのＣＰＵは、２番目の診断ｂに進むべきことを認識する。【００２４】
同様にして、２番目の診断ｂも４つのＣＰＵそれぞれによって実行され、その後４つのＣＰＵが同期する。
続いて、４つのＣＰＵは診断順序テーブルをそれぞれ参照し、３番目に実行すべき診断が診断ｃであり、診断ｃがクラス２の診断であることを認識する。この認識にしたがって、ＣＰＵ００とＣＰＵ１０はそれぞれ診断ｃを実行し、ＣＰＵ０１とＣＰＵ１１は待機する。【００２５】
そして、ＣＰＵ００とＣＰＵ１０の双方が診断ｃを実行し終わると、４つのＣＰＵが同期し、４つのＣＰＵは、４番目の診断に進むべきことを認識する。４番目の診断ｄと５番目の診断ｅもクラス２の診断なので、診断ｃと同様に処理が進む。【００２６】
ＣＰＵ００とＣＰＵ１０の双方が診断ｅを実行し終わると、４つのＣＰＵが同期し、４つのＣＰＵは、６番目の診断に進むべきことを認識する。図２に示すように、６番目の診断ｆはクラス１の診断である。【００２７】
よって、それぞれ診断順序テーブルを参照して認識した結果にしたがって、ＣＰＵ００のみが診断ｆを実行し、ＣＰＵ０１とＣＰＵ１０とＣＰＵ１１は待機する。その後、ＣＰＵ００が診断ｆを実行し終わると、４つのＣＰＵが同期し、４つのＣＰＵは、７番目の診断に進むべきことを認識する。【００２８】
以下同様にして、１つの診断が終わるたびに全ＣＰＵが同期する。この繰り返しによって、１３番目の診断ｍの実行が終了すると、全ての診断が終了する。
このように診断順序テーブルを参照し、同期をとることによって、第１と第２の要件がともに満たされる。例えば、ＣＰＵ０１はＳＢマスタＣＰＵでもなくドメインマスタＣＰＵでもないので、ＣＰＵ０１が診断ｂの次に実行すべき診断は診断ｈである。一方で、診断ｈは診断ｇの後に実行すべき診断である。同期をとることによって、ＣＰＵ００が診断ｇを終える前にＣＰＵ０１が診断ｈを始めてしまうといった事態を防ぐことができる。【００２９】
しかしながら、この従来の方法を採用した場合、無駄な待機時間が生じ、総診断時間が必要以上に長くなることがある。なぜなら、第１の要件を満たすためのドメインマスタＣＰＵとＳＢマスタＣＰＵの選択が、静的な選択であるためである。【００３０】
静的な選択の結果、ドメインマスタＣＰＵとＳＢマスタＣＰＵとに処理が集中する一方で、その他のＣＰＵは診断処理をせずに単に同期待ちをしている時間がある。例えば、図３において、ＣＰＵ００が診断ｃから診断ｇを実行している間、ＣＰＵ０１は待機しているだけである。【００３１】
この待機時間は無駄なことがある。なぜなら、ある２つの処理を同時に実行しても問題がないとしても、図２の診断順序テーブルでは固定的に順序が定められているので、処理を並列化することができないためである。【００３２】
例えば、実際には診断ｃと診断ｄは、同時に実行することが許される性質の診断かもしれない。しかし、診断順序テーブルでは、必ず診断ｃを診断ｄの前に行うべきことが規定されている。また、診断順序テーブルでは、診断ｃと診断ｄの双方を、静的にＳＢマスタＣＰＵとして定められた特定のＣＰＵが実行すべきことも規定されている。【００３３】
よって、従来の方法では、図３に示すように、静的に定められた特定のＣＰＵが、静的に定められた特定の診断を、他のＣＰＵによる診断の実行状況とは関係なく、必ず実行する必要がある。しかし、もし診断ｃと診断ｄを同時に実行することが許されるならば、ＣＰＵ００とＣＰＵ１０が診断ｃを実行している間に、ＣＰＵ０１とＣＰＵ１１が診断ｄを実行せずに図３のようにただ待機しているのは時間の無駄である。
【特許文献１】特開平１０−４９３９７号公報
【発明の開示】
【００３４】
そこで本発明は、複数の診断処理部が複数の診断処理を分担して行う場合に、診断の性質に応じた排他制御をするという要件と、実行順序に関して定められた優先順位を守るという要件とを満たしつつ、無駄な待機時間を短縮することにより、総診断時間を短縮することを目的とする。
【００３５】
本発明による情報処理装置は、記憶部と複数の診断処理部を有し、複数の診断処理の各々を前記複数の診断処理部のいずれかに実行させることにより自己診断処理を行う。前記情報処理装置は、優先順位情報を前記記憶部から読み出す優先順位情報読み出し部と、クラス情報を前記記憶部から読み出すクラス情報読み出し部と、進捗情報を前記記憶部から読み出す進捗情報読み出し部と、割り当て部を備える。
【００３６】
前記優先順位情報は、前記複数の診断処理間の依存関係に基づく実行順序の優先順位を表す。前記クラス情報は、前記診断処理を実行すべき診断処理部の範囲を前記診断処理毎に表す。前記進捗情報は、前記複数の診断処理のうち、完了した診断処理と未完了の診断処理の情報を表す。
【００３７】
前記割り当て部は、未実行の診断処理を、前記優先順位情報と前記クラス情報と前記進捗情報に基づいて、前記複数の診断処理部のいずれかに割り当てるとともに、前記進捗情報を書き換える。
【００３８】
本発明によれば、進捗情報は割り当て部によって書き換えられるので、動的に変化する。割り当て部は、このように動的に変化する進捗情報に基づいて診断処理部に診断処理を割り当てる。つまり、本発明によれば、診断処理部への診断処理の割り当ては動的に行われる。
【００３９】
また、本発明の別の実施態様によれば、上記情報処理装置が実行する自己診断処理方法および該自己診断処理方法をコンピュータに実行させる自己診断処理プログラムが提供される。
【００４０】
上記のように、本発明によれば、診断処理部への診断処理の割り当てが状況に応じて動的に行われるため、無駄な待機時間が短縮され、総診断時間も短縮される。
【図面の簡単な説明】
【００４１】
【図１】複数の診断処理が行われるサーバ装置のハードウェア構成の一例を示す図である。
【図２】従来の方法で用いられる診断順序テーブルを示す図である。
【図３】従来の方法による割り当てのタイミングチャートである。
【図４】一実施形態における割り当て装置の機能ブロック図である。
【図５】グループ分けテーブルの一例を示す図である。
【図６】優先順位テーブルの一例を示す図である。
【図７】初期状態の進捗管理テーブルの一例を示す図である。
【図８】一実施形態における割り当てのフローチャートである。
【図９】一実施形態における優先順位チェックのフローチャートである。
【図１０】一実施形態において診断実行直前に進捗管理テーブルを書き換える処理のフローチャートである。
【図１１】一実施形態において診断実行直後に進捗管理テーブルを書き換える処理のフローチャートである。
【図１２】一実施形態における割り当てのタイミングチャートである。
【図１３Ａ】一実施形態における進捗管理テーブルの状態を示す図である。
【図１３Ｂ】一実施形態における進捗管理テーブルの状態を示す図である。
【図１３Ｃ】一実施形態における進捗管理テーブルの状態を示す図である。
【図１３Ｄ】一実施形態における進捗管理テーブルの状態を示す図である。
【図１３Ｅ】一実施形態における進捗管理テーブルの状態を示す図である。
【図１３Ｆ】一実施形態における進捗管理テーブルの状態を示す図である。
【図１３Ｇ】一実施形態における進捗管理テーブルの状態を示す図である。
【図１３Ｈ】一実施形態における進捗管理テーブルの状態を示す図である。
【発明を実施するための最良の形態】
【００４２】
以下、本発明の実施形態について、図面を参照しながら詳細に説明する。
説明は次の順序で行う。まず、一実施形態による割り当て装置の機能ブロック図を参照して、一実施形態における割り当て装置の概要を説明する。次に、割り当て装置を実現するハードウェアと診断の対象となるハードウェアとを含む装置の一例であるサーバ装置のハードウェア構成を説明する。次に、診断のクラスと、診断処理の割り当てにおいて利用される各種テーブルの例とを説明する。その後、フローチャートを参照して、一実施形態による割り当て方法を説明し、続いて、タイミングチャートとデータの変遷を示す図を参照して、割り当ての具体例を説明する。最後に様々な変形例を説明する。【００４３】
図４は、一実施形態における割り当て装置１００の機能ブロック図である。割り当て装置１００は、複数の診断処理を分担して実行する複数の診断部のうちの１つである診断部１１１を対象とした診断処理の割り当てを行う。なお、図４には複数の診断部のうちの診断部１１１のみを図示した。【００４４】
割り当て装置１００と診断部１１１とが１つのＣＰＵによって実現されていてもよく、割り当て装置１００と診断部１１１とが物理的に異なる装置により実現されてもよい。また、複数の診断部のそれぞれは、例えば、異なる複数のＣＰＵにより実現される。【００４５】
割り当て装置１００は、グループ分け情報１０１を読み出すグループ分け情報読み出し部１０５、優先順位情報１０２を読み出す優先順位情報読み出し部１０６、クラス情報１０３を読み出すクラス情報読み出し部１０７、進捗情報１０４を読み出す進捗情報読み出し部１０８、診断部１１１に診断処理を割り当てる割り当て部１０９、および診断部１１１が診断を終了した後の後処理を行う終了部１１０を備える。【００４６】
グループ分け情報１０１、優先順位情報１０２、クラス情報１０３、進捗情報１０４の具体的な格納場所は任意である。これらの情報は、バスあるいはＸＢなどのデータ伝送路を介して、それぞれの読み出し部によって読み出され、割り当て部１０９に与えられる。【００４７】
グループ分け情報１０１は、最下層のクラスのグループとして、１つの診断部のみが属するグループを複数の診断部の各々に対して定義する。また、グループ分け情報１０１は、最下層以外のクラスにおいては、直下のクラスの１つ以上のグループを包含するグループを定義する。【００４８】
以上により、グループ分け情報１０１は、複数の診断部の階層的なグループ分けを定義する。複数の診断部のそれぞれは、各クラスにおいて、いずれか１つのグループに属する。グループ分け情報１０１の具体例は図５を参照して後述する。【００４９】
優先順位情報１０２は、複数の診断処理同士に対して実行順序の優先順位を規定する。優先順位情報１０２は、任意の診断ｘと診断ｙに対して、診断ｘが診断ｙよりも先に実行されねばならない、診断ｙが診断ｘよりも先に実行されねばならない、または、診断ｘと診断ｙのどちらが先に実行されても許される、ということを示す情報である。優先順位情報１０２の具体例は図６を参照して後述する。【００５０】
クラス情報１０３は、複数の診断処理のそれぞれを、グループ分け情報１０１における複数のクラスのいずれかに関連づける情報である。
例えば、診断ｘをクラスｗに関連づけるクラス情報１０３は、クラスｗにおいて定義された１つのグループに属する１つ以上の診断部のうちの１つの診断部によってのみ、診断ｘが実行されるべきであるということを示す。つまり、クラス情報１０３は、診断ｘに関する排他制御を行うべき範囲が、クラスｗのグループであることを示す。クラス情報１０３の具体例は図６を参照して後述する。【００５１】
進捗情報１０４は、複数の診断部のそれぞれと、複数の診断処理のそれぞれとの組み合わせに対して進捗を示す。本実施形態において進捗には、「未診断」、「診断中」、「診断済」の３種類がある。なお、詳しくは後述するが、診断部ｚと診断ｘの組に対する進捗は、必ずしも診断部ｚ自体による診断ｘの進捗だけを意味するのではない。【００５２】
例えば、診断部ｚと診断ｘの組に対する進捗が「診断中」であることは、診断部ｚが診断ｘを実行中であることを示すのではなく、診断ｘのクラスにおいて診断部ｚと同じグループに属する診断部のいずれか（診断部ｚ自体であってもよい）が診断ｘを実行中であることを示す。【００５３】
グループ分け情報１０１と優先順位情報１０２とクラス情報１０３は静的な情報だが、進捗情報１０４は割り当て部１０９と終了部１１０によって書き換えられ、変化する動的な情報である。【００５４】
割り当て部１０９は、グループ分け情報読み出し部１０５、優先順位情報読み出し部１０６、クラス情報読み出し部１０７、進捗情報読み出し部１０８からそれぞれ、グループ分け情報１０１、優先順位情報１０２、クラス情報１０３、進捗情報１０４を与えられる。【００５５】
そして、割り当て部１０９は与えられた情報に基づいて、診断部１１１に割り当て可能な診断処理を選択する。また、割り当て部１０９は、選択した診断処理とクラス情報１０３とグループ分け情報１０１とに基づいて進捗情報１０４を書き換え、選択した診断処理を診断部１１１に割り当てる。また、割り当て部１０９は、診断部１１１に割り当てた診断処理を終了部１１０に通知する。【００５６】
上記のとおり、従来の方法では、複数の診断処理の実行順序が予め１通りに限定され、特定の処理を特定のＣＰＵが行うように静的に予め決められていた。しかし、本実施形態では、進捗情報１０４が示す状況に応じた割り当てを割り当て部１０９が行うため、診断部１１１の待機時間が短縮される。【００５７】
上記のとおり、診断部１１１は割り当て装置１００の外部にあってもよく、割り当て装置１００に備えられていてもよい。診断部１１１は、割り当て部１０９により割り当てられた診断処理を実行し、診断処理を実行し終わると終了部１１０に診断の終了を通知する。【００５８】
終了部１１０は、診断が終了したことを診断部１１１から通知されると、割り当て部１０９が診断部１１１に割り当てた診断処理とクラス情報１０３とグループ分け情報１０１とに基づいて進捗情報１０４を書き換える。【００５９】
割り当て部１０９と終了部１１０の動作の具体例は、図８〜図１３Ｈを参照して後述するが、上記のように動的に書き換えられる進捗情報１０４に基づいて診断処理の割り当てが行われるため、従来と比較した場合、無駄な待機時間が大きく減少する。また、診断処理の割り当ては優先順位情報１０２とクラス情報１０３とグループ分け情報１０１にも基づいて行われるため、診断の性質に応じた排他制御をするという要件と、実行順序に関して定められた優先順位を守るという要件とが満たされる。【００６０】
次に、一実施形態において図４の割り当て装置１００を実現する装置のハードウェア構成を説明する。本実施形態では、図１に示された構成のサーバ装置３０により、図４の割り当て装置１００が実現される。【００６１】
図１に関して既に説明したとおり、サーバ装置３０は、同様の構成をもつＳＢ０とＳＢ１が、データ伝送路であるＸＢ２０によって接続された装置である。
ＸＢ２０を利用することにより、データの送信元と送信先とが１対１に接続され、高速なデータ転送が実現される。しかし、他の実施形態においてはＸＢ２０のかわりに、バス等の他のデータ伝送路を利用してもよい。このようにＸＢ２０で互いに接続された２枚のＳＢを含むサーバ装置３０全体が、１つのドメインを構成している。【００６２】
ＳＢ０は、ＣＰＵ００、ＣＰＵ０１、ＤＩＭＭ０２、ＭＣ０３、Ｉ／Ｏ０４、ＳＲＡＭ０５、ＲＯＭ０６、およびＳＣ０７を備える。ＣＰＵ００、ＣＰＵ０１、ＭＣ０３、Ｉ／Ｏ０４、ＳＲＡＭ０５、およびＲＯＭ０６はバスによってＳＣ０７に接続され、ＤＩＭＭ０２はバスによってＭＣ０３に接続されている。ＳＢ１も同様の構成である。【００６３】
４つのＣＰＵ００〜１１は、それぞれ内部にレジスタやキャッシュメモリ等を備える。あるＣＰＵのレジスタやキャッシュメモリに格納されたデータは、他のＣＰＵから参照することはできない。【００６４】
ＤＩＭＭ０２は、同じＳＢ０内のＣＰＵ００とＣＰＵ０１により、ワーキングエリアとして利用される。ＣＰＵ００とＤＩＭＭ０２の間、およびＣＰＵ０１とＤＩＭＭ０２の間のデータ転送は、ＳＣ０７とＭＣ０３によって制御される。ＳＢ１上のＤＩＭＭ１２についても同様である。【００６５】
さらに、ＳＢ０はＸＢ２０によってＳＢ１と接続されているため、ＳＢ１上のＣＰＵ１０またはＣＰＵ１１が、ＳＢ０上のＤＩＭＭ０２に格納されたデータを読み出したり、ＤＩＭＭ０２にデータを書き込んだりすることもある。逆に、ＣＰＵ００またはＣＰＵ０１がＤＩＭＭ１２に格納されたデータを読み出したり、ＤＩＭＭ１２にデータを書き込んだりすることもある。【００６６】
Ｉ／Ｏ０４は、キーボードやポインティングデバイスなどの各種入力機器、およびディスプレイ、スピーカ、プリンタなどの各種出力機器とのインターフェイス機能を有する。Ｉ／Ｏ１４も同様である。【００６７】
ＳＲＡＭ０５は、ＲＯＭ０６にプログラムコードが格納されたファームウェアをＣＰＵ００およびＣＰＵ０１が実行する際のワーキングエリアとして使われる。本実施形態では、ファームウェアの一種であるＢＩＯＳ（Basic Input/Output System）のプログラムコードがＲＯＭ０６に格納されている。サーバ装置３０への電源投入時に、ＣＰＵ００およびＣＰＵ０１がＢＩＯＳのプログラムコードを実行することで、ＰＯＳＴを含むいくつかの処理が行われる。なお、ＲＯＭ０６は書き換え可能なＥＰＲＯＭ（Erasable Programmable Read Only Memory）又はフラッシュメモリ（FLASH Memory）でもよい。【００６８】
ＳＢ１上のＳＲＡＭ１５およびＲＯＭ１６も、ＳＲＡＭ０５およびＲＯＭ０６と同様である。
さらに、ＳＣ０７と１７がハードディスクドライブ（ＨＤＤ）等の不図示の記憶装置と接続されていてもよい。【００６９】
上記の従来の方法と本実施形態とで異なるのは、ＲＯＭ０６と１６に格納されたＢＩＯＳのプログラムコードの内容である。特にそのプログラムコードのうち、ＰＯＳＴを構成する複数の診断処理の割り当てに関する制御の部分が異なる。そのプログラムコードの違いによって、本実施形態においては、４つのＣＰＵが従来とは異なる機能を有し、従来とは異なる動作をする。【００７０】
すなわち、本実施形態では、図１のＣＰＵ００〜１１のそれぞれが、図４のグループ分け情報読み出し部１０５、優先順位情報読み出し部１０６、クラス情報読み出し部１０７、進捗情報読み出し部１０８、割り当て部１０９、および終了部１１０の機能を実現する。ＣＰＵ００と０１はＲＯＭ０６に格納されたＢＩＯＳのプログラムコードにしたがって動作することにより、これら各部の機能を実現する。ＣＰＵ１０とＣＰＵ１１も同様である。【００７１】
なお、本実施形態では、図１のＣＰＵ００〜１１のそれぞれが、図４の診断部１１１の機能も実現する。したがって、例えば図１のＣＰＵ００は、図４の割り当て装置１００として機能することによって、ＣＰＵ００が実現する診断部１１１に診断処理を割り当てる。そして、ＣＰＵ００は、診断部１１１として機能することによって、ＣＰＵ００がＣＰＵ００に割り当てた診断処理を実行する。さらに、ＣＰＵ００は、割り当て装置１００として機能することによって、診断処理の実行後の後処理を行う。【００７２】
また、本実施形態では、図１のＲＯＭ０６と１６の双方が、同内容の図４の優先順位情報１０２とクラス情報１０３を格納する。
そして、図１のＳＲＡＭ０５と１５の双方が、同内容の図４のグループ分け情報１０１を格納する。グループ分け情報１０１は内容が変化しない静的な情報なので、例えば、サーバ装置３０への電源投入直後に、ＲＯＭ０６に格納されたプログラムコードにしたがって、ＣＰＵ００がグループ分け情報１０１の内容をＳＲＡＭ０５に書き込んでもよい。【００７３】
また、図４の進捗情報１０４は、ＳＲＡＭ０５と１５に分散して格納される。
なお、図１のサーバ装置３０は、図４の割り当て装置１００と診断部１１１の機能を実現するだけではなく、診断の対象となるＤＩＭＭ０２等のハードウェアをも含む。【００７４】
次に、本実施形態における診断のクラスについて説明する。本実施形態では、診断は次のようにクラス１〜３の３つのクラスに分類され、定義される。
・クラス１：１つのドメインに属するいずれか１つのＣＰＵのみが行うべき診断のクラス
・クラス２：１つのＳＢに属するいずれか１つのＣＰＵのみが行うべき診断のクラス
・クラス３：各ＣＰＵが行うべき診断のクラス
本実施形態では、ドメイン内で共用されるＸＢ２０などのハードウェア資源を対象とする診断は、クラス１の診断として定義されている。また、ＳＢごとに備えられた、ＤＩＭＭなどのハードウェア資源を対象とする診断は、クラス２の診断として定義されている。そして、ＣＰＵごとに備えられた、レジスタなどのハードウェア資源を対象とする診断は、クラス３の診断として定義されている。【００７５】
このように、本実施形態では、図１のハードウェア構成と対応するように診断のクラスが定義されている。なお、クラス１が最上層のクラスである。
次に、図５〜図７を参照して、診断処理の割り当てにおいて利用される各種テーブルの例を説明する。【００７６】
図５は、図４のグループ分け情報１０１の具体例であるグループ分けテーブルを示す図である。
グループ分けテーブルは、図１のサーバ装置３０内の各ＣＰＵが各クラスにおいて属するグループを示す。図５において、各列が各ＣＰＵに対応し、各行が各クラスに対応する。【００７７】
図５によれば、最下層のクラス３では、４つのＣＰＵが互いに異なるグループに属している。つまり、ＣＰＵ００、ＣＰＵ０１、ＣＰＵ１０、ＣＰＵ１１がそれぞれ、グループＧ３０、Ｇ３１、Ｇ３２、Ｇ３３に属している。【００７８】
また、図５によれば、クラス３の１つ上層のクラスであるクラス２では、ＣＰＵ００とＣＰＵ０１がグループＧ２０に属し、ＣＰＵ１０とＣＰＵ１１がグループＧ２１に属している。これは、ＣＰＵ００とＣＰＵ０１がＳＢ０に実装され、ＣＰＵ１０とＣＰＵ１１がＳＢ１に実装されていることに対応したグループ分けである。図５に例示したように、クラス２のグループはそれぞれ、直下のクラス３のグループを１つ以上包含する。【００７９】
また、図５によれば、最上層のクラス１では、４つのＣＰＵ全てがグループＧ１０に属している。これは、サーバ装置３０全体が１つのドメインであり、４つのＣＰＵ全てがこのドメインに属していることに対応する。図５に例示したように、クラス１のグループは、直下のクラス２のグループを１つ以上包含する。【００８０】
本実施形態では、図１のＳＲＡＭ０５と１５の双方が、同じ内容のグループ分けテーブルを格納しているので、ＣＰＵ００と０１はＳＲＡＭ０５から、ＣＰＵ１０と１１はＳＲＡＭ１５から、グループ分けテーブルの内容を読み出す。【００８１】
図６は、図４の優先順位情報１０２とクラス情報１０３の対応を示す優先順位テーブルの具体例を示す図である。従来の方法では、図２の診断順序テーブルを使って、複数の診断を１列に並べた順序が規定されていたが、本実施形態では、図６の優先順位テーブルが用いられる。【００８２】
優先順位テーブルの各行は、個々の診断に対応する。
優先順位テーブルの１番左の列は、「クラス」という見出しがつけられており、クラス情報１０３を表す。【００８３】
例えば、診断ａ、診断ｃ、診断ｆの各行には、それぞれ診断のクラスを表す「３」、「２」、「１」という値が書いてある。つまり、診断ａは全ＣＰＵによってそれぞれ実行されるべきクラス３の診断であり、診断ｃは各ＳＢに属するいずれか１個のＣＰＵによってのみ実行されるべきクラス２の診断であり、診断ｆはドメインに属するいずれか１個のＣＰＵによってのみ実行されるべきクラス１の診断であることが、１番左の列には示されている。【００８４】
優先順位テーブルの１番左の列以外の各列は、個々の診断に対応し、優先順位情報１０２を表す。診断ｘ（診断ｘは診断ａ〜ｍのいずれか）の行の診断ｙ（診断ｙは診断ａ〜ｍのいずれか）の列のマスに「×」と書かれているとき、診断ｙが終了した後でないと診断ｘを実行することができない、つまり、診断ｙが診断ｘに優先することを示す。【００８５】
一方、診断ｘの行の診断ｙの列のマスが空白のとき、診断ｙが終了していなくても診断ｘを実行することができることを示す。したがって、診断ｘの行の診断ｙの列のマスと、診断ｙの行の診断ｘの列のマスがともに空白のとき、診断ｘと診断ｙのどちらを先に実行しても許される。【００８６】
また、診断ｘの行の診断ｘの列のマスは同一診断間の優先順位を判断する場合はないため、図６では斜線が引かれている。
本実施形態では、図１のＲＯＭ０６と１６の双方が、同じ内容の優先順位テーブルを格納しているので、ＣＰＵ００とＣＰＵ０１はＲＯＭ０６から、ＣＰＵ１０とＣＰＵ１１はＲＯＭ１６から、優先順位テーブルの内容を読み出す。【００８７】
なお、図６の優先順位テーブルに示された各診断のクラスは、従来の方法で使われる図２の診断順序テーブルに示されたクラスと同じである。しかし、優先順位の規定の仕方が図６と図２では異なる。【００８８】
図２の診断順序テーブルでは、優先順位に関する制約を満たす実行順序のうちの特定の１通りの順序のみに、診断の実行順序が限定されている。しかし、図６では診断の実行順序に自由度がある。例えば、図２では、必ず診断ｃを診断ｄより前に実行しなくてはならないことが規定されているが、図６は、診断ｃと診断ｄのどちらを先に実行しても許されることを示している。【００８９】
図７は、図４の進捗情報１０４の具体例である進捗管理テーブルを示す図である。進捗管理テーブルは、動的に書き換えられていくが、図７は初期状態を示す図である。
本実施形態では、図１のサーバ装置３０に４つのＣＰＵがあるため、進捗管理テーブルの行数は４であり、実行すべき診断が診断ａ〜ｍの１３個であるため、進捗管理テーブルの列数は１３である。【００９０】
進捗管理テーブルのうち、ＣＰＵｚ（ＣＰＵｚはＣＰＵ００〜１１のいずれか）の行の診断ｙ（診断ｙは診断ａ〜ｍのいずれか）の列のマスは、ＣＰＵｚと診断ｙとの組み合わせに対する進捗を示す。進捗は、「未診断」、「診断中」、「診断済」の３種類に分類される。進捗管理テーブルによって、全てのＣＰＵと全ての診断の全ての組み合わせに対する進捗が管理される。【００９１】
以下では、診断済であることを符号「＋」で表し、診断中であることを符号「−」で表し、未診断であることを空白で表す。図７は初期状態を示す図なので、全てのマスが空白である。【００９２】
上記のとおり、本実施形態では、１つの進捗管理テーブルが、図１のＳＲＡＭ０５と１５に分散されて格納されている。具体的には、進捗管理テーブルのうちＣＰＵ００とＣＰＵ０１の行からなる部分はＳＢ０上のＳＲＡＭ０５に格納され、ＣＰＵ１０とＣＰＵ１１の行からなる部分はＳＢ１上のＳＲＡＭ１５に格納されている。【００９３】
このように進捗管理テーブルが分散されて格納されていても、各ＣＰＵは、進捗管理テーブルの全てのマスのデータを読み出したり書き換えたりすることが可能である。なぜなら、ＳＢ０とＳＢ１はＸＢ２０で接続されているからである。【００９４】
進捗管理テーブルは動的に書き換えられて内容が変化する。変化の具体例は図１３Ａ〜図１３Ｈとともに後述する。
次に、図８〜図１１を参照して、本実施形態による割り当て方法を説明する。本実施形態では、図１のＣＰＵ００〜１１のそれぞれが、図８〜図１１の処理を並行して実行する。図８は割り当て方法を示すフローチャート、図９〜図１１は図８中のステップの詳細を示すフローチャートである。以下では便宜上、ＣＰＵ００がこれらの処理を実行する場合を例として説明する。【００９５】
本実施形態における診断ａ〜ｍは、ＰＯＳＴを構成する診断処理である。したがって、サーバ装置３０に電源が入れられると、ＰＯＳＴを実行するために、ＣＰＵ００〜１１のそれぞれが図８の処理を開始する。【００９６】
図８のステップＳ１０１において、ＣＰＵ００は、進捗管理テーブルを読み書きするためのロックを獲得する。
上記のように１つの進捗管理テーブルがどのＣＰＵからも読み書き可能である。よって、他のＣＰＵ０１、１０、１１と進捗管理テーブルの更新が競合するのを防ぐための排他制御が必要である。そのため、ステップＳ１０１でロックの獲得が行われる。【００９７】
ロックを実現する具体的な方法としては、マルチプロセッサシステムにおける排他制御で利用される任意の方法を採用することができる。
ステップＳ１０１においてＣＰＵ００がロックの獲得を試み、獲得に成功すれば、処理はステップＳ１０２に進む。ロックの獲得に失敗した場合、ＣＰＵ００は、例えば所定の時間待機してから、再度ロックの獲得を試みる。獲得に成功するまで、処理はステップＳ１０１より先に進むことはない。【００９８】
次にステップＳ１０２において、ＣＰＵ００は、進捗管理テーブルの自ＣＰＵの行（すなわちＣＰＵ００の行）を１番左の列から順に探索して、未診断の項目を探す。未診断の項目が見つかったら、あるいは進捗管理テーブルの全ての列を探索しても未診断の項目が見つからなかったら、処理はステップＳ１０３へ進む。【００９９】
ステップＳ１０３では、ステップＳ１０２で未診断の項目が見つかったか否かをＣＰＵ００が判断する。もし未診断の項目がなければ、もはやＣＰＵ００が実行すべき診断は残っていないので、ＣＰＵ００は図８の処理を終了する。【０１００】
一方、ステップＳ１０２で未診断の項目が見つかった場合は、処理はステップＳ１０３からステップＳ１０４へと進む。
ステップＳ１０４でＣＰＵ００は、ステップＳ１０２で見つかった未診断の項目を選択する。以後、この選択された診断を「診断ｘ」と呼んで説明する。本実施形態においては、診断ｘは診断ａ〜ｍのいずれかである。【０１０１】
続いてステップＳ１０５で、ＣＰＵ００は、進捗管理テーブルを参照して、診断ｘに優先して実行すべき全ての診断が診断済か否かをチェックする。ステップＳ１０５におけるチェックの詳細は図９を参照して後述するが、概略は次のとおりである。【０１０２】
ステップＳ１０５でチェックすべき進捗管理テーブルの行は、優先順位テーブルに定義されている診断ｘのクラスによって異なる、１つまたは複数の行である。
診断ｘがクラス１の診断である場合、つまりドメインに属するいずれか１つのＣＰＵのみが診断ｘを実行すべき場合は、ステップＳ１０５で、全ＣＰＵの行がチェックされる。【０１０３】
診断ｘがクラス２の診断である場合、つまり１枚のＳＢに属するいずれか１つのＣＰＵのみが診断ｘを実行すべき場合は、自ＣＰＵと同一のＳＢ内にある全ＣＰＵの行がチェックされる。例えば、ＣＰＵ００が図８の処理を実行している場合は、ＣＰＵ００を実装したＳＢ０内にある全ＣＰＵの行、つまりＣＰＵ００とＣＰＵ０１の行がチェックされる。【０１０４】
診断ｘがクラス３の診断である場合、つまり全ＣＰＵがそれぞれ診断ｘを実行すべき場合は、自ＣＰＵの行のみがチェックされる。例えば、ＣＰＵ００が図８の処理を実行している場合は、ＣＰＵ００の行のみがチェックされる。【０１０５】
診断ｘのクラスに応じてチェックすべき１つまたは複数の行において、診断ｘに優先して実行すべき全ての診断が診断済であれば、処理はステップＳ１０６に進む。それ以外の場合、処理はステップＳ１０９に進む。【０１０６】
ステップＳ１０６では、ＣＰＵ００が、次に行う診断として診断ｘを選択し、この選択を進捗管理テーブルに反映し、ステップＳ１０１で獲得したロックを解除する。ステップＳ１０６の詳細は図１０とあわせて後述するが、概略は次のとおりである。【０１０７】
ステップＳ１０６で書き換えるべき進捗管理テーブル中のマスは、診断ｘの列の１つまたは複数の行のマスである。診断ｘの列のどの行のマスを書き換えるべきかは、ステップＳ１０５と同様に、診断ｘのクラスによって異なる。【０１０８】
つまり、診断ｘがクラス１の診断の場合、ＣＰＵ００は、診断ｘの列の、全ＣＰＵの行のマスを、診断中を示す記号「−」に書き換える。診断ｘがクラス２の診断の場合、ＣＰＵ００は、診断ｘの列の、自ＣＰＵと同一のＳＢ内にある全ＣＰＵの行のマスを、診断中を示す記号「−」に書き換える。診断ｘがクラス３の診断の場合、ＣＰＵ００は、診断ｘの列の、自ＣＰＵの行のマスのみを、診断中を示す記号「−」に書き換える。【０１０９】
次にステップＳ１０７において、ＣＰＵ００は診断ｘを実行し、診断ｘの終了後ステップＳ１０８に移行する。
ステップＳ１０８では、ＣＰＵ００が、ステップＳ１０６で診断中を示す記号「−」を書き込んだ進捗管理テーブル中の各マスに、診断済を示す記号「＋」を書き込む。そして処理はステップＳ１０１に戻る。【０１１０】
一方、ステップＳ１０５からステップＳ１０９に進んだ場合、ＣＰＵ００は、進捗管理テーブルの自ＣＰＵの行を、ステップＳ１０２の探索で見つけた診断ｘの次の列から順に探索して、未診断の項目を探す。未診断の項目が見つかったら、あるいは進捗管理テーブルの１番右の列まで探索しても未診断の項目が見つからなかったら、処理はステップＳ１１０へ進む。【０１１１】
ステップＳ１１０では、ステップＳ１０９で未診断の項目が見つかったか否かをＣＰＵ００が判断する。
もしステップＳ１０９で未診断の項目が見つかれば、処理はステップＳ１０４に戻る。そして、ステップＳ１０４において、ステップＳ１０９で見つかった診断を新たな「診断ｘ」として、ＣＰＵ００はステップＳ１０５以降の処理を再度実行する。【０１１２】
もしステップＳ１０９で未診断の項目が見つからなければ、処理はステップＳ１１１に進む。この場合、少なくともステップＳ１０２で見つけた診断ｘは未診断なので、まだ実行すべき診断が残っている。しかし、今すぐに実行可能な診断は存在しない。よって、ＣＰＵ００は、ステップＳ１０１で獲得したロックを一旦解除し、適当な時間待機（ウェイト）してから、ステップＳ１０１に戻る。【０１１３】
ステップＳ１１１における待機時間は、予め決められた方針にしたがっている。例えば、待機時間は、予め固定的に決められた時間、ランダムな長さの時間、あるいは進捗管理テーブルの状態に応じて決められる時間などである。【０１１４】
以上のようにして、ステップＳ１０３で未診断の項目が残っていないと判断されるまで、ステップＳ１０１〜ステップＳ１１１が繰り返し実行される。
次に、図８のステップＳ１０５の詳細を、図９のフローチャートを参照して説明する。図９の処理が実行されるのは、既に図８のステップＳ１０４で未診断の診断ｘが選択された後である。なお、図８の説明と同様に、便宜上、ＣＰＵ００が図９の処理を実行する場合を例として説明する。【０１１５】
図９のステップＳ２０１において、ＣＰＵ００は、ステップＳ２０２以下の処理によるチェックを全診断に対して行ったか否かを判断する。全診断がチェック済であれば処理はステップＳ２１０に進み、それ以外の場合、処理はステップＳ２０２に進む。【０１１６】
本実施形態では、全診断とは診断ａ〜ｍの１３個の診断である。ＣＰＵ００は、優先順位テーブルまたは進捗管理テーブルを参照することにより、診断ａ〜ｍという１３個の診断があることを認識することができる。【０１１７】
ステップＳ２０２で、ＣＰＵ００は未チェックの診断を１つ選択する。以後、この選択された診断を「診断ｙ」と呼んで説明する。本実施形態においては、診断ｙは診断ａ〜ｍのいずれかである。【０１１８】
続いてステップＳ２０３で、ＣＰＵ００は、優先順位テーブルを参照して、診断ｙが診断ｘよりも優先順位が高いか否かを判定する。図６の優先順位テーブルにおいて診断ｘの行の診断ｙの列に「×」印がついていれば、診断ｙの方が診断ｘよりも優先順位が高いので、処理はステップＳ２０４に進む。図６の優先順位テーブルにおいて診断ｘの行の診断ｙの列が空白であれば、診断ｙは診断ｘよりも先に実行する必要がない診断なので、診断ｙはチェック済となり、処理はステップＳ２０１に戻る。同様に、診断ｙが診断ｘと等しい場合も、処理はステップＳ２０１に戻る。【０１１９】
ステップＳ２０４で、ＣＰＵ００は、優先順位テーブルを参照して診断ｘのクラスを取得する。続いてステップＳ２０５で、ＣＰＵ００は、ステップＳ２０４で取得したクラスにおいて、診断の割り当て対象であるＣＰＵ（すなわちＣＰＵ００自身）と同じグループに属する全ＣＰＵのリストを、グループ分けテーブルを参照することにより取得する。【０１２０】
図５のグループ分けテーブルを例として説明すると、ステップＳ２０４で取得したクラスがクラス１の場合、ＣＰＵ００はグループ分けテーブルのクラス１の行を参照する。すると、ＣＰＵ００と同じグループに属するのは、ＣＰＵ００自身も含めて、ＣＰＵ００、ＣＰＵ０１、ＣＰＵ１０、ＣＰＵ１１の４つである。よって、ステップＳ２０５でＣＰＵ００は、この４つのＣＰＵを要素とするリストを取得する。【０１２１】
同様に、ステップＳ２０４で取得したクラスがクラス２の場合、ＣＰＵ００はグループ分けテーブルのクラス２の行を参照する。すると、ＣＰＵ００と同じグループに属するのは、ＣＰＵ００自身も含めて、ＣＰＵ００、ＣＰＵ０１の２つである。よって、ステップＳ２０５でＣＰＵ００は、この２つのＣＰＵを要素とするリストを取得する。【０１２２】
同様に、ステップＳ２０４で取得したクラスがクラス３の場合、ＣＰＵ００はグループ分けテーブルのクラス３の行を参照する。すると、ＣＰＵ００と同じグループに属するのは、ＣＰＵ００自身のみである。よって、ステップＳ２０５でＣＰＵ００は、ＣＰＵ００のみを要素とするリストを取得する。【０１２３】
続いて処理はステップＳ２０６に進み、ＣＰＵ００は、ステップＳ２０５で取得したリスト内の全ＣＰＵについてステップＳ２０７とステップＳ２０８のチェックを行ったか否かを判断する。全ＣＰＵがチェック済であれば、診断ｙがチェック済となって処理はステップＳ２０１に戻り、そうでなければ、処理はステップＳ２０７に進む。【０１２４】
ステップＳ２０７でＣＰＵ００は、ステップＳ２０５で取得したリストから未チェックのＣＰＵを１つ選択する。以後、この選択されたＣＰＵを「ＣＰＵｚ」と呼んで説明する。【０１２５】
続いてステップＳ２０８でＣＰＵ００は、進捗管理テーブルのＣＰＵｚの行の診断ｙの列のマスを参照する。このマスに、診断済を示す「＋」の記号が書かれていれば処理はステップＳ２０６に戻り、そうでなければ、処理はステップＳ２０９に進む。【０１２６】
ステップＳ２０９が実行されるのは、診断ｘに優先して実行すべき全ての診断が診断済であるという条件が満たされていない場合である。この場合、診断ｘを実行することは許されないので、ステップＳ２０９でＣＰＵ００は「ＮＧ」という結果を得て図９の処理を終了し、処理は図８に戻る。以後、ステップＳ２０９で得られた結果が「ＮＧ」であることから、処理は図８のステップＳ１０５からステップＳ１０９に進む。【０１２７】
一方、ステップＳ２０１からステップＳ２１０へと処理が進んだ場合は、診断ｘに優先して実行すべき全ての診断が診断済であるという条件が満たされている場合である。よって、ステップＳ２１０でＣＰＵ００は「ＯＫ」という結果を得て図９の処理を終了し、処理は図８に戻る。以後、ステップＳ２１０で得られた結果が「ＯＫ」であることから、処理は図８のステップＳ１０５からステップＳ１０６に進む。【０１２８】
次に、図８のステップＳ１０６の詳細を、図１０のフローチャートを参照して説明する。図１０の処理が実行されるのは、未診断の診断ｘに優先して実行すべき全ての診断が診断済であることが既に図８のステップＳ１０５で判明している場合である。なお、図８の説明と同様に、便宜上、ＣＰＵ００が図１０の処理を実行する場合を例として説明する。【０１２９】
図１０のステップＳ３０１において、ＣＰＵ００は、優先順位テーブルを参照して診断ｘのクラスを取得する。
次にステップＳ３０２でＣＰＵ００は、ステップＳ３０１で取得したクラスにおいて、診断の割り当て対象であるＣＰＵ（すなわちＣＰＵ００自身）と同じグループに属する全ＣＰＵのリストを、グループ分けテーブルを参照することにより取得する。ステップＳ３０２は図９のステップＳ２０５と類似のステップなので、詳しい説明は省略する。【０１３０】
続いてステップＳ３０３でＣＰＵ００は、ステップＳ３０２で取得したリスト内の全ＣＰＵについて、ステップＳ３０４とステップＳ３０５による進捗管理テーブルの書き換えを行ったか否かを判断する。リスト内の全ＣＰＵについて進捗管理テーブルを書き換え済であれば処理はステップＳ３０６へ進み、そうでなければ処理はステップＳ３０４へ進む。【０１３１】
ステップＳ３０４でＣＰＵ００は、ステップＳ３０２で取得したリストから、進捗管理テーブルの書き換えをまだ行っていないＣＰＵを１つ選択する。以後、この選択されたＣＰＵを「ＣＰＵｚ」と呼んで説明する。【０１３２】
続いてステップＳ３０５でＣＰＵ００は、進捗管理テーブルのＣＰＵｚの行の診断ｘの列のマスを、診断中を示す「−」に書き換える。そして、処理はステップＳ３０３へ戻る。【０１３３】
ステップＳ３０３からステップＳ３０６に移行した場合、ＣＰＵ００は、図１０の処理の開始前に図８のステップＳ１０１で獲得したロックを解除し、図１０の処理を終了する。【０１３４】
次に、図８のステップＳ１０８の詳細を、図１１のフローチャートを参照して説明する。図１１の処理が実行されるのは、図８のステップＳ１０７で診断ｘが実行され、診断ｘが終了した直後である。なお、図８の説明と同様に、便宜上、ＣＰＵ００が図１１の処理を実行する場合を例として説明する。【０１３５】
図１１のステップＳ４０１において、ＣＰＵ００は、進捗管理テーブルを書き換えるためのロックを獲得する。この処理は、図８のステップＳ１０１と同様のステップなので、詳しい説明は省略する。ロックの獲得に成功したら、処理はステップＳ４０２に進む。【０１３６】
ステップＳ４０２において、ＣＰＵ００は、優先順位テーブルを参照して診断ｘのクラスを取得する。
次にステップＳ４０３でＣＰＵ００は、ステップＳ４０１で取得したクラスにおいて、診断の割り当て対象であるＣＰＵ（すなわちＣＰＵ００自身）と同じグループに属する全ＣＰＵのリストを、グループ分けテーブルを参照することにより取得する。ステップＳ４０３は、図９のステップＳ２０５や図１０のステップＳ３０２と同様のステップなので、詳しい説明は省略する。【０１３７】
続いてステップＳ４０４でＣＰＵ００は、ステップＳ４０３で取得したリスト内の全ＣＰＵについて、ステップＳ４０５とステップＳ４０６による進捗管理テーブルの書き換えを行ったか否かを判断する。リスト内の全ＣＰＵについて進捗管理テーブルを書き換え済であれば処理はステップＳ４０７へ進み、そうでなければ処理はステップＳ４０５へ進む。【０１３８】
ステップＳ４０５でＣＰＵ００は、ステップＳ４０３で取得したリストから、進捗管理テーブルの書き換えをまだ行っていないＣＰＵを１つ選択する。以後、この選択されたＣＰＵを「ＣＰＵｚ」と呼んで説明する。【０１３９】
続いてステップＳ４０６でＣＰＵ００は、進捗管理テーブルのＣＰＵｚの行の診断ｘの列のマスを、診断済を示す「＋」に書き換える。そして、処理はステップＳ４０４へ戻る。【０１４０】
ステップＳ４０４からステップＳ４０７に移行した場合、ＣＰＵ００は、ステップＳ４０１で獲得したロックを解除し、図１１の処理を終了する。
次に、割り当て処理の具体例を、図１２のタイミングチャートと、図１３Ａ〜図１３Ｈの進捗管理テーブルのデータの変遷を参照しながら説明する。この具体例でも、図５と図６の各情報が利用される。【０１４１】
図１２では下向きの矢印が時間の流れを表している。図１２は、ＣＰＵ００、ＣＰＵ０１、ＣＰＵ１０、ＣＰＵ１１がそれぞれ図８の処理を並行して実行したときの一例である。図１２中に水平な点線とともに示した１〜８という数字は、点線の時点を示す。【０１４２】
サーバ装置３０に電源が投入されると、４つのＣＰＵがそれぞれ図８の処理を開始する。この時点で、進捗管理テーブルは図７の初期状態である。
図１２の例では、例えば、ＣＰＵ００が１番先にステップＳ１０１でロックを獲得し、未診断の診断ａをステップＳ１０２で見つけ出し、診断ａよりも優先順位が高い診断は存在しないことから、ステップＳ１０６へ進む。そして、診断ａはクラス３の診断なので、ＣＰＵ００は、進捗管理テーブルのＣＰＵ００の行の診断ａの列のマスを「−」と書き換え、ロックを解除し、診断ａを実行する。【０１４３】
同様にして、例えばＣＰＵ０１、ＣＰＵ１０、ＣＰＵ１１の順に各ＣＰＵがロックを獲得し、それぞれ診断ａを実行する。
その後、例えばＣＰＵ００が１番先に診断ａを終了したとすると、ＣＰＵ００はステップＳ１０８において、進捗管理テーブルのＣＰＵ００の行の診断ａの列のマスを「＋」と書き換え、ステップＳ１０１に戻る。残りの３つのＣＰＵも同様である。【０１４４】
続いて、クラス３の診断である診断ｂも同様にして各ＣＰＵにより実行される。図１２の時点１では、全ＣＰＵが診断ａと診断ｂを終了している。
時点１におけるＣＰＵ００の動作は次のとおりである。ＣＰＵ００は、ステップＳ１０１でロックを獲得し、未診断の診断ｃをステップＳ１０２で見つけ出す。診断ｃはクラス２の診断であり、クラス２でＣＰＵ００と同じグループＧ２０に属するのはＣＰＵ００と０１であり、診断ｃよりも優先順位が高い診断は診断ａと診断ｂである。時点１においてＣＰＵ００と０１は診断ａと診断ｂを既に終了しているので、処理はステップＳ１０６に進む。ステップＳ１０６でＣＰＵ００は、進捗管理テーブルのＣＰＵ００と０１の行の診断ｃの列のマスを「−」と書き換え、ロックを解除し、診断ｃを実行する。【０１４５】
ロックが解除されると、ステップＳ１０１で待機していたＣＰＵ０１が次にロックを獲得する。そして、ＣＰＵ０１はステップＳ１０２で未診断の項目を探す。
ＣＰＵ０１は、時点１において診断ａと診断ｂを既に終了している。一方、ＣＰＵ０１は診断ｃをまだ実行していないが、診断ｃはクラス２の診断であり、クラス２においてＣＰＵ０１と同じグループに属しているＣＰＵ００が、診断ｃを実行中である。よって、ステップＳ１０２でＣＰＵ０１が見つける項目は診断ｄである。【０１４６】
診断ｄはクラス２の診断であり、クラス２でＣＰＵ０１と同じグループＧ２０に属するのはＣＰＵ００と０１であり、診断ｄよりも優先順位が高い診断は診断ａと診断ｂである。時点１においてＣＰＵ００と０１は診断ａと診断ｂを既に終了しているので、処理はステップＳ１０６に進む。ステップＳ１０６でＣＰＵ０１は、進捗管理テーブルのＣＰＵ００と０１の行の診断ｄの列のマスを「−」と書き換え、ロックを解除し、診断ｄを実行する。【０１４７】
同様にして、ＣＰＵ１０が診断ｃを実行し、ＣＰＵ１１が診断ｄを実行する。すると、進捗管理テーブルは図１３Ａに示す状態となる。
なお、図４の進捗情報１０４に関して簡単に説明したが、進捗管理テーブルにおいて、ＣＰＵｚと診断ｙとの組み合わせに対する進捗は、必ずしも、ＣＰＵｚ自体による診断ｙの実行の進捗を意味するわけではない。このことについて、図１３ＡのＣＰＵ００の行を例として説明する。【０１４８】
上記で説明したとおり、進捗管理テーブルが図１３Ａの状態である時点において、ＣＰＵ００は診断ｃを実行しているが、診断ｄを実行しているわけではない。それにもかかわらず、図１３ＡのＣＰＵ００の行では、診断ｃとｄの列の２つのマスに「−」と書かれている。【０１４９】
その理由は、診断ｄがクラス２の診断なので、ＳＢ０上の２つのＣＰＵ００とＣＰＵ０１のうちどちらか一方が診断ｄを実行した場合には、他方のＣＰＵは診断ｄを実行してはならないためである。【０１５０】
進捗管理テーブルにおいてＣＰＵ００の行の診断ｄの列のマスが空白であることは、単に「診断ｄがＣＰＵ００によってまだ実行されていない」ということを示すというよりも、「診断ｄがこれからＣＰＵ００に割り当てられる可能性がある」ということを示す。よって、「ＣＰＵ０１が診断ｄの実行を開始することにより、ＣＰＵ００に診断ｄを割り当てる可能性がなくなった」ということを進捗管理テーブルに反映するために、図１０の処理が実行され、ＣＰＵ００の行の診断ｄの列のマスが「−」と書き換えられる。【０１５１】
診断ｙがクラス１の診断である場合も同様に、ＣＰＵｚ自体が診断ｙを実行していなくても、ＣＰＵｚの行の診断ｙの列のマスが「−」や「＋」と書き換えられる。
ここで図１２の説明に戻ると、診断の実行にかかる時間は、診断の種類にもより、また、診断の対象の資源の状態にもよる。よって、図１２の例のように、同じ診断ｃであってもＣＰＵ００の方がＣＰＵ１０よりも短い時間で実行を終えることがある。【０１５２】
図１２に示すように、時点２では、ＣＰＵ００は診断ｃを終了しており、ＣＰＵ０１は診断ｄを実行中であり、ＣＰＵ１０は診断ｃを実行中であり、ＣＰＵ１１は診断ｄを終了している。よって、ＣＰＵ００は時点２で、ステップＳ１０８を実行し、進捗管理テーブルのＣＰＵ００と０１の行の診断ｃの列のマスを「＋」に書き換える。そして、ステップＳ１０１に戻る。【０１５３】
同様にＣＰＵ１１は時点２で、ステップＳ１０８を実行し、進捗管理テーブルのＣＰＵ１０と１１の行の診断ｄの列のマスを「＋」に書き換える。そして、ステップＳ１０１に戻る。【０１５４】
ＣＰＵ００は、ステップＳ１０１に戻ってロックを獲得すると、ステップＳ１０２で未診断の項目を探索し、診断ｅを見つける。診断ｅはクラス２の診断であり、クラス２でＣＰＵ００と同じグループＧ２０に属するのはＣＰＵ００と０１であり、診断ｅよりも優先順位が高い診断は診断ａと診断ｂである。時点２において既にＣＰＵ００と０１は診断ａと診断ｂを終了しているので、処理はステップＳ１０６に進む。ステップＳ１０６でＣＰＵ００は、進捗管理テーブルのＣＰＵ００と０１の行の診断ｅの列のマスを「−」と書き換え、ロックを解除し、診断ｅを実行する。【０１５５】
ロックが解除されると、ステップＳ１０１で待機していたＣＰＵ１１が次にロックを獲得し、ＣＰＵ００と同様にして診断ｅを実行する。以上により、進捗管理テーブルは、図１３Ｂに示す状態となる。【０１５６】
続いて、時点３では、ＣＰＵ０１が診断ｄを終了し、ステップＳ１０８で、進捗管理テーブルのＣＰＵ００とＣＰＵ０１の行の診断ｄの列のマスを「＋」と書き換える。これにより、進捗管理テーブルは図１３Ｃに示す状態となる。【０１５７】
続いてＣＰＵ０１はステップＳ１０１でロックを獲得し、ステップＳ１０２で未診断の項目を探し、診断ｆを見つける。診断ｆはクラス１の診断であり、診断ｆよりも優先順位が高いのは診断ａ、ｂ、ｃである。よって、ステップＳ１０５では、進捗管理テーブルの４行全ての、診断ａ、ｂ、ｃの列のマスがチェックされる。【０１５８】
図１２に示すように、時点３では、ＣＰＵ１０が診断ｃを実行中であり、そのため図１３Ｃに示すように進捗管理テーブルのＣＰＵ１０と１１の行の診断ｃの列のマスには「−」と書かれている。よって、処理はステップＳ１０５からステップＳ１０９へ進む。【０１５９】
以後、ステップＳ１０９、Ｓ１１０を経てステップＳ１０４へ戻るループが繰り返し実行され、ＣＰＵ０１は未診断の診断ｇ〜ｍについてステップＳ１０５（すなわち図９）の優先順位のチェックを実行する。しかし、診断ｇ〜ｍはいずれも診断ｃより優先順位が低いため、結局ステップＳ１１１へ処理が進む。ステップＳ１１１でＣＰＵ０１はロックを解除して待機する。待機後、ＣＰＵ０１の処理はステップＳ１０１に戻る。【０１６０】
時点３の少し後でＣＰＵ１０は、診断ｃを終了し、ステップＳ１０８で、進捗管理テーブルのＣＰＵ１０とＣＰＵ１１の行の診断ｃの列のマスを「＋」と書き換え、ステップＳ１０１に戻る。【０１６１】
ＣＰＵ１０が診断ｃを終了して、ステップＳ１０８で進捗管理テーブルが書き換えられると、ステップＳ１０１でロックの獲得を試みていたＣＰＵ０１が、ロックの獲得に成功する。そして、ステップＳ１０２で未診断の項目を探し、診断ｆを見つける。【０１６２】
診断ｆはクラス１の診断であり、診断ｆよりも優先順位が高いのは診断ａ、ｂ、ｃであり、この時点で進捗管理テーブルの４行全ての診断ａ、ｂ、ｃの列のマスは「＋」と書き換えられている。よって、処理はステップＳ１０５からステップＳ１０６へ進む。そして、ＣＰＵ０１は、ステップＳ１０６で、進捗管理テーブルの４行全ての診断ｆの列を「−」と書き換えてロックを解除し、ステップＳ１０７で診断ｆを実行する。【０１６３】
一方で、ロックが解除されると、診断ｃを終了したＣＰＵ１０がステップＳ１０１でロックを獲得する。ＣＰＵ１０はステップＳ１０２で未診断の項目を探し、診断ｇを見つける。【０１６４】
診断ｇはクラス１の診断であり、診断ｇよりも優先順位が高いのは診断ａ、ｂ、ｃ、ｄ、ｅである。一方、この時点でＣＰＵ００とＣＰＵ１１がそれぞれ診断ｅを実行中であり、そのため、進捗管理テーブルの診断ｅの列の４つのマスは全て「−」と書かれている。よって、処理はステップＳ１０５からステップＳ１０９へ進む。【０１６５】
以後、ステップＳ１０９、Ｓ１１０を経てステップＳ１０４へ戻るループが繰り返し実行され、ＣＰＵ１０は未診断の診断ｈ〜ｍについてステップＳ１０５（すなわち図９）の優先順位のチェックを実行する。しかし、診断ｈ〜ｍはいずれも診断ｅより優先順位が低いため、結局ステップＳ１１１へ処理が進む。ステップＳ１１１でＣＰＵ１０はロックを解除して待機する。待機後、ＣＰＵ１０の処理はステップＳ１０１に戻る。【０１６６】
図１２に示すように、ＣＰＵ１０による診断ｃの終了に続いて、ＣＰＵ００が診断ｅを終了する。ＣＰＵ００はステップＳ１０８で進捗管理テーブルのＣＰＵ００とＣＰＵ０１の行の診断ｅの列のマスを「＋」と書き換え、ステップＳ１０１に戻ってロックを獲得する。【０１６７】
一方、この時点でＣＰＵ１１が診断ｅを実行中である。よって、上記のＣＰＵ１０と同様の理由で、ＣＰＵ００もステップＳ１１１で待機することになる。
その後ＣＰＵ１１が診断ｅを終了し、ステップＳ１０８でＣＰＵ１１は進捗管理テーブルのＣＰＵ１０とＣＰＵ１１の行の診断ｅの列のマスを「＋」と書き換え、ステップＳ１０１に戻る。時点４は、こうして進捗管理テーブルが書き換えられた時点である。【０１６８】
時点４において、ＣＰＵ００と１０と１１とが、待機中あるいはロックの獲得を試行中の状態である。図１２の例では、このうちＣＰＵ００が一番先にロックの獲得に成功したとする。ＣＰＵ００は、ステップＳ１０１でロックを獲得し、ステップＳ１０２で、クラス１の診断である診断ｇを見つける。そして、診断ｇよりも優先順位が高い診断ａ、ｂ、ｃ、ｄ、ｅの全ての列において、進捗管理テーブルの４行全てに「＋」と書かれていることから、処理はステップＳ１０６に進む。【０１６９】
ＣＰＵ００は、ステップＳ１０６で進捗管理テーブルの診断ｇの列の４行全てのマスに「−」と書き込み、ロックを解除し、ステップＳ１０７で診断ｇを実行する。
ロックが解除されると、次にＣＰＵ１０がステップＳ１０１でロックを獲得し、ステップＳ１０２で診断ｈを見つける。診断ｈはクラス３の診断であり、時点４では、進捗管理テーブルのＣＰＵ１０の行において、診断ｈよりも優先順位が高い診断ａ、ｂ、ｃ、ｄ、ｅの列のマスにはいずれも「＋」と書かれている。【０１７０】
よって、処理はステップＳ１０５からステップＳ１０６へ進む。ＣＰＵ１０はステップＳ１０６で進捗管理テーブルのＣＰＵ１０の行の診断ｈの列を「−」と書き換え、ロックを解除し、ステップＳ１０７で診断ｈを実行する。【０１７１】
ロックが解除されると、次にＣＰＵ１１がステップＳ１０１でロックを獲得し、ＣＰＵ１０と同様にして診断ｈを実行する。この時点で、進捗管理テーブルは図１３Ｄの状態となる。【０１７２】
図１２の例では、ＣＰＵ１０による診断ｈとＣＰＵ１１による診断ｈが、ＣＰＵ００による診断ｇとＣＰＵ０１による診断ｆのいずれよりも早く終了する。すると、ＣＰＵ１０はステップＳ１０８で進捗管理テーブルのＣＰＵ１０の行の診断ｈの列のマスを「＋」と書き換えてからステップＳ１０１に戻る。同様に、ＣＰＵ１１もステップＳ１０８で進捗管理テーブルのＣＰＵ１１の行の診断ｈの列のマスを「＋」と書き換えてからステップＳ１０１に戻る。【０１７３】
ＣＰＵ１０はステップＳ１０１でロックを獲得し、ステップＳ１０２で診断ｉを見つける。診断ｉはクラス３の診断であり、進捗管理テーブルのＣＰＵ１０の行において、診断ｉよりも優先順位が高い診断ａ、ｂ、ｃ、ｄ、ｅの列のマスにはいずれも「＋」と書かれている。【０１７４】
よって、処理はステップＳ１０５からステップＳ１０６へ進む。ＣＰＵ１０はステップＳ１０６で進捗管理テーブルのＣＰＵ１０の行の診断ｉの列を「−」と書き換え、ロックを解除し、ステップＳ１０７で診断ｉを実行する。【０１７５】
ロックが解除されると、次にＣＰＵ１１がステップＳ１０１でロックを獲得し、ＣＰＵ１０と同様にして診断ｉを実行する。
一方で、時点５では、ＣＰＵ００が、診断ｇを終了し、ステップＳ１０８で、進捗管理テーブルの４行全ての診断ｇの列のマスを「＋」に書き換える。そして、ＣＰＵ００はステップＳ１０１に戻ってロックを獲得し、ステップＳ１０２で診断ｈを見つける。診断ｈはクラス３の診断であり、時点５では、進捗管理テーブルのＣＰＵ００の行において、診断ｈよりも優先順位が高い診断ａ、ｂ、ｃ、ｄ、ｅの列のマスにはいずれも「＋」と書かれている。【０１７６】
よって、処理はステップＳ１０５からステップＳ１０６へ進む。ＣＰＵ００はステップＳ１０６で進捗管理テーブルのＣＰＵ００の行の診断ｈの列のマスを「−」と書き換え、ロックを解除し、ステップＳ１０７で診断ｈを実行する。それにより、進捗管理テーブルは、図１３Ｅの状態となる。【０１７７】
その後、ＣＰＵ１０とＣＰＵ１１がそれぞれ診断ｉを終了する。ＣＰＵ１０とＣＰＵ１１はそれぞれ、ステップＳ１０８で進捗管理テーブルのＣＰＵ１０とＣＰＵ１１の行の診断ｉの列のマスを「＋」と書き換えてからステップＳ１０１に戻る。【０１７８】
続いてＣＰＵ１０は、ステップＳ１０１でロックを獲得し、ステップＳ１０２で診断ｊを見つける。しかし、診断ｊよりも優先順位の高い診断のうち、クラス１の診断である診断ｆがまだＣＰＵ０１により実行されている最中である。【０１７９】
よって、処理はステップＳ１０５からステップＳ１０９に進む。ＣＰＵ１０において未診断の他の診断ｋ〜ｍも全て診断ｆより優先順位が低いため、結局ＣＰＵ１０はステップＳ１１１で待機し、待機後ステップＳ１０１へ戻る。【０１８０】
同様に、診断ｉを終了したＣＰＵ１１も、ステップＳ１１１で待機し、その後ステップＳ１０１へ戻る。
その後、ＣＰＵ００が、診断ｈを終了し、ステップＳ１０８で進捗管理テーブルのＣＰＵ００の行の診断ｈの列のマスを「＋」と書き換えてからステップＳ１０１に戻る。また、ＣＰＵ０１が診断ｆを終了し、ステップＳ１０８で進捗管理テーブルのＣＰＵ０１の行の診断ｆの列のマスを「＋」と書き換えてからステップＳ１０１に戻る。【０１８１】
こうして、時点６においては、４つのＣＰＵがいずれもステップＳ１０１でロックを獲得しようとしている。例えば、ＣＰＵ００が最初にロックの獲得に成功したとすると、ＣＰＵ００はステップＳ１０２で診断ｉを見つける。【０１８２】
診断ｉはクラス３の診断であり、進捗管理テーブルのＣＰＵ００の行において、診断ｉよりも優先順位が高い全ての診断の列のマスには、時点６で「＋」と書かれている。よって、ＣＰＵ００はステップＳ１０６で、進捗管理テーブルのＣＰＵ００の行の診断ｉの列のマスを「−」と書き換え、ロックを解除して、ステップＳ１０７で診断ｉを実行する。【０１８３】
ロックが解除されると、続いてＣＰＵ０１がロックを獲得し、ステップＳ１０２で診断ｈを見つける。診断ｈはクラス３の診断であり、進捗管理テーブルのＣＰＵ０１の行において、診断ｈよりも優先順位が高い全ての診断の列のマスには、時点６で「＋」と書かれている。よって、ＣＰＵ０１はステップＳ１０６で、進捗管理テーブルのＣＰＵ０１の行の診断ｈの列のマスを「−」と書き換え、ロックを解除して、ステップＳ１０７で診断ｈを実行する。【０１８４】
ロックが解除されると、続いてＣＰＵ１０がロックを獲得し、ステップＳ１０２で診断ｊを見つける。診断ｊはクラス３の診断であり、進捗管理テーブルのＣＰＵ１０の行において、診断ｊよりも優先順位が高い全ての診断の列のマスには、時点６で「＋」と書かれている。よって、ＣＰＵ１０はステップＳ１０６で、進捗管理テーブルのＣＰＵ１０の行の診断ｊの列のマスを「−」と書き換え、ロックを解除して、ステップＳ１０７で診断ｊを実行する。【０１８５】
ロックが解除されると、続いてＣＰＵ１１がロックを獲得し、ＣＰＵ１０と同様にして診断ｊを実行する。以上により、進捗管理テーブルは図１３Ｆの状態となる。
続いて、ＣＰＵ００が診断ｉを終了し、ステップＳ１０８で、進捗管理テーブルのＣＰＵ００の行の診断ｉの列のマスを「＋」と書き換え、ステップＳ１０１に戻る。また、ＣＰＵ０１が診断ｈを終了し、ステップＳ１０８で、進捗管理テーブルのＣＰＵ０１の行の診断ｈの列のマスを「＋」と書き換え、ステップＳ１０１に戻る。【０１８６】
さらに、ＣＰＵ１０とＣＰＵ１１がそれぞれ、診断ｊを終了し、ステップＳ１０８で、進捗管理テーブルのＣＰＵ１０とＣＰＵ１１の行の診断ｊの列のマスを「＋」と書き換え、ステップＳ１０１に戻る。この時点が時点７である。【０１８７】
時点７では、例えば最初にＣＰＵ００がロックを獲得し、ステップＳ１０２で診断ｊを見つけ、ステップＳ１０５からステップＳ１０６へ進む。そしてＣＰＵ００は、進捗管理テーブルのＣＰＵ００の行の診断ｊの列のマスを「−」と書き換え、ロックを解除して、ステップＳ１０７で診断ｊを実行する。【０１８８】
ロックが解除されると、次にＣＰＵ０１がロックを獲得し、ステップＳ１０２で診断ｉを見つけ、ステップＳ１０５からステップＳ１０６へ進む。そしてＣＰＵ０１は、進捗管理テーブルのＣＰＵ０１の行の診断ｉの列のマスを「−」と書き換え、ロックを解除して、ステップＳ１０７で診断ｉを実行する。【０１８９】
ロックが解除されると、次にＣＰＵ１０がロックを獲得し、ステップＳ１０２で診断ｋを見つける。診断ｋはクラス１の診断であり、進捗管理テーブルにおいて４行全ての、診断ｋより優先順位が高い診断ａ〜ｈの列のマスには、いずれも時点７で「＋」と書かれている。【０１９０】
よって、処理はステップＳ１０５からステップＳ１０６へ進む。ＣＰＵ１０はステップＳ１０６で、進捗管理テーブルの４行全ての診断ｋの列のマスを「−」と書き換え、ロックを解除して、ステップＳ１０７で診断ｋを実行する。【０１９１】
ロックが解除されると、次にＣＰＵ１１がロックを獲得し、ステップＳ１０２で診断ｌを見つける。診断ｌはクラス２の診断であり、クラス２においてＣＰＵ１１と同じグループＧ２１に属するのは、ＳＢ１に実装されたＣＰＵ１０と１１である。進捗管理テーブルにおいて、ＣＰＵ１０と１１の２行の、診断ｌより優先順位が高い全ての診断の列のマスには、いずれも時点７で「＋」と書かれている。【０１９２】
よって、処理はステップＳ１０５からステップＳ１０６へ進む。ＣＰＵ１１はステップＳ１０６で、進捗管理テーブルのＣＰＵ１０とＣＰＵ１１の２行の診断ｌの列のマスを「−」と書き換え、ロックを解除して、ステップＳ１０７で診断ｌを実行する。以上により、進捗管理テーブルは図１３Ｇの状態となる。【０１９３】
そして、時点８の各ＣＰＵは次のような状態である。ＣＰＵ００は、診断ｊを終了し、ステップＳ１０８で、進捗管理テーブルのＣＰＵ００の行の診断ｊの列のマスを「＋」と書き換え、ステップＳ１０１に戻っている。ＣＰＵ０１は、診断ｉを終了し、ステップＳ１０８で、進捗管理テーブルのＣＰＵ０１の行の診断ｉの列のマスを「＋」と書き換え、ステップＳ１０１に戻っている。ＣＰＵ１０は診断ｋを実行中である。ＣＰＵ１１は、診断ｌを終了し、ステップＳ１０８で、進捗管理テーブルのＣＰＵ１０とＣＰＵ１１の行の診断ｌの列のマスを「＋」と書き換え、ステップＳ１０１に戻っている。【０１９４】
図１２の例では、時点８においてロックの獲得を試みているＣＰＵ００、０１、１１のうち、最初にＣＰＵ００が獲得に成功したとする。ＣＰＵ００は、ステップＳ１０１でロックを獲得すると、ステップＳ１０２で診断ｌを見つける。診断ｌはクラス２の診断であり、進捗管理テーブルのＣＰＵ００と０１の行の、診断ｌよりも優先順位の高い全ての診断の列のマスには、時点８で「＋」と書かれている。【０１９５】
よって、処理はステップＳ１０５からステップＳ１０６へ進む。そして、ＣＰＵ００はステップＳ１０６で、進捗管理テーブルのＣＰＵ００と０１の２行の診断ｌの列のマスを「−」と書き換え、ロックを解除して、ステップＳ１０７で診断ｌを実行する。【０１９６】
ロックが解除されると、次にＣＰＵ０１がステップＳ１０１でロックを獲得し、ステップＳ１０２で診断ｊを見つけ、ステップＳ１０５からステップＳ１０６へ進む。ＣＰＵ０１はステップＳ１０６で、進捗管理テーブルのＣＰＵ０１の行の診断ｊの列のマスを「−」と書き換え、ロックを解除して、ステップＳ１０７で診断ｊを実行する。【０１９７】
ロックが解除されると、次にＣＰＵ１１がステップＳ１０１でロックを獲得し、ステップＳ１０２で診断ｍを見つける。診断ｍはクラス３の診断であり、時点８において、進捗管理テーブルのＣＰＵ１１の行の、診断ｍよりも優先順位の高い全ての診断の列のマスにはいずれも「＋」と書かれている。よって、処理はステップＳ１０５からステップＳ１０６へ進む。【０１９８】
ＣＰＵ１１はステップＳ１０６で、進捗管理テーブルのＣＰＵ１１の行の診断ｍの列のマスを「−」と書き換え、ロックを解除して、ステップＳ１０７で診断ｍを実行する。以上により、進捗管理テーブルは図１３Ｈの状態となる。【０１９９】
その後、ＣＰＵ１０が、診断ｋを終了し、ステップＳ１０８で進捗管理テーブルの全ての行の診断ｋの列のマスを「＋」と書き換え、ステップＳ１０１に戻る。そして、ＣＰＵ１０は、ステップＳ１０１でロックを獲得し、ステップＳ１０２で診断ｍを見つけ、ステップＳ１０５からステップＳ１０６に進む。【０２００】
ＣＰＵ１０は、ステップＳ１０６で進捗管理テーブルのＣＰＵ１０の行の診断ｍの列のマスを「−」と書き換え、ロックを解除し、ステップＳ１０７で診断ｍを実行する。
続いて、ＣＰＵ１１が診断ｍを終了し、ステップＳ１０８で、進捗管理テーブルのＣＰＵ１１の行の診断ｍの列のマスを「＋」と書き換え、ステップＳ１０１に戻り、ロックを獲得する。ＣＰＵ１１は、ステップＳ１０２において未診断の項目を探索するが、未診断の項目はもう残っていない。よって、ステップＳ１０３でＣＰＵ１１は、未診断の項目がないと判断し、図８の処理を終了する。【０２０１】
また、ＣＰＵ００は診断ｌを終了し、ＣＰＵ０１は診断ｊを終了する。すると、ＣＰＵ００は、ステップＳ１０８で進捗管理テーブルのＣＰＵ００と０１の行の診断ｌの列のマスをともに「＋」と書き換え、ステップＳ１０１に戻る。また、ＣＰＵ０１は、ステップＳ１０８で進捗管理テーブルのＣＰＵ０１の行の診断ｊの列のマスを「＋」と書き換え、ステップＳ１０１に戻る。【０２０２】
すると、ＣＰＵ００はステップＳ１０１でロックを獲得し、ステップＳ１０２で診断ｍを見つけ、ステップＳ１０５からステップＳ１０６へ進んで、進捗管理テーブルのＣＰＵ００の行の診断ｍの列のマスを「−」と書き換え、ロックを解除する。そして、ＣＰＵ００はステップＳ１０７で診断ｍを実行する。ロックが解除されると、ＣＰＵ０１がロックを獲得し、同様にして診断ｍを実行する。【０２０３】
その後、ＣＰＵ１０、００、０１が順次診断ｍを終了し、ＣＰＵ１１と同様にしてそれぞれ図８の処理を終了する。
以上、図１２〜図１３Ｈの具体例について説明したが、図１２に示すとおり、本実施形態では、各ＣＰＵがそれぞれ自ＣＰＵに割り当てた診断を同時に並行して実行していく。よって、従来の方法を示す図３と、本実施形態による図１２とを比較すると、図１２では無駄な待ち時間が少なくなっていることが分かる。【０２０４】
すなわち、図３に示した従来の方法では、一つのＣＰＵ００が診断ａ〜ｍを全て処理していたが、図１２の例では診断ｄ、ｆ、ｋを他のＣＰＵであるＣＰＵ０１、ＣＰＵ１０又はＣＰＵ１１が実行している。図１２に例示したように、本実施形態によれば、状況に応じて診断が割り当てられるため、無駄な待機時間が減り、総診断時間は図３の従来の方法より短くなっている。【０２０５】
なお、本発明は上記の実施形態に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
上記実施形態では、ＤＩＭＭなどのＳＢごとに備えられたハードウェア資源を対象とする診断をクラス２の診断の例として挙げており、各ＳＢにおいて当該ＳＢ上の１つのＣＰＵが当該ＳＢ上のハードウェア資源を対象としたクラス２の診断を行うことを仮定していた。しかし、実施形態によって装置のハードウェア構成は異なるため、診断対象のハードウェア資源が実装されているＳＢと、診断を実行するＣＰＵが実装されているＳＢとが、異なっていても診断を実行することが可能な場合がある。【０２０６】
その場合、ＳＢごとに備えられたハードウェア資源を対象とする診断を、クラス２の１つの診断ではなく、クラス１の複数の診断として定義することにより、さらに診断の並列化を進め、総診断時間を短縮することができる。例えば、ＳＢごとに備えられたＤＩＭＭをそれぞれ対象とする“メモリ診断”というクラス２の１つの診断のかわりに、ＳＢ０が備えるＤＩＭＭ０２を対象とする“ＳＢ０のメモリ診断”と、ＳＢ１が備えるＤＩＭＭ１２を対象とする“ＳＢ１のメモリ診断”というクラス１の２つの診断を定義することができる。【０２０７】
このように診断を定義することによって、例えば、ＳＢ０にはＣＰＵ００という１つのＣＰＵしかなく、ＣＰＵ００が現在他の診断を実行中である場合でも、ＳＢ０以外のＳＢ上のアイドル状態のＣＰＵが、ＳＢ０のメモリ診断を行うことが可能となる。その結果、待機時間が減り、総診断時間を短縮することができる。【０２０８】
また、上記のようにして、ＳＢごとに備えられたハードウェア資源を対象とする診断をクラス１の診断として定義することにより、ＣＰＵが実装されていないＳＢが存在するような装置に対しても、本発明を適用することができる。【０２０９】
なお、上記実施形態では、クラス１〜３という３つのクラスが定義されているが、クラスの数は２以上であれば任意である。ハードウェア構成や、診断の種類等に応じて、適宜クラスの数を決めることができる。例えば、１枚のＳＢのみからなるコンピュータに対しては、各ＣＰＵに対するクラスと、コンピュータ全体（すなわちＳＢ全体）に対応するクラスの２つのクラスのみを定義することが適切である。【０２１０】
また、上記実施形態では、最下層のクラス３は各ＣＰＵに対応する。しかし、複数のコアを有するマルチコアプロセッサを実装した機器におけるＰＯＳＴでは、コアごとに行うべき診断も存在する。よって、例えば複数のマルチコアプロセッサを実装したＳＢを２枚以上含むサーバ装置においては、下から順に、１つのコア、１つのマルチコアプロセッサ（すなわち１つのＣＰＵ）、１枚のＳＢ、サーバ装置全体（すなわち１つのドメイン）にそれぞれ対応する４つのクラスを定義してもよい。【０２１１】
あるいは、複数のコンピュータをクラスタ化して運用する場合、最上層のクラスがクラスタ全体に対応するクラスとして定義されていてもよい。
また、上記実施形態では、各ＣＰＵが並行して図８の処理をそれぞれ実行している。すなわち、各ＣＰＵは、自ＣＰＵへの診断の割り当てを行うとともに、診断も実行している。しかし、例えば図１のサーバ装置がＳＢ０とＳＢ１のほかにさらに不図示の１つの制御部を備え、その制御部がＣＰＵ００〜ＣＰＵ１１それぞれへの診断の割り当てを行うように、上記実施形態を変形することもできる。この変形例では、制御部は診断を行わず、ＣＰＵ００〜ＣＰＵ１１は割り当てられた診断のみを行うので、ロックの獲得や解除が不要である。【０２１２】
なお、図１にはサーバ装置３０のハードウェア構成を例示したが、本発明の適用対象は、サーバ装置３０やクライアント用のパーソナルコンピュータ（ＰＣ）に限らない。例えば、マルチプロセッサを搭載したルータ装置にも本発明を適用することができる。例えば、ルータに搭載された個々のプロセッサが、図４の割り当て装置１００および診断部１１１として機能する。【０２１３】
また、上記実施形態では、同内容のグループ分けテーブルがＳＲＡＭ０５とＳＲＡＭ１５にそれぞれ格納され、同内容の優先順位テーブルがＲＯＭ０６と１６にそれぞれ格納され、進捗管理テーブルはＳＲＡＭ０５と１５に分散されて格納されている。しかし、これらのテーブルの格納場所は例示にすぎない。【０２１４】
各ＳＢ内にグループ分けテーブルや優先順位テーブルがそれぞれ格納されていなくてもよく、進捗管理テーブルが分散されていなくてもよい。
さらに、図５〜図７にはグループ分けテーブル、優先順位テーブル、および進捗管理テーブルの例を示したが、テーブル形式以外のデータ構造によって、グループ分け情報１０１、優先順位情報１０２、クラス情報１０３、および進捗情報１０４を表現してもよい。優先順位テーブルと進捗管理テーブルで使った記号も例示にすぎない。【０２１５】
例えば、図６の優先順位テーブルでは、「×」または「空白」によって優先順位を示している。しかし、図６のうち「×」と書かれたマスに相当するデータのみを優先順位情報１０２として記憶し、データが存在しないことをもって図６のうち「空白」のマスに相当する内容を表すことも可能である。【０２１６】
また、図５〜図７の各テーブルにおける項目の並び順も任意である。これらのテーブルにおける項目の並び順によらず適切な割り当てが可能であることは、図８〜図１１の説明から明らかである。【０２１７】
なお、上記実施形態ではＰＯＳＴを例として説明したが、ＰＯＳＴ以外の診断処理に対して本発明を適用することも可能である。
【図１】
2009050764.tif 000003
【図２】
2009050764.tif 000004
【図３】
2009050764.tif 000005
【図４】
2009050764.tif 000006
【図５】
2009050764.tif 000007
【図６】
2009050764.tif 000008
【図７】
2009050764.tif 000009
【図８】
2009050764.tif 000010
【図９】
2009050764.tif 000011
【図１０】
2009050764.tif 000012
【図１１】
2009050764.tif 000013
【図１２】
2009050764.tif 000014
【図１３Ａ】
2009050764.tif 000015
【図１３Ｂ】
2009050764.tif 000016
【図１３Ｃ】
2009050764.tif 000017
【図１３Ｄ】
2009050764.tif 000018
【図１３Ｅ】
2009050764.tif 000019
【図１３Ｆ】
2009050764.tif 000020
【図１３Ｇ】
2009050764.tif 000021
【図１３Ｈ】
2009050764.tif 000022
【手続補正書】
【提出日】平成21年12月21日(2009.12.21)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
記憶部と複数の診断処理部を有し、複数の診断処理の各々を前記複数の診断処理部のいずれかに実行させることにより自己診断処理を行う情報処理装置において、
前記複数の診断処理間の依存関係に基づく実行順序の優先順位を表す優先順位情報を、前記記憶部から読み出す優先順位情報読み出し部と、
前記診断処理を実行すべき診断処理部の範囲を前記診断処理毎に表すクラス情報を、前記記憶部から読み出すクラス情報読み出し部と、
前記複数の診断処理のうち、完了した診断処理と未完了の診断処理の情報を表す進捗情報を、前記記憶部から読み出す進捗情報読み出し部と、
未実行の診断処理を、前記優先順位情報と前記クラス情報と前記進捗情報に基づいて、前記複数の診断処理部のいずれかに割り当てるとともに、前記進捗情報を書き換える割り当て部を有することを特徴とする情報処理装置。
【請求項２】
前記割り当て部は、複数の前記未実行の診断処理を、前記複数の診断処理部に同時に割り当てることを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記進捗情報は、前記複数の診断処理のうち、完了した診断処理と実行中の診断処理と未実行の診断処理の情報を表し、
前記割り当て部は、前記診断処理部が割り当てられた診断処理を実行中である場合に、前記割り当てられた診断処理が実行中であるとして前記進捗情報を書き換えることを特徴とする請求項１記載の情報処理装置。
【請求項４】
前記情報処理装置は、さらに、
前記クラス情報毎に、前記診断処理部が属するグループを表すとともに、全ての前記診断処理部が属する最上位のグループと１つの診断処理部のみが属する複数の最下位のグループを有するグループ分け情報を、前記記憶部から読み出すグループ分け情報読み出し部を有し、
前記割り当て部は、前記未実行の診断処理を、前記優先順位情報と前記クラス情報と前記グループ分け情報に基づいて、前記複数の診断処理部のいずれかに割り当てることを特徴とする請求項１記載の情報処理装置。
【請求項５】
記憶部と複数の診断処理部を有し、複数の診断処理の各々を前記複数の診断処理部のいずれかに実行させる情報処理装置の自己診断処理方法において、
優先順位情報読み出し部が、前記複数の診断処理間の依存関係に基づく実行順序の優先順位を表す優先順位情報を、前記記憶部から読み出すステップと、
クラス情報読み出し部が、前記診断処理を実行すべき診断処理部の範囲を前記診断処理毎に表すクラス情報を、前記記憶部から読み出すステップと、
進捗情報読み出し部が、前記複数の診断処理のうち、完了した診断処理と未完了の診断処理の情報を表す進捗情報を、前記記憶部から読み出すステップと、
割り当て部が、未実行の診断処理を、前記優先順位情報と前記クラス情報と前記進捗情報に基づいて、前記複数の診断処理部のいずれかに割り当てるとともに、前記進捗情報を書き換えるステップを有することを特徴とする自己診断処理方法。
【請求項６】
前記割り当て部は、複数の前記未実行の診断処理を、前記複数の診断処理部に同時に割り当てることを特徴とする請求項５記載の自己診断処理方法。
【請求項７】
記憶部と複数の診断処理部を有し、複数の診断処理の各々を前記複数の診断処理部のいずれかに実行させる情報処理装置の自己診断処理プログラムにおいて、
前記情報処理装置に、
優先順位情報読み出し部が、前記複数の診断処理間の依存関係に基づく実行順序の優先順位を表す優先順位情報を、前記記憶部から読み出すステップと、
クラス情報読み出し部が、前記診断処理を実行すべき診断処理部の範囲を前記診断処理毎に表すクラス情報を、前記記憶部から読み出すステップと、
進捗情報読み出し部が、前記複数の診断処理のうち、完了した診断処理と未完了の診断処理の情報を表す進捗情報を、前記記憶部から読み出すステップと、
割り当て部が、未実行の診断処理を、前記優先順位情報と前記クラス情報と前記進捗情報に基づいて、前記複数の診断処理部のいずれかに割り当てるとともに、前記進捗情報を書き換えるステップを実行させることを特徴とする自己診断処理プログラム。
【請求項８】
前記割り当て部は、複数の前記未実行の診断処理を、前記複数の診断処理部に同時に割り当てることを特徴とする請求項７記載の自己診断処理プログラム。
【国際調査報告】
2009050764.tif 000023
2009050764.tif 000024
2009050764.tif 000025
2009050764.tif 000026