(57)【要約】【課題】排他読み出し命令の排他性を検証する。【解決手段】本試験方法は、記憶装置の所定の領域に対して第１の値を書き込む処理と、所定の領域に対して第１の値とは異なる第２の値を書き込む処理とを実行し、第２の値を書き込む処理の開始から所定時間後に、所定の領域の少なくとも一部分に対して排他無しの読み出し命令を実行し、排他無しの読み出し命令の後に、排他読み出し命令を、所定の領域又は所定の領域内の複数箇所に対して実行し、排他無しの読み出し命令の読み出し結果に基づき、所定の領域に対して第２の値の書き込みが完了した状態であるか否かを判断し、所定の領域に対して第２の値の書き込みが完了していない状態であると判断された場合、排他読み出し命令の読み出し結果が、同じ値であるか判断する処理を含む。【選択図】図１
2015141656.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが、
記憶装置の所定の領域に対して第１の値を書き込む処理と、前記所定の領域に対して前記第１の値とは異なる第２の値を書き込む処理とを実行し、
前記第２の値を書き込む処理の開始から所定時間後に、前記所定の領域の少なくとも一部分に対して排他無しの読み出し命令を実行し、
前記排他無しの読み出し命令の後に、排他読み出し命令を、前記所定の領域又は前記所定の領域内の複数箇所に対して実行し、
前記排他無しの読み出し命令の読み出し結果に基づき、前記所定の領域に対して前記第２の値の書き込みが完了した状態であるか否かを判断し、
前記所定の領域に対して前記第２の値の書き込みが完了していない状態であると判断された場合、前記排他読み出し命令の読み出し結果が、同じ値であるか判断する
処理を含む試験方法。
【請求項２】
前記所定の領域に対して前記第２の値の書き込みが完了している状態であると判断された場合には、前記所定時間を短縮する
処理をさらに含む請求項１記載の試験方法。
【請求項３】
前記排他無しの読み出し命令を実行する処理が、前記所定の領域内の複数箇所に対して排他無しの読み出し命令を実行する処理
であり、
前記第２の値の書き込みが完了した状態である否かを判断する処理が、
前記排他無しの読み出し命令の、前記複数箇所に対する読み出し結果が一致するか否かを判断する処理
を含む請求項１又は２記載の試験方法。
【請求項４】
前記排他読み出し命令の処理時間を計測し、
前記排他読み出し命令の処理時間が、所定の条件を満たしているか否かを判断する
処理をさらに含む請求項１乃至３のいずれか１つ記載の試験方法。
【請求項５】
前記排他無しの読み出し命令を実行する処理が、
前記所定の領域において、第１の部分と、前記第１の部分より後ろの第２の部分と、前記第２の部分より後ろの第３の部分とに対して前記排他無しの読み出し命令を実行する処理を含み、
前記第２の値の書き込みが完了した状態である否かを判断する処理が、
前記第１の部分の読み出し結果と、前記第２の部分の読み出し結果及び前記第３の部分の読み出し結果とが同じであるか否かを判断する処理を含み、
前記第１の部分の読み出し結果と前記第２の部分の読み出し結果とは同じ値であるが、前記第３の部分の読み出し結果が異なっている場合には、前記所定時間を短縮する処理
をさらに含む請求項１乃至４のいずれか１つ記載の試験方法。
【請求項６】
前記第２の値を書き込む処理の後に、前記第２の値とは異なる第３の値を前記所定の領域の少なくとも一部に書き込むように指示する処理
をさらに含む請求項１乃至５のいずれか１つ記載の試験方法。
【請求項７】
記憶装置の所定の領域に対して第１の値を書き込む処理と、前記所定の領域に対して前記第１の値とは異なる第２の値を書き込む処理を実行中に、
前記第２の値を書き込む処理の開始から所定時間後に、前記所定の領域の少なくとも一部分に対して排他無しの読み出し命令を実行し、
前記排他無しの読み出し命令の後に、排他読み出し命令を、前記所定の領域又は前記所定の領域内の複数箇所に対して実行し、
前記排他無しの読み出し命令の読み出し結果に基づき、前記所定の領域に対して前記第２の値の書き込みが完了した状態であるか否かを判断し、
前記所定の領域に対して前記第２の値の書き込みが完了していない状態であると判断された場合、前記排他読み出し命令の読み出し結果が、同じ値であるか判断する
処理を、処理装置に実行させるための試験プログラム。
【請求項８】
第１の処理装置と、
第２の処理装置と、
前記第１の処理装置と前記第２の処理装置とに接続されている記憶装置と、
を有し、
前記第１の処理装置が、
前記記憶装置の所定の領域に対して第１の値を書き込む処理と、前記所定の領域に対して前記第１の値とは異なる第２の値を書き込む処理を実行し、
前記第２の処理装置が、
前記第２の値を書き込む処理の開始から所定時間後に、前記所定の領域の少なくとも一部分に対して排他無しの読み出し命令を実行し、
前記排他無しの読み出し命令の後に、排他読み出し命令を、前記所定の領域又は前記所定の領域内の複数箇所に対して実行し、
前記第１の処理装置又は前記第２の処理装置が、
前記排他無しの読み出し命令の読み出し結果に基づき、前記所定の領域に対して前記第２の値の書き込みが完了した状態であるか否かを判断し、
前記所定の領域に対して前記第２の値の書き込みが完了していない状態であると判断された場合、前記排他読み出し命令の読み出し結果が、同じ値であるか判断する
システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置に対する命令の試験技術に関する。
【背景技術】
【０００２】
複数のクラスタ（例えば計算機）で共有する記憶装置へ排他的アクセスを行う場合には、従来は、ロック制御命令を実行し、各データ転送の完了を待ってから次の転送命令を行うため、タイムラグが大きいという問題があった。
【０００３】
ある文献では、複数のクラスタで外部記憶装置を共有し、各クラスタと外部記憶装置との間で書込み（Write）及び読み出し（Read）のデータ転送を行うシステムにおいて、排他読み出し転送命令（単に、排他読み出し命令又は排他有り読み出し命令とも呼ぶ。）を導入することが提案されている。
【０００４】
外部記憶装置から、この排他読み出し転送命令によってデータを読み出している間、該当領域へのデータ書き込みは抑止される。また、外部記憶装置からこの排他読み出し転送命令に応じてデータを読み出す際に、該当領域がデータ書き込み中であれば、該当領域からのデータ読み出しは抑止される。そして、抑止された命令は、他のデータ読み出し又は書き込み処理が完了後に実行される。
【０００５】
なお、一般的な読み出し転送命令（単に読み出し命令とも呼ぶ。また、排他無し読み出し命令とも呼ぶ。）であれば、外部記憶装置から、この排他無し読み出し転送命令によってデータを読み出している間、該当領域へのデータ書き込みは抑止されず、また、外部記憶装置からこの排他無し読み出し転送命令に応じてデータを読み出す際に、該当領域がデータ書き込み中であっても、該当領域からのデータ読み出しは抑止されない。
【０００６】
しかしながら、排他読み出し転送命令が、上で述べたように排他的に読み出しを行っているか否かを検証する技術は存在していなかった。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１０−８６０１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
従って、本発明の目的は、一側面によれば、排他読み出し命令の排他性を検証するための試験技術を提供することである。
【課題を解決するための手段】
【０００９】
本発明に係る試験方法は、（Ａ）記憶装置の所定の領域に対して第１の値を書き込む処理と、所定の領域に対して第１の値とは異なる第２の値を書き込む処理とを実行し、（Ｂ）第２の値を書き込む処理の開始から所定時間後に、所定の領域の少なくとも一部分に対して排他無しの読み出し命令を実行し、（Ｃ）排他無しの読み出し命令の後に、排他読み出し命令を、所定の領域又は所定の領域内の複数箇所に対して実行し、（Ｄ）排他無しの読み出し命令の読み出し結果に基づき、所定の領域に対して第２の値の書き込みが完了した状態であるか否かを判断し、（Ｅ）所定の領域に対して第２の値の書き込みが完了していない状態であると判断された場合、排他読み出し命令の読み出し結果が、同じ値であるか判断する処理を含む。
【発明の効果】
【００１０】
一側面によれば、排他読み出し命令の排他性を検証できるようになる。
【図面の簡単な説明】
【００１１】
【図１】図１は、第１の実施の形態に係るシステムの概要を示す図である。
【図２】図２は、排他無しReadデータ格納領域に格納されるデータのフォーマット例を示す図である。
【図３】図３は、排他Readデータ格納領域に格納されるデータのフォーマット例を示す図である。
【図４】図４は、Writeデータ格納領域に格納されるデータのフォーマット例を示す図である。
【図５】図５は、第１の実施の形態の概要を説明するための図である。
【図６】図６は、第１の実施の形態の概要を説明するための図である。
【図７】図７は、第１の実施の形態の概要を説明するための図である。
【図８】図８は、Write/Read競合の判定のための読み出しパターンを表すテーブルを表す図である。
【図９】図９は、Writeクラスタである第２のクラスタによって実行される処理の処理フローを示す図である。
【図１０】図１０は、Readクラスタである第１のクラスタによって実行される処理の処理フローを示す図である。
【図１１】図１１は、照合データテーブルのフォーマット例を示す図である。
【図１２】図１２は、Readクラスタである第１のクラスタによって実行される処理の処理フローを示す図である。
【図１３】図１３は、比較例を説明するための図である。
【図１４】図１４は、比較例を説明するための図である。
【図１５】図１５は、比較例を説明するための図である。
【図１６】図１６は、第１の実施の形態に係るタイムチャートを示す図である。
【図１７】図１７は、第２の実施の形態に係るWriteデータ格納領域におけるデータフォーマット例を示す図である。
【図１８】図１８は、第２の実施の形態に係る排他Readデータ領域におけるデータフォーマット例を示す図である。
【図１９】図１９は、第２の実施の形態の概要を説明するための図である。
【図２０】図２０は、第２の実施の形態におけるWriteクラスタである第２のクラスタによって実行される処理の処理フローを示す図である。
【図２１】図２１は、第２の実施の形態に係るReadクラスタである第１のクラスタによって実行される処理の処理フローを示す図である。
【図２２】図２２は、第２の実施の形態に係るReadクラスタである第１のクラスタによって実行される処理の処理フローを示す図である。
【図２３】図２３は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【００１２】
［実施の形態１］
図１に本実施の形態に係るシステムの一例を示す。本実施の形態では、計算機である第１のクラスタＣＬ１と、計算機である第２のクラスタＣＬ２とが、ネットワーク１００等によって外部記憶装置２００に接続されている。クラスタの数は２に限定されるものではなく、より多くのクラスタを含む場合もある。
【００１３】
第１のクラスタＣＬ１は、Readの処理を行うクラスタであり、Readクラスタ制御部１０１と、排他無しRead命令実行部１０２と、排他Read命令実行部１０３と、Readデータ照合部１０４と、命令時間測定部１０５と、待ち時間経過管理部１０６と、待ち時間変更部１０７と、データ記憶部１０８とを有する。データ記憶部１０８は、照合データテーブル１０８１と、待ち時間変更テーブル１０８２と、実行時間格納領域１０８３と、待ち時間格納領域１０８４と、照合結果格納領域１０８５と、排他無しReadデータ格納領域１０８６と、排他Readデータ格納領域１０８７とを含む。
【００１４】
第２のクラスタＣＬ２は、Writeの処理を行うクラスタであり、Writeクラスタ制御部１２１と、Write命令実行部１２２と、データ記憶部１２３とを有する。データ記憶部１２３は、Writeデータ格納領域１２３１を含む。
【００１５】
外部記憶装置２００は、Write/Readデータ領域２０１と、書き込みフラグ領域２０２とを含む。
【００１６】
Readクラスタ制御部１０１は、第１のクラスタＣＬ１による処理を制御する。排他無しRead命令実行部１０２は、排他無しRead命令、すなわち一般的なRead命令を、排他無しReadデータ格納領域１０８６に格納されているデータに従って、Write/Readデータ領域２０１に対して実行する。
【００１７】
排他Read命令実行部１０３は、排他Read命令を、排他Readデータ格納領域１０８７に格納されているデータに従って、Write/Readデータ領域２０１に対して実行する。Readデータ照合部１０４は、照合データテーブル１０８１、排他無しReadデータ格納領域１０８６及び排他Readデータ格納領域１０８７に格納されているデータを用いて照合処理を行って、照合結果を照合結果格納領域１０８５に格納する。
【００１８】
命令時間測定部１０５は、排他Read命令実行部１０３によって実行された排他Read命令の処理時間を計測し、排他Readデータ格納領域１０８７に格納する。
【００１９】
待ち時間経過管理部１０６は、待ち時間格納領域１０８４に格納されている待ち時間の経過を計測する。待ち時間変更部１０７は、所定の事象に応じて待ち時間格納領域１０８４に格納されている待ち時間を変更する処理を行う。
【００２０】
Writeクラスタ制御部１２１は、第２のクラスタＣＬ２による処理を制御する。Write命令実行部１２２は、Writeデータ格納領域１２３１に格納されているデータに従って、Write命令をWrite/Readデータ領域２０１に対して実行する。
【００２１】
なお、書き込みフラグ領域２０２は、Readクラスタ制御部１０１及びWriteクラスタ制御部１２１によって変更及びチェックされる。
【００２２】
排他無しReadデータ格納領域１０８６は、例えば図２に示すようなデータフォーマットでデータを格納する。本実施の形態では、３回排他無しRead命令を実行するが、１回目、２回目及び３回目の各々について、Write/Readデータ領域２０１における排他無しRead命令の開始アドレス、転送データ長（例えば数バイト）、及び読み込みデータとを格納するようになっている。開始アドレスは、１回目は、Write/Readデータ領域２０１の先頭アドレス、２回目は、予め定められた中央アドレス、３回目は、末尾アドレスとなっている。また、転送データ長は、３回とも同じ長さである。読み込みデータについては、処理を実行した際に書き込まれる。開始アドレスは、おおよそのアドレスでよい。特に、中央アドレスは、中央でなくてもよく、開始アドレスと末尾アドレスの間にあればよい。
【００２３】
排他Readデータ格納領域１０８７は、例えば図３に示すようなデータフォーマットでデータを格納する。本実施の形態では、３回排他Read命令を実行するが、１回目、２回目及び３回目の各々について、Write/Readデータ領域２０１における排他Read命令の開始アドレス、転送データ長（例えば数バイト）、読み込みデータ、及び排他Read命令の実行時間を格納するようになっている。開始アドレスは、排他無しRead命令の場合と同様に、１回目は、Write/Readデータ領域２０１の先頭アドレス、２回目は、予め定められた中央アドレス、３回目は、末尾アドレスとなっている。また、転送データ長は、排他無しRead命令の場合と同様に、３回とも同じ長さである。読み込みデータについては、処理を実行した際に書き込まれる。また、実行時間についても、命令時間計測部１０５によって命令実行毎に書き込まれる。
【００２４】
また、Writeデータ格納領域１２３１は、例えば図４に示すようなデータフォーマットでデータを格納する。すなわち、本実施の形態では、少なくとも２パターンの書き込みを行うので、パターンＡ及びパターンＢの各々について、Write/Readデータ領域２０１における先頭アドレスと、転送データ長（例えば数十ＫＢ程度）と、同一値の転送データ（例えば「１１１１１１１・・・・」又は「２２２２２２２２・・・・」）とを含む。本実施の形態では、先頭アドレス及び転送データ長については、パターンＡ及びパターンＢで同じであるが、転送データの値については異なる値とする。これによって、いずれのパターンを書き込み中であるか又は書き込み完了したかを区別できるようになる。なお、より多くのパターンを書き込む場合には、そのパターンの分を追加する。
【００２５】
なお、Write/Readデータ領域２０１に対してWrite命令を単独で実行した場合の実行時間ＷＴ１と、Write/Readデータ領域２０１に対して排他Read命令の１回分を単独で実行した場合の実行時間ＲＴ１とを予め測定しておき、実行時間格納領域１０８３に格納しておく。
【００２６】
次に、図５乃至図８を用いて、本実施の形態の概要を説明する。本実施の形態では、第２のクラスタＣＬ２によって、パターンＡで「１１１１１１１・・・・」を書き込んだ後、パターンＢで「２２２２２２２２・・・・」を書き込むという処理を繰り返す。
【００２７】
そして、パターンＢの書き込み開始から所定時間後に、第１のクラスタＣＬ１によって、排他無しRead命令を実行する。そうすると、図５に模式的に示すように、Write/Readデータ領域２０１の途中まで「２２２２２２２２・・・・」の書き込みを行っている状態で、排他無しRead命令を実行するので、先頭アドレスの読み出し結果は「２」であるが、まだ「２」を書き込む前なので、中央アドレスの読み出し結果は「１」であり、末尾アドレスの読み出し結果も「１」である。
【００２８】
このような状態であれば、排他無しRead命令の直後に排他Read命令を実行して、適切に排他が行われれば、「２２２２２２２２・・・・」の書き込み完了まで、排他Read命令の実行は抑止される。その後、図６に示すように、Write/Readデータ領域２０１には、「２２２２２２２２・・・・」が書き込み完了となるので、先頭アドレスの読み出し結果は「２」となり、中央アドレスの読み出し結果は「２」となり、末尾アドレスの読み出し結果も「２」となる。このような結果が得られれば、排他Read命令の抑止が行われたことが検証できる。
【００２９】
一方、パターンＢを書き込み終わる直前ぐらいに、排他無しRead命令を実行すると、３回目の排他無しRead命令を実行することには、図７に示すように、Write/Readデータ領域２０１には、「２２２２２２２２・・・・」が書き込み完了となるので、先頭アドレスの読み出し結果は「２」であり、中央アドレスの読み出し結果は「２」となり、末尾アドレスの読み出し結果も「２」となる。この直後に、排他Read命令が実行されても、排他Read命令の抑止が発生せずに、書き込み命令に対する抑止のみが効いて図６に示したような読み出しが行われる可能性がある。すなわち、所定時間の設定が不適切であると、排他Read命令の検証が完全には行われないことになる。
【００３０】
本実施の形態では、図５に示すような、パターンＡ書き込み完了後パターンＢの書き込み途中に排他無しRead命令が出力された場合、及びパターンＢ書き込み完了後パターンＡの書き込み途中に排他無しRead命令が出力された場合を、Write/Read競合（以下、簡易的に競合）と呼び、排他無しRead命令の読み出し結果からWrite/Read競合の発生を確認できた場合にのみ、排他Read命令の読み出し結果に基づき検証を行うものとする。
【００３１】
具体的には、図８に示すような読み出しパターンによって、Write/Read競合の有無が判定できる。すなわち、先頭アドレス、中央アドレス及び末尾アドレスの読み出し結果が同一値であれば、競合はなく、それ以外では競合が発生している。先頭アドレス及び中央アドレスの読み出し結果が同一値で、末尾アドレスの読み出し結果が異なる値であれば、Write/Readデータ領域２０１の後半で競合が発生するので、排他Read命令の出力が遅延すると、１つのパターンの書き込みが完了してしまう可能性があり、正しく検証できない状況になりかねない。一方、中央アドレス及び末尾アドレスの読み出し結果が同一値であって、先頭アドレスの読み出し結果と異なる場合には、Write/Readデータ領域２０１の前半で競合が発生するので、多少の遅延があっても競合のままで排他Read命令が行われる。従って、可能な限り、Write/Readデータ領域２０１の前半で競合が発生している状態が好ましい。従って、以下に述べる処理フローでは、競合の位置を決定する所定時間（すなわち待ち時間）の調整をも行う。
【００３２】
次に、図９乃至図１５を用いて排他Read命令の検証を行う際の処理内容を説明する。
【００３３】
まず、第２のクラスタＣＬ２による処理を、図９を用いて説明する。
【００３４】
Writeクラスタ制御部１２１は、Write命令実行部１２２に対して、Writeデータ格納領域１２３１のデータに従って、初期書き込み処理を実行させる（図９：ステップＳ１）。すなわち、Writeデータ格納領域１２３１に規定されているパターンＡを、外部記憶装置２００のWrite/Readデータ領域２０１に転送させる。これによって、Write/Readデータ領域２０１の初期状態を「１１１１１１１・・・・」が書き込まれている状態にする。
【００３５】
また、Writeクラスタ制御部１２１は、Writeパターンを切り替える（ステップＳ２）。パターンＡを書き込んだ場合には、パターンＢを次に書き込むように切り替えを行う。
【００３６】
そして、Writeクラスタ制御部１２１は、外部記憶装置２００の書き込みフラグ領域２０２における書き込みフラグをオンに設定する（ステップＳ３）。この書き込みフラグによって排他無しRead命令の待ち時間の計測が開始される。
【００３７】
さらに、Writeクラスタ制御部１２１は、Write命令実行部１２２に、Write命令を実行させる（ステップＳ５）。すなわち、Writeデータ格納領域１２３１に規定されている次のパターンを、外部記憶装置２００のWrite/Readデータ領域２０１に転送させる。これによって、Write/Readデータ領域２０１に、例えば「２２２２２２２２・・・・」を書き込み始める。
【００３８】
その後、Writeクラスタ制御部１２１は、書き込みフラグ領域２０２における書き込みフラグがオフにセットされるのを待機する（ステップＳ７）。書き込みフラグは、Readクラスタである第１のクラスタＣＬ１によって、一連の処理が終了するとオフに設定されるので、このタイミングまで待機する。
【００３９】
書き込みフラグのオフを検出すると、Writeクラスタ制御部１２１は、Writeパターンを切り替える（ステップＳ９）。
【００４０】
そして、Writeクラスタ制御部１２１は、試験処理を終了するのか否かについて判断する（ステップＳ１１）。例えば、書き込み回数を計数しておき、所定の回数実行したか否かを判断する。
【００４１】
試験処理終了でない場合には、処理はステップＳ３に戻る。一方、試験処理終了であれば、処理を終了する。
【００４２】
次に、Readクラスタである第１のクラスタＣＬ１の処理内容について、図１０乃至図１６を用いて説明する。
【００４３】
まず、Readクラスタ制御部１０１は、実行時間格納領域１０８３に格納されている排他Read命令の実行時間ＲＴ１及びWrite命令の実行時間ＷＴ１を用いて、照合データテーブル１０８１を生成する（図１０：ステップＳ２１）。
【００４４】
具体的には、図１１に示すような照合データテーブルを生成する。照合データテーブルは、競合状態及びデータ読み出し状態に応じた排他Read命令の実行時間ｔの値域を格納するものである。
【００４５】
具体的には、競合状態（すなわち競合あり／競合無し）と、排他Readの読み出しデータとの組み合わせ毎に、排他Read命令の実行時間ｔの許容される値域とが登録されるようになっている。本実施の形態では、競合ありの場合には、１回目の排他Read命令の実行時間ｔは、下限値ＲＴ１×０．９及び上限値（ＲＴ１＋ＷＴ１）×１．１で設定される。これは、競合が発生している場合には、Write命令の実行が終了するまで１回目の排他Read命令の実行は抑止されるので、マージンを考えると上で述べたような上限値が設定される。但し、何らかの理由でＲＴ１が長く測定されている場合もあるので下限値は短めに設定されている。一方、競合有りの場合の２回目及び３回目の排他Read命令の実行時間ｔと、競合無しの場合の排他Read命令の実行時間ｔとは、その実行の抑止はないので、マージンを考えてＲＴ１のプラスマイナス１０％以内と設定されている。このような上限値下限値については、実験などによって異なる値を設定すべき場合もある。
【００４６】
なお、後に述べる照合処理では、排他Readの読み出しデータが、照合データテーブル１０８１に示す組み合わせ以外の場合にも、異常状態と判断される。
【００４７】
次に、Readクラスタ制御部１０１は、例えばＷＴ１に基づき、待ち時間の初期値（ＷＴ１／２）を設定する（ステップＳ２３）。Readクラスタ制御部１０１は、書き込みフラグ領域２０２における書き込みフラグがオンになるまで待機する（ステップＳ２５）。そして、書き込みフラグのオンを検出すると、Readクラスタ制御部１０１は、待ち時間経過管理部１０６に、待ち時間格納領域１０８４に格納されている待ち時間だけ計測させる（ステップＳ２７）。
【００４８】
待ち時間経過管理部１０６による所定の待ち時間の計測が完了すると、Readクラスタ制御部１０１は、排他無しRead命令実行部１０２に対して、排他無しReadデータ格納領域１０８６に格納されているデータに従って排他無しRead命令を実行させる（ステップＳ２９）。すなわち、先頭アドレス、中央アドレス及び末尾アドレスの３カ所について、排他無しRead命令を実行し、読み出しデータを、排他無しReadデータ格納領域１０８６へ書き込む。
【００４９】
さらに、Readクラスタ制御部１０１は、排他Read命令実行部１０３に対して、排他Readデータ格納領域１０８７に格納されているデータに従って排他Read命令を実行させる（ステップＳ３１）。すなわち、先頭アドレス、中央アドレス及び末尾アドレスの３カ所について、排他Read命令を実行し、読み出しデータを、排他Readデータ格納領域１０８７へ書き込む。
【００５０】
そして、Readデータ照合部１０４は、排他無しReadデータ格納領域１０８６に書き込まれている読み出しデータから、Write命令と排他無しRead命令の競合が発生しているか否かを判断する（ステップＳ３３）。図８に示す読み出しパターンのいずれに該当して、競合が発生しているのか否かを判断する。競合有り無しだけではなく、待ち時間の調整のために、前半に競合が発生しているのか、後半に競合が発生しているのかをも特定しておく。
【００５１】
競合がある場合には、処理は端子Ｂを介して図１２のステップＳ３７に移行する。一方、競合がない場合には、処理は端子Ａを介して図１２のステップＳ３５に移行する。
【００５２】
競合がない場合には、待ち時間が長すぎることが想定される。従って、Readデータ照合部１０４は、待ち時間変更部１０７に対して処理を指示し、待ち時間変更部１０７は、例えば、現在の待ち時間−(現在の待ち時間×α）（αは例えば０．５）によって待ち時間を変更し、待ち時間格納領域１０８４に格納する（ステップＳ３５）。そして処理はステップＳ４１に移行する。
【００５３】
一方、競合があった場合には、Readデータ照合部１０４は、競合がWrite/Readデータ領域２０１の前半で発生していたか否かを判断する（ステップＳ３７）。ステップＳ３３で説明したように、図８に示す読み出しパターンのいずれかに該当するのかが分かれば、前半か後半であるかを判断できる。
【００５４】
前半であれば、処理はステップＳ４１に移行する。一方、後半であれば、Readデータ照合部１０４は、待ち時間変更部１０７に対して処理を指示し、待ち時間変更部１０７は、例えば、現在の待ち時間−(現在の待ち時間×α）（αは例えば０．５）によって待ち時間を変更し、待ち時間格納領域１０８４に格納する（ステップＳ３９）。これによって、より安定的に競合を発生させるように、競合位置を前倒しすることができるようになる。そして処理はステップＳ４１に移行する。
【００５５】
そして、Readデータ照合部１０４は、排他Readデータ格納領域１０８７に格納されており且つ排他Read命令で得られたデータ（読み出しデータ及び実行時間）に対して、照合データテーブル１０８１を用いて照合処理を実行し、照合結果格納領域１０８５に格納する（ステップＳ４１）。すなわち、照合データテーブル１０８１において、競合有り、競合無しのいずれかの行に設定されている条件に、今回の読み出しデータ及び実行時間が合致しているか否かを判断する。すなわち、読み出しデータが、「１」又は「２」で揃っていれば正常であり、揃っていなければ異常である。さらに、正常であっても、各回の実行時間が、照合データテーブル１０８１において規定されている上限値と下限値の範囲内に収まっているか否かを判断する。収まっていれば正常であり、収まっていなければ異常である。
【００５６】
照合処理の結果が正常であれば（ステップＳ４３：Ｙｅｓルート）、Readデータ照合部１０４は、照合結果格納領域１０８５に「正常」を表すデータを格納する（ステップＳ４６）。そして処理はステップＳ４７に移行する。一方、照合処理の結果が異常であれば（ステップＳ４３：Ｎｏルート）、Readデータ照合部１０４は、照合結果格納領域１０８５に「異常」を表すデータを格納する（ステップＳ４５）。そして処理はステップＳ４７に移行する。
【００５７】
その後、Readクラスタ制御部１０１は、試験処理を終了するのか否かを判断する（ステップＳ４７）。例えば、照合処理の回数を計数しておき、所定回数に達したか判断する。試験処理を終了しない場合には、Readクラスタ制御部１０１は、書き込みフラグ領域２０２の書き込みフラグをオフに設定する（ステップＳ４９）。これによって、第２のクラスタＣＬ２に対して書き込みパターンの切り替えを行わせて処理を再開させる。そして処理は端子Ｃを介して図９のステップＳ２５に移行する。
【００５８】
一方、試験処理終了であれば、Readクラスタ制御部１０１は、照合結果格納領域１０８５に格納されている照合結果を読み出し、異常なしであれば（ステップＳ５１：Ｎｏルート）、試験実行者などに正常終了を通知する（ステップＳ５３）。そして処理を終了する。一方、異常ありであれば（ステップＳ５１：Ｙｅｓルート）、試験実行者などに異常終了を通知する（ステップＳ５５）。試験実行者への通知は、例えばメールを送信するようにしても良いし、表示装置への表示出力などであっても良い。さらに、何回か照合処理を行っている場合には、いずれの照合処理（何回目かなど）において異常と判定されたのか、先頭アドレス、中央アドレス、末尾アドレスのいずれについて異常と判定されたのか、異常の原因は読み出しデータなのか実行時間なのかといったデータを、通知するようにしても良い。
【００５９】
このような処理を実行することによって、Write命令の実行中に、排他Read命令が実行されたことを確認の上、読み出し結果を検証することができるようになる。
【００６０】
なお、排他無しRead命令を実行せずに排他Read命令の検証を行うことも考えられる。例えば図１３に示すように、第２のクラスタＣＬ２によって「１１１１１１１・・・・」を書き込むWrite命令を出力し、「２２２２２２２２・・・・」を書き込むWrite命令を出力し、「１１１１１１１・・・・」を書き込むWrite命令を出力するといった処理を繰り返す。
【００６１】
そして、図１４に示すように、排他Read命令を、「１１１１１１１・・・・」を書き込んでいる途中の適切なタイミングで出力できれば、排他Read命令の実行が、Write命令の実行完了まで抑止されて、適切な読み出し結果「１１１１１１１・・・・」が得られるようになる。
【００６２】
しかしながら、適切なタイミングであったか否かを検証することはできない。タイミングが遅れてしまえば、図１５に示すように、「１１１１１１１・・・・」の書き込み完了直後に、排他Read命令が実行されたとすると、排他Read命令の抑止は行われないが、読み出し結果は、図１４と同じ「１１１１１１１・・・・」となる。排他Read命令による読み出し結果「１１１１１１１・・・・」が得られれば、Write命令の抑止は行われたことが分かるが、排他Read命令の抑止は確認できない。
【００６３】
一方、本実施の形態では、排他Read命令の抑止があるか否かを、Write命令と排他Read命令に先行する排他無しRead命令との競合を確認することで、確認できる。
【００６４】
より具体的には、図１６に模式的に示すようになる。すなわち、Writeクラスタである第２のクラスタＣＬ２によって、書き込みフラグがオンに設定された後に、Write命令が実行される。書き込みフラグがオンに設定されると、Readクラスタである第１のクラスタＣＬ１により、設定された待ち時間だけ待機した後、排他無しRead命令が、先頭アドレス（１）、中央アドレス（２）及び末尾アドレス（３）について実行される。なお、先頭アドレス（１）の読み出しの時には、Write/Readデータ領域２０１には、「２」が中央あたりまで書き込まれているので、「２」が読み出される。また、中央アドレス（２）の読み出しの時には、Write/Readデータ領域２０１には、「２」が中央過ぎあたりまで書き込まれているが末尾までは書き込まれておらず、「２」が読み出される。さらに、末尾アドレス（３）の読み出しの時には、Write/Readデータ領域２０１には、「２」が末尾に近いところまで書き込まれているが末尾までは書き込まれておらず、「１」が読み出される。これによって、競合が発生していることが、後の照合処理において判明する。
【００６５】
この状態で、排他Read命令を実行すると、適切な制御が行われていれば、排他Read命令の実行は、Write命令の終了まで抑止される。従って、排他Read命令によって、先頭アドレス（１１）の読み出しは、Write/Readデータ領域２０１に「２」が書き込み完了となった後に行われる。さらに、中央アドレス（１２）の読み出し、末尾アドレス（１３）の読み出しが行われる。このように、先頭アドレス（１１）の読み出しの実行時間は、中央アドレス（１２）及び末尾アドレス（１３）の読み出し実行時間より長くなる。
【００６６】
その後、データ照合において、Write命令の読み出し結果から競合が発生していたか否かを判定すると共に、排他Read命令の読み出し結果の照合処理が行われて、正常に試験が行われたか異常が発生したかを判定する。その後試験を再度実行するのであれば、第１クラスタＣＬ１が、書き込みフラグをオフに設定する。この書き込みフラグのオフを検出して、第２クラスタＣＬ２は、書き込みフラグをオンに設定すると共に、書き込みパターンを切り替えて、Write命令を実行するようになる。
【００６７】
これに対して、待ち時間が長すぎる場合には、排他無しRead命令の読み出し結果によって競合無しを認識できるので、排他Read命令の読み出し結果を評価せずに、待ち時間を短縮することで対処できるようになる。
【００６８】
なお、書き込みパターンについては、２パターンの繰り返しではなく、３パターン以上の書き込みパターンを切り替えて用いるようにしても良い。また、競合発生を前半、後半ということを認識するために３カ所Readを行っているが、待ち時間の調整を試行錯誤的に行うのであれば、先頭アドレスと末尾アドレスを読み出すようにしても良い。また、排他無しRead命令について先頭アドレスを読み出すのは、主に現在どのような値をWrite命令で書き込んでいるのかを特定するためであるので、他の手法にてWrite命令で書き込んでいる値を特定できれば、先頭アドレスの読み出しも省略できる。なお、読み出す箇所を増加させるようにして、待ち時間の調整を精密に行うようにしても良い。
【００６９】
排他Read命令については、一部を読み出すようにしているが、Write/Readデータ領域２０１全体を読み出すようにしても良い。また、読み出す箇所を増加させても良い。
【００７０】
なお、上で述べた処理フローに従えば、中央アドレスを先頭アドレスに近づけることにより、Write命令の発行からRead命令の発行を早めることができ、Write命令の開始アドレス付近で排他Read命令を競合させるような試験も可能となる。
【００７１】
一方、中央アドレスを末尾アドレスに近づけることによりWrite命令の発行からRead命令の発行を遅らせることができ、Write命令の終了アドレス付近で排他Read命令を競合させるような試験も可能である。
【００７２】
また、上で述べた処理フローでは、排他無しRead命令及び排他Read命令を実行する毎に、照合を行っていた。しかし、複数回排他無しRead命令及び排他Read命令の組み合わせを実行する場合には、待ち時間の調整のみを各回で行って、読み出し結果を別に保持しておくことで照合を最後にまとめて行うようにしても良い。
【００７３】
［実施の形態２］
本実施の形態では、Write命令実行中の排他Read命令の実行抑止だけではなく、排他Read命令実行中のWrite命令の実行抑止を行う場合について説明する。但し、Write命令実行中の排他Read命令の実行抑止については、第１の実施の形態より簡易に判定するものとする。
【００７４】
図１に示した第１の実施の形態の構成を、第２の実施の形態においてもほぼそのまま採用する。但し、照合データテーブル１０８１及び命令時間測定部１０５については用いない。また、本実施の形態に係るWriteデータ格納領域１２３１には、図１７に示すようなデータフォーマットでデータが格納される。具体的には、パターンＣが追加されており、パターンＣは、Write/Readデータ領域２０１の末尾アドレスに対して、数バイト程度の例えばパターンＡと同一の値の転送データを書き込むための書き込みパターンである。なお、パターンＣは、Write/Readデータ領域２０１の末尾アドレスに対して、数バイト程度の例えばパターンＡと同一の値の転送データを書き込み、次に中央アドレスに、同様の転送データを書き込み、さらに先頭アドレスに、同様の転送データを書き込むような書き込みパターンである場合もある。書き込む値はパターンＡと同じでなくても良い。具体的には、パターンＢと異なっていればよい。
【００７５】
また、排他Readデータ格納領域１０８７には、例えば図１８に示すようなデータフォーマットでデータが格納される。図１８の例では、Write/Readデータ領域２０１の先頭アドレスと、転送データ長（Write/Readデータ領域の全域）と、排他Read命令での読み込みデータとが含まれるようになっている。排他Read命令での読み出しデータは、実行後に書き込まれる。
【００７６】
ここで、図１９を用いて第２の実施の形態の概要を説明する。排他無しRead命令を３回実行する時点までは、第１の実施の形態と同様である。しかし、本実施の形態では、Write/Readデータ領域２０１全体について排他Read命令を実行する。このような場合であっても、正常であれば、排他Read命令の実行は、Write命令実行が完了するまで抑止される。
【００７７】
さらに、本実施の形態では、書き込みパターンをパターンＣに切り替え、末尾アドレス（２１）に対して「１」を書き込むためのWrite命令を実行する。ここでも、正常であれば、排他Read命令の実行完了まで、このWrite命令の実行は抑止される。末尾アドレス（２１）にWrite命令を実行するのは、排他Read命令中にWrite命令の実行が抑止されなかった場合、末尾アドレスであれば、排他Read命令完了時に、異なる値「１」が読み出されるため、後の照合処理で検出できるようになる。なお、このようにWrite/Readデータ領域２０１の一部のみにWrite命令が実行されるので、データ照合が終了した後には、初期の書き込み処理を再度を行って、Write/Readデータ領域２０１に「１１１１１１１・・・・」が書き込まれるようにする。照合処理では、排他Read命令実行によって読み出された値が全て同じ値となっているか否かを判断する。
【００７８】
以上のような処理を行うため、図２０乃至図２２を用いて具体的な処理内容を説明する。
【００７９】
まず、図２０を用いてWriteクラスタである第２のクラスタＣＬ２によって実行される処理を説明する。
【００８０】
Writeクラスタ制御部１２１は、Write命令実行部１２２に対して、Writeデータ格納領域１２３１のデータに従って、初期書き込み処理を実行させる（図２０：ステップＳ１０１）。すなわち、Writeデータ格納領域１２３１に規定されているパターンＡを、外部記憶装置２００のWrite/Readデータ領域２０１に転送させる。これによって、Write/Readデータ領域２０１の初期状態を「１１１１１１１・・・・」が書き込まれている状態にする。
【００８１】
また、Writeクラスタ制御部１２１は、Writeパターンを切り替える（ステップＳ１０３）。パターンＡを書き込んだ場合には、パターンＢを次に書き込むように切り替えを行う。
【００８２】
そして、Writeクラスタ制御部１２１は、外部記憶装置２００の書き込みフラグ領域２０２における書き込みフラグをオンに設定する（ステップＳ１０５）。この書き込みフラグによって排他無しRead命令の待ち時間の計測が開始される。
【００８３】
さらに、Writeクラスタ制御部１２１は、Write命令実行部１２２に、Write命令を実行させる（ステップＳ１０７）。すなわち、Writeデータ格納領域１２３１に規定されている次のパターンを、外部記憶装置２００のWrite/Readデータ領域２０１に転送させる。これによって、Write/Readデータ領域２０１に、例えば「２２２２２２２２・・・・」を書き込み始める。
【００８４】
その後、Writeクラスタ制御部１２１は、Writeパターンを切り替える（ステップＳ１０９）。パターンＢを書き込んだ場合には、パターンＣを次に書き込むように切り替えを行う。本実施の形態では、末尾アドレスにパターンＡと同じ値「１」を書き込むように設定する。
【００８５】
そして、Writeクラスタ制御部１２１は、Write命令実行部１２２に、切り替え後の書き込みパターンＣでWrite命令を実行させる（ステップＳ１０７）。上で述べたように、正常であれば、排他Read命令によって、このWrite命令の実行は抑止される。
【００８６】
その後、Writeクラスタ制御部１２１は、書き込みフラグ領域２０２における書き込みフラグがオフにセットされるのを待機する（ステップＳ１１３）。書き込みフラグは、Readクラスタである第１のクラスタＣＬ１によって、一連の処理が終了するとオフに設定されるので、このタイミングまで待機する。
【００８７】
書き込みフラグのオフを検出すると、Writeクラスタ制御部１２１は、試験処理を終了するのか否かについて判断する（ステップＳ１１５）。例えば、書き込み回数を計数しておき、所定の回数実行したか否かを判断する。試験処理終了であれば、処理を終了する。
【００８８】
試験処理終了でない場合には、Writeクラスタ制御部１２１は、Writeパターンを切り替える（ステップＳ１１７）。例えばパターンＡに切り替える。そして、処理はステップＳ１０１に戻る。
【００８９】
次に、Readクラスタである第１のクラスタＣＬ１の処理内容について、図２１及び図２２を用いて説明する。
【００９０】
まず、Readクラスタ制御部１０１は、書き込みフラグ領域２０２における書き込みフラグがオンになるまで待機する（図２１：ステップＳ１２１）。そして、書き込みフラグのオンを検出すると、Readクラスタ制御部１０１は、待ち時間経過管理部１０６に、待ち時間格納領域１０８４に格納されている待ち時間だけ計測させる（ステップＳ１２３）。
【００９１】
待ち時間経過管理部１０６による所定の待ち時間の計測が完了すると、Readクラスタ制御部１０１は、排他無しRead命令実行部１０２に対して、排他無しReadデータ格納領域１０８６に格納されているデータに従って排他無しRead命令を実行させる（ステップＳ１２５）。すなわち、先頭アドレス、中央アドレス及び末尾アドレスの３カ所について、排他無しRead命令を実行し、読み出しデータを、排他無しReadデータ格納領域１０８６へ書き込む。
【００９２】
さらに、Readクラスタ制御部１０１は、排他Read命令実行部１０３に対して、排他Readデータ格納領域１０８７に格納されているデータに従って、Write/Readデータ領域２０１の全域に対して排他Read命令を実行させる（ステップＳ１２７）。また、排他Read命令によって読み出されたデータを、排他Readデータ格納領域１０８７へ書き込む。
【００９３】
そして、Readデータ照合部１０４は、排他無しReadデータ格納領域１０８６に書き込まれている読み出しデータから、Write命令と排他無しRead命令の競合が発生しているか否かを判断する（ステップＳ１２９）。図８に示す読み出しパターンのいずれに該当して、競合が発生しているのか否かを判断する。競合有り無しだけではなく、待ち時間の調整のために、前半に競合が発生しているのか、後半に競合が発生しているのかをも特定しておく。
【００９４】
競合がある場合には、処理は端子Ｅを介して図２２のステップＳ１３３に移行する。一方、競合がない場合には、処理は端子Ｄを介して図２２のステップＳ１３１に移行する。
【００９５】
競合がない場合には、待ち時間が長すぎることが想定される。従って、Readデータ照合部１０４は、待ち時間変更部１０７に対して処理を指示し、待ち時間変更部１０７は、例えば、現在の待ち時間−(現在の待ち時間×α）（αは例えば０．５）によって待ち時間を変更し、待ち時間格納領域１０８４に格納する（ステップＳ１３１）。そして処理はステップＳ１３７に移行する。
【００９６】
一方、競合があった場合には、Readデータ照合部１０４は、競合がWrite/Readデータ領域２０１の前半で発生していたか否かを判断する（ステップＳ１３３）。ステップＳ１３１で説明したように、図８に示す読み出しパターンのいずれかに該当するのかが分かれば、前半か後半であるかを判断できる。
【００９７】
前半であれば、処理はステップＳ１３７に移行する。一方、後半であれば、Readデータ照合部１０４は、待ち時間変更部１０７に対して処理を指示し、待ち時間変更部１０７は、例えば、現在の待ち時間−(現在の待ち時間×α）（αは例えば０．５）によって待ち時間を変更し、待ち時間格納領域１０８４に格納する（ステップＳ１３５）。これによって、より安定的に競合を発生させるように、競合位置を前倒しすることができるようになる。そして処理はステップＳ１３７に移行する。
【００９８】
そして、Readデータ照合部１０４は、排他Readデータ格納領域１０８７に格納されており且つ排他Read命令によって読み出されたデータが全て同一値であるか否かを判断する照合処理を実行し、照合結果格納領域１０８５に格納する（ステップＳ１３７）。全て同一値、具体的には「２」であれば、Write命令による排他Read命令の実行抑止及び排他Read命令によるWrite命令の実行抑止が検証されることになるので、正常と判断される。一部でも異なる値が読み出されていれば異常と判断される。
【００９９】
照合処理の結果が正常であれば（ステップＳ１３９：Ｙｅｓルート）、Readデータ照合部１０４は、照合結果格納領域１０８５に「正常」を表すデータを格納する（ステップＳ１４３）。そして処理はステップＳ１４５に移行する。一方、照合処理の結果が異常であれば（ステップＳ１３９：Ｎｏルート）、Readデータ照合部１０４は、照合結果格納領域１０８５に「異常」を表すデータを格納する（ステップＳ１４１）。そして処理はステップＳ１４５に移行する。
【０１００】
その後、Readクラスタ制御部１０１は、試験処理を終了するのか否かを判断する（ステップＳ１４５）。例えば、照合処理の回数を計数しておき、所定回数に達したか判断する。試験処理を終了しない場合には、Readクラスタ制御部１０１は、書き込みフラグ領域２０２の書き込みフラグをオフに設定する（ステップＳ１４７）。これによって、第２のクラスタＣＬ２に対して書き込みパターンの切り替えを行わせて処理を再開させる。処理終了でなければパターンＡに切り替えて初期書き込みを行わせる。そして処理は端子Ｆを介して図２１のステップＳ１２１に移行する。
【０１０１】
一方、試験処理終了であれば、Readクラスタ制御部１０１は、照合結果格納領域１０８５に格納されている照合結果を読み出し、異常ありであれば（ステップＳ１４９：Ｙｅｓルート）、試験実行者などに異常終了を通知する（ステップＳ１５３）。そして処理を終了する。一方、異常なしであれば（ステップＳ１４９：Ｎｏルート）、試験実行者などに正常終了を通知する（ステップＳ１５１）。試験実行者への通知は、例えばメールを送信するようにしても良いし、表示装置への表示出力などであっても良い。さらに、何回か照合処理を行っている場合には、いずれの照合処理（何回目かなど）において異常と判定されたのか、先頭アドレス、中央アドレス、末尾アドレスのいずれについて異常と判定されたのか、異常の原因は読み出しデータなのか実行時間なのかといったデータを、通知するようにしても良い。
【０１０２】
このような処理を実行することによって、Write命令の実行中に、排他Read命令が実行されたことを確認でき、さらに排他Read命令実行中にはWrite命令が実行されないことを検証することができるようになる。
【０１０３】
さらに、競合の有無を判定したり、読み出し結果の照合を行う処理については、Readクラスタではなく、Writeクラスタで実行するようにしても良い。
【０１０４】
以上述べた実施の形態は例にすぎず、本発明はこれらに限定されるものではない。
【０１０５】
さらに、図１に示した機能ブロック図は一例であって、プログラムモジュール構成やファイル構成とは一致しない場合もある。処理フローについても、処理結果が変わらない限り、処理順番を入れ替えたり、並列実行する場合もある。
【０１０６】
なお、上で述べたクラスタは、コンピュータ装置であって、図２３に示すように、メモリ２５０１とＣＰＵ（Central Processing Unit）２５０３とハードディスク・ドライブ（ＨＤＤ：Hard Disk Drive）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【０１０７】
また、クラスタは、単にプロセッサとメモリを含む処理装置である場合もある。
【０１０８】
以上述べた本実施の形態をまとめると、以下のようになる。
【０１０９】
本実施の形態に係る試験方法は、（Ａ）記憶装置の所定の領域に対して第１の値を書き込む処理と、所定の領域に対して第１の値とは異なる第２の値を書き込む処理とを実行し、（Ｂ）第２の値を書き込む処理の開始から所定時間後に、所定の領域の少なくとも一部分に対して排他無しの読み出し命令を実行し、（Ｃ）排他無しの読み出し命令の後に、排他読み出し命令を、所定の領域又は所定の領域内の複数箇所に対して実行し、（Ｄ）排他無しの読み出し命令の読み出し結果に基づき、所定の領域に対して第２の値の書き込みが完了した状態であるか否かを判断し、（Ｅ）所定の領域に対して第２の値の書き込みが完了していない状態であると判断された場合、排他読み出し命令の読み出し結果が、同じ値であるか判断する処理を含む。
【０１１０】
このように排他無しの読み出し命令によって、所定の領域に対して第２の値の書き込みが完了していない状態であると確認できれば、排他読み出し命令の実行抑止が適切に行われているか否かを判定できるようになる。
【０１１１】
なお、上記試験方法は、（Ｆ）所定の領域に対して第２の値の書き込みが完了している状態であると判断された場合には、所定時間を短縮する処理をさらに含むようにしても良い。所定時間が長すぎたため短縮するものである。
【０１１２】
さらに、上で述べた排他無しの読み出し命令を実行する処理が、所定の領域内の複数箇所に対して排他無しの読み出し命令を実行する処理である場合もある。この場合、上で述べた第２の値の書き込みが完了した状態である否かを判断する処理が、排他無しの読み出し命令の、複数箇所に対する読み出し結果が一致するか否かを判断する処理を含むようにしても良い。このようにすれば、第２の値の書き込みが完了した状態を確実に判定できる。
【０１１３】
さらに、上記試験方法は、（Ｇ）排他読み出し命令の処理時間を計測し、（Ｈ）排他読み出し命令の処理時間が、所定の条件を満たしているか否かを判断する処理をさらに含むようにしても良い。このようにすれば、時間的な観点においても、排他読み出し命令が適切に実行されたか否かを検証できるようになる。
【０１１４】
さらに、上で述べた排他無しの読み出し命令を実行する処理が、所定の領域において、第１の部分と、第１の部分より後ろの第２の部分と、第２の部分より後ろの第３の部分とに対して排他無しの読み出し命令を実行する処理を含むようにしても良い。このような場合、上で述べた第２の値の書き込みが完了した状態である否かを判断する処理が、第１の部分の読み出し結果と、第２の部分の読み出し結果及び第３の部分の読み出し結果とが同じであるか否かを判断する処理を含むようにしても良い。そして、上記試験方法が、第１の部分の読み出し結果と第２の部分の読み出し結果とは同じ値であるが、第３の部分の読み出し結果が異なっている場合には、所定時間を短縮する処理をさらに含むようにしても良い。適切な所定時間を設定できるようになる。
【０１１５】
さらに、上記試験方法は、上で述べた第２の値を書き込む処理の後に、第２の値とは異なる第３の値を所定の領域の少なくとも一部に書き込むように指示する処理をさらに含むようにしても良い。これによって、排他読み出し命令による後続の書き込み命令の実行抑止を確認できるようになる。
【０１１６】
なお、上で述べたような処理をプロセッサ又はコンピュータに実行させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、ＣＤ−ＲＯＭなどの光ディスク、光磁気ディスク、半導体メモリ（例えばＲＯＭ）、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、ＲＡＭ等の記憶装置に一時保管される。
【０１１７】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１１８】
（付記１）
コンピュータが、
記憶装置の所定の領域に対して第１の値を書き込む処理と、前記所定の領域に対して前記第１の値とは異なる第２の値を書き込む処理とを実行し、
前記第２の値を書き込む処理の開始から所定時間後に、前記所定の領域の少なくとも一部分に対して排他無しの読み出し命令を実行し、
前記排他無しの読み出し命令の後に、排他読み出し命令を、前記所定の領域又は前記所定の領域内の複数箇所に対して実行し、
前記排他無しの読み出し命令の読み出し結果に基づき、前記所定の領域に対して前記第２の値の書き込みが完了した状態であるか否かを判断し、
前記所定の領域に対して前記第２の値の書き込みが完了していない状態であると判断された場合、前記排他読み出し命令の読み出し結果が、同じ値であるか判断する
処理を含む試験方法。
【０１１９】
（付記２）
前記所定の領域に対して前記第２の値の書き込みが完了している状態であると判断された場合には、前記所定時間を短縮する
処理をさらに含む付記１記載の試験方法。
【０１２０】
（付記３）
前記排他無しの読み出し命令を実行する処理が、前記所定の領域内の複数箇所に対して排他無しの読み出し命令を実行する処理
であり、
前記第２の値の書き込みが完了した状態である否かを判断する処理が、
前記排他無しの読み出し命令の、前記複数箇所に対する読み出し結果が一致するか否かを判断する処理
を含む付記１又は２記載の試験方法。
【０１２１】
（付記４）
前記排他読み出し命令の処理時間を計測し、
前記排他読み出し命令の処理時間が、所定の条件を満たしているか否かを判断する
処理をさらに含む付記１乃至３のいずれか１つ記載の試験方法。
【０１２２】
（付記５）
前記排他無しの読み出し命令を実行する処理が、
前記所定の領域において、第１の部分と、前記第１の部分より後ろの第２の部分と、前記第２の部分より後ろの第３の部分とに対して前記排他無しの読み出し命令を実行する処理を含み、
前記第２の値の書き込みが完了した状態である否かを判断する処理が、
前記第１の部分の読み出し結果と、前記第２の部分の読み出し結果及び前記第３の部分の読み出し結果とが同じであるか否かを判断する処理を含み、
前記第１の部分の読み出し結果と前記第２の部分の読み出し結果とは同じ値であるが、前記第３の部分の読み出し結果が異なっている場合には、前記所定時間を短縮する処理
をさらに含む付記１乃至４のいずれか１つ記載の試験方法。
【０１２３】
（付記６）
前記第２の値を書き込む処理の後に、前記第２の値とは異なる第３の値を前記所定の領域の少なくとも一部に書き込むように指示する処理
をさらに含む付記１乃至５のいずれか１つ記載の試験方法。
【０１２４】
（付記７）
記憶装置の所定の領域に対して第１の値を書き込む処理と、前記所定の領域に対して前記第１の値とは異なる第２の値を書き込む処理を実行中に、
前記第２の値を書き込む処理の開始から所定時間後に、前記所定の領域の少なくとも一部分に対して排他無しの読み出し命令を実行し、
前記排他無しの読み出し命令の後に、排他読み出し命令を、前記所定の領域又は前記所定の領域内の複数箇所に対して実行し、
前記排他無しの読み出し命令の読み出し結果に基づき、前記所定の領域に対して前記第２の値の書き込みが完了した状態であるか否かを判断し、
前記所定の領域に対して前記第２の値の書き込みが完了していない状態であると判断された場合、前記排他読み出し命令の読み出し結果が、同じ値であるか判断する
処理を、処理装置に実行させるための試験プログラム。
【０１２５】
（付記８）
第１の処理装置と、
第２の処理装置と、
前記第１の処理装置と前記第２の処理装置とに接続されている記憶装置と、
を有し、
前記第１の処理装置が、
前記記憶装置の所定の領域に対して第１の値を書き込む処理と、前記所定の領域に対して前記第１の値とは異なる第２の値を書き込む処理を実行し、
前記第２の処理装置が、
前記第２の値を書き込む処理の開始から所定時間後に、前記所定の領域の少なくとも一部分に対して排他無しの読み出し命令を実行し、
前記排他無しの読み出し命令の後に、排他読み出し命令を、前記所定の領域又は前記所定の領域内の複数箇所に対して実行し、
前記第１の処理装置又は前記第２の処理装置が、
前記排他無しの読み出し命令の読み出し結果に基づき、前記所定の領域に対して前記第２の値の書き込みが完了した状態であるか否かを判断し、
前記所定の領域に対して前記第２の値の書き込みが完了していない状態であると判断された場合、前記排他読み出し命令の読み出し結果が、同じ値であるか判断する
システム。
【符号の説明】
【０１２６】
１０１  Readクラスタ制御部
１０２  排他無しRead命令実行部
１０３  排他Read命令実行部
１０４  Readデータ照合部
１０５  命令時間測定部
１０６  待ち時間経過管理部
１０７  待ち時間変更部
１０８  データ記憶部
１０８１  照合データテーブル
１０８２  待ち時間変更テーブル
１０８３  実行時間格納領域
１０８４  待ち時間格納領域
１０８５  照合結果格納領域
１０８６  排他無しReadデータ格納領域
１０８７  排他Readデータ格納領域
１２１  Writeクラスタ制御部
１２２  Write命令実行部
１２３  データ記憶部
１２３１  Writeデータ格納領域
２００  外部記憶装置
２０１  Write/Readデータ領域
２０２  書き込みフラグ領域
【図１】
2015141656.tif 000003
【図２】
2015141656.tif 000004
【図３】
2015141656.tif 000005
【図４】
2015141656.tif 000006
【図５】
2015141656.tif 000007
【図６】
2015141656.tif 000008
【図７】
2015141656.tif 000009
【図８】
2015141656.tif 000010
【図９】
2015141656.tif 000011
【図１０】
2015141656.tif 000012
【図１１】
2015141656.tif 000013
【図１２】
2015141656.tif 000014
【図１３】
2015141656.tif 000015
【図１４】
2015141656.tif 000016
【図１５】
2015141656.tif 000017
【図１６】
2015141656.tif 000018
【図１７】
2015141656.tif 000019
【図１８】
2015141656.tif 000020
【図１９】
2015141656.tif 000021
【図２０】
2015141656.tif 000022
【図２１】
2015141656.tif 000023
【図２２】
2015141656.tif 000024
【図２３】
2015141656.tif 000025