(57)【要約】      （修正有）【課題】マルチスレッドプログラムおよびマルチプロセスプログラム等の並列プログラムのデータアクセス違反の検出。【解決手段】現在のユーザスレッドによるメモリアドレスへの現在のメモリアクセスに関連する現在のメモリアクセス情報を取得する。キャッシュがメモリアドレスに関連付けられたキャッシュエントリを含むか否かを決定し、キャッシュがメモリアドレスに関連付けられたキャッシュエントリを含む場合、現在のメモリアクセス情報およびキャッシュエントリに格納されているアクセス履歴を分析して、メモリアドレスに対するアクセスに関して実際の違反および潜在的な違反の少なくともいずれかがあるか否かを検出する。【選択図】図７
2010067265.tif 000002
【特許請求の範囲】
【請求項１】
現在のユーザスレッドによるメモリアドレスへの現在のメモリアクセスに関連する現在のメモリアクセス情報を取得する段階と、
キャッシュが前記メモリアドレスに関連付けられたキャッシュエントリを含むか否かを決定する段階と、
前記キャッシュが前記メモリアドレスに関連付けられた前記キャッシュエントリを含む場合、前記現在のメモリアクセス情報および前記キャッシュエントリに格納されているアクセス履歴を分析して、前記メモリアドレスに対するアクセスに関して実際の違反および潜在的な違反の少なくともいずれかがあるか否かを検出する段階と、を備える、方法。
【請求項２】
前記アクセス履歴は、前記メモリアドレスに対する複数のメモリアクセスに関連するメモリアクセス情報を含み、
前記複数のメモリアクセスの各々は、複数のユーザスレッドのいずれかが行い、
前記複数のメモリアクセスのうち１つのメモリアクセスに関連する前記メモリアクセス情報は、前記メモリアクセスの時間情報、前記メモリアクセスの種類、メモリアクセス長、前記複数のユーザスレッドのうち前記メモリアクセスを行っているユーザスレッドの識別子、および前記メモリアドレスからなる群のうち１以上を含む、請求項１に記載の方法。
【請求項３】
前記分析する段階は、さらに、
前記アクセス履歴が前記現在のユーザスレッドによる前記メモリアドレスに対する先行するメモリアクセスに関連する先行するメモリアクセス情報を含むか否かを決定する段階と、
前記アクセス履歴が前記先行するメモリアクセス情報を含む場合、前記先行するメモリアクセスの先行するアクセス時間から、前記現在のメモリアクセスの現在のアクセス時間まで継続する検出間隔を決定する段階と、を有する、請求項１に記載の方法。
【請求項４】
前記分析する段階は、さらに、
前記アクセス履歴が、遠隔ユーザスレッドによる検出間隔中の遠隔アクセス時間における前記メモリアドレスへの遠隔メモリアクセスを示す場合であって、前記遠隔メモリアクセスにより、前記現在のユーザスレッドの前記メモリアドレスに対するアクセス違反が生じ、前記遠隔アクセス時間が、前記アクセス履歴に基づき前記メモリアドレスにアクセスした一番最近の時間である場合に、前記実際の違反を検出する段階と、
前記アクセス履歴が、遠隔ユーザスレッドによる検出間隔中の遠隔アクセス時間における前記メモリアドレスへの遠隔メモリアクセスを示す場合であって、前記遠隔メモリアクセスにより、前記現在のユーザスレッドの前記メモリアドレスに対するアクセス違反が生じ、前記遠隔アクセス時間が、前記アクセス履歴に基づき前記メモリアドレスにアクセスした一番最近の時間ではない場合に、前記潜在的な違反を検出する段階と、を有する、請求項１に記載の方法。
【請求項５】
前記キャッシュが前記メモリアドレスに関連付けられた前記キャッシュエントリを含む場合、前記現在のメモリアクセス情報を前記キャッシュエントリに追加する段階をさらに備える、請求項１に記載の方法。
【請求項６】
前記キャッシュが前記メモリアドレスに関連付けられた前記キャッシュエントリを含まない場合、
前記メモリアドレスが所定のメモリ領域にある場合、前記キャッシュの別のキャッシュエントリを見つけて、前記現在のメモリアクセス情報を前記別のキャッシュエントリに格納する段階と、
前記メモリアドレスが前記所定のメモリ領域にない場合、前記現在のメモリアクセス情報をスキップする段階と、をさらに備える、請求項１に記載の方法。
【請求項７】
前記現在のメモリアクセス情報は、第１のバッファから取得される、請求項１に記載の方法。
【請求項８】
第２のバッファが満杯の場合、前記第１のバッファを前記第２のバッファとスイッチする段階をさらに備え、
前記第２のバッファには、複数のユーザスレッドによるメモリ領域へのアクセスに関連する情報が記録される、請求項７に記載の方法。
【請求項９】
前記メモリアドレスは、前記第２のバッファを識別するビットを少なくとも１つ含む、請求項８に記載の方法。
【請求項１０】
メモリにアクセスする複数のユーザスレッドと、
処理スレッドと、
前記処理スレッドに関連付けられたキャッシュと、
前記処理スレッドに関連付けられた第１のバッファと、を備えるシステムであって、
前記キャッシュの１つのキャッシュエントリは、１つのメモリアドレスへの複数のメモリアクセスに関連するメモリアクセス情報を含むアクセス履歴を格納しており、
前記複数のメモリアクセスの各々は前記複数のユーザスレッドにより行われ、
前記メモリアクセス情報は前記第１のバッファから取得される、システム。
【請求項１１】
前記複数のメモリアクセスのうち１つのメモリアクセスに関連する前記メモリアクセス情報は、前記メモリアクセスの時間情報、前記メモリアクセスの種類、メモリアクセス長、前記複数のユーザスレッドのうち前記メモリアクセスを行っているユーザスレッドの識別子、および前記メモリアドレスからなる群のうち１以上を含む、請求項１０に記載のシステム。
【請求項１２】
前記キャッシュはソフトウェアキャッシュである、請求項１０に記載のシステム。
【請求項１３】
前記処理スレッドは、さらに、
前記第１のバッファから、前記複数のユーザスレッドのうち現在のユーザスレッドによる前記メモリアドレスへの現在のメモリアクセスに関連する現在のメモリアクセス情報を取得し、
前記キャッシュが前記メモリアドレスに関連付けられたキャッシュエントリを含むか否かを決定し、
前記キャッシュが前記メモリアドレスに関連付けられた前記キャッシュエントリを含む場合、前記現在のメモリアクセス情報および前記キャッシュエントリに格納されている前記アクセス履歴を分析して、実際の違反および潜在的な違反の少なくともいずれかがあるか否かを検出する、請求項１０に記載のシステム。
【請求項１４】
前記処理スレッドは、さらに、
前記アクセス履歴が前記現在のユーザスレッドによる前記メモリアドレスに対する先行するメモリアクセスに関連する先行するメモリアクセス情報を含むか否かを決定し、
前記アクセス履歴が前記先行するメモリアクセス情報を含む場合、前記先行するメモリアクセスの先行するアクセス時間から、前記現在のメモリアクセスの現在のアクセス時間まで継続する検出間隔を決定する、請求項１３に記載のシステム。
【請求項１５】
前記処理スレッドは、さらに、
前記アクセス履歴が、前記複数のユーザスレッドのうち遠隔ユーザスレッドによる検出間隔中の遠隔アクセス時間における前記メモリアドレスへの遠隔メモリアクセスを示す場合であって、前記遠隔メモリアクセスにより、前記現在のユーザスレッドの前記メモリアドレスに対するアクセス違反が生じ、前記遠隔アクセス時間が、前記アクセス履歴に基づき一番最近のメモリアクセス時間である場合に、前記実際の違反を検出し、
前記アクセス履歴が、前記複数のユーザスレッドのうち遠隔ユーザスレッドによる検出間隔中の遠隔アクセス時間における前記メモリアドレスへの遠隔メモリアクセスを示す場合であって、前記遠隔メモリアクセスにより、前記現在のユーザスレッドの前記メモリアドレスに対するアクセス違反が生じ、前記遠隔アクセス時間が、前記アクセス履歴に基づき一番最近のメモリアクセス時間ではない場合に、前記潜在的な違反を検出する、請求項１３に記載のシステム。
【請求項１６】
前記処理スレッドに関連付けられた第２のバッファをさらに備え、
前記第２のバッファには、前記複数のユーザスレッドによるメモリ領域へのアクセスに関連するメモリアクセス情報が記録され、
前記処理スレッドは、さらに、前記第２のバッファが満杯の場合、前記第２のバッファを前記第１のバッファとスイッチする、請求項１０に記載のシステム。
【請求項１７】
前記メモリアドレスは、前記第２のバッファを識別するビットを少なくとも１つ含む、請求項１６に記載のシステム。
【請求項１８】
実行されるとシステムに請求項１から９のいずれか一項に記載の方法の段階全てを行わせる複数の命令を備える機械可読媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
マルチスレッドプログラムおよびマルチプロセスプログラム等の並列プログラムのバグは、全てのソフトウェアのバグのなかでも最も試験および診断が難しいものの１つである。並列プログラムのバグの種類には、データレース（data race）およびデータアクセス原子性違反（data access atomicity violation）といったものがある。データレースは、例えば、２つのスレッド（そのうち少なくとも一方が書き込みである）が、正しく同期せずメモリの同じデータに同時にアクセスする際に起こりうる。データアクセス原始性違反は、例えば、原子領域としての実行が期待されているにも関わらず、コード領域を非原子的に実行するような場合に起こりうる。データアクセス原子性の検出アルゴリズムは、あるコード領域の原子性に関連するプログラマの仮定を良く示すアクセスインターリーブ不変量（access interleaving invariant）と称される観察に依存しうる。
【図面の簡単な説明】
【０００２】
ここに記載する発明を、添付図面において限定ではなく例示として示す。図示の簡略化および明瞭化を目指して、図面に示す要素は必ずしも実寸に即して描かれていない場合がある。例えば、幾らかの要素の寸法を他の要素の寸法より大きく描いて、明瞭化に努めている。さらに、適切な場合には、図面間で参照番号を繰り返して、対応する、または、類似した要素であることを示している。
【図１】データアクセスインタリーブの一実施形態を示す。
【図２】データアクセス違反を検出する装置を有するコンピュータプラットフォームの一実施形態を示す。
【図３ａ】メモリアドレスの実施形態を示す。
【図３ｂ】メモリアドレスの実施形態を示す。
【図４ａ】キャッシュエントリの実施形態を示す。
【図４ｂ】キャッシュページの実施形態を示す。
【図５】実際のデータアクセス違反および潜在的なデータアクセス違反の一実施形態を示す。
【図６】メモリアクセス情報の格納方法の一実施形態を示す。
【図７】データアクセス違反を検出する一実施形態を示す。
【発明を実施するための形態】
【０００３】
以下の記載では、データアクセス違反を検出する技術を記載する。以下の記載においては、ロジック実装、疑似コード、オペランド特定手段、リソース分割／共有／複製の実装、システムコンポーネントの種類および相互関連性、および、ロジック分割／統合の選択といった多数の特定の詳細を述べて、本発明のより完全な理解を促している。しかし、本発明は、これら特定の詳細がなくても実行することが可能である。他の場合には、制御構造、ゲートレベル回路、およびソフトウェア命令列全体は詳細には示さないことで、本発明を曖昧にしないよう心がけている。当業者が記載を読めば、過度の実験を行わずに適切な機能を実装することができる。
【０００４】
明細書における「一実施形態」「実施形態」「例示的実施形態」等の言い回しは、記載されている実施形態が、特定の特徴、構造、または特性を有するが、全ての実施形態がその特定の特徴、構造、または特性を有する必要があるわけではない。さらに、このような言い回しは、必ずしも同じ実施形態のことを言っている場合ばかりではない。さらに、特定の特徴、構造、または特性が一実施形態との関連で記載されている場合、それら特徴、構造、または特性を、明示されているか否かに関わらず他の実施形態と関連させて実行することは当業者の知識の範囲であるとする。
【０００５】
本発明の実施形態は、ハードウェア、ソフトウェア、またはそれらの任意の組み合わせにより実装可能である。本発明の実施形態は、さらに、１以上のプロセッサによる読み取りおよび実行が可能な機械可読媒体に格納されている命令としての実装が可能である。機械可読媒体は、機械（例えばコンピューティングデバイス）による読み取りが可能な形式で情報を格納または送信する任意のメカニズムを含みうる。例えば、機械可読媒体は、読み取り専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスク記憶媒体、光学記憶媒体、フラッシュメモリデバイスその他を含みうる。
【０００６】
図１は、データアクセスインタリーブの一実施形態を示す。図示されているように、２つの異なるスレッド（現在のスレッドと、この現在のスレッドとは異なる別のスレッドであってよい遠隔スレッド）が、メモリの同じデータにアクセスしうる（例えば、メモリからデータを読み出す、および／または、メモリに同じデータを書き込む等）。Ｉ命令は、現在のスレッドからの現在のデータアクセス命令を表しうる。Ｐ命令は、現在のスレッドからの、時間的にＩ命令と最も近い先行データアクセス命令を表しうる。Ｒ命令は、現在のスレッドによるデータアクセスとインタリーブする遠隔スレッドからのデータアクセス命令を表しうる。つまり、Ｒ命令は、現在のスレッドからの時間的にＩ命令とＰ命令との間の遠隔データアクセス命令を表しうる。
【０００７】
従来のデータアクセス違反（例えば、データアクセス原子性違反）検出方法では、Ｉ命令、Ｐ命令、およびＲ命令という３つの命令が考慮に入れられ得た。以下の表は、８つの種類のデータアクセスインタリーブを示しており、ここで「Ｒ」が読み取りを表し、「Ｗ」が書き込みを表していてよい。
【表１】
2010067265.tif 000003
【０００８】
ケース２、３，５、および６は、それぞれ異なる種類のデータアクセス原子性違反を示す。
【０００９】
図２は、原子性違反等のデータアクセス違反を検出する装置を有するコンピュータプラットフォームを示す。図２のコンピューティングプラットフォームは、他の種類のデータアクセス違反を検出できてもよいことに留意されたい。
【００１０】
コンピューティングプラットフォーム２０は、１以上のプロセッサ２１、メモリ２２、およびデータ送受信および処理用の他のコンポーネント（図２には不図示）を備えてよい。コンピューティングプラットフォームの例は、メインフレームコンピュータ、ミニコンピュータ、パソコン、ワークステーション、携帯コンピュータ、ラップトップコンピュータ、クラスタ、その他のデータ送受信および処理可能なデバイスを含みうる。
【００１１】
プロセッサ２１は、プロセッサバス等の１以上のバスを介して様々なコンポーネント（例えばメモリ２２）に通信可能に連結される。プロセッサ２１は、適切なアーキテクチャ（例えば、カリフォルニア州サンタクララのIntel Corporationから入手可能なIntel（登録商標）Xeon（登録商標）、Intel（登録商標）Pentium（登録商標）、Intel（登録商標）Itanium（登録商標）、Intel（登録商標）Coreアーキテクチャを含む）の下で、コードの実行を行いうる１以上の処理コアを有する集積回路（ＩＣ）として実装可能である。
【００１２】
メモリ２２は、プロセッサ２１が実行するコードを格納しうる。一実施形態では、メモリ２２は、データアクセス違反を検出するコードを格納しうる。示すように、２つのスレッドグループ（つまり、ユーザスレッド２３１から２３ｋ、および処理スレッド２４１から２４ｎ）が、オペレーティングシステム２５上で実行されうる。ユーザスレッドは、上述の表に示すように、同じデータを求めてメモリにアクセスする別のユーザスレッドからのアンシリアライザブルインタリーブを利用して、データを求めてメモリ２２にアクセスすること（例えば、メモリ２２に対してのデータ読み取り／書き込み処理）ができるが、この場合、データアクセス違反が生じうる。処理スレッド２４１−２４ｎは、ユーザスレッド２３１−２３ｋのデータアクセス違反を検出しうる。
【００１３】
一実施形態では、処理スレッド２４１−２４ｎの各々が、複数のバッファおよび１つのキャッシュを有しうる（例えば、処理スレッド２４１には、処理バッファ２６１、フィリングバッファ２７１、およびキャッシュ２８１、および、処理スレッド２４２には、処理バッファ２６２、フィリングバッファ２７２、およびキャッシュ２８２、といったように）。キャッシュ２８１−２８ｎは、様々なソフトウェアが管理するソフトウェアキャッシュであってよい。ソフトウェアキャッシュの例としては、通常はオペレーティングシステム２５が管理するディスクキャッシュが含まれてよい。他の技術では他の実施形態が実装されうることに留意されたい。例えば、処理スレッドはそれぞれ、任意の数のバッファを含んでよい。別の例としては、キャッシュは、プロセッサキャッシュのようなハードウェアキャッシュであってよい。別の例としては、１つの処理スレッドを多数のスレッドの代わりに利用することができる。
【００１４】
一実施形態では、ユーザスレッド（ユーザスレッド２３１）は、データを求めて、幾らもの連続するメモリ位置にアクセスすることができるが、ここで各メモリ位置は、アドレスを有しうるデータピース各々を格納している。メモリアドレスは、データの１ピース（データピース）を格納するメモリ位置のアドレスのことであっても、あるいは、一纏まりのデータまたは多種のデータを格納する連続するメモリ位置の１アドレス（例えば、連続するメモリ位置の開始メモリ位置）のことであってもよい。
【００１５】
ユーザスレッドがデータを求めてメモリにアクセスすると（例えば、データピースを求めて１つのメモリ位置にアクセスする、または、一纏まりのデータまたは多種のデータを格納する連続するメモリ位置にアクセスすると）、処理スレッド２４１−２４ｎに関連付けられている複数のフィリングバッファ２７１-２７ｎから１つのフィリングバッファを選択して、該メモリアクセスに関連するメモリアクセス情報を格納し、このメモリアクセス情報は後に、データアクセス違反検出および／または他の目的から利用される。一実施形態では、メモリアクセス情報は、１つのメモリ位置または連続するメモリ位置のメモリアドレス、データ長、メモリアクセスの時間情報（例えばタイムスタンプまたは時間インジケータ）および種類（例えば読み出し、書き込み）、メモリアクセス長、ユーザスレッドの識別子、および、データアクセス違反検出および／または他の目的に有用な他の情報を含むグループのうちの１以上を含みうる。メモリアクセス情報は、データおよび／または命令の形式であってよい。ユーザスレッドは、メモリアドレスに基づいてフィリングバッファを選択してよい。
【００１６】
図３ａは、メモリアドレスの一実施形態を示す。メモリアドレスは、インタリーブビット（１または複数）、アライメントビット（１または複数）、レストビット（rest bit）（１または複数）といった異なる部分を含みうる。他の技術では、図３ａのメモリアドレス構造の他の実施形態を実装しうる。例えば、異なる部分の位置が変更可能であってよい。別の例では、メモリアドレスの一部分（例えば、インタリーブビットの部分）を、幾らかの副部分に分割してもよい（図３ｂ参照）。
【００１７】
メモリアドレスのインタリーブビット（１または複数）は、複数のフィリングバッファ２７１-２７ｎからフィリングバッファを識別するのに利用されてよい。例えば、４つの処理スレッド２４１−２４４用に４つのフィリングバッファ２７１-２７４があり、これらが、００、０１、１０、および１１として識別されてよい。この場合、インタリーブビットは、４つのフィリングバッファから１つを識別するべく２つのビットを含みうる。一実施形態では、ユーザスレッドは、メモリアドレスが対象メモリ領域にあるか否かを決定しうる。決定が肯定的である場合には、ユーザスレッドは、メモリアドレスが識別したフィリングバッファへ、メモリアドレスへのアクセスに関連するメモリアクセス情報を追加してよい。決定が否定的である場合には、ユーザスレッドは、メモリアドレスをスキップしてよい。メモリ領域は、メモリ領域へのアクセスに関連する違反が検出されるよう予め決められていてよい。
【００１８】
アライメントビットは、そのメモリアクセス情報が特定のフィリングバッファに格納されており（例えば、フィリングバッファ２７１）、後のキャッシュ処理において該フィリングバッファに関連付けられたキャッシュ（例えばキャッシュ２８１）のキャッシュエントリへロードされうるようなメモリ領域のサイズを示してよい。故に、アライメントビットは、さらに、キャッシュエントリサイズをも示しうる。一実施形態では、メモリ領域は、一纏まりのデータを格納する連続するメモリ位置を含みえて、ここでは、異なるメモリ位置は互いに異なるデータピースを格納しうる。別の実施形態では、連続するメモリ位置同士が、互いに異なるデータを格納しうる。アライメントビットが示すメモリ領域へのアクセスに関連するメモリアクセス情報を同じフィリングバッファへ格納すると性能が向上する。
【００１９】
以下は、メモリアドレスの例である。
0000, 0001, 0010, 0011, 
0100, 0101, 0110, 0111, 
1000, 1001, 1010, 1011, 
1100, 1101, 1110, 1111.
【００２０】
一実施形態では、メモリアドレスの左から二番目のビットをインタリーブビットとして、複数のフィリングバッファからフィリングバッファを識別させてよい、メモリアドレスの左から三番目および四番目のビットをアライメントビットとして、メモリアクセス情報が同じフィリングバッファに格納されうるメモリ領域のサイズを示させてよい。上述から分かるように、メモリアドレスの一番目および三番目のラインに対応するメモリアクセス情報は、１つの同じフィリングバッファへ行き、メモリアドレスの二番目および四番目のラインに対応するメモリアクセス情報は、別の同じフィリングバッファへ行く。別の実施形態では、異なるユーザスレッド同士は、互いに異なるメモリアドレスにアクセスしてよい。
【００２１】
上述のシナリオにおいては、メモリアクセス情報ログイン（logging）に関連するユーザスレッド間のコンフリクトは、異なるメモリ領域へのアクセスに関連するメモリアクセス情報を異なるフィリングバッファへ格納して、メモリアドレスの特定のビット（１以上）を用いて複数のフィリングバッファから特定のフィリングバッファを選択することにより、避けることができる。
【００２２】
図２へ戻ると、フィリングバッファが一杯の場合、それに関連する処理スレッドは、処理スレッドの処理バッファを、フィリングバッファとスイッチして、処理バッファが新たなフィリングバッファとして振舞うようにして、フィリングバッファが新たな処理バッファとして振舞うようにする。そして、処理スレッドは、新たな処理バッファからのメモリアクセス情報を、関連するキャッシュへ入力してよい。例えば、処理スレッド２４１は、フィリングバッファ２７１を処理バッファ２６１とスイッチして、新たな処理バッファ（フィリングバッファ２７１）からのメモリアクセス情報をキャッシュ２８１へ入力してよい。
【００２３】
上述のシナリオにおいては、フィリングバッファアクセスにまつわるユーザスレッドと処理スレッドとの間のコンフリクトは、フィリングバッファを処理バッファと分離することにより、避けることができる。
【００２４】
図４ａは、キャッシュの一実施形態を示す。キャッシュは複数のキャッシュエントリを含んでよい。一実施形態では、各キャッシュエントリは、メモリ領域にアクセスしたアクセス履歴を含みえて、このアクセス履歴は、１以上のユーザスレッド２３１−２３ｋのメモリ領域へのアクセスに関連するメモリアクセス情報を含んでよい。メモリ領域は、各メモリ位置に関連付けられた各メモリアドレスのアライメントビット（１以上）が示す多くの連続するメモリ位置を含みうる。例えば、メモリアドレスが２つのアライメントビットを含む場合、メモリ領域は４つの連続するメモリ位置を有することができる。
【００２５】
一実施形態では、メモリ領域は、一纏まりのデータを含みえて、キャッシュエントリは、ユーザスレッド２３１−２３ｋによる、メモリからの／メモリへの、該データへのアクセス履歴、およびその他の情報を格納しうる。別の実施形態では、メモリ領域は、多種のデータを格納しえて、キャッシュエントリは、ユーザスレッド２３１−２３ｋによる、メモリからの／メモリへの、多種のデータへのアクセス履歴を格納しうる。メモリアクセス情報は、メモリ領域にアクセスするユーザスレッドの識別子、ユーザスレッドがアクセスするメモリアドレス、メモリアクセスの時間情報（例えばタイムスタンプまたは時間インジケータ）および種類（例えば読み出し、書き込み）、メモリアクセス長、データ長、および、後の違反検出および／または他の目的に有用な他の情報を含むグループのうちの１以上を含みうる。
【００２６】
様々な実施形態は、処理バッファに格納されているメモリアクセス情報を、アクセス履歴と、おそらくはキャッシュに格納されている他の情報と、リンクさせるよう実装されうる。一実施形態では、メモリアクセス情報のメモリアドレスを鍵として利用して、キャッシュデータと処理バッファデータをリンクさせてよい。例えば、メモリアドレスがどのメモリ領域のものかを決定することで、メモリアクセス情報が、処理バッファから、メモリ領域に関連付けられたキャッシュエントリへと、入力されてよい。別の例では、キャッシュの各キャッシュエントリは、メモリアドレスの特定のビット（例えば、図３ａ、図３ｂに示すようなメモリアドレスのレストビットあるいはインタリーブビット）により識別されることで、処理バッファのメモリアクセス情報がどのキャッシュエントリへ向かうべきかを、メモリアドレスのレストビットあるいはインタリーブビットが決定してよい。
【００２７】
キャッシュは、様々なキャッシュ置き換えアルゴリズム（例えば、ＬＲＵ（最長時間未使用の）アルゴリズムおよびＬＦＵ（使用頻度が最も低い）アルゴリズム）により格納データを更新してよい。一実施形態では、ＬＲＵアルゴリズムにより、キャッシュはそのメモリに対して最長時間アクセスがなされていないユーザスレッドに関連付けられた格納データの幾らかまたは全てを破棄してよく、および／または、メモリアクセス情報ログインとして最長時間アクセスがなされていないキャッシュエントリを破棄してよい。別の実施形態では、ＬＦＵアルゴリズムにより、キャッシュはそのメモリに対するアクセス頻度が最も低いユーザスレッドに関連付けられた格納データの幾らかまたは全てを破棄してよく、および／または、メモリアクセス情報ログインとしてアクセス頻度が最も低いキャッシュエントリを破棄してよい。処理バッファに格納されているメモリアクセス情報は、ＬＲＵアルゴリズムおよび／またはＬＦＵアルゴリズムについてアクセス頻度を決定する際に参照されてよい。
【００２８】
一実施形態では、全てのメモリアクセス情報が処理バッファからキャッシュへ入力されなくてもよい。対象メモリ領域に関連するメモリアクセス情報のみがキャッシュに入力されてもよい。
【００２９】
上述のシナリオでは、キャッシュは、後の違反検出用に全てのメモリアクセス情報を格納するのではなくて、メモリアクセス情報を選択的に格納することで格納要件を満たすようにすることもできる。さらに、データは、従来のメモリアクセスのようにバイト単位でのキャッシュではなくて、マルチバイト単位でキャッシュされうるので、幾らかのメモリアクセスに関連するメモリアクセス情報を、処理バッファからキャッシュへいちどきにキャッシュすることができる。例えば、アライメントビット（１または複数）が示すメモリ領域へのアクセスに関連するメモリアクセス情報をいちどきにキャッシュすることができる。
【００３０】
様々な実施形態では、図４ａに示すキャッシュの他の変形例および変更例を実装することができる。一実施形態では、キャッシュエントリは、一纏まりのデータではなくて、１つのまたは幾らかのデータピースを格納する１以上のメモリ位置にアクセスしたアクセス履歴を格納してよい。一実施形態では、キャッシュエントリは、２以上のメモリ領域にアクセスしたアクセス履歴を格納してよい。別の実施形態では、１つのメモリ領域にアクセスしたアクセス履歴を、２以上のキャッシュエントリに格納してよい。また別の実施形態では、処理バッファのメモリアクセス情報は、キャッシュのメモリアクセス情報と同一でなくてもよい。つまり、処理スレッドは、処理バッファからのメモリアクセス情報を、修正してからキャッシュしてもよい。例えば、同じデータに対して同じユーザスレッドが連続して行うメモリアクセスに関連する情報は、整理統合してからキャッシュしてもよい。これらはあくまで例示的実施形態であり、様々な開示特徴を選択的に組み合わせた実施形態も可能であることを理解されたい。
【００３１】
図４ｂは、キャッシュページの一実施形態を示す。キャッシュ２８１−２８ｎに格納されている情報は、図４ｂの右側に示す幾らかのページへと整理されてよい。各ページは、各ユーザスレッドのメモリアクセス履歴を格納してよい（例えば、ユーザスレッド２３１用のページ（ユーザスレッドデータ２９１）、ユーザスレッド２３２用のページ（ユーザスレッドデータ２９２）、等といった具合に）。キャッシュ２８１−２８ｎ各々は、メモリアドレスのインタリーブビット（１または複数）が識別するある特定のメモリ領域に関連するアクセス情報を格納するので、あるキャッシュページは、図４ｂが示す様々なキャッシュからのメモリアクセス情報を含みうる。
【００３２】
一実施形態では、処理スレッド（例えば２４１）は、処理バッファ（例えば２６１）からメモリアクセス情報（例えば、ユーザスレッド（例えばユーザスレッド２３１）のメモリアドレスアクセスに関連するメモリアクセス情報）を取得してから、メモリアクセス情報からメモリアドレスを取得してよい。処理スレッドは、さらに、自身に関連付けられたキャッシュ（例えばキャッシュ２８１）が、メモリアドレスに関連付けられたアクセス履歴を格納しているキャッシュエントリを有するか否か決定してよい。決定が肯定的である場合には、処理スレッドは、キャッシュエントリに格納されているアクセス履歴および処理バッファから取得したメモリアクセス情報を分析して、メモリアドレスのアクセスに関して違反があるか否かを決定してよい。
【００３３】
キャッシュエントリに格納されているアクセス履歴は、ある期間内に（例えば、キャッシュ置き換え期間内に）メモリアドレスにアクセスしうる任意のユーザスレッドに関連付けられたメモリアクセス情報を含みうるので、処理スレッドは、従来の方法が可能とする実際の違反の検出のみならず、潜在的な違反を検出することもできる。例えば、違反（実際の違反および潜在的な違反）は、スレッドのデータアクセス原子性に対する妨害と称される。ここでは、原子性が妨害されうるスレッドを、現在のスレッドと称する場合がある。
【００３４】
図５は、実際の違反および潜在的な違反の一実施形態を示す。図示されているように、スレッド２４２は、遠隔スレッド（例えばスレッド２４１、２４３、および２４４）によるアクセスをインタリーブすることでその原子性が妨害されうる現在のスレッドであってよい。処理スレッドが取得する現在のメモリアクセス情報は、スレッド２４２による現在のメモリアクセスに関していてよい。その場合、処理スレッドは、検出間隔（例えば、スレッド２４２による一番最近の先行するメモリアクセス時間と、スレッド２４２による現在のメモリアクセス時間との間の時間間隔）を決定してよい。例えば、図５に示すように、スレッド２４２のｏｐ［−１］「Ｗ」（つまり、書き込みの種類）メモリアクセスは、現在のメモリアクセスであってよく、それに対応する時間は、現在のメモリアクセス時間を示していてよく、一方で、スレッド２４２のｏｐ［−２］「Ｗ」メモリアクセスは、一番最近の先行するメモリアクセスであってよく、それに対応する時間は、一番最近の先行するメモリアクセス時間を示していてよい。
【００３５】
すると、処理スレッドは、メモリアドレスに関連するキャッシュエントリに格納されているアクセス履歴（例えば、遠隔スレッド（スレッド２４１、２４３、および２４４）によるアクセス履歴）を分析して、検出期間中に遠隔スレッドによるインタリーブアクセスがあるか否かを検出してよい。検出結果が肯定的である場合、処理スレッドは、インタリーブアクセス（１以上）が、実際の違反あるいは潜在的な違反のいずれを構成しているかを検出してよい。一実施形態では、処理スレッドは、例えばデータアクセス原子性違反用の上述の表を利用することで、インタリーブアクセスがデータアクセス違反であるか否かを検出することができる。検出結果が肯定的である場合、処理スレッドは、そのアクセス時間が現在のメモリアクセス時間に最も近い場合に、そのインタリーブアクセスが実際の違反であると決定してよく、そうではなければ、処理スレッドはインタリーブアクセスが潜在的な違反であると決定してよい。しかし、１つのインタリーブアクセスのみがデータアクセス違反を構成している場合には、その１つのインタリーブアクセスは実際の違反であってよい。
【００３６】
例えば、図５では、５つのインタリーブアクセスがデータアクセス違反を構成している場合を想定すると（つまり、スレッド２４１によるｏｐ［−１］Ｒおよびｏｐ［−２］Ｒアクセス、スレッド２４３によるｏｐ［−２］Ｒおよびｏｐ［−３］Ｒアクセス、および、スレッド２４４によるｏｐ［−１］Ｒアクセス）、スレッド２４１によるｏｐ［−１］Ｒアクセスが実際の違反であり、残りが潜在的な違反である、としてよい。
【００３７】
しかし、処理スレッドがメモリアドレスに関連付けられたアクセス履歴を格納するキャッシュエントリを関連キャッシュから見つけられない場合、処理スレッドは、そのメモリアクセス情報をキャッシュへ追加する、あるいは、そのメモリアクセス情報をスキップしてよい。メモリアクセス情報を追加するにあたっては、処理スレッドは、そのメモリアクセス情報のメモリアドレスに関連するアクセス履歴を格納すべく空のキャッシュエントリを取得して、その後、そのメモリアクセス情報を空のキャッシュエントリへ追加してよい。メモリアクセス情報をスキップするにあたっては、処理スレッドは、続いて処理バッファから次のメモリアクセス情報の取得を行い、次のメモリアクセス情報に上述の処理を行ってよい。
【００３８】
上述のプロセスのメモリアドレスは、１データピースを格納するメモリ位置のアドレスのことであっても、または、一纏まりのデータまたは多種のデータを格納する連続するメモリ位置の１つのアドレス（例えば開始アドレス）であってもよい。
【００３９】
図６は、メモリアクセス情報を格納する一実施形態を示す。ブロック６０１で、ユーザスレッド（例えばユーザスレッド２３１）は、あるメモリアドレスにアクセスしてよい。上述したように、メモリアドレスは、１データピースを格納するメモリ位置のアドレスであってよい。または、メモリアドレスは、一纏まりのデータまたは多種のデータを格納する連続するメモリ位置の１つのアドレス（例えば開始アドレス）であってもよい。ブロック６０２で、ユーザスレッドまたは他のデバイスは、このメモリアドレスが対象領域にあるか否かを決定してよい。決定が肯定的である場合、ユーザスレッドまたは他のデバイスは、そのメモリアドレスに基づいて、複数の処理スレッド（例えば、スレッド２４１−２４ｎ）に関連付けられた複数のフィリングバッファ（例えばフィリングバッファ２７１−２７ｎ）から１つのフィリングバッファを識別すべく、メモリアドレスを分析してよい（ブロック６０３）。上述のように、メモリアドレスは、インタリーブビット（１または複数）、アライメントビット（１または複数）、およびレストビット（rest bit）（１または複数）といった異なる部分を含みうる。インタリーブビット（１または複数）は、複数のフィリングバッファからフィリングバッファを識別するのに利用されてよい。一実施形態では、各フィリングバッファは、１以上のビットからなる識別子を有してよい。この場合、ユーザスレッドまたは他のデバイスは、メモリアドレスのインタリーブビット（１または複数）を分析してよい（ブロック６０３）。
【００４０】
ブロック６０４で、ユーザスレッドまたは他のデバイスは、メモリアクセスに関連するメモリアクセス情報を生成してよい。一実施形態では、メモリアクセス情報は、該メモリアドレス、メモリアクセスの時間情報（例えばタイムスタンプまたは時間インジケータ）および種類（例えば読み出し、書き込み）、メモリアクセス長、ユーザスレッドの識別子、データ長、および／または、後の違反検出および／または他の目的に有用な他の情報を含むグループのうちの１以上を含みうる。ブロック６０５で、ユーザスレッドは、ブロック６０３で識別されたフィリングバッファに対してメモリアクセス情報を格納してよい。
【００４１】
しかし、メモリアドレスが対象領域にない場合には、ブロック６０６で、ユーザスレッドまたは他のデバイスは、そのメモリアドレスの処理を省いてよい。上述のプロセスはユーザスレッド２３１−２３ｋ全てに対して適用可能である点に留意されたい。
【００４２】
様々な実施形態では、図６の方法の他の変形例および変更例を実装することができる。一実施形態では、メモリアドレスが、対象となる所定領域に存在するか否かを決定すること（ブロック６０２）に加えて、ユーザスレッドまたは他のデバイスはさらに、このメモリアドレスが識別するフィリングバッファが存在するか否かを決定することもできる。このようなフィリングバッファが存在する場合、ユーザスレッドまたは他のデバイスは、このメモリアクセス情報をそのフィリングバッファに格納してよく、そうでなければ、ユーザスレッドまたは他のデバイスは、このメモリアドレス処理を省いてよい。
【００４３】
図７は、データアクセス違反を検出する一実施形態を示す。ブロック７０１で、処理スレッド（例えばスレッド２４１）または他のデバイスは、関連付けられたフィリングバッファ（例えばバッファ２７１）が満杯か否かを検出してよい。満杯な場合には、処理スレッドまたは他のデバイスは、フィリングバッファを、関連する処理バッファ（例えばバッファ２６１）とスイッチして（ブロック７０２）、処理バッファが新たなフィリングバッファとして振舞い、フィリングバッファが新たな処理バッファとして振舞ってよい。ブロック７０３で、処理スレッドまたは他のデバイスは、代理の処理バッファ（新たな処理バッファのこと）がメモリアクセス情報を有するか否かを決定してよい。決定が肯定的である場合には、ブロック７０４で、処理スレッドまたは他のデバイスは、処理バッファ（代理の処理バッファのこと）からメモリアクセスに関連するメモリアクセス情報を読み取ってよい。
【００４４】
ブロック７０５で、処理スレッドまたは他のデバイスは、関連付けられたキャッシュ（例えばキャッシュ２８１）が、メモリアクセス情報のメモリアドレスに関連するエントリを有するか否かを決定してよい。一実施形態では、キャッシュは、複数のキャッシュエントリを含みえて、ここで、各キャッシュエントリは、メモリアドレスにアクセスしたアクセス履歴および他の情報を含みうる。一実施形態では、メモリアドレスは、１データピースを格納するメモリ位置のことであってよい。別の実施形態では、メモリアドレスは、一纏まりのデータまたは多種のデータを格納する連続するメモリ位置の１つのアドレス（例えば開始アドレス）であってよい。
【００４５】
処理バッファから読み取ったメモリアクセス情報のメモリアドレスに関連付けられたキャッシュエントリをキャッシュが有している際には、処理スレッドまたは他のデバイスは、メモリアクセス情報およびキャッシュエントリに格納されているアクセス履歴を分析して、そのメモリアクセス情報に記録されているユーザスレッドの該メモリアドレスに対するデータアクセス違反があるか否かを検出する（ブロック７０６）。ここで、ユーザスレッドとは、現在のユーザスレッドのことであってよい。
【００４６】
一実施形態では、処理スレッドまたは他のデバイスは、検出間隔を決定してよく、その検出間隔において遠隔ユーザスレッド（例えば、現在のユーザスレッド以外のユーザスレッド）によるインタリーブアクセスがあるか否かを決定してよい。一実施形態では、処理スレッドまたは他のデバイスは、処理バッファから読み取られたメモリアクセス情報に記録されている現在のメモリアクセス時間と、アクセス履歴に記録されている一番最近の先行するメモリアクセス時間との間の期間を、検出間隔として決定してよい。一番最近の先行するメモリアクセス時間は、アクセス履歴に基づいて、現在のメモリアクセス時間より前であるが直近の現在のスレッドによるメモリアクセス時間を表していてよい。
【００４７】
ブロック７０７で、処理スレッドまたは他のデバイスは、実際のデータアクセス違反および／または潜在的なデータアクセス違反が現在のユーザスレッドに存在するか否かを決定してよい。一実施形態では、処理スレッドまたは他のデバイスは、現在のスレッドにデータアクセス違反があるか否かを検出してよい。検出結果が肯定的である場合には、処理スレッドまたは他のデバイスは、そのデータアクセス違反が実際の違反であるか潜在的な違反であるかを検出してよい。一実施形態では、検出間隔中に１つのデータアクセス違反しかない場合には、そのデータアクセス違反を実際の違反として決定してよい。しかし、その検出間隔中に２以上のデータアクセス違反がある場合には、現在のユーザスレッドの現在のメモリアクセス時間に対して直近のデータアクセス違反を実際の違反として決定し、他のデータアクセス違反は潜在的な違反として決定してよい。
【００４８】
実際の／潜在的な違反がある場合、処理スレッドまたは他のデバイスは、ブロック７０８で、実際の／潜在的な違反を処理する。一実施形態では、検出された違反に関連する情報を、さらなる分析およびユーザへの報告用に格納してよい。ブロック７０８の処理は省くことも出来ることを理解されたい。そしてブロック７０９で、処理スレッドまたは他のデバイスは、処理バッファから読み取ったメモリアクセス情報を、メモリアクセス情報のメモリアドレスに関連付けられたキャッシュエントリに追加する。ブロック７０９の処理は、例えばブロック７０５等の他のブロックの後に行うこともできる。
【００４９】
ブロック７０５で、メモリアクセス情報のメモリアドレスに関連付けられたキャッシュにキャッシュエントリがないと決定された場合には、ブロック７１１で、処理スレッドまたは他のデバイスは、そのメモリアクセス情報を追加するかスキップするかを決定してよい。一実施形態では、処理スレッドまたは他のデバイスは、ブロック７１１の決定を、少なくとも部分的に対象メモリ領域にそのメモリアドレスが存在するか否かに基づいて行ってよい。メモリアクセス情報を追加するにあたっては、処理スレッドは、空のキャッシュエントリを取得して（ブロック７１２）、キャッシュ記録をイニシャライズして（ブロック７１３）、メモリアクセス情報を空のキャッシュエントリに追加してよい（ブロック７１４）。メモリアクセス情報をスキップするにあたっては、処理スレッドまたは他のデバイスは、そのメモリアクセス情報を無視して、続いて処理バッファから次のメモリアクセス情報を読み出してよい（ブロック７１５）。
【００５０】
本発明を特定の実施形態との関連で記載してきたが、当業者であれば容易に理解するように、本発明の精神および範囲を逸脱しない範囲で変形例および変更例が可能であることを理解されたい。このような変形例および変更例もまた本発明および添付請求項の範囲内にあることを意図している。
【図１】
2010067265.tif 000004
【図２】
2010067265.tif 000005
【図３ａ】
2010067265.tif 000006
【図３ｂ】
2010067265.tif 000007
【図４ａ】
2010067265.tif 000008
【図４ｂ】
2010067265.tif 000009
【図５】
2010067265.tif 000010
【図６】
2010067265.tif 000011
【図７】
2010067265.tif 000012
【手続補正書】
【提出日】平成21年9月18日(2009.9.18)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
現在のユーザスレッドによるメモリアドレスへの現在のメモリアクセスに関連する現在のメモリアクセス情報を取得する段階と、
キャッシュが前記メモリアドレスに関連付けられたキャッシュエントリを含むか否かを決定する段階と、
前記キャッシュが前記メモリアドレスに関連付けられた前記キャッシュエントリを含む場合、前記現在のメモリアクセス情報および前記キャッシュエントリに格納されているアクセス履歴を分析して、前記メモリアドレスに対するアクセスに関して実際の違反および潜在的な違反の少なくともいずれかがあるか否かを検出する段階と、を備える、方法。
【請求項２】
前記アクセス履歴は、前記メモリアドレスに対する複数のメモリアクセスに関連するメモリアクセス情報を含み、
前記複数のメモリアクセスの各々は、複数のユーザスレッドのいずれかが行い、
前記複数のメモリアクセスのうち１つのメモリアクセスに関連する前記メモリアクセス情報は、前記メモリアクセスの時間情報、前記メモリアクセスの種類、メモリアクセス長、前記複数のユーザスレッドのうち前記メモリアクセスを行っているユーザスレッドの識別子、および前記メモリアドレスからなる群のうち１以上を含む、請求項１に記載の方法。
【請求項３】
前記分析する段階は、さらに、
前記アクセス履歴が前記現在のユーザスレッドによる前記メモリアドレスに対する先行するメモリアクセスに関連する先行するメモリアクセス情報を含むか否かを決定する段階と、
前記アクセス履歴が前記先行するメモリアクセス情報を含む場合、前記先行するメモリアクセスの先行するアクセス時間から、前記現在のメモリアクセスの現在のアクセス時間まで継続する検出間隔を決定する段階と、を有する、請求項１に記載の方法。
【請求項４】
前記分析する段階は、さらに、
前記アクセス履歴が、遠隔ユーザスレッドによる検出間隔中の遠隔アクセス時間における前記メモリアドレスへの遠隔メモリアクセスを示す場合であって、前記遠隔メモリアクセスにより、前記現在のユーザスレッドの前記メモリアドレスに対するアクセス違反が生じ、前記遠隔アクセス時間が、前記アクセス履歴に基づき前記メモリアドレスにアクセスした一番最近の時間である場合に、前記実際の違反を検出する段階と、
前記アクセス履歴が、遠隔ユーザスレッドによる検出間隔中の遠隔アクセス時間における前記メモリアドレスへの遠隔メモリアクセスを示す場合であって、前記遠隔メモリアクセスにより、前記現在のユーザスレッドの前記メモリアドレスに対するアクセス違反が生じ、前記遠隔アクセス時間が、前記アクセス履歴に基づき前記メモリアドレスにアクセスした一番最近の時間ではない場合に、前記潜在的な違反を検出する段階と、を有する、請求項１に記載の方法。
【請求項５】
前記キャッシュが前記メモリアドレスに関連付けられた前記キャッシュエントリを含む場合、前記現在のメモリアクセス情報を前記キャッシュエントリに追加する段階をさらに備える、請求項１に記載の方法。
【請求項６】
前記キャッシュが前記メモリアドレスに関連付けられた前記キャッシュエントリを含まない場合、
前記メモリアドレスが所定のメモリ領域にある場合、前記キャッシュの別のキャッシュエントリを見つけて、前記現在のメモリアクセス情報を前記別のキャッシュエントリに格納する段階と、
前記メモリアドレスが前記所定のメモリ領域にない場合、前記現在のメモリアクセス情報をスキップする段階と、をさらに備える、請求項１に記載の方法。
【請求項７】
前記現在のメモリアクセス情報は、第１のバッファから取得される、請求項１に記載の方法。
【請求項８】
第２のバッファが満杯の場合、前記第１のバッファを前記第２のバッファとスイッチする段階をさらに備え、
前記第２のバッファには、複数のユーザスレッドによるメモリ領域へのアクセスに関連する情報が記録される、請求項７に記載の方法。
【請求項９】
前記メモリアドレスは、前記第２のバッファを識別するビットを少なくとも１つ含む、請求項８に記載の方法。
【請求項１０】
メモリにアクセスする複数のユーザスレッドと、
処理スレッドと、
前記処理スレッドに関連付けられたキャッシュと、
前記処理スレッドに関連付けられた第１のバッファと、を備えるシステムであって、
前記キャッシュの１つのキャッシュエントリは、１つのメモリアドレスへの複数のメモリアクセスに関連するメモリアクセス情報を含むアクセス履歴を格納しており、
前記複数のメモリアクセスの各々は前記複数のユーザスレッドにより行われ、
前記メモリアクセス情報は前記第１のバッファから取得される、システム。
【請求項１１】
前記複数のメモリアクセスのうち１つのメモリアクセスに関連する前記メモリアクセス情報は、前記メモリアクセスの時間情報、前記メモリアクセスの種類、メモリアクセス長、前記複数のユーザスレッドのうち前記メモリアクセスを行っているユーザスレッドの識別子、および前記メモリアドレスからなる群のうち１以上を含む、請求項１０に記載のシステム。
【請求項１２】
前記キャッシュはソフトウェアキャッシュである、請求項１０に記載のシステム。
【請求項１３】
前記処理スレッドは、さらに、
前記第１のバッファから、前記複数のユーザスレッドのうち現在のユーザスレッドによる前記メモリアドレスへの現在のメモリアクセスに関連する現在のメモリアクセス情報を取得し、
前記キャッシュが前記メモリアドレスに関連付けられたキャッシュエントリを含むか否かを決定し、
前記キャッシュが前記メモリアドレスに関連付けられた前記キャッシュエントリを含む場合、前記現在のメモリアクセス情報および前記キャッシュエントリに格納されている前記アクセス履歴を分析して、実際の違反および潜在的な違反の少なくともいずれかがあるか否かを検出する、請求項１０に記載のシステム。
【請求項１４】
前記処理スレッドは、さらに、
前記アクセス履歴が前記現在のユーザスレッドによる前記メモリアドレスに対する先行するメモリアクセスに関連する先行するメモリアクセス情報を含むか否かを決定し、
前記アクセス履歴が前記先行するメモリアクセス情報を含む場合、前記先行するメモリアクセスの先行するアクセス時間から、前記現在のメモリアクセスの現在のアクセス時間まで継続する検出間隔を決定する、請求項１３に記載のシステム。
【請求項１５】
前記処理スレッドは、さらに、
前記アクセス履歴が、前記複数のユーザスレッドのうち遠隔ユーザスレッドによる検出間隔中の遠隔アクセス時間における前記メモリアドレスへの遠隔メモリアクセスを示す場合であって、前記遠隔メモリアクセスにより、前記現在のユーザスレッドの前記メモリアドレスに対するアクセス違反が生じ、前記遠隔アクセス時間が、前記アクセス履歴に基づき一番最近のメモリアクセス時間である場合に、前記実際の違反を検出し、
前記アクセス履歴が、前記複数のユーザスレッドのうち遠隔ユーザスレッドによる検出間隔中の遠隔アクセス時間における前記メモリアドレスへの遠隔メモリアクセスを示す場合であって、前記遠隔メモリアクセスにより、前記現在のユーザスレッドの前記メモリアドレスに対するアクセス違反が生じ、前記遠隔アクセス時間が、前記アクセス履歴に基づき一番最近のメモリアクセス時間ではない場合に、前記潜在的な違反を検出する、請求項１３に記載のシステム。
【請求項１６】
前記処理スレッドに関連付けられた第２のバッファをさらに備え、
前記第２のバッファには、前記複数のユーザスレッドによるメモリ領域へのアクセスに関連するメモリアクセス情報が記録され、
前記処理スレッドは、さらに、前記第２のバッファが満杯の場合、前記第２のバッファを前記第１のバッファとスイッチする、請求項１０に記載のシステム。
【請求項１７】
前記メモリアドレスは、前記第２のバッファを識別するビットを少なくとも１つ含む、請求項１６に記載のシステム。
【請求項１８】
コンピュータに、請求項１から９のいずれか一項に記載の方法を実行させるためのプログラム。
【外国語明細書】
2010067265.tif 000013
2010067265.tif 000014
2010067265.tif 000015
2010067265.tif 000016
2010067265.tif 000017
2010067265.tif 000018
2010067265.tif 000019
2010067265.tif 000020
2010067265.tif 000021
2010067265.tif 000022
2010067265.tif 000023
2010067265.tif 000024
2010067265.tif 000025
2010067265.tif 000026
2010067265.tif 000027
2010067265.tif 000028
2010067265.tif 000029
2010067265.tif 000030
2010067265.tif 000031
2010067265.tif 000032
2010067265.tif 000033
2010067265.tif 000034
2010067265.tif 000035
2010067265.tif 000036
2010067265.tif 000037
2010067265.tif 000038