(57)【特許請求の範囲】
【請求項１】
複数のタスクを並列に実行することが可能な情報処理装置に、
前記複数のタスクに、前記複数のタスクによって共有される領域への排他的なアクセス権を獲得させ、
前記複数のタスクが第１の記憶領域から前記排他的なアクセス権の成功数をそれぞれ読み出した後に、所定の時間がそれぞれ経過したタイミングで、前記複数のタスクに前記アクセス権の獲得の成功数に応じて、前記第１の記憶領域に記憶されている成功数を更新させ、
前記アクセス権を獲得したタスクに、タスクごとに前記アクセス権の獲得の成功数を記憶可能な第２の記憶領域に、前記アクセス権の獲得の成功数を記憶させ、
前記第１の記憶領域に記憶されている成功数と前記第２の記憶領域に記憶されているタスクごとの成功数の合計とを比較する
処理を実行させる情報処理装置の制御プログラム。
【請求項２】
前記情報処理装置に、
前記排他的なアクセス権の獲得に失敗したタスクの数を算出させ、
前記算出したタスク数が閾値未満である間に前記アクセス権の獲得に失敗したタスクには、前記アクセス権の獲得を再度実行させ、
前記算出したタスク数が前記閾値以上となった後に前記アクセス権の獲得に失敗したタスクには、前記アクセス権の獲得をスキップさせる
処理を実行させる請求項１に記載の情報処理装置の制御プログラム。
【請求項３】
前記情報処理装置に、
前記算出したタスク数が前記閾値以上となった場合に、前記アクセス権の獲得に成功したタスクに前記アクセス権を解放させる
処理を実行させる請求項２に記載の情報処理装置の制御プログラム。
【請求項４】
前記複数のタスクのうち第１のタスクおよび第２のタスクが略同じタイミングで前記アクセス権を獲得した場合に、前記第１のタスクが前記第１の記憶領域から成功数を読み出してから前記更新した成功数を前記第１の記憶領域に書き戻すまでの間に、前記第２のタ
スクが前記第１の記憶領域から成功数を読み出す、請求項１から３のいずれか１項に記載の情報処理装置の制御プログラム。
【請求項５】
前記情報処理装置に、
前記複数のタスクに、前記排他的なアクセス権の獲得を含む複数の処理を実行させ、
前記算出したタスク数が前記閾値未満であり、かつ前記複数の処理を実行中であるタスクの数が前記閾値未満である場合に、前記閾値を前記算出したタスク数に一致させる
処理を実行させる請求項２または３に記載の情報処理装置の制御プログラム。
【請求項６】
複数のタスクを並列に実行することが可能な情報処理装置の制御方法であって、
前記複数のタスクに、前記複数のタスクによって共有される領域への排他的なアクセス権を獲得させ、
前記複数のタスクが第１の記憶領域から前記排他的なアクセス権の成功数をそれぞれ読み出した後に、所定の時間がそれぞれ経過したタイミングで、前記複数のタスクに前記アクセス権の獲得の成功数に応じて、前記第１の記憶領域に記憶されている成功数を更新させ、
前記アクセス権を獲得したタスクに、タスクごとに前記アクセス権の獲得の成功数を記憶可能な第２の記憶領域に、前記アクセス権の獲得の成功数を記憶させ、
前記第１の記憶領域に記憶されている成功数と前記第２の記憶領域に記憶されているタスクごとの成功数の合計とを比較する
情報処理装置の制御方法。
【請求項７】
複数のタスクを並列に実行することが可能な情報処理装置であって、
前記複数のタスクに、前記複数のタスクによって共有される領域への排他的なアクセス権を獲得させる制御部と、
前記複数のタスクが前記排他的なアクセス権の成功数をそれぞれ読み出した後に、所定の時間がそれぞれ経過したタイミングで、前記複数のタスクが前記アクセス権の獲得の成功数に応じて、記憶されている成功数を更新する第１の記憶部と、
前記複数のタスクのタスクごとに前記アクセス権の獲得の成功数を記憶可能な第２の記憶部と、
前記第１の記憶部に記憶されている成功数と前記第２の記憶部に記憶されているタスクごとの成功数の合計とを比較する比較部と
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本件開示の技術は、排他処理を実行する情報処理装置、情報処理装置の制御方法および制御プログラムに関する。
【背景技術】
【０００２】
従来から、コンピュータのランニング試験が行われている。ランニング試験とは、コンピュータにおいて複数のタスクを用いて様々な試験処理を並列に実行させるものを含む。また、ランニング試験では、１つのタスクによって複数の異なる試験処理が任意の組み合わせで実行される。さらに、ランニング試験では、例えば、所定のタイミングで各タスク間の同期が取られた後、各タスクによって排他処理が実行される。この排他処理は、各タスクが共有領域へのアクセス権を排他的に獲得し、アクセス権を獲得できた場合に所定の処理を実行する試験処理である（例えば、特許文献１〜３）。
【０００３】
ランニング試験における排他処理が正常に実行されたか否かを判断する方法として、コンピュータが、同期後に各タスクに、アクセス権を獲得できるまで一定の時間間隔でアクセス権の獲得を繰り返し実行させるものがある。そして、各タスクは、アクセス権を獲得した後に所定の処理を実行してから次の試験処理に進む。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００１−１５４８７２号公報
【特許文献２】特開平３−１３７７３３号公報
【特許文献３】特開２０１２−９９０３５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記の排他処理においては、アクセス権を獲得して所定の処理を実行したタスクが、順次、次の試験処理の実行に移行する。このため、アクセス権を獲得する順番が後になるタスクほど、排他的にアクセス権を獲得する処理における他のタスクとの競合数が少なくなっていく。また、各タスクは、一定の時間間隔でアクセス権の獲得を繰り返し実行する。このため、タスクがアクセス権を獲得できるまでの待ち時間が発生する。すなわち、排他処理を実行するタスク数が多くなるほど、アクセス権を獲得できないタスクの待ち時間は長くなる。
【０００６】
ランニング試験は、キャッシュメモリやバスなどのハードウェアリソースの競合を意図的に発生させて、ハードウェアを高負荷の状態にすることを目的の１つとする。したがって、上記のようにランニング試験におけるタスク間の排他処理の競合数が少なくなったり、タスクにおけるアクセス権獲得までの待ち時間が長くなったりすると、ハードウェアを所望の高負荷の状態にすることができない可能性がある。この結果、ランニング試験において様々なハードウェア状態下における排他処理の妥当性を評価できない可能性がある。
【０００７】
本件開示の技術は、上記の事情に鑑み、排他処理の妥当性を評価できる情報処理装置の制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本件開示の情報処理装置の制御プログラムは、１つの側面では、複数のタスクを並列に実行することが可能な情報処理装置に、複数のタスクに、複数のタスクによって共有され
る領域への排他的なアクセス権を獲得させ、アクセス権を獲得したタスクに、複数のタスクが並列に更新可能な第１の記憶領域に、アクセス権の獲得の成功数を記憶させ、アクセス権を獲得したタスクに、タスクごとにアクセス権の獲得の成功数を記憶可能な第２の記憶領域に、アクセス権の獲得の成功数を記憶させ、第１の記憶領域に記憶されている成功数と第２の記憶領域に記憶されているタスクごとの成功数の合計とを比較する処理を実行させる情報処理装置の制御プログラムである。
【発明の効果】
【０００９】
本件開示の技術によれば、排他処理の妥当性を評価できる情報処理装置の制御プログラムを提供することができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、一実施形態における情報処理装置の構成を示す概略構成図である。
【図２】図２は、一実施形態における情報処理装置の排他制御領域の構成を示す概略構成図である。
【図３】図３は、一実施形態における情報処理装置の失敗情報記憶領域の構成を示す概略構成図である。
【図４】図４は、一実施形態における情報処理装置の累積成功数記憶領域の構成を示す概略構成図である。
【図５】図５は、一実施形態における情報処理装置のタスク別成功数記憶領域の構成を示す概略構成図である。
【図６】図６は、一実施形態における情報処理装置のリトライフラグの構成を示す概略構成図である。
【図７】図７は、一実施形態における情報処理装置の機能ブロック図である。
【図８Ａ】図８Ａは、情報処理装置においてタスクが実行する処理のタイミングの一例を示す図である。
【図８Ｂ】図８Ｂは、一実施形態に係る情報処理装置においてタスクが実行する処理のタイミングの一例を示す図である。
【図９】図９は、一実施形態において情報処理装置が実行する処理のフローチャートである。
【図１０】図１０は、一実施形態において情報処理装置が実行する処理のフローチャートである。
【図１１】図１１は、一実施形態におけるタスクの試験処理の流れを示す図である。
【図１２】図１２は、一実施形態において情報処理装置が実行する処理のフローチャートである。
【図１３】図１３は、一実施形態において情報処理装置が実行する処理のフローチャートである。
【図１４】図１４は、一実施形態における情報処理装置の失敗情報記憶領域の構成を示す概略構成図である。
【図１５】図１５は、一実施形態における情報処理装置のタスク別成功数記憶領域の構成を示す概略構成図である。
【図１６】図１６は、一実施形態において情報処理装置が実行する処理のフローチャートである。
【図１７】図１７は、一実施形態において情報処理装置が実行する処理のフローチャートである。
【図１８】図１８は、一実施形態における情報処理装置の排他制御領域の構成を示す概略構成図である。
【発明を実施するための形態】
【００１１】
以下、本件開示の技術に係る実施形態について図面を参照しながら説明する。なお、以
下の詳細な説明は例示的なものであり、実施形態の構成を限定するものではない。
【００１２】
（第１の実施形態）
第１の実施形態における情報処理装置１００について説明する。図１の概略構成図に示すように、本実施形態に係る情報処理装置１００は、ｍ個（ｍは自然数）のプロセッサ＃１  １０１ａ〜＃ｍ  １０１ｄ、メモリ領域１０２を備える。また、メモリ領域１０２は、試験プログラム領域１０３、排他制御領域１０４、失敗情報記憶領域１０５、累積成功数記憶領域１０６、タスク別成功数記憶領域１０７、リトライフラグ１０８を備える。
【００１３】
メモリ領域１０２には、ランニング試験において実行される試験処理のプログラムがあらかじめ記述されたｎ個（ｎは自然数）のタスク＃１  １０３ａ〜＃ｎ  １０３ｄが格納されている。また、メモリ領域１０２には、タスク制御部１０３ｅも格納されている。タスク制御部１０３ｅは、各タスクによって使用されるメモリ領域の確保、当該メモリ領域の初期化、ランニング試験で使用される各種設定など、タスクによって実行される処理に係る制御を行う。
【００１４】
図１に示すように、各タスクによって使用されるメモリ領域は、排他制御領域１０４、失敗情報記憶領域１０５、累積成功数記憶領域１０６、タスク別成功数記憶領域１０７を含む。排他制御領域１０４は、各タスクが排他処理において排他的なアクセス権の獲得を行うための共有領域である。失敗情報記憶領域１０５は、タスクが排他制御領域１０４に対する排他的なアクセス権の獲得に失敗したときに、アクセス権を獲得できなかったことを記憶するための領域である。累積成功数記憶領域１０６は、タスクが排他制御領域１０４に対する排他的なアクセス権の獲得に成功したときに、タスク全体としてのアクセス権獲得の成功数を累積して記憶するための領域である。タスク別成功数記憶領域１０７は、タスクが排他制御領域１０４に対する排他的なアクセス権の獲得に成功したときに、タスクごとにアクセス権獲得の成功数を記憶するための領域である。リトライフラグ１０８は、タスクがアクセス権の獲得を再度行うか否かを確認するためのフラグである。
【００１５】
本実施形態においてタスクが排他制御領域１０４、失敗情報記憶領域１０５、累積成功数記憶領域１０６、タスク別成功数記憶領域１０７の各領域に対して行う処理について以下に説明する。なお、以下の説明において、図ではｎ個のタスクをタスク＃１  １０３ａ、タスク＃２  １０３ｂ、タスク＃３  １０３ｃの３つのタスクに代表させる。
【００１６】
図２に、タスクが排他制御領域１０４に対して排他的にアクセス権を獲得する際の各タスクと排他制御領域１０４との関係を示す。なお、図２では、タスク＃１  １０３ａ、タスク＃２  １０３ｂ、タスク＃３  １０３ｃが、略同じタイミングで排他制御領域１０４に対して排他的なアクセス権の獲得を試みることを想定する。また、タスク＃１  １０３ａ〜タスク＃３  １０３ｃは、いわゆるアトミック命令により、排他制御領域１０４のアクセス権獲得フラグ１０４ａに対する処理を行う。ここで、アトミック命令とは、複数のタスクから命令が実行されても、個々の命令が１つずつ順番に実行されることが保障されている命令である。なお、あらかじめ排他制御領域１０４のアクセス権獲得フラグ１０４ａには、初期値「００」、すなわちアクセス権を獲得したタスクが存在しないことを意味する値が設定されている。
【００１７】
タスク＃１  １０３ａ、タスク＃２  １０３ｂ、タスク＃３  １０３ｃが、排他制御領域１０４に対して排他的なアクセス権の獲得を試みる場合、いずれか１つのタスクから順番にアクセス権の獲得処理が実行される。各タスクは、アトミック命令により、アクセス権獲得フラグ１０４ａに対して値の読み出しと値「ＦＦ」の書き込みを１つの命令で実行する、いわゆるread-and-writeを実行する。そして、各タスクは、読み出した値が「００」である場合にアクセス権を獲得できたと判断する。また、読み出した値が「ＦＦ」であ
ることは、既に他のタスクによって値「ＦＦ」が書き込まれたことを意味する。したがって、各タスクは、読み出した値が「ＦＦ」である、すなわち「００」でない場合にアクセス権の獲得に失敗したと判断する。
【００１８】
図３に、タスクが上記のアクセス権の獲得に失敗した場合の各タスクと失敗情報記憶領域１０５との関係を示す。なお、あらかじめ失敗情報記憶領域１０５のアクセス権獲得失敗フラグ１０５ａには、初期値「０」、すなわちアクセス権の獲得に失敗したタスクが存在しないことを意味する値が設定されている。
【００１９】
タスク＃１  １０３ａ、タスク＃２  １０３ｂ、タスク＃３  １０３ｃは、排他制御領域１０４に対する排他的なアクセス権の獲得に失敗した場合、失敗情報記憶領域１０５のアクセス権獲得失敗フラグ１０５ａに値「１」を書き込む。アクセス権獲得失敗フラグ１０５ａに値「１」が書き込まれることで、アクセス権の獲得に失敗したタスクが存在することが示される。
【００２０】
図４に、タスクが上記のアクセス権の獲得に成功した場合の各タスクと累積成功数記憶領域１０６との関係を示す。なお、あらかじめ累積成功数記憶領域１０６のアクセス権獲得数記憶領域１０６ａには、初期値「０」、すなわちタスク全体でのアクセス権の獲得成功数が０であることを意味する値が設定されている。
【００２１】
タスク＃１  １０３ａ、タスク＃２  １０３ｂ、タスク＃３  １０３ｃは、排他制御領域１０４に対する排他的なアクセス権の獲得に成功した場合、累積成功数記憶領域１０６のアクセス権獲得数記憶領域１０６ａから値を読み出す。次いで、タスク＃１  １０３ａ、タスク＃２  １０３ｂ、タスク＃３  １０３ｃは、読み出した値に１を加算する。さらに、タスク＃１  １０３ａ、タスク＃２  １０３ｂ、タスク＃３  １０３ｃは、加算した値をアクセス権獲得数記憶領域１０６ａに書き戻す。この結果、アクセス権獲得数記憶領域１０６ａに記憶されていた値がタスクによって１だけ加算されて更新される。そして、各タスクがアクセス権獲得数記憶領域１０６ａの値を更新することにより、タスク全体としてのアクセス権獲得の成功数を累積することができる。
【００２２】
図５に、タスクが上記のアクセス権の獲得に成功した場合の各タスクとタスク別成功数記憶領域１０７との関係を示す。タスク別成功数記憶領域１０７には、タスク＃１用領域１０７ａ、タスク＃１用領域１０７ｂ、タスク＃２用領域１０７ｃによって例示されるように、成功数を記憶するための領域がタスクごとに設けられている。なお、あらかじめタスク＃１用領域１０７ａ、タスク＃１用領域１０７ｂ、タスク＃２用領域１０７ｃには、初期値「０」、すなわち各タスクのアクセス権の獲得成功数が０であることを意味する値が設定されている。
【００２３】
例えば、タスク＃１  １０３ａは、排他制御領域１０４に対する排他的なアクセス権の獲得に成功した場合、タスク別成功数記憶領域１０７のタスク＃１用領域１０７ａから値を読み出す。次いで、タスク＃１  １０３ａは、読み出した値に１を加算する。さらに、タスク＃１  １０３ａは、加算した値をタスク＃１用領域１０７ａに書き戻す。この結果、タスク＃１用領域１０７ａに記憶されていた値がタスク＃１  １０３ａによって１だけ加算されて更新される。なお、タスク＃２  １０３ｂ、タスク＃３  １０３ｃも、排他制御領域１０４に対する排他的なアクセス権の獲得に成功した場合、それぞれタスク＃２用領域１０７ｂ、タスク＃３用領域１０７ｃに対して同様の処理を実行する。そして、各タスクが各タスク用の領域の値を更新することにより、タスクごとにアクセス権獲得の成功数を記憶することができる。
【００２４】
図６に、タスクがアクセス権の獲得に失敗したタスクが存在することを確認した場合の
各タスクとリトライフラグ１０８との関係を示す。なお、あらかじめリトライフラグ１０８には、初期値「０」、すなわちアクセス権の獲得を再度実行しないことを意味する値が設定されている。
【００２５】
タスク＃１  １０３ａ、タスク＃２  １０３ｂ、タスク＃３  １０３ｃは、失敗情報記憶領域１０５のアクセス権獲得失敗フラグ１０５ａの値を参照して、アクセス権の獲得に失敗したタスクが存在するか否かを判定する。そして、アクセス権の獲得に失敗したタスクが存在しない場合に、リトライフラグ１０８に値「１」を書き込む。リトライフラグ１０８に値「１」が書き込まれることで、各タスクに排他的なアクセス権の獲得処理を再度実行させることができる。
【００２６】
図７には、本実施形態に係る情報処理装置１００の機能ブロック図を示す。本実施形態では、例えば情報処理装置１００のＲＯＭ（Read-Only Memory；図示せず）に格納されているアプリケーション等が、プロセッサ＃１  １０１ａ〜プロセッサ＃ｍ  １０１ｄによって実行される。このようなアプリケーション等の実行により、図７に示すように、情報処理装置１００は、制御部１１０、第１の記憶部１１１、第２の記憶部１１２、比較部１１３、算出部１１４、閾値変更部１１５として機能する。
【００２７】
制御部１１０は、複数のタスクに、複数のタスクによって共有される領域への排他的なアクセス権を獲得させる。第１の記憶部１１１は、複数のタスクのアクセス権の獲得の成功数を累積して記憶する。複数のタスクは、第１の記憶部１１１を並列に更新可能である。第２の記憶部１１２は、複数のタスクのタスクごとにアクセス権の獲得の成功数を記憶する。比較部１１３は、第１の記憶部に記憶されている成功数と第２の記憶部に記憶されているタスクごとの成功数の合計とを比較する。
【００２８】
ここで、各タスクによるアクセス権獲得数記憶領域１０６ａに対する成功数の更新処理について説明する。本実施形態においては、比較部１１３が、タスク別成功数記憶領域１０７に記憶されているタスクごとのアクセス権獲得の成功数の合計と、累積成功数記憶領域１０６に記憶されているタスク全体におけるアクセス権獲得の累積の成功数とを比較する。そして、タスクごとのアクセス権獲得の成功数の合計とタスク全体におけるアクセス権獲得の累積の成功数とが一致することをもって排他処理が正常に行われたとみなす。
【００２９】
ただし、本実施形態において起こりうる可能性として、図８Ａに示すように、タスク＃１  １０３ａ〜タスク＃３  １０３ｃが同時にアクセス権を獲得したときに、各タスクがそれぞれ異なるタイミングでアクセス権獲得数記憶領域１０６ａの値を更新することが考えられる。複数のタスクが同じタイミングで排他的なアクセス権を獲得できてしまう原因としては、ハードウェアの故障などが挙げられる。すなわち、複数のタスクが同じタイミングで排他的なアクセス権を獲得できることは、排他処理が正常に行われていないことを意味する。それにもかかわらず、各タスクによって図８Ａに示すようにアクセス権獲得数記憶領域１０６ａの値が更新されると、タスクごとのアクセス権獲得の成功数の値の合計値と、タスク全体におけるアクセス権獲得の累積の成功数の値とが一致する。すなわち、本実施形態では排他処理が正常に行われたとみなされてしまう。
【００３０】
そこで、本実施形態では、上記の可能性を回避するために、図８Ｂに示すように、各タスクはアクセス権獲得の直後にアクセス権獲得数記憶領域１０６ａの値を読み出す。そして、各タスクは、アクセス権獲得数記憶領域１０６ａから値を読み出した後に、所定の時間が経過してから更新した値を書き戻す。なお、アクセス権獲得数記憶領域１０６ａに対する値の読み出しから書き戻しまでの時間間隔は、各タスクに記述されている排他処理内で適宜設定することができる。また、図８Ｂでは、各タスクは、値の書き戻しの直前に値の更新（図中「成功数＋１」）を行っている。ただし、各タスクは、読み出しから書き戻
しまでの間の任意のタイミングで値の更新を行えばよい。
【００３１】
これにより、複数のタスクが同じタイミングで排他的なアクセス権を獲得した場合、あるタスクがアクセス権獲得数記憶領域１０６ａに値を書き戻す前に他のタスクがアクセス権獲得数記憶領域１０６ａの値を読み出す。この結果、アクセス権獲得数記憶領域１０６ａに記憶されている成功数の値と、タスク別成功数記憶領域１０７に記憶されているタスクごとのアクセス権獲得の成功数の合計とが不一致となる。
【００３２】
一例として、更新前のアクセス権獲得数記憶領域１０６ａの値を１０、タスク別成功数記憶領域１０７のタスク＃１用領域１０７ａの値を４、タスク＃２用領域１０７ｂの値を６とする。そして、タスク＃１、タスク＃２が共に排他的なアクセス権を獲得できた場合、タスク＃１およびタスク＃２は、それぞれアクセス権獲得数記憶領域１０６ａの値を１０＋１＝１１で更新する。また、タスク＃１およびタスク＃２は、タスク＃１用領域１０７ａの値を４およびタスク＃２用領域１０７ｂの値を、それぞれ４＋１＝５、６＋１＝７で更新する。この結果、最終的に共通領域の成功数とタスクごとの個別領域の成功数の値の合計が不一致となる。アクセス権獲得数記憶領域１０６ａの値「１１」と、タスク＃１用領域１０７ａの値を４およびタスク＃２用領域１０７ｂの各値の合計値「１２」（５＋７）とは一致しない。このようにアクセス権獲得数記憶領域１０６ａに記憶されている成功数と、タスク別成功数記憶領域１０７に記憶されているタスクごとのアクセス権獲得の成功数の合計とが不一致となることをもって排他処理が正常に行われなかったとみなすことができる。
【００３３】
また、算出部１１４は、排他的なアクセス権の獲得に失敗したタスクの数を算出する。閾値変更部１１５は、算出部１１４により算出されたタスク数が所定の閾値未満であり、かつ複数の処理を実行中であるタスクの数が当該閾値未満である場合に、当該閾値を算出されたタスク数に一致させる。すなわち、閾値が、算出部１１４によって算出された排他的なアクセス権の獲得に失敗したタスクの数まで下げられる。本実施形態では、排他的なアクセス権の獲得に失敗したタスクの数が閾値以上となるまで、タスクが排他的なアクセス権の獲得を実行する。しかし、すべての試験処理を終了したタスクの数が増加すると、試験処理を実行中のタスクの数が減少して閾値以上とならない可能性がある。この場合、試験処理を実行中のタスクが排他的なアクセス権の獲得を実行し続ける可能性がある。そこで、閾値変更部１１５が、閾値を排他的なアクセス権の獲得に失敗したタスクの数まで下げることで、タスクは排他的なアクセス権の獲得をスキップして次の試験処理に進むことができる。
【００３４】
次に、本実施形態における情報処理装置１００において実行される処理について説明する。情報処理装置１００の電源が投入されると、プロセッサ＃１  １０１ａ〜プロセッサ＃ｍ  １０１ｄのいずれかのプロセッサが図９に示すフローチャートの処理を開始する。なお、図９に示す「１」は、図１０の「１」と接続している。
【００３５】
ＯＰ１０１では、メモリ領域１０２の試験プログラム領域１０３にあるタスク制御部１０３ｅが、メモリ領域１０２内にタスク＃１  １０３ａ〜タスク＃ｎ  １０３ｄによる排他処理において使用される上記の各領域を確保する。具体的には、タスク制御部１０３ｅは、排他制御領域１０４、失敗情報記憶領域１０５、累積成功数記憶領域１０６、タスク別成功数記憶領域１０７を確保する。さらに、タスク制御部１０３ｅは、アクセス権獲得フラグ１０４ａ、アクセス権獲得失敗フラグ１０５ａ、アクセス権獲得数記憶領域１０６ａ、タスク＃１用領域１０７ａ、タスク＃２用領域１０７ｂ、タスク＃３用領域１０７ｃを確保する。次いで、処理はＯＰ１０２に進められる。
【００３６】
ＯＰ１０２では、タスク制御部１０３ｅは、ＯＰ１０１において確保した排他制御領域
１０４、失敗情報記憶領域１０５、累積成功数記憶領域１０６、タスク別成功数記憶領域１０７の初期化を行う。これにより、アクセス権獲得フラグ１０４ａの値が「００」に設定される。さらに、アクセス権獲得失敗フラグ１０５ａ、アクセス権獲得数記憶領域１０６ａ、タスク＃１用領域１０７ａ、タスク＃２用領域１０７ｂ、タスク＃３用領域１０７ｃの値がそれぞれ「０」に設定される。次いで、処理はＯＰ１０３に進められる。
【００３７】
ＯＰ１０３では、タスク制御部１０３ｅは、ランニング試験において実行される排他処理を含む各種試験処理に用いられる各種設定を行う。具体的には、タスク制御部１０３ｅは、ランニング試験において使用される各種レジスタの設定、タスク＃１  １０３ａ〜タスク＃ｎ  １０３ｄにおける各試験処理の実行順序の決定などを行う。次いで、処理はＯＰ１０４に進められる。
【００３８】
ＯＰ１０４からは、タスク＃１  １０３ａ〜タスク＃ｎ  １０３ｄが主体となって処理を進める。なお、以下の説明においては、タスク＃１  １０３ａの処理について説明するが、他のタスクも同様の処理を行うため、詳細な説明を省略する。ＯＰ１０４では、タスク＃１  １０３ａは、タスク制御部１０３ｅの命令に従ってランニング試験を開始する。そして、タスク＃１  １０３ａは、ＯＰ１０３において決定された実行順序に従って各試験処理の実行を開始する。次いで、処理はＯＰ１０５に進められる。
【００３９】
ＯＰ１０５では、タスク＃１  １０３ａは、実行する試験の処理が排他処理であるか否かを判定する。本実施形態では、図１１に示すように、タスク＃１  １０３ａ〜タスク＃ｎ  １０３ｄは、ランニング試験において、それぞれ任意の順番で試験処理を実行する。例えば、タスク＃１  １０３ａは、ランニング試験を開始すると、試験Ｎ、試験Ａ、試験Ｇ、試験Ｂ、排他処理、試験Ｘの順に処理を実行する。そして、ＯＰ１０５では、タスク＃１  １０３ａが各試験処理を実行する前に、実行する処理が排他処理の処理か否かを判定する。
【００４０】
そして、タスク＃１  １０３ａは、実行する処理が排他処理でない場合は（ＯＰ１０５：Ｎｏ）、処理をＯＰ１０７に進める。一方、タスク＃１  １０３ａは、実行する処理が排他処理である場合は（ＯＰ１０５：Ｙｅｓ）、処理をＯＰ１０６に進める。
【００４１】
図１２に、ＯＰ１０６の排他処理の実行においてタスク＃１  １０３ａが実行するサブルーチンを示す。タスク＃１  １０３ａは、排他処理を開始すると、ＯＰ２０１において、排他制御領域１０４のアクセス権獲得フラグ１０４ａに対して値の読み出しおよび値「ＦＦ」の書き込み処理を行う。なお、ＯＰ２０１においてタスク＃１  １０３ａが実行する処理は、上記の通り図２を参照しながら説明したため、ここでは詳細な説明は省略する。タスク＃１  １０３ａは、ＯＰ２０１においてアクセス権獲得フラグ１０４ａに対する排他的なアクセス権の獲得を試みた後、処理をＯＰ２０２に進める。
【００４２】
ＯＰ２０２では、タスク＃１  １０３ａは、ＯＰ２０１の処理において排他的なアクセス権の獲得に成功したか否かを判定する。排他的なアクセス権の獲得に成功した場合は（ＯＰ２０２：Ｙｅｓ）、タスク＃１  １０３ａは処理をＯＰ２０３に進める。また、排他的なアクセス権の獲得に失敗した場合は（ＯＰ２０２：Ｎｏ）、タスク＃１  １０３ａは処理をＯＰ２１０に進める。
【００４３】
ＯＰ２１０では、タスク＃１  １０３ａは、失敗情報記憶領域１０５のアクセス権獲得失敗フラグ１０５ａに対してアクセス権の獲得に失敗したことを示すために、値「１」の書き込みを行う。ＯＰ２１０においてタスク＃１  １０３ａが実行する処理は、上記の通り図３を参照しながら説明したため、ここでは詳細な説明は省略する。タスク＃１  １０３ａは、ＯＰ２１０においてアクセス権獲得失敗フラグ１０５ａに対する値の書き込みを
行った後、排他処理のサブルーチンを終了し、処理をＯＰ１０８に進める。この結果、タスク＃１  １０３ａは、アクセス権の獲得に失敗した場合は排他処理をスキップして、すなわちアクセス権獲得の待ち時間を発生させずに、次の試験処理に進むことができる。
【００４４】
ＯＰ２０３では、タスク＃１  １０３ａは、累積成功数記憶領域１０６のアクセス権獲得数記憶領域１０６ａに対してアクセス権獲得の成功数を１だけ加算する。なお、ＯＰ２０３においてタスク＃１  １０３ａが実行する処理は、上記の通り図４を参照しながら説明したため、ここでは詳細な説明は省略する。タスク＃１  １０３ａは、ＯＰ２０３においてアクセス権獲得の累積の成功数を更新した後、処理をＯＰ２０４に進める。
【００４５】
ＯＰ２０４では、タスク＃１  １０３ａは、タスク別成功数記憶領域１０７のタスク＃１用領域１０７ａに対してアクセス権獲得の成功数を１だけ加算する。なお、ＯＰ２０４においてタスク＃１  １０３ａが実行する処理は、上記の通り図５を参照しながら説明したため、ここでは詳細な説明は省略する。タスク＃１  １０３ａは、ＯＰ２０４においてアクセス権獲得の成功数を更新した後、処理をＯＰ２０５に進める。
【００４６】
ＯＰ２０５では、タスク＃１  １０３ａは、失敗情報記憶領域１０５のアクセス権獲得失敗フラグ１０５ａの値を読み出す。次いで、処理はＯＰ２０６に進められる。ＯＰ２０６では、タスク＃１  １０３ａは、ＯＰ２０５において読み出したアクセス権獲得失敗フラグ１０５ａの値に基づいて、アクセス権獲得に失敗したタスクが存在するか否かを判定する。上記の通り、アクセス権獲得に失敗したタスクは、アクセス権獲得失敗フラグ１０５ａに値「１」を書き込む。したがって、タスク＃１  １０３ａは、アクセス権獲得失敗フラグ１０５ａから読み出した値が「０」である場合は、アクセス権獲得に失敗したタスクは存在しないと判定する。
【００４７】
また、タスク＃１  １０３ａは、アクセス権獲得失敗フラグ１０５ａから読み出した値が「１」である場合は、アクセス権獲得に失敗したタスクが存在すると判定する。そして、アクセス権獲得に失敗したタスクが存在する場合は（ＯＰ２０６：Ｙｅｓ）、タスク＃１  １０３ａは処理をＯＰ２０７に進める。一方、アクセス権獲得に失敗したタスクが存在しない場合は（ＯＰ２０６：Ｎｏ）、タスク＃１  １０３ａは処理をＯＰ２０８に進める。
【００４８】
ＯＰ２０７では、タスク＃１  １０３ａは、アクセス権獲得失敗フラグ１０５ａの値をクリア、すなわち初期値である「０」に更新する。次いで、タスク＃１  １０３ａは、処理をＯＰ２０９に進める。
【００４９】
ＯＰ２０８では、タスク＃１  １０３ａは、リトライフラグ１０８をオンにする、すなわちリトライフラグ１０８に値「１」を書き込む。そして、タスク＃１  １０３ａは処理をＯＰ２０９に進める。
【００５０】
ＯＰ２０９では、タスク＃１  １０３ａは、ＯＰ２０１において獲得したアクセス権を解放する。具体的には、タスク＃１  １０３ａは、排他制御領域１０４のアクセス権獲得フラグ１０４ａに対して値「００」を書き込む。これにより、タスク＃１  １０３ａ〜タスク＃３  １０３ｃが再度排他的にアクセス権を取得することができるようになる。次いで、タスク＃１  １０３ａは処理をＯＰ２１０に進める。
【００５１】
ＯＰ２１０では、タスク＃１  １０３ａは、リトライフラグ１０８がオンであるか否か、すなわちリトライフラグ１０８の値が「１」であるか否かを判定する。リトライフラグ１０８の値が「１」である場合は（ＯＰ２１０：Ｙｅｓ）、タスク＃１  １０３ａは処理をＯＰ２０１に戻し、再度、排他的なアクセス権の獲得処理を実行する。リトライフラグ
１０８の値が「１」でない場合は（ＯＰ２１０：Ｎｏ）、タスク＃１  １０３ａは、本サブルーチンを終了する。
【００５２】
上記のＯＰ１０６の処理が終了すると、タスク＃１  １０３ａは、処理をＯＰ１０８に進める。ＯＰ１０８では、タスク＃１  １０３ａは、自身のタスクがすべての試験処理を実行したか否かを判定する。タスク＃１  １０３ａは、すべての試験処理を実行したと判定した場合は（ＯＰ１０８：Ｙｅｓ）、処理を図１０のＯＰ１０９に進める。一方、タスク＃１  １０３ａは、すべての試験処理を実行していないと判定した場合は（ＯＰ１０８：Ｎｏ）、残りの試験処理を実行するため、処理をＯＰ１０５に戻す。なお、ＯＰ１０９からは、タスク制御部１０３ｅが処理の主体となる。
【００５３】
ＯＰ１０９では、タスク制御部１０３ｅが、タスク＃１  １０３ａ〜タスク＃３  １０３ｃの各タスクがすべての試験処理を実行したか否かを判定する。タスク制御部１０３ｅは、例えば各タスク用のフラグをあらかじめ設け、各タスクにすべての試験処理が完了したら当該フラグを立てるように制御すればよい。この場合、タスク制御部１０３ｅは、当該フラグがすべて立てられていることを確認することで、タスク＃１  １０３ａ〜タスク＃３  １０３ｃの各タスクがすべての試験処理を実行したと判定する。
【００５４】
タスク制御部１０３ｅは、各タスクがすべての試験処理を実行したと判定すると（ＯＰ１０９：Ｙｅｓ）、処理をＯＰ１１０に進める。ＯＰ１１０では、タスク制御部１０３ｅは、各タスクにより実行された排他処理が正常に実行されたか否かの妥当性をチェックする。一方、タスク制御部１０３ｅは、すべての試験処理を実行していないタスクが存在すると判定すると（ＯＰ１０９：Ｎｏ）、各タスクがすべての試験処理を実行するまでＯＰ１０９の処理を繰り返す。
【００５５】
図１３に、ＯＰ１１０の排他処理の妥当性チェックにおいてタスク制御部１０３ｅが実行するサブルーチンを示す。ＯＰ３０１では、タスク制御部１０３ｅは、タスク別成功数記憶領域１０７の各タスク用の領域１０７ａ〜１０７ｃに記憶されている値をそれぞれ読み出す。そして、タスク制御部１０３ｅは、読み出した値の合計値を算出する。次いで、タスク制御部１０３ｅは処理をＯＰ３０２に進める。
【００５６】
ＯＰ３０２では、タスク制御部１０３ｅは、累積成功数記憶領域１０６のアクセス権獲得数記憶領域１０６ａに記憶されている値を読み出す。次いで、タスク制御部１０３ｅは処理をＯＰ３０３に進める。
【００５７】
ＯＰ３０３では、タスク制御部１０３ｅは、ＯＰ３０１で算出したタスクごとの成功数の合計値とＯＰ３０２で読み出した累積の成功数の値とを比較する。そしてＯＰ３０４において、タスク制御部１０３ｅは、ＯＰ３０１で算出したタスクごとの成功数の合計値とＯＰ３０２で読み出した累積の成功数の値とが一致するか否かを判定する。ＯＰ３０１で算出したタスクごとの成功数の合計値とＯＰ３０２で読み出した累積の成功数の値とが一致する場合は（ＯＰ３０４：Ｙｅｓ）、タスク制御部１０３ｅは、本サブルーチンを終了し、図１０のＯＰ１１１に処理を進める。
【００５８】
一方、ＯＰ３０１で算出したタスクごとの成功数の合計値とＯＰ３０２で読み出した累積の成功数の値とが一致しない場合は（ＯＰ３０４：Ｎｏ）、タスク制御部１０３ｅは、処理をＯＰ３０５に進める。
【００５９】
ＯＰ３０５では、タスク制御部１０３ｅは、ＯＰ３０１で算出したタスクごとの成功数の合計値とＯＰ３０２で読み出した累積の成功数の値とが一致しないことから排他処理が正常に行われなかったとみなす。そして、タスク制御部１０３ｅは、排他処理が正常に行
われなかったことを示すエラーを情報処理装置１００のディスプレイ（図示せず）に表示する。次いで、タスク制御部１０３ｅは、本サブルーチンを終了し、図１０のＯＰ１１１に処理を進める。ＯＰ１１１では、タスク制御部１０３ｅは、ＯＰ１０４において開始したランニング試験の終了処理を実行する。そして、タスク制御部１０３ｅは、本フローチャートの処理を終了する。
【００６０】
第１の実施形態では、排他処理を実行したタスクについて、排他的なアクセス権の獲得に成功したタスク数が、タスクごとに記憶されるとともに、タスク全体の累積数として記憶される。そして、タスクごとに記憶されたアクセス権獲得の成功数の合計とタスク全体として記憶されたアクセス権獲得の成功数の累積数とが一致するか否かに基づいて、タスクにより実行された排他処理の妥当性を評価することができる。また、排他的なアクセス権の獲得に失敗したタスクの数が閾値以上となるまで、タスクは排他的なアクセス権の獲得を繰り返し実行する。これにより、排他処理においてタスクの競合が発生する可能性を高めることができる。
【００６１】
また、例えば２つのタスクが略同じタイミングでアクセス権を獲得した場合、一方のタスクがアクセス権獲得数記憶領域１０６ａから成功数を読み出してから更新した成功数をアクセス権獲得数記憶領域１０６ａに書き戻す。第１の実施形態では、当該タスクがアクセス権獲得数記憶領域１０６ａに対する読み出しおよび書き戻しを行っている間に、他方のタスクがアクセス権獲得数記憶領域１０６ａから成功数を読み出す。これにより、ハードウェアの故障などにより２つのタスクが排他的なアクセス権を獲得できた場合に、アクセス権獲得数記憶領域１０６ａに記憶されている成功数と、タスク別成功数記憶領域１０７にタスクごとに記憶されている成功数とに不一致を生じさせることができる。この結果、このような成功数の不一致から、タスクにより実行された排他処理が正常に行われなかったと判断することができる。
【００６２】
（第２の実施形態）
次に、第２の実施形態について説明する。なお、以下の説明において、第１の実施形態と同じ構成および処理については同一の符号を付し、詳細な説明は省略する。第２の実施形態においては、第１の実施形態の情報処理装置１００の失敗情報記憶領域２０５の構成が異なる。そこで、失敗情報記憶領域２０５と失敗情報記憶領域１０５との相違点について以下に説明する。なお、以下の説明において、ｎ個のタスクをタスク＃１  １０３ａ、タスク＃２  １０３ｂ、タスク＃３  １０３ｃ、タスク＃４  １０３ｅの４つのタスクに代表させる。
【００６３】
図１４に、本実施形態における失敗情報記憶領域２０５の概略構成図を示す。本実施形態では、タスク＃１  １０３ａ、タスク＃２  １０３ｂ、タスク＃３  １０３ｃ、タスク＃４  １０３ｅがそれぞれ専用の領域２０５ａ、２０５ｂ、２０５ｃ、２０５ｅに対して処理を行う。タスク＃１  １０３ａ、タスク＃２  １０３ｂ、タスク＃３  １０３ｃ、タスク＃４  １０３ｅは、排他制御領域１０４のアクセス権獲得フラグ１０４ａに対する排他的なアクセス権の獲得に失敗すると領域２０５ａ、２０５ｂ、２０５ｃ、２０５ｅに０、１、２のいずれかの値を書き込む。ここで値「０」は、アクセス権獲得処理を実行していないかアクセス権の獲得に失敗していないことを示す。また、値「１」は、アクセス権獲得に失敗して現在アクセス権の獲得待ちであることを示す。また、値「２」は、ランニング試験におけるすべての試験処理が終了したことを示す。なお、各タスクによる領域２０５ａ、２０５ｂ、２０５ｃ、２０５ｅに対する値の書き込みの詳細については後述する。
【００６４】
図１５に、本実施形態における、タスク別成功数記憶領域１０７とタスク＃１  １０３ａ、タスク＃２  １０３ｂ、タスク＃３  １０３ｃ、タスク＃４  １０３ｅとの関係を示
す。図５と同様に、タスク＃１  １０３ａ、タスク＃２  １０３ｂ、タスク＃３  １０３ｃ、タスク＃４  １０３ｅは、アクセス権の獲得に成功する度にそれぞれ専用の領域１０７ａ、１０７ｂ、１０７ｃ、１０７ｅに対して値を１ずつ加算する。
【００６５】
次に、本実施形態における情報処理装置１００において実行される処理について説明する。第２の実施形態は、情報処理装置１００の電源が投入されると、プロセッサ＃１  １０１ａ〜プロセッサ＃ｍ  １０１ｄのいずれかのプロセッサが図９に示すフローチャートの処理を開始する。なお、図９に示す「１」は、図１６の「１」と接続している。
【００６６】
ＯＰ４０６では、タスク＃１  １０３ａ、タスク＃２  １０３ｂ、タスク＃３  １０３ｃ、タスク＃４  １０３ｅの各タスクが図１７に示すサブルーチンの処理を実行する。なお、以下の説明では、タスク＃１  １０３ａが処理を実行する場合について説明するが、他のタスクの処理も同じである。
【００６７】
ＯＰ５０１の処理は、第１の実施形態におけるＯＰ２０１と同じ処理であるため、詳細な説明を省略する。ＯＰ５０２では、タスク＃１  １０３ａは、ＯＰ５０１の処理において排他的なアクセス権の獲得に成功したか否かを判定する。排他的なアクセス権の獲得に成功した場合は（ＯＰ５０２：Ｙｅｓ）、タスク＃１  １０３ａは処理をＯＰ５０３に進める。また、排他的なアクセス権の獲得に失敗した場合は（ＯＰ５０２：Ｎｏ）、タスク＃１  １０３ａは処理をＯＰ５０９に進める。
【００６８】
ＯＰ５０３、ＯＰ５０４の処理は、第１の実施形態におけるＯＰ２０３、ＯＰ２０４の処理と同じであるため、詳細な説明を省略する。ＯＰ５０５では、タスク＃１  １０３ａは、失敗情報記憶領域２０５の各タスク用の領域２０５ａ、２０５ｂ、２０５ｃ、２０５ｅに記憶されている値を読み出す。そして、タスク＃１  １０３ａは、読み出した値のうち値「１」が設定されている領域の数を算出する。上記の通り、失敗情報記憶領域２０５の各タスク用の領域２０５ａ、２０５ｂ、２０５ｃ、２０５ｅに値「１」が記憶されていることは、対応するタスクが排他的なアクセス権の獲得に失敗し、アクセス権の獲得待ちであることを意味する。例えば、領域２０５ａ、２０５ｂ、２０５ｃ、２０５ｅに値「１」、「０」、「１」、「２」がそれぞれ設定されている場合、タスク＃１  １０３ａは、値「１」が設定されている領域の数を２と算出する。次いで、タスク＃１  １０３ａは、処理をＯＰ５０６に進める。
【００６９】
ＯＰ５０６では、タスク＃１  １０３ａは、ＯＰ５０５において算出した値「１」が設定されている領域の数が閾値以上であるか否かを判定する。タスク＃１  １０３ａは、値「１」が設定されている領域の数が閾値以上であると判定した場合は（ＯＰ５０６：Ｙｅｓ）、処理をＯＰ５０７に進める。また、タスク＃１  １０３ａは、値「１」が設定されている領域の数が閾値未満であると判定した場合は（ＯＰ５０６：Ｎｏ）、処理をＯＰ５０５に戻す。
【００７０】
ＯＰ５０７では、タスク＃１  １０３ａは、失敗情報記憶領域２０５の各タスク用の領域２０５ａ、２０５ｂ、２０５ｃ、２０５ｅに記憶されている値をクリア、すなわち初期値である０に戻す。次いで、タスク＃１  １０３ａは、処理をＯＰ５０８に進める。ＯＰ５０８の処理は、第１の実施形態におけるＯＰ２０９と同じ処理であるため、詳細な説明を省略する。ＯＰ５０８の処理が終了すると、タスク＃１  １０３ａは本サブルーチンの処理を終了する。
【００７１】
ＯＰ５０９では、タスク＃１  １０３ａは、ＯＰ５０５と同様に、失敗情報記憶領域２０５の各タスク用の領域２０５ａ、２０５ｂ、２０５ｃ、２０５ｅに記憶されている値を読み出す。そして、タスク＃１  １０３ａは、読み出した値のうち値「１」が設定されて
いる領域の数を算出する。次いで、タスク＃１  １０３ａは、処理をＯＰ５１０に進める。ＯＰ５１０では、ＯＰ５０９において算出した値「１」が設定されている領域の数が閾値以上であるか否かを判定する。なお、ＯＰ５０６およびＯＰ５１０で使用される閾値は同じ閾値である。タスク＃１  １０３ａは、値「１」が設定されている領域の数が閾値以上であると判定した場合は（ＯＰ５１０：Ｙｅｓ）、本サブルーチンの処理を終了する。また、タスク＃１  １０３ａは、値「１」が設定されている領域の数が閾値未満であると判定した場合は（ＯＰ５１０：Ｎｏ）、処理をＯＰ５１１に進める。
【００７２】
ＯＰ５１１では、タスク＃１  １０３ａは、失敗情報記憶領域２０５のタスク＃１用領域２０５ａに値「１」を書き込む。次いで、タスク＃１  １０３ａは、処理をＯＰ５１２に進める。ＯＰ５１２では、タスク＃１  １０３ａは、ランニング試験において試験処理を実行中であるタスクの数が閾値未満であるか否かを判定する。なお、当該閾値は、ＯＰ５０６およびＯＰ５１０で使用される閾値である。具体的には、タスク＃１  １０３ａは、失敗情報記憶領域２０５の各タスク用の領域２０５ａ〜２０５ｄを参照し、値が「０」または「１」であるタスクの数を算出する。そして、タスク＃１  １０３ａは、算出したタスク数を、試験処理を実行中であるタスク数とみなして、上記の閾値とを比較する。
【００７３】
試験処理を実行中であるタスクの数が閾値未満である場合は（ＯＰ５１１：Ｙｅｓ）、タスク＃１  １０３ａは処理をＯＰ５１３に進める。また、試験処理を実行中であるタスクの数が閾値以上である場合は（ＯＰ５１１：Ｎｏ）、タスク＃１  １０３ａは処理をＯＰ５０１に戻す。ＯＰ５１３では、タスク＃１  １０３ａは、上記の閾値をＯＰ５１２において算出した試験処理を実行中であるタスク数に一致させる。閾値の変更後、タスク＃１  １０３ａは、処理をＯＰ５０１に戻す。
【００７４】
本実施形態において、ランニング試験におけるすべての試験処理を終了したタスクの数が増えると、試験処理を実行中のタスクの数は相対的に少なくなる。したがって、試験処理を実行中のタスクがすべてアクセス権の獲得を繰り返し実行しても、そのタスク数がアクセス権獲得失敗数の閾値以上とならない場合もある。このような場合、タスク＃１  １０３ａが、ＯＰ５０５およびＯＰ５０６の処理を繰り返し、処理をＯＰ５０７に進めることができなくなる可能性がある。また、アクセス権の獲得に失敗したタスク＃１  １０３ａ以外のタスクが、ＯＰ５１０から本サブルーチンの終了に進むことができなくなる可能性がある。
【００７５】
そこで、アクセス権の獲得に失敗したタスク＃１  １０３ａ以外のタスクがＯＰ５１３において上記の閾値を、「アクセス権獲得失敗数の閾値＝試験処理を実行中のタスクの数」となるように変更する。すなわち、試験処理を実行中のすべてのタスクが排他的なアクセス権の取得に失敗した場合に、各タスクはＯＰ５１０から本サブルーチンの終了に進む。また、タスク＃１  １０３ａは、ＯＰ５０６からＯＰ５０７に進み、ＯＰ５０５およびＯＰ５０６の処理を繰り返し実行し続ける現象を回避することができる。
【００７６】
以上説明したように、本実施形態では、各タスクが実行する排他処理においてアクセス権の獲得に失敗したタスク数が算出され、当該タスク数が閾値以上となるまではタスクにアクセス権の獲得を繰り返し実行させる。これにより、閾値により指定されるタスク数だけ、排他処理におけるタスクの競合を発生させることができる。また、当該タスク数が閾値以上となった後は、アクセス権の獲得に失敗したタスクは、アクセス権の獲得をスキップして、すなわちアクセス権獲得の待ち時間を発生させずに、排他処理の次の試験処理に進むことができる。
【００７７】
図９に示すように、タスク＃１  １０３ａはＯＰ４０６のサブルーチンの処理を終了すると、処理をＯＰ１０８に進める。ＯＰ１０８では、タスク＃１  １０３ａは、自身のタ
スクがすべての試験処理を実行したか否かを判定する。タスク＃１  １０３ａは、すべての試験処理を実行したと判定した場合は（ＯＰ１０８：Ｙｅｓ）、処理を図１６のＯＰ４０９に進める。一方、タスク＃１  １０３ａは、すべての試験処理を実行していないと判定した場合は（ＯＰ１０８：Ｎｏ）、残りの試験処理を実行するため、処理をＯＰ１０５に戻す。なお、ＯＰ４０９からは、タスク制御部１０３ｅが処理の主体となる。
【００７８】
ＯＰ４０９では、タスク＃１  １０３ａは、自身のタスクがすべての試験処理の実行を終了したことを示すために、失敗情報記憶領域２０５のタスク＃１用領域２０５ａに値「２」を書き込む。次いで、タスク＃１  １０３ａは、処理をＯＰ４１０に進める。なお、ＯＰ４１０〜ＯＰ４１２の処理は、第１の実施形態におけるＯＰ１０９〜ＯＰ１１１と同じであるため、ＯＰ４１１の図示を含む詳細な説明は省略する。
【００７９】
以上が本実施形態に関する説明であるが、上記の情報処理装置１００などの構成や処理は、上記の実施形態に限定されるものではなく、本発明の技術的思想と同一性を失わない範囲内において種々の変更が可能である。例えば、上記の実施形態では、各タスクはメモリ領域である排他制御領域１０４に対してアトミック命令により排他的なアクセス権の獲得を実行する。ただし、アトミック命令を用いて各タスクに排他制御領域１０４に対するアクセス権の獲得を実行させる代わりに、図１８に示す排他制御レジスタ１１０４を用いることもできる。排他制御レジスタ１１０４が使用される場合は、アトミック命令を用いなくてもよい。排他制御レジスタ１１０４は、各タスクによってアクセスされるフィールド情報記憶領域１１０４ａを有する。フィールド情報記憶領域１１０４ａは、ロックフラグ１１０４ｂおよびデータ書き込み領域１１０４ｃを有する。
【００８０】
ロックフラグ１１０４ｂには、排他制御レジスタ１１０４によって「０」または「１」の１ビットの値が設定される。ここでは、ロックフラグ１１０４ｂの値が「０」である場合に、タスクによるデータ書き込み領域１１０４ｃへの書き込みが許可される。また、ロックフラグ１１０４ｂの値が「１」である場合に、タスクによるデータ書き込み領域１１０４ｃへの書き込みが禁止される。なお、ロックグラフ１１０４ｂに設定される初期値は「０」である。
【００８１】
データ書き込み領域１１０４ｃは、各タスクがタスクごとに固有の値を書き込むための共有領域である。各タスクは、データ書き込み領域１１０４ｃから読み出した値が、自タスクが書き込んだ値と等しい場合に、排他的なアクセス権の獲得に成功したと判定する。
【００８２】
次に、排他制御領域１０４の代わりに排他制御レジスタ１１０４が使用される場合の各タスクによる排他的なアクセス権の獲得処理について説明する。ここでは、一例としてタスク＃１  １０３ａが排他的なアクセス権の獲得に成功する場合について説明する。
【００８３】
まず、タスク＃１  １０３ａは、排他制御レジスタ１１０４にアクセスし、フィールド情報記憶領域１１０４ａのロックフラグ１１０４ｂの値を確認する。ロックフラグ１１０４ｂには初期値「０」が設定されているため、タスク＃１  １０３ａにデータ書き込み領域１１０４ｃへの値の書き込みが許可される。そして、タスク＃１  １０３ａは固有の値をデータ書き込み領域１１０４ｃに書き込む。なお、排他制御レジスタ１１０４は、タスク＃１  １０３ａによってデータ書き込み領域１１０４ｃに値が書き込まれると、ロックフラグ１１０４ｂの値を「１」に設定する。
【００８４】
次いで、タスク＃１  １０３ａは、データ書き込み領域１１０４ｃの値を読み出す。データ書き込み領域１１０４ｃにはタスク＃１  １０３ａが書き込んだ値が記憶されている。したがって、タスク＃１  １０３ａは、データ書き込み領域１１０４ｃに書き込む値とデータ書き込み領域１１０４ｃから読み出した値とが一致すると判定する。すなわち、タ
スク＃１  １０３ａは、排他的なアクセス権の獲得に成功したと判定する。
【００８５】
次に、タスク＃１  １０３ａ以外のタスク、例えばタスク＃３  １０３ｃが排他的なアクセス権の獲得を行うために排他制御レジスタ１１０４にアクセスする。タスク＃３  １０３ｃは、フィールド情報記憶領域１１０４ａのロックフラグ１１０４ｂの値を確認する。ここでは、ロックフラグ１１０４ｂには値「１」が設定されているため、タスク＃３  １０３ｃによるデータ書き込み領域１１０４ｃへの書き込みが禁止される。次に、タスク＃３  １０３ｃは、データ書き込み領域１１０４ｃの値を読み出す。データ書き込み領域１１０４ｃにはタスク＃１  １０３ａが書き込んだ値が記憶されている。したがって、タスク＃３  １０３ｃは、データ書き込み領域１１０４ｃに書き込む値とデータ書き込み領域１１０４ｃから読み出した値とが一致しないと判定する。すなわち、タスク＃３  １０３ｃは、排他的なアクセス権の獲得に失敗したと判定する。
【００８６】
上記の実施形態では、タスク＃１  １０３ａは、上記の通りＯＰ２０１において獲得したアクセス権を解放する。排他制御レジスタ１１０４を使用する場合も同様に、アクセス権を獲得したタスク＃１  １０３ａは、ＯＰ２０１においてロックフラグ１１０４ｂの値を初期値「０」に設定する。これにより、タスク＃１  １０３ａ〜タスク＃３  １０３ｃが再度排他的にアクセス権を取得することができるようになる。
【００８７】
＜コンピュータが読み取り可能な記録媒体＞
コンピュータその他の機械、装置（以下、コンピュータ等）に上記情報処理装置の設定を行うための管理ツール、ＯＳその他を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。ここで、コンピュータは、例えば、情報処理装置などである。
【００８８】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／Ｗ、ＤＶＤ、ブルーレイディスク、ＤＡＴ、８ｍｍテープ、フラッシュメモリ等のメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスクやＲＯＭ等がある。
【００８９】
以上の実施形態に関し、さらに以下の付記を開示する。
【００９０】
（付記１）
複数のタスクを並列に実行することが可能な情報処理装置に、
前記複数のタスクに、前記複数のタスクによって共有される領域への排他的なアクセス権を獲得させ、
前記アクセス権を獲得したタスクに、前記複数のタスクが並列に更新可能な第１の記憶領域に、前記アクセス権の獲得の成功数を記憶させ、
前記アクセス権を獲得したタスクに、タスクごとに前記アクセス権の獲得の成功数を記憶可能な第２の記憶領域に、前記アクセス権の獲得の成功数を記憶させ、
前記第１の記憶領域に記憶されている成功数と前記第２の記憶領域に記憶されているタスクごとの成功数の合計とを比較する
処理を実行させる情報処理装置の制御プログラム。
【００９１】
（付記２）
前記情報処理装置に、
前記排他的なアクセス権の獲得に失敗したタスクの数を算出させ、
前記算出したタスク数が閾値未満である間に前記アクセス権の獲得に失敗したタスクには、前記アクセス権の獲得を再度実行させ、
前記算出したタスク数が前記閾値以上となった後に前記アクセス権の獲得に失敗したタスクには、前記アクセス権の獲得をスキップさせる
処理を実行させる付記１に記載の情報処理装置の制御プログラム。
【００９２】
（付記３）
前記情報処理装置に、
前記算出したタスク数が前記閾値以上となった場合に、前記アクセス権の獲得に成功したタスクに前記アクセス権を解放させる
処理を実行させる付記２に記載の情報処理装置の制御プログラム。
【００９３】
（付記４）
前記複数のタスクのうち第１のタスクおよび第２のタスクが略同じタイミングで前記アクセス権を獲得した場合に、前記第１のタスクが前記第１の記憶領域から成功数を読み出してから前記更新した成功数を前記第１の記憶領域に書き戻すまでの間に、前記第２のタスクが前記第１の記憶領域から成功数を読み出す、付記１から３のいずれかに記載の情報処理装置の制御プログラム。
【００９４】
（付記５）
前記情報処理装置に、
前記複数のタスクに、前記排他的なアクセス権の獲得を含む複数の処理を実行させ、
前記算出したタスク数が前記閾値未満であり、かつ前記複数の処理を実行中であるタスクの数が前記閾値未満である場合に、前記閾値を前記算出したタスク数に一致させる
処理を実行させる付記２から４のいずれかに記載の情報処理装置の制御プログラム。
【００９５】
（付記６）
複数のタスクを並列に実行することが可能な情報処理装置の制御方法であって、
前記複数のタスクに、前記複数のタスクによって共有される領域への排他的なアクセス権を獲得させ、
前記アクセス権を獲得したタスクに、前記複数のタスクが並列に更新可能な第１の記憶領域に、前記アクセス権の獲得の成功数を記憶させ、
前記アクセス権を獲得したタスクに、タスクごとに前記アクセス権の獲得の成功数を記憶可能な第２の記憶領域に、前記アクセス権の獲得の成功数を記憶させ
前記第１の記憶領域に記憶されている成功数と前記第２の記憶領域に記憶されているタスクごとの成功数の合計とを比較する
情報処理装置の制御方法。
【００９６】
（付記７）
前記排他的なアクセス権の獲得に失敗したタスクの数を算出し、
前記算出したタスク数が閾値未満である間に前記アクセス権の獲得に失敗したタスクには、前記アクセス権の獲得を再度実行させ、
前記算出したタスク数が前記閾値以上となった後に前記アクセス権の獲得に失敗したタスクには、前記アクセス権の獲得をスキップさせる
付記６に記載の情報処理装置の制御方法。
【００９７】
（付記８）
前記算出したタスク数が前記閾値以上となった場合に、前記アクセス権の獲得に成功したタスクに前記アクセス権を解放させる、付記７に記載の情報処理装置の制御方法。
【００９８】
（付記９）
前記複数のタスクのうち第１のタスクおよび第２のタスクが略同じタイミングで前記アクセス権を獲得した場合に、前記第１のタスクが前記第１の記憶領域から成功数を読み出してから前記更新した成功数を前記第１の記憶領域に書き戻すまでの間に、前記第２のタスクが前記第１の記憶領域から成功数を読み出す、付記６から８のいずれかに記載の情報処理装置の制御方法。
【００９９】
（付記１０）
前記複数のタスクに、前記排他的なアクセス権の獲得を含む複数の処理を実行させ、
前記算出したタスク数が前記閾値未満であり、かつ前記複数の処理を実行中であるタスクの数が前記閾値未満である場合に、前記閾値を前記算出したタスク数に一致させる
付記７から９のいずれかに記載の情報処理装置の制御方法。
【０１００】
（付記１１）
複数のタスクを並列に実行することが可能な情報処理装置であって、
前記複数のタスクに、前記複数のタスクによって共有される領域への排他的なアクセス権を獲得させる制御部と、
前記複数のタスクの前記アクセス権の獲得の成功数を前記複数のタスクが並列に更新可能な第１の記憶部と、
前記複数のタスクのタスクごとに前記アクセス権の獲得の成功数を記憶可能な第２の記憶部と、
前記第１の記憶部に記憶されている成功数と前記第２の記憶部に記憶されているタスクごとの成功数の合計とを比較する比較部と
を有する情報処理装置。
【０１０１】
（付記１２）
前記排他的なアクセス権の獲得に失敗したタスクの数を算出する算出部を有し、
前記制御部は、前記算出したタスク数が閾値未満である間に前記アクセス権の獲得に失敗したタスクには、前記アクセス権の獲得を再度実行させ、前記算出したタスク数が前記閾値以上となった後に前記アクセス権の獲得に失敗したタスクには、前記アクセス権の獲得をスキップさせる
付記１１に記載の情報処理装置。
【０１０２】
（付記１３）
前記制御部は、前記算出したタスク数が前記閾値以上となった場合に、前記アクセス権の獲得に成功したタスクに前記アクセス権を解放させる、付記１２に記載の情報処理装置。
【０１０３】
（付記１４）
前記複数のタスクのうち第１のタスクおよび第２のタスクが略同じタイミングで前記アクセス権を獲得した場合に、前記第１のタスクが前記第１の記憶領域から成功数を読み出してから前記更新した成功数を前記第１の記憶領域に書き戻すまでの間に、前記第２のタスクが前記第１の記憶領域から成功数を読み出す、付記１１から１３のいずれかに記載の情報処理装置。
【０１０４】
（付記１５）
前記制御部は、前記複数のタスクに、前記排他的なアクセス権の獲得を含む複数の処理を実行させ、
前記情報処理装置が、前記算出したタスク数が前記閾値未満であり、かつ前記複数の処
理を実行中であるタスクの数が前記閾値未満である場合に、前記閾値を前記算出したタスク数に一致させる閾値変更部を有する
付記１２から１４のいずれかに記載の情報処理装置。
【符号の説明】
【０１０５】
１００    情報処理装置
１０１ａ〜１０１ｄ    プロセッサ
１０２    メモリ領域
１０３    試験プログラム領域
１０３ａ〜１０３ｅ    タスク
１０３ｅ    タスク制御部
１０４    排他制御領域
１０５、２０５    失敗情報記憶領域
１０６    累積成功数記憶領域
１０７    タスク別成功数記憶領域
【図１】
0006547400.tif 000002
【図２】
0006547400.tif 000003
【図３】
0006547400.tif 000004
【図４】
0006547400.tif 000005
【図５】
0006547400.tif 000006
【図６】
0006547400.tif 000007
【図７】
0006547400.tif 000008
【図８Ａ】
0006547400.tif 000009
【図８Ｂ】
0006547400.tif 000010
【図９】
0006547400.tif 000011
【図１０】
0006547400.tif 000012
【図１１】
0006547400.tif 000013
【図１２】
0006547400.tif 000014
【図１３】
0006547400.tif 000015
【図１４】
0006547400.tif 000016
【図１５】
0006547400.tif 000017
【図１６】
0006547400.tif 000018
【図１７】
0006547400.tif 000019
【図１８】
0006547400.tif 000020