(57)【要約】  キャッシュする方法、装置及びシステムを提供する。複数のスレッドの適格性及び干渉関係の更新に応じてキャッシング処理が自動的に修正される。データがキャッシュに読み出され、データへの参照を複数のスレッドに与える。最後のスレッドがデータへの参照を有する状態になると、当初スレッドは最後のスレッドから信号を受信する。当初スレッドは信号に応じて、キャッシュ内のデータを修正し、キャッシュ内のデータに対する変更を更新し、キャッシュ内のデータに対する揮発性動作を次スレッドがもう実行することができることを示す別の信号を次スレッドに送出する。
2008544417.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
キャッシュ内のデータへの参照を当初スレッドに転送する工程と、
最後のスレッドに達するまで前記参照を次スレッドに反復的に転送する工程であって、前記次スレッドが中間スレッド及び前記最後のスレッドの一方を備える工程と、
前記当初スレッドによって処理される当初の揮発性動作に前記キャッシュ内の前記データが利用可能である旨を前記最後のスレッドから前記当初スレッドに通知する工程と、
前記当初の揮発性動作が前記キャッシュ内で更新した後に前記データに対する次の揮発性動作を前記次のスレッドが実行することが適格である旨を前記当初スレッドから前記次スレッドに通知する工程とを備える方法。
【請求項２】
請求項１記載の方法であって、前記最後のスレッドに達するまで、前記データに対して前記キャッシュへの更新が行われた後に前記次スレッドから新たな次スレッドに反復的に通知する工程を更に備える方法。
【請求項３】
請求項1記載の方法であって、
更新のために前記当初スレッド、0以上の中間スレッド、及び前記最後のスレッドについて更新の適格性を計算する工程と、
前記当初スレッド、前記0以上の中間スレッド、及び前記最後のスレッドの更新干渉グラフを彩色する工程であって、前記干渉グラフが、前記当初スレッド、前記0以上の中間スレッド、及び前記最後のスレッドの干渉関係を含む工程と、
適格性が存在している場合にキャッシュ・コードを挿入する工程とを備え、前記キャッシュ・コードは処理を自動的に可能にする方法。
【請求項４】
請求項３記載の方法であって、彩色する工程は、前記当初スレッド、前記0以上の中間スレッド、及び前記最後のスレッドに関連した利用可能な論理コンテンツ・アドレス指定可能メモリ（CAM）装置を用いる工程を更に含む方法。
【請求項５】
請求項1記載の方法であって、通知する工程は、
前記当初スレッドによって前記データを修正する工程と、前記データを修正データとして前記キャッシュに前記参照の位置において書き戻す工程とを更に含む方法。
【請求項６】
請求項１記載の方法であって、複数のプロセッサに亘って処理する工程を更に備える方法。
【請求項７】
請求項１記載の方法であって、前記キャッシュと、0以上の中間スレッド又は前記最後のスレッドによって用いられる１つ又は複数の更なるキャッシュとに対して前記更新を実行する工程を更に備える方法。
【請求項８】
処理するとマシンに、
複数のスレッドに関連した処理に干渉がなく、修正の適格性がある場合、第１の段階及び第２の段階を含めるようキャッシング・サービスの揮発性段階を自動的に修正する機能と、
当初スレッド、0以上の中間スレッド、及び最後のスレッドを含む前記複数のスレッドに、キャッシュ内のデータへの参照を第１の段階中に転送する機能と、
前記最後のスレッドが前記参照を有する状態になると前記最後のスレッドから前記当初スレッドに通知する機能と、
前記キャッシュ内の前記データへの修正を、現在処理しているスレッドが更新した状態になると、前記当初スレッドから始めて前記複数のスレッドそれぞれから前記第２の段階中に順次通知する機能とを実行させる関連した命令を有するマシン・アクセス可能な媒体。
【請求項９】
請求項８記載の媒体であって、複数のプロセッサに亘って前記命令を処理する旨の命令を更に含み、別々のキャッシュを各プロセッサが含む媒体。
【請求項１０】
請求項９記載の媒体であって、前記キャッシュ及び前記別々のキャッシュ内の前記データに対して行われる更新を同期化させる旨の命令を更に含む媒体。
【請求項１１】
請求項８記載の媒体であって、
大局状態の更新の適格性と、前記複数のスレッドの前記更新間の干渉関係とを計算する命令と、
利用可能な論理コンテンツ・アドレス指定可能なメモリ装置を用いて前記複数のスレッドの干渉グラフを彩色する命令であって、前記干渉グラフが前記複数のスレッドの干渉関係を含む命令と、
前記媒体の前記命令を実行するために前記複数のスレッドに関連した処理にキャッシュ・コードを挿入する命令とを更に含む媒体。
【請求項１２】
請求項１１記載の媒体であって、前記スレッド毎に並列に前記第１の段階を実質的に実行する旨の命令を更に含む媒体。
【請求項１３】
請求項１１記載の媒体であって、前記第２の段階を処理するために前記スレッドの優先順序を判定する旨の命令を更に含む媒体。
【請求項１４】
装置であって、
キャッシュ・コントローラと、
前記キャッシュ・コントローラを処理するためのプロセッサとを備え、前記キャッシュ・コントローラは、１つ又は複数のキャッシュを介して複数のスレッドのデータへのアクセスを管理し、前記キャッシュ・コントローラは第１の段階及び第２の段階を処理し、前記第１の段階は、前記１つ又は複数のキャッシュ内のデータへの参照を前記複数のスレッドそれぞれに供給し、前記第２の段階は、前記１つ又は複数のキャッシュ内の前記データを特定のスレッドが更新した状態になると前記複数のスレッドそれぞれに順次通知する装置。
【請求項１５】
請求項１４記載の装置であって、前記キャッシュ・コントローラは、前記複数のスレッドのうちの2つ以上が互いに干渉するか否かを決定し、肯定の場合、前記データを前記１つ又は複数のキャッシュから除去する装置。
【請求項１６】
請求項１４記載の装置であって、キャッシュ・コントローラは、前記１つ又は複数のキャッシュ内の前記データへの修正を同期化させる装置。
【請求項１７】
請求項１４記載の装置であって、前記１つ又は複数のキャッシュのうちのいくつかが１つ又は複数の別々のプロセッサ上に存在している装置。
【請求項１８】
請求項１４記載の装置であって、前記第１の段階は、前記データに対する不揮発性動作に関連している装置。
【請求項１９】
請求項１４記載の装置であって、前記第２の段階は、前記データに対する不揮発性動作に関連している装置。
【請求項２０】
請求項１４記載の装置であって、前記キャッシュ・コントローラは、前記第１の段階及び前記第２の段階を有する２段階のソフトウェア制御キャッシング処理を自動的に実現するために、前記複数のスレッドに関連した単一段階のキャッシング処理にキャッシュ・コードを挿入する装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書及び特許請求の範囲記載の教示はデータ処理に関し、特にソフトウェア・キャッシングに関する。
【背景技術】
【０００２】
パケット処理特有の課題は、スループットを最大化し、最悪のケースのトラフィック・シナリオのレーテンシを最小にする一方で安定性を維持することである。一方、ネットワーク・プロセッサ内の単一の外部メモリ・アクセスに関連したレンテンシは通常、最悪のケースの処理時間よりも大きい。よって、現代のネットワーク・プロセッサは通常、複数のプロセッサを備えた高並列度のアーキテクチャによって実現される。各プロセッサは、複数の処理スレッド（アプリケーション）をサポートすることが可能である。
【０００３】
更に、ネットワーク・アプリケーションは、並列度が高く、長いメモリ・アクセス・レーテンシを隠す目的で通常、マルチスレッド化され、かつ／又はマルチ処理される。新たなパケットがネットワーク・プロセッサに到着すると、一連のタスク（例えば、パケットの受信、ルーティング・テーブルのルックアップ、エンキュー等）がそのパケットに対してネットワーク・プロセッサ内の新たなスレッドによって行われる。しかし、データ又はパケットを更新し得る競合する複数のスレッド間のパケットの処理のインテグリティが維持されることを確実にするために、パケット処理のための局所データ又はパケットに関連した更新は、所定のスレッド順序で、かつアトミックに実行しなければならない。
【０００４】
パケット処理のインテグリティを確実にするために、局所データ又はパケットの順序付けられた部分更新処理は通常、ネットワーク・プロセッサ内で実現される。この処理では、パケットが受信される順序でスレッド・チェインにパケットが配信される。各スレッドは、その順序付けられた部分更新処理に入る前に先行スレッドからの信号を待たなければならない。信号が受信された後、待ちスレッドはデータ又はパケットを読み出し、修正し、メモリに書き戻し、次いで、次の待ちスレッドに完了の信号を送出することが可能である。 
【発明の開示】
【発明が解決しようとする課題】
【０００５】
この処理は不揮発性動作のレンテンシ（マルチスレッド及び／又はマルチ処理環境でも隠すことが可能でない、読み出し動作に関連したレーテンシなど）をもたらす。
【課題を解決するための手段】
【０００６】
図１A及び図１Bは、例示的な実施例による、マルチスレッド及びマルチ処理の環境における大局データの処理に関連した図である。図１A及び図１Bの図面は、スレッド0及びプロセッサ0から始まる、複数のプロセッサ内の複数スレッドの処理を表す。両方の図面の凡例は、図１A及び図１Bの右側の図に示す。
【発明を実施するための最良の形態】
【０００７】
処理は、マルチスレッド及びマルチ処理環境において処理される大局データ又はパケットに関連する。各スレッドはデータ又はパケットにアクセスしようとし、各スレッドは場合によっては、データ又はパケットを修正又は更新することが可能である。上記処理（以下、「共有データの更新処理」として表す）は、マシン・アクセス可能であり、マシン読み取り可能な媒体内に、図１Bにおけるソフトウェア制御キャッシング命令として実現され、ネットワークを介してアクセス可能である。ネットワークは有線、無線、又は有線及び無線の組み合わせであり得る。
【実施例】
【０００８】
図１Aでは、各スレッドは、所望の大局データ又はパケットをキャッシュから読み出してよい旨の信号を待つ。先行スレッドが前述のデータに行いたい変更を完了してキャッシュに前述のデータを書き戻すまで次のスレッドはデータへの読み出しアクセスを得ないことが図１Aで分かる。これによって、データに対する更新権を有しないスレッド毎にメモリ・アクセス・レーテンシが生じる。
【０００９】
図１Aの処理に関連したレーテンシは、図１Bに表す処理によって隠される。特に、図１Bにおける共有キャッシングの更新処理によって、キャッシュ内のデータへの更新（揮発性）アクセスを特定のスレッドが与えられる前に読み出し目的でデータを特定のプロセッサ内の各スレッドが獲得することが可能になる。例えば、プロセッサ0のスレッド0-3それぞれは、キャッシュ内のデータへの参照を各スレッド0-3が有する状態になるまで順次、又は実質的に並列に信号を互いに転送する。しかし、キャッシュ内のデータに対するその揮発性動作に進む前に、最後のスレッド３から信号を受信するまでスレッド0は待つ。
【００１０】
プロセッサ0内のスレッド0-3全てがもう、データへの読み出しアクセスを有し、キャッシュ内のデータに対して揮発性（書き込み）をスレッド0が実行することがもう可能であることをプロセッサ1内のスレッド3からスレッド0への信号がスレッド0に通知する。この時点で、スレッド0は、キャッシュ内データへの排他的な書き込みアクセスを有する。スレッド0がキャッシュ内の同じデータへの排他的な書き込みアクセスを有する一方、残りのスレッドはキャッシュ内のデータへの読み出しアクセスを有する。
【００１１】
スレッド0は、データを修正し、データに対する変更をキャッシュに書き戻すと、次スレッド（スレッド１）に信号を送出する。これにより、キャッシュ内のデータへの排他的な書き込みアクセスが次スレッドに与えられる。キャッシュ内のデータに対してその更新を最後のスレッド（スレッド３）が実行し、次プロセッサ（プロセッサ１）及びその当初スレッド（スレッド0）に通知されるまでこの処理は続く。このタイプの処理はN-１プロセッサについて続き得る。各プロセッサはY-１個のスレッドを有する。N及びYは0から始まる整数である。
【００１２】
読み出し動作は不揮発であり、通常、キャッシュ・ミスの際にプロセッサによって出されるので、図１Bの共有キャッシングの更新処理が達成される。よって、同じ大局データ又はパケットにスレッドがアクセスしたい場合、各スレッドが当初、データへのアクセスを要求し、特定のプロセッサ内の各スレッドと実質的に並列にキャッシュ内のデータへの参照を提供することが可能である場合に、キャッシュ・ミスがない。一方、キャッシュ・ミスがあった場合、スレッドは、別のデータ又はパケットへのアクセスを望み、キャッシュへのデータのロードは実質的に並列に出すことが可能である。マルチスレッド環境内のデータへのアクセスを当初獲得するうえでのレンテンシがこれによって削減される。
【００１３】
図１Bの共有キャッシングの更新処理は、ネットワーク・プロセッサ内のソフトウェア制御キャッシングとして2段階処理（読み出し段階及び更新段階）として実現することができる。
【００１４】
図２は、例示的な実施例による、マルチスレッド及びマルチ処理の環境におけるデータの処理に用いるキャッシング・システム２００の図である。キャッシング・システム２００は、ネットワーク・プロセッサなどのプロセッサの環境内のマシン・アクセス可能であり、マシン読み取り可能な媒体で実現される。
【００１５】
キャッシング・システム２００は、コンテンツ・アドレス指定可能なメモリ（CAM）２１０及び局所メモリ２２０を含む。CAM２２０及び局所メモリ２２０は、図１Bに表すソフトウェア制御キャッシングを提供するようプログラムされる。
【００１６】
CAM２１０は、最長未使用（LRU）ロジック２１１及び複数のエントリ２１２を含む。エントリ２１２は、データの特定のキャッシングされたエントリ線の状態部分及びタグ部分を記憶する。LRUロジック２１１は、CAM２１０内で用いる時間的に順序付けされたエントリ・リストを維持する。
【００１７】
局所メモリ２２０は、キャッシュ・ラインのデータ部分２２２を記憶することが可能な索引付けされたレジスタ・ファイル２２１であり得る。関連したキャッシュ動作（例えば、タグ２３０のルックアップ、データのロード、データの書き戻し等）それぞれがソフトウェア制御下にある。
【００１８】
実施例では、CAM２１０は複数の、いくつかの論理CAM２１０に分割することができる。これは、スレッド内の、連係されていない複数のキャッシング動作を可能にする。
【００１９】
ソフトウェア制御キャッシング・システム２００は、図１Bに図示した、共有キャッシングのための更新処理を行う旨の命令によってプログラミングされる。この更新処理は、2段階処理（読み出し段階及び更新段階）として視覚化することができる。各スレッドは、更新段階の開始前に読み出し段階を完了する。更に、読み出し段階を、スレッドそれぞれに並列に、又は実質的に並列に備えることができる。すなわち、読み出し段階の完了のために、キャッシュからのデータへの読み出しアクセスを当初獲得する際に各スレッドがレーテンシをほとんど受けないか、又は全く受けない。
【００２０】
図３A乃至図３Bは、例示的な実施例による、別々のコンテンツ・アドレス指定可能メモリ装置（CAM）及び同じコンテンツ・アドレス指定可能メモリ装置（CAM）を用いたマルチスレッド及びマルチ処理環境におけるデータの処理に関連した図である。処理は、マシン・アクセス可能であり、マシン読み取り可能な媒体で実現される。
【００２１】
図３Aは、別々の論理CAMを用いたスケーラブル・キャッシングを表す。図３Aでは、別々のCAMを用いた２つの更新処理は、図３Aの垂直方向に互いに別個のものである。何れの更新処理も互いに無関係に実行し、進むために他方から信号を受信しなくてよい。図１Bに関して説明したものと同様に、単一更新処理内のプロセッサ0の最後のスレッド3は読み出し参照を有する状態になると当初スレッド0に通知し、スレッド0は、論理CAM内のデータに対して揮発性動作を自由に行うことができる。最後のスレッド3が、データに対するその揮発性動作を完了すると、信号がプロセッサ0のスレッド3からプロセッサ1のスレッド0に送出される。
【００２２】
図３Bは、複数の同じ論理CAMを用いてスケーラブル・キャッシングを表す。図３Bでは、プロセッサ0のスレッド3が第１更新処理内にデータに対してその揮発性処理を完了すると、信号がスレッド3からプロセッサ1のスレッド0に送出され、別の信号が、第２の更新処理のためにプロセッサ0のスレッド0に送出される。すなわち、別々のキャッシングが同じ論理CAMを用いる場合、プロセッサにおける何れかのスレッドによって第２のキャッシングを実行することが可能な状態になる前に、プロセッサにおけるスレッド全てによって第１のキャッシングが完了するように別々のキャッシングを連係させるべきである。
【００２３】
図４A及び図４Bは、例示的な実施例による、マルチスレッド及びマルチ処理の環境におけるデータの処理中のデッドロックに関連した図である。
【００２４】
ソフトウェア制御キャッシングでは、プロセッサにおける第１のスレッドは、プロセッサにおける最後のスレッドからの信号を待ち得る。前述の待ち状態は図１Bで分かる。図１Bでは、キャッシュにおけるデータに対する更新段階に入る前にスレッド0はスレッド3からの信号を待つ。別の例として、図４Aに示すように更新処理が実現された場合、スレッドの実行は、図４Bに示すものより先に決して進まないことがあり得る。よって、アプリケーションのスレッドに関連した更新処理にデッドロックがないと判定された後、ソフトウェア制御キャッシングを実現すべきである。
【００２５】
図5は、例示的な実施例による、マルチスレッド及びマルチ処理の環境において処理されるデータを更新するソフトウェア制御キャッシング方法５００の図である。ソフトウェア制御キャッシングは、マシン・アクセス可能であり、マシン読み取り可能な媒体で実現される。
【００２６】
大局データ又はパケットの更新（ソフトウェア制御キャッシング処理なし）の何れのスレッド・パスにおいても、更新段階の一AWAIT動作及び一ADVANCE動作が存在している。
更に、何れの大局状態更新も処理の更新段階に含まれる。よって、結果として生じるソフトウェア制御処理では、キャッシュ・ルックアップ動作及び書き戻し動作はそれぞれ、実行の何れかの特定のパスにおける更新動作それぞれの前及び後で一度、実行される。更に、キャッシュ・データを更新するために特定の実行パスにおいてアクセスが実行されない場合、対応する読み出し段階の空き更新段階が用いられる。これは、図５に表すロジックによって示すことが可能である。
【００２７】
５１０では、処理スレッドは、更新処理に進む前に信号「s」を待つ。更新処理が完了すると、信号「ｓ」を次の待ちスレッドに伝搬する。特定のスレッドに対する更新処理が行われない場合、５２０で、処理スレッドは信号「s」を待ち、次いで、次スレッドに「s」を伝搬することによって進む。
【００２８】
読み出し処理段階及び更新処理段階の組み合わせは５３０及び５４０に表す。ここで、５３０では、そのデータを要求する前に、特定のスレッドは信号「ｔ」を待つ。キャッシュ・ミスが検出された場合、これは、先行スレッドによってデータが要求されていないことを示す。さもなければ、キャッシュ・ミスは発生せず、データは、キャッシュにおける参照によって既に利用可能である。所望のデータへの読み出しアクセスをスレッドが有する状態になると、スレッドは信号「t」を次のスレッドに直ちに転送し、次いで、「t」が戻ってくるのを待つ。「t」が戻ってきた場合、これは、スレッドが、キャッシュにおけるデータをもう更新することが可能であり、排他的制御を有することを示す。更新が完了すると、キャッシュにおけるデータへの揮発性アクセスを待つ次のスレッドに「t」を進める。キャッシュ・データに対する揮発性動作を特定のスレッドが実行したくない場合、５４０で、そのスレッドは単に待って、読み出し段階に一度、かつ、空き更新段階に一度、信号tを中継する。
【００２９】
図１Aに表す単一更新処理段階は、図１Bに表すような読み出し段階及び更新段階の２段階に変換することが可能である。これを行うために、特定のスレッドに対する揮発性アクセスが与えられる前にキャッシュ・ルックアップ及び読み出し時ミスが挿入され、別のAWAITとADVANCEを含めるよう元の更新段階が修正される。データの大局状態へのアクセスは全て、キャッシュされたデータへの参照に変更され、書き戻し動作はADVANCE前に実行される。
【００３０】
図6は、例示的な実施例による、マルチスレッド及びマルチ処理の環境におけるデータを処理する複数のスレッド間のソフトウェア制御キャッシングを自動的に実現するための方法６００の図である。方法６００（以下、「キャッシング・サービス」）は、マシン・アクセス可能であり、マシン読み取り可能な媒体で実現され、ネットワークを介した電磁信号としてアクセス可能であり得る。ネットワークは有線、無線、又は有線及び無線の組み合わせであり得る。
【００３１】
キャッシング・サービスはまず、前述のソフトウェア制御キャッシングによってもたらされ得るデッドロック状態を検出する。最後のスレッドからの信号を当初又は第１のスレッドが待ち、第１のスレッドからの信号を別のスレッドが待つ場合、相互デッドロックが存在する。特定のプロセッサにおける第１のスレッドは、２つの状態下で、最後のスレッドからの信号を待つ。
【００３２】
第１の状態では、第２の段階のＡＷＡＩＴに第１のスレッドが達しており、第１の段階のＡＤＶＡＮＣＥに最後のスレッドが達していない場合、第１のスレッドは最後のスレッドからの信号を待つ。これは、図１Ｂに、プロセッサ0のスレッド3からの信号を待つプロセッサ0のスレッド0によって示す。この場合、最後のスレッドが第１の段階のADVANCEを通過するまで他スレッドはその実行において第２の段階（更新段階）のAWAITを通過することが可能でない。第１スレッドからの信号を待つ他のスレッドがない場合、ソフトウェア制御キャッシング処理においてデッドロックは存在していない。
【００３３】
第１の段階（読み出し段階）のＡＤＶＡＮＣＥは、処理フローにおいて第２の段階（更新段階）のＡＷＡＩＴに先行するので、ＡＷＡＩＴ「s」（スレッド間で信号が転送される）から第２の段階のAWAITへパスが存在している場合、プログラムには、第１状態においてデッドロックがない。ここで、ソースから第２の段階のAWAITへのパスは全て、ADVANCE「ｓ」を含む。さもなければ、その特定の更新はソフトウェア制御キャッシングの適格性がない。
【００３４】
第２のデッドロック状態は、同じ局所CAMを用い、所定の順序で実行される別個の２つのソフトウェア制御キャッシュ処理において生じる。例えば、第１のスレッドが、第２のキャッシング処理の第１の段階のAWAITに達し、最後のスレッドが第１のキャッシング処理の第２の段階のADVANCEにまだ達していない場合、第１のスレッドは、最後のスレッドからの信号を待つ。この状態は図3Bに示す。
【００３５】
前述の場合、第１のキャッシング処理の第２の段階のＡＤＶＡＮＣＥを最後のスレッドが通過するまで、他のスレッドはその実行において、第２のキャッシング処理の第１の段階のＡＷＡＩＴを通過することが可能でない。第１スレッドからの信号を待つ残りのスレッドがない場合、処理においてデッドロックは存在していない。
【００３６】
第２のキャッシング処理の第１の段階のAWAITへのAWAIT「s」からのパス、又は、第１のキャッシング処理の第２の段階のADVANCEへのAWAIT「s」からのパスが存在している場合、第２の状態においてプログラムはデッドロックなしである。ここで、第２のキャッシング処理の第１の段階のAWAITへのソースからのパスは全て、ADVANCE「ｓ」を含む。さもなければ、２つの更新は同じ論理CAMを用いてキャッシングすることが可能でなく、互いに干渉しないと言われる。
【００３７】
ソフトウェア制御キャッシング処理中に、特定のデータに関連した大局状態の適格性のある複数の更新をキャッシングしようとすることがあり得る。別々の論理CAMを用いて２つの更新をキャッシングすることが可能である。しかし、更新が互いに干渉する場合、同じ論理CAMを用いてキャッシングすることが可能でない。よって、キャッシュにおけるデータに対する変換は、適格性のある更新を検出するための干渉グラフとして表すことが可能であり、適格性のある更新毎に適切な論理CAMを割り当てるよう彩色アルゴリズムを処理することができる。
【００３８】
キャッシング・サービスは、複数のCAMを用いてデータに対する干渉状態を検出するための変換処理を提供する。６１０では、データの大局状態に関連した更新の適格性、及び適格性のある更新間の干渉関係が、データを操作するスレッドの実行パスから計算される。６２０では、彩色アルゴリズムが、利用可能な論理CAMを用いて処理される。次に、６３０では、実行パスに適切なキャッシュ・コードを挿入する。次に、この処理の詳細について、図７及び図８によって更に詳細に説明する。
【００３９】
図7は、例示的な実施例による、マルチスレッド及びマルチ処理の環境におけるデータを処理する複数のスレッド間の適格性状態及び干渉状態を判定するための別の方法７００の図である。方法７００（以下、「干渉関係検出サービス」）が、マシン・アクセス可能であり、マシン読み取り可能な媒体において実現され、ネットワークを介してアクセス可能である。更新の適格性及び干渉関係がどのようにして計算又は導出されるかを更に例証するために干渉関係検出サービスは図６の６１０の処理を発展させる。
【００４０】
７１０では、信号「s」毎に、AWAIT_REQUIRED(s)の組を検査し（ここで、信号「t」は、AWAIT(t)からAWAIT(s)へのパスを有し）、ADVANCE_REQUIRED(s)の組を検査する（ここで、信号「t」は、AWAIT(t)からADVANCE(s)へのパスを有する）よう計算が実行される。AWAIT_REQUIRED(s)及びADVANCE_REQUIRED(s)の組は、順方向選言的（forward  disjunctive）データフロー解析を使って計算することができる。よって、命令「n」毎に、データフロー式は以下の通りであり得る。
【００４１】
GEN[n]={信号「t」｜命令「n」はAWAIT(t)である}であり;
KILL[n]={}である。
最後に、AWAIT_REQUIRED(s)=Union  IN[n]であり、「n」はAWAIT(s)であり、ADVANCE_REQUIRED(s)=Union
IN[m]であり、「m」はADVANCE(s)である。
【００４２】
７２０では、信号「s」毎に、AWAIT_AVAILABLE(s)組を検査するために計算が行われる。ここで、信号「t」は、ソースからAWAIT(s)への何れのパスもADVANCE(t)を含むような信号である。AWAIT_AVAILABLE(s)の組は、順方向選言的データフロー解析を用いて計算することができる。よって、命令「n」毎に、データフロー式は以下の通りになり得る。
【００４３】
GEN[n]={信号「t」｜命令「n」はADVANCE(t)である}であり;
KILL[n]={}である。
最後に、AWAIT_AVAILABLE(s)=共通部分IN[n]であり、ここで「n」はAWAIT(s)である。
【００４４】
７３０では、大局状態の各更新の適格性は、７１０及び７２０での前述の計算組を用いて計算される。更新がキャッシュされた後、その更新部分の元のAWAITは、第２の段階（更新段階）のAWAITによって置き換えられる。したがって、７３０では、更新段階によって元々保護され、信号「s」を用いて実現される大局状態の更新の場合、AWAIT_REQUIRED(s)がAWAIT_AVAILABLE(s)の部分集合の場合に、その更新がキャッシングに適格である。
【００４５】
更新段階によって元々保護され、信号「s」及び「t」それぞれを用いて実現される適格な２つの更新の場合、「s」がAWAIT_REQUIRED(t)にあるか、又はTがAWAIT_REQUIRED(s)にある。７４０では、干渉関係は以下のように計算することができる。
【００４６】
（１）「ｓ」がAWAIT_REQUIRED(t)にあり、TがAWAIT_REQUIRED(s)にある場合、それらは互いに干渉する。この場合、２つの更新は別々の制御フロー・パスにおいて別々の順序で実行され、同じ論理CAMを用いて所定の順序でキャッシングすることは可能でない。
【００４７】
（２）「s」がAWAIT_REQUIRED(t)にあり、「t」がAWAIT_REQUIRED(s)にない場合に、AWAIT_REQUIRED(t)がAWAIT_AVAILABLE(t)の部分集合であり、ADVANCE_REQUIRED(s)がAWAIT_AVAILABLE
(t)の部分集合である場合、適格な２つの更新は互いに干渉しない。この場合、信号「s」に関連した更新は、何れかの制御フロー・パスにおける信号「t」に関連した更新前に実行される。更に、２つの更新はともに適格であるので、AWAIT_REQUIRED(t)がAWAIT_AVAILABLE(t)の部分集合になることが確実にされ、よって、第２の状態しか検査しなくてよい。
【００４８】
（3）「s」がAWAIT_REQUIRED(t)になく、「t」がAWAIT_REQUIRED(s)にある場合に、AWAIT_REQUIRED(ｓ)がAWAIT_AVAILABLE(ｓ)の部分集合であり、ADVANCE_REQUIRED(ｔ)がAWAIT_AVAILABLE
(ｓ)の部分集合である場合、上記更新は互いに干渉しない。
【００４９】
図７に示す干渉関係検出サービスの処理は、図６の６１０の処理を詳細に示す。６２０の処理によって、干渉関係検出サービスによって計算され、導出される適格な更新の干渉グラフが構築される。更に、６２０の処理は、利用可能な論理CAMを用いてグラフを彩色しようとする。特定の更新は、彩色することが可能でない場合、キャッシングすることが可能でない。特定の更新を彩色することが可能な場合、彩色される論理CAMを用いてキャッシングされる。図６の６３０の処理は、図８に更に詳細に表す。
【００５０】
図8は、例示的な実施例による、マルチスレッド及びマルチ処理の環境において処理されるデータの複数のキャッシュを用いてソフトウェア・キャッシング・コードを挿入するための方法の図である。方法800（以下、「キャッシュ・コーディング挿入サービス」）は、マシン・アクセス可能であり、マシン読み取り可能な媒体で実現され、ネットワークを介してアクセス可能である。キャッシュ・コーディング挿入サービスの処理は、図６に示す６３０の処理を更に詳細に表す。
【００５１】
キャッシュ・コーディング挿入サービスは、ソフトウェア制御キャッシングにおいて用いられるスレッドに別の信号をもたらす。別の信号を論理CAM毎にもたらす。ソフトウェア制御キャッシングは更に、特定の論理CAMによって彩色された適格な更新毎のソフトウェア制御キャッシングを実現する。信号「t」に関連した論理CAMを用いてキャッシングする対象の信号「ｓ」を用いて実現される更新段階によって元々保護される各大局状態の更新は、図８に表すキャッシュ・コーディング挿入サービスによって処理される。
【００５２】
８１０では、閉集合AW=「n」であることを確認するよう計算が行われる。ここで、nは、AWAIT(s)であり、大局状態のアクセスに達し得るか、又はここで、「n」は集合ADにおいてADVANCE(s)に達し得る。集合AD=「m」であり、ここで、「m」は大局状態のアクセスによって達することが可能であるか、又は「m」は集合AWにおけるAWAIT(s)によって達することができる。集合AW及びADは、２つの選言的データフロー解析（１つは順方向であり、１つは逆方向）を用いて計算することができる。２つの集合AW及びADは、基本的に、キャッシュ読み出し及び書き戻し動作が必要な所である。
【００５３】
８２０では、キャッシュ読み出し動作が、ソフトウェア制御キャッシング処理内の適切な位置に挿入される。よって、集合AWにおけるAWAIT(s)毎に、（キャッシュ・ルックアップ動作及びミス時読み出し動作を備えた）ソフトウェア制御キャッシングの第１の段階（読み出し段階）が、AWAIT(s)の直前に自動的に挿入される。
【００５４】
８３０では、キャッシュ・データに対してそのスレッドによって実行される揮発性動作又は不揮発性動作がない、スレッドの処理フローが検出される。この場合、図５に関して前述したように空きキャッシュ読み出し段階がもたらされる。よって、集合AWにないAWAIT(s)毎に、空きのボディーが第１の段階（キャッシュ読み出し部分又は段階）に挿入される。換言すれば、８３０では、信号が無条件に転送され、キャッシュ読み出し部分又は段階は空き状態である。
【００５５】
８４０では、キャッシュ・データに対してそのスレッドによって揮発性動作が実行され＊−る、スレッドの処理フローに、書き戻し動作が挿入される。同様に、集合ADにおけるADVANCE(s)毎に、そのADVANCE(s)の直前に書き戻し動作を挿入して、ADVANCE生起前にデータがキャッシュに書き戻されることを確実にする。
【００５６】
図1Bによって視覚化されたやり方で、850および860の処理は、更新段階又は更新部分を実現するようソフトウェア制御キャッシング・フローにおけるシグナリングを変更する。
【００５７】
最後に８７０で、データに対してスレッドによって行われる元のアクセスは、キャッシュ・データへの参照にアクセスするよう変更される。８７０の後、キャッシュ・コーディング挿入サービスによって挿入される生成キャッシュ・コードを最適化する目的で、部分冗長性除去及びコピー転送などの他の最適化を任意的に実現することができる。
【００５８】
同じデータをアクセスするスレッドに関連した既存の処理フローに本明細書及び特許請求の範囲記載のソフトウェア制御キャッシングを実現するための処理ロジックをどのようにして実現できるかをキャッシュ・コーディング挿入サービスの処理は表している。結果として生じるソフトウェア制御キャッシングによって、第１の段階においてスレッド全てにキャッシュからのデータへの読み出しアクセスを実質的に並列に与えることによってスレッド処理の効率が向上する。デッドロック状態又は干渉状態が存在しないことを確実にし、更新がアトミックに行われることを確実にするよう第２の段階又は更新段階が次いで、順序付けられ、確認される。
【００５９】
図9は、例示的な実施例による、マルチスレッド及びマルチ処理の環境においてデータをキャッシュし、処理するための方法９００の図である。方法900（以下、「ソフトウェア制御キャッシング・サービス」）は、マシン・アクセス可能であり、マシン読み取り可能な媒体で実現され、ネットワークを介してアクセス可能である。ソフトウェア制御キャッシング・サービスは、マルチスレッド環境における、かつ、任意的に、マルチ処理環境における複数のスレッドによって参照されるデータの処理を表す。すなわち、ソフトウェア制御キャッシング・サービスは、単一のプロセッサ上でロードし、処理するか、又は９１１に表すように複数のプロセッサに亘って処理することができる。
【００６０】
９１０では、キャッシュに収容されたデータへの参照が当初スレッドに転送される。データは、メモリ又は記憶装置からのデータの読み出しの当初スレッドによる試行に応じて参照によって識別される位置でキャッシュに読み出される。その固有のメモリ位置又は記憶位置から所望のデータを当初獲得し、それを参照位置におけるキャッシュに入れる旨をソフトウェア制御キャッシング・サービスに指示するミス時読み出し命令がこれによって生成される。
【００６１】
一実施例では、スレッド間の更新の適格性が９１２で計算されるように、複数のスレッドに関連したキャッシング処理を修正することによって、９１０に表す処理が達成される。９１３では、更新の干渉グラフが彩色され、９１４では、2段階処理（１つは不揮発性読み出しであり、１つは揮発性動作である）をスレッドが施すためにキャッシング処理にキャッシュ・コードが自動的に挿入される。よって、ソフトウェア制御キャッシング・サービスは、２つの別個の処理（１つは、2段階キャッシング処理を自動的に設定し（912-914によって表し）、１つは、スレッドの実行中にその2段階を実現する（910及び920-941によって表す）。更新適格性を計算し、干渉グラフを彩色し、キャッシュ・コードを挿入する手法の詳細は図６乃至図８に関して前述している。
【００６２】
９２０では、データへの参照は、最後のスレッドに対する0以上の中間スレッドに反復的に転送される。中間スレッド及び最後のスレッドそれぞれは、当初スレッドの環境内で処理され、それぞれがデータへのアクセスを要求する。キャッシュにおける、参照位置によって識別されるデータへの参照は、中間スレッド及び最後のスレッドに並列に、又は実質的に並列に、ソフトウェア制御キャッシュ・サービスによって、データへの参照が供給される前に、相当なレーテンシをスレッドが受けないように転送することができる。
【００６３】
キャッシュ内のデータへの参照を最後のスレッドが獲得すると、９３０で、最後のスレッドは、キャッシュ内で参照位置においてデータに対して揮発性動作を実行することがもう可能である旨を当初スレッドに通知する信号を当初スレッドに送出する。当初スレッドがデータに対してその修正を実行し、参照位置でキャッシュに変更を書き戻した後、当初スレッドは９３１で、次スレッドに信号を転送する。次スレッドは、中間スレッド、又は最後のスレッドの一方である。
【００６４】
９３２で、次スレッドが最後のスレッドでない場合、揮発性動作を実行する目的でデータへの排他的かつアトミックなアクセスを特定スレッドの処理は、最後のスレッドがデータへの揮発性アクセスを獲得し、その所望の変更をキャッシュ内のデータに行うまで順次反復することが可能である。よって、次スレッドは、単一の実行中に当初スレッドが担った役目を引き受け、キャッシュ内の参照位置に変更を書き戻すと、新たなスレッドが新たな次スレッドに通知する。キャッシュ内のデータに対してその所望の変更を各スレッドが実行するまでこれは続く。
【００６５】
よって、９４０では、単一の実行中に、データを修正し、キャッシュに参照位置において書き戻すことができる。一実施例では、９４１で、キャッシュに対して、かつ、やはりデータを収容する更なるキャッシュに対して更新を実行することができる。同一又は別々の複数のキャッシュ（例えば、CAM）間で更新を連係する手法は前述している。
【００６６】
図１０は、例示的な実施例による、図９に表すやり方においてデータを処理するようキャッシュ・サービスを修正するための方法１０００の図である。方法１０００は、マシン・アクセス可能であり、マシン読み取り可能な媒体内の命令として実現される。命令はマシンによって処理されると図１０に表す処理を実行する。
【００６７】
命令は、取り外し可能な媒体及び、マシンとのインタフェースに常駐し得る。命令は、アップロードされ、マシンによって処理される。あるいは、命令は、マシンのメモリ内又は記憶装置内に前もって準備し、マシンによって実行することができる。更に他の実施例では、命令を一マシンからネットワークを介してダウンロードし、命令が処理される別のマシン上にインストールすることができる。更に他の実施例では、命令は、別のマシンの指示によって一マシン上でネットワークを介して遠隔に実行することができる。更に、命令は複数のスレッドに対して処理され、特定の任意の実施例では、1011に表すように、１つ又は複数のマシンに関連した複数のプロセッサに亘って処理され得る。
【００６８】
１０１０では、スレッドの処理に、干渉がなく、更新適格性を有する場合、2段階処理をもたらすようキャッシング・サービスの揮発性段階又は更新段階が命令によって修正される。2段階処理を生成するための当初の自動処理は１０１２で行われる。すなわち、１０１３では、命令は、スレッドの更新の適格性を計算し、更新の干渉グラフを彩色し、2段階処理をスレッドが生成するようキャッシュ・コードをキャッシング処理に挿入する。
【００６９】
第１の段階は、複数のスレッドによって要求されるデータをキャッシュに読み出す工程、及び、データへのキャッシュ参照をスレッドそれぞれに与える工程に関連する。書込み動作（揮発性動作）を実行する目的でデータに対する排他的制御を特定のスレッドが与えられる時点の順序を維持することによって、キャッシュ内のデータへの揮発性アクセス又は更新アクセスが第２の段階によって制御される。
【００７０】
１０２０において、かつ第１の段階（読み出し段階）では、キャッシュ内のデータへの参照がスレッドそれぞれに転送される。当初スレッドの場合、ミス時読み出し動作が行われ、それによって、当初、その固有のメモリ位置又は記憶位置からデータを獲得する旨の命令が導かれる。キャッシュ内のデータへの参照は次いで、１０２１で、ゼロ以上の中間スレッド、及び最後のスレッドを含み得る残りのスレッドそれぞれに実質的に並列に順次転送される。
【００７１】
１０３０では、最後のスレッドは、キャッシュ内のデータへの参照を有する状態になると、当初スレッドに通知する。これによって、読み出し段階から更新段階（第２の段階）にキャッシングが移行する。
【００７２】
第２の段階中に、１０４０で、キャッシュ内のデータの更新、又はそのデータに対する揮発性動作の実行を特定のスレッドが完了すると各スレッドが次スレッドに順次通知する。一実施例では、１０４１で、スレッドの優先順位を、データへのアクセスをスレッドが要求した時点に応じて判定することができる。よって、当初スレッドが第１のスレッドであるが、それは、当初スレッドがデータに対する第１の要求を行っており、命令によって実行されたミス時読み出し動作を生成したからである。
【００７３】
一実施例では、１０４２で、特定のスレッドによるデータへの各更新は、キャッシュに対して行い、同時に別々のキャッシュに対して行うことができる。よって、データに対する更新は、複数のキャッシュ間で同期化させることができる。キャッシュは、同じ論理CAM又は別々のCAM（前述の通り）であり得る。
【００７４】
図１１は、例示的な実施例によるキャッシング装置１１００の図である。キャッシング装置１１００は、マシン・アクセス可能であり、マシン読み取り可能な媒体内で実現され、電磁信号としてネットワークを介して任意的にアクセス可能である。
【００７５】
キャッシング装置１１００は、キャッシュ・コントローラ１１０１及びプロセッサ１１０２を含む。プロセッサ１１０２はキャッシュ・コントローラ１１０１をソフトウェア命令として実行し、キャッシュ・コントローラ１１０１は、複数のスレッド１１０３Ａ乃至１１０３Ｂによって要求されるデータ・アクセスを処理する。プロセッサ１１０２は、複数のスレッド１１０３乃至１１０３Ｂも実行する。
【００７６】
キャッシュ・コントローラ１１０１は、図９及び図１０それぞれの方法９００及び１０００に関して前述した処理を実行する。すなわち、キャッシュ・コントローラ１１０１は、複数スレッド1103A-1103Bによって要求されるデータの２段階キャッシング手法を複数のスレッド1103A-1103Bに提供する。
【００７７】
第１の段階では、ミス時読み出し動作の際に、又は、当初スレッド1103Aによってデータが当初要求された場合に、キャッシュ内の参照にデータを読み出す。データがキャッシュに読み出された後、そのデータへの参照を、残りのスレッド1103B全てに実質的に並列に伝播させる。最後のスレッド１１０３Bが、キャッシュ内のデータの参照への読み出し参照又はアクセス参照を有する状態になると、最後のスレッド1103Bは信号を第１のスレッド１１０３Aに送出する。シグナリング及びフローはキャッシュ・コントローラ１１０１によって管理される。当初スレッド１１０３Aは次いで、キャッシュ内のデータへの排他的かつアトミックな揮発性アクセスを取得し、その変更を行い、キャッシュへの変更を書き戻す。次に、キャッシュ内のデータへの排他的な揮発性アクセスを次スレッド１１０３Bが有することを次スレッド１１０３Bに示すよう当初スレッド１１０３Aが次スレッド１１０３Bに通知する。最後のスレッド１１０３Bがキャッシュ内のデータのその更新を完了するまでこのことは順次続く。この時点で、信号を任意的に、別のプロセッサ上の別のスレッド処理に送出することができる。
【００７８】
一実施例では、キャッシュ・コントローラ１１０１は、キャッシュ内のデータに行われた変更を、更なる複数のキャッシュと同期化させることができる。更に、特定の場合には、更なるキャッシュが、プロセッサ１００２とは別個のプロセッサ上に存在し得る。
【００７９】
更に別の実施例では、キャッシュ・コントローラ１１０１は、スレッド１１０３Ａ-１１０３Bの処理フローを観察し、デッドロック状態が存在し得るように2つ以上のスレッドが互いに干渉し得ることを決定することができる。前述の実施例では、キャッシュ・コントローラ１１０１は、キャッシュからデータを除去し、データに関連したメモリ又は記憶装置からデータを別の、又は適切なアクセス機構を介して獲得するようスレッド１１０３Ａ-１１０３Ｂに命令することができる。
【００８０】
図12は、例示的な実施例によるキャッシング・システム１２００の図である。キャッシング・システム１２００は、マシン・アクセス可能であり、マシン読み取り可能な媒体で実現される。キャッシング・システム１２００は、図１１のキャッシング装置１１００を含み、更なる構成部分を含む。
【００８１】
特に、キャッシング・システム１２００は、キャッシュ・コントローラ１２０１、プロセッサ１２０２及びディスプレイ１２０３を含む。プロセッサ１２０２によって、キャッシュ・コントローラ１２０１及び複数のスレッド１２０３Ａー１２０３Ｂ（データへアクセスしようとする）が実行される。キャッシング・システム１２００は、プリンタ１２０４及びログ１２０５も含む。次に、前述それぞれを順次説明する。
【００８２】
キャッシュ・コントローラ１２０１は、図１１のキャッシュ・コントローラ１１０１に関して前述した手法を実行する。同様に、プロセッサ１２０２は、図１１のプロセッサ１１０２に関して前述した処理を実行する。スレッド１２０３Ａ乃至１２０３Ｂはデータを処理し、図１１のスレッド１１０３Ａ乃至１１０３Ｂに関して前述したやり方でキャッシュを介してキャッシュ・コントローラ１２０１からデータを獲得する。
【００８３】
ディスプレイ１２０３は、キャッシュ・コントローラ１２０１、又はキャッシュ・コントローラ１２０１によって管理される１つ若しくは複数のキャッシュに関連した状態又は結果を示す。
【００８４】
一実施例では、キャッシング・システム１２００はプリンタ１２０４も含む。プリンタ１２０４は、キャッシュ・コントローラ１２０１、又は、キャッシュ・コントローラ１２０１によって管理される１つ若しくは複数のキャッシュに関連した状態若しくは結果を印刷する。
【００８５】
更に別の実施例では、キャッシング・システム１２００がログ１２０５を含む。ログ１２０５は、キャッシュ・コントローラ１２０１の動作、又は、キャッシュ・コントローラ１２０１によって管理される１つ若しくは複数のキャッシュに関連したメモリ又は記憶装置に状態若しくは結果を記録するか収容する。
【００８６】
前述の説明は、限定的でなく、例証的なものである。多くの他の実施例は、当業者には、上記記載をレビューすることによって明らかである。本発明の実施例の範囲はよって、特許請求の範囲、及び前述の特許請求の範囲に権利が与えられる均等物の完全な範囲を参照して判定するものとする。 
技術的な開示の特性及び趣旨を読者がすばやく分かることを可能にするために米国特許法施行規則1.72(b)に準拠して要約書を記載する。上記要約書は、特許請求の範囲の範囲又は趣旨を解釈若しくは制限するために用いないものとする。
【００８７】
実施例の前述の説明では、本開示を簡潔にする目的で種々の構成を単一の実施例に集約している。各請求項に明記された構成よりも多い構成を本発明の特許請求の範囲記載の実施例が有するという意図を反映しているとして本開示方法が解されないものとする。むしろ、特許請求の範囲が反映するように、本発明の技術的内容は、開示された単一の実施例の構成全てよりも少ない構成にあり得る。よって、特許請求の範囲を本願の実施例の説明にこれによって組み入れ、各請求項はそれ自身が別個の例示的な実施例とする。 
【図面の簡単な説明】
【００８８】
【図１Ａ】例示的な実施例による、マルチスレッド及びマルチ処理の環境におけるデータの処理に関連した図である。
【図１Ｂ】例示的な実施例による、マルチスレッド及びマルチ処理の環境におけるデータの処理に関連した図である。
【図２】例示的な実施例による、マルチスレッド及びマルチ処理の環境におけるデータの処理に用いるキャッシング・システムの図である。
【図３Ａ】例示的な実施例による、別々のコンテンツ・アドレス指定可能メモリ装置及び同じコンテンツ・アドレス指定可能メモリ装置を用いたマルチスレッド及びマルチ処理環境におけるデータの処理に関連した図である。
【図３Ｂ】例示的な実施例による、別々のコンテンツ・アドレス指定可能メモリ装置及び同じコンテンツ・アドレス指定可能メモリ装置を用いたマルチスレッド及びマルチ処理環境におけるデータの処理に関連した図である。
【図４Ａ】例示的な実施例による、マルチスレッド及びマルチ処理の環境におけるデータの処理中のデッドロックに関連した図である。
【図４Ｂ】例示的な実施例による、マルチスレッド及びマルチ処理の環境におけるデータの処理中のデッドロックに関連した図である。
【図５】例示的な実施例による、マルチスレッド及びマルチ処理の環境において処理されるデータを更新するソフトウェア制御キャッシングの図である。
【図６】例示的な実施例による、マルチスレッド及びマルチ処理の環境におけるデータを処理する複数のスレッド間のソフトウェア制御キャッシングを自動的に実現するための方法の図である。
【図７】例示的な実施例による、マルチスレッド及びマルチ処理の環境におけるデータを処理する複数のスレッド間の適格性状態及び干渉状態を判定するための方法の図である。
【図８】例示的な実施例による、マルチスレッド及びマルチ処理の環境において処理されるデータの複数のスレッドを用いてソフトウェア・キャッシング・コードを挿入するための方法の図である。
【図９】例示的な実施例による、マルチスレッド及びマルチ処理の環境においてデータをキャッシュし、処理するための方法の図である。
【図１０】例示的な実施例による、図９に表すやり方においてデータを処理するようキャッシュ・サービスを修正するための方法の図である。
【図１１】例示的な実施例によるキャッシング装置の図である。
【図１２】例示的な実施例によるキャッシング・システムの図である。
【図１Ａ】
2008544417.tif 000003
【図１Ｂ】
2008544417.tif 000004
【図２】
2008544417.tif 000005
【図３Ａ】
2008544417.tif 000006
【図３Ｂ】
2008544417.tif 000007
【図４Ａ】
2008544417.tif 000008
【図４Ｂ】
2008544417.tif 000009
【図５】
2008544417.tif 000010
【図６】
2008544417.tif 000011
【図７】
2008544417.tif 000012
【図８】
2008544417.tif 000013
【図９】
2008544417.tif 000014
【図１０】
2008544417.tif 000015
【図１１】
2008544417.tif 000016
【図１２】
2008544417.tif 000017
【国際調査報告】
2008544417.tif 000018
2008544417.tif 000019