(57)【要約】      （修正有）【課題】少なくとも１つのコンピュータプログラムの実行時に複数のキャッシュセットを備えるキャッシュ構造へのアクセスを制御するための装置を提供する。【解決手段】少なくとも１つのコンピュータプログラムの実行時にシード値１６を生成するためのモジュールと、キャッシュ構造１０にアクセスするためのキャッシュセット識別子を生成するためのパラメータハッシュ関数モジュール１５とを備えており、識別子は、シード値を生成するためのモジュールによって生成されたシード値と、キャッシュ構造に関連付けられたメインメモリ１２にアクセスするためのアドレスの所定のビットとを組み合わせることによって生成される。【選択図】図１
2014059871.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つのコンピュータプログラムの実行時に複数のキャッシュセットを備えるキャッシュ構造へのアクセスを制御するための装置であって、
−前記少なくとも１つのコンピュータプログラムの前記実行時にシード値を生成するためのモジュールと、
−記キャッシュ構造にアクセスするためのキャッシュセット識別子を生成するためのパラメータハッシュ関数モジュールと
を備えており、
前記識別子が、前記シード値を生成するためのモジュールによって生成されたシード値と、前記キャッシュ構造に関連付けられたメインメモリにアクセスするためのアドレスの所定のビットとを組み合わせることによって生成される、装置。
【請求項２】
前記キャッシュ構造が２ｎ個のセットを備えており、前記生成されたキャッシュセット識別子がｎ個のビットを含んでいる、請求項１に記載の装置。
【請求項３】
前記所与のアドレスがビットの並びを含んでおり、その一部がオフセットに対応しており、前記アドレスの前記所定のビットが、前記オフセットを除いた前記ビットの並びを含んでいる、請求項１または２に記載の装置。
【請求項４】
前記キャッシュ構造が、セットごとに少なくとも１つのキャッシュラインを備えている、請求項１〜３のいずれか一項に記載の装置。
【請求項５】
前記シード値を生成するためのモジュールが疑似乱数発生器を備えている、請求項１〜４のいずれか一項に記載の装置。
【請求項６】
前記生成されたシード値を保存するためのメモリモジュールをさらに備えている、請求項１〜５のいずれか一項に記載の装置。
【請求項７】
少なくとも１つのコンピュータプログラムの実行時に複数のキャッシュセットを備えるキャッシュ構造へのアクセスを制御する方法であって、
−前記少なくとも１つのコンピュータプログラムの前記実行時にシード値を生成するステップと、
−前記キャッシュ構造に関連付けられたメインメモリにアクセスするためのアドレスを受信するステップと、
−前記キャッシュ構造にアクセスするためのキャッシュセット識別子を、前記生成されたシード値と前記受信されたアドレスの所定のビットとを組み合わせることによって生成するステップと
を含む方法。
【請求項８】
複数のキャッシュセットを備える前記キャッシュ構造へのアクセスを制御する請求項７に記載の方法をコンピュータに実行させるプログラム命令を含んでいるコンピュータプログラム製品。
【請求項９】
記憶媒体上に具現化された請求項８に記載のコンピュータプログラム製品。
【請求項１０】
担体信号上を運ばれる請求項８に記載のコンピュータプログラム製品。
【請求項１１】
複数のキャッシュセットを備えるキャッシュ構造であって、前記キャッシュ構造へのアクセスを制御するための請求項１〜６のいずれか一項に記載の装置を備えているキャッシュ構造。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、少なくとも１つのコンピュータプログラムの実行時に複数のキャッシュセットを備えるキャッシュ構造へのアクセスを制御するための方法に関する。より具体的には、本発明は、コンピュータプログラムによってアクセスされる各々のアドレスに、キャッシュ構造の任意の特定のキャッシュセットへと割り当てられるべき真の確率（ｔｒｕｅ  ｐｒｏｂａｂｉｌｉｔｙ）を付随させることができるように保証することができる方法に関する。
【０００２】
さらに、本発明は、そのような方法の実行に適したキャッシュ構造へのアクセスを制御するための装置およびコンピュータプログラム製品に関する。
【０００３】
本発明は、例えば飛行制御システムなどの安全がきわめて重要なリアルタイムのシステムなど、リアルタイムのシステムに適用可能である。
【背景技術】
【０００４】
キャッシュは、一般に、処理装置において動作するプログラムをより高速に実行するために、符号またはデータなどの情報を記憶するために使用することができる小さくて高速な記憶バッファである。一般に、処理装置にとって、キャッシュの読み出しはメインメモリの読み出しよりも高速である。また、苛烈な演算の必要性の急速な高まりを承けて、コンピュータシステムにおけるキャッシュの重要性は増す一方である。
【０００５】
キャッシュ構造は、概念的には、Ｓ個のセット（概念的には、行）およびＷ個のウェイ（概念的には、列）に配置されたＳ＊Ｗ個のキャッシュライン（概念的には、セル）からなる行列である。キャッシュへのデータが配置されるセット（すなわち、行）は、配置ポリシー（ｐｌａｃｅｍｅｎｔ  ｐｏｌｉｃｙ）によって決定される。配置ポリシーは、データが記憶されるメモリアドレスの特定のビットを使用して、このデータを特定のキャッシュセット（行）へとマッピングするハッシュ関数を実行する。キャッシュの観点から、異なるデータをキャッシュライン（または、単にライン）へとまとめることができる。異なるメモリラインは、同じキャッシュセットへと衝突する可能性があるため、キャッシュセットは、ウェイ（すなわち、列）と呼ばれる所与の数のキャッシュラインで構成される。すべてのセットが、キャッシュの連想性（ａｓｓｏｃｉａｔｉｖｉｔｙ）を決定する同数のウェイを有する。したがって、Ｗウェイのセット連想キャッシュ（ｓｅｔ−ａｓｓｏｃｉａｔｉｖｅ  ｃａｃｈｅ）は、セットごとにＷ個のウェイを備える。所与のセットについて、メモリラインが配置されるウェイ（キャッシュライン）は、再配置ポリシー（ｒｅｐｌａｃｅｍｅｎｔ  ｐｏｌｉｃｙ）によって決定される。ミスであることが判明したキャッシュアクセスの事象において、再配置ポリシーは、所与のセット（行）のすべてのウェイ（列）のなかから、どのメモリラインを新たなメモリラインのためのスペースを作るために退去させるかを選択する。次いで、新たなメモリラインが、たったいま中身（メモリライン）を退去させたキャッシュラインに保存される。各々のラインを、１つまたは複数のワードで構成することができる。ワードの粒度は、通常はバイトを単位に測定される（例えば、１、２、または４バイト）。
【０００６】
キャッシュのタイミング挙動は、主として、配置ポリシーおよび再配置ポリシーによって決定される。ラインサイズ、ワードサイズ、および他のキャッシュパラメータも、キャッシュのタイミング挙動に影響を及ぼすことができる。所与のキャッシュの構成において、ラインサイズおよびワードサイズの両方が固定される。
【０００７】
高性能プロセッサにおけるランダム化キャッシュ（ｒａｎｄｏｍｉｓｅｄ  ｃａｃｈｅ）が、疑似ランダムハッシュ関数を使用することによってキャッシュコンフリクトを取り除くために提案されている［Ａ．  Ｇｏｎｚａｌｅｚ  ｅｔ  ａｌ．  Ｅｌｉｍｉｎａｔｉｎｇ  ｃａｃｈｅ  ｃｏｎｆｌｉｃｔ  ｍｉｓｓｅｓ  ｔｈｒｏｕｇｈ  ＸＯＲ−ｂａｓｅｄ  ｐｌａｃｅｍｅｎｔ  ｆｕｎｃｔｉｏｎｓ．  Ｉｎ  ＩＣＳ，  １９９７］［Ａ．  Ｓｅｚｎｅｃ  ａｎｄ  Ｆ．  Ｂｏｄｉｎ．  Ｓｋｅｗｅｄ−ａｓｓｏｃｉａｔｉｖｅ  ｃａｃｈｅｓ．  Ｉｎ  ＰＡＲＬＥ．  １９９３］［Ｎｉｇｅｌ  Ｔｏｐｈａｍ  ａｎｄ  Ａｎｔｏｎｉｏ  Ｇｏｎｚａｌｅｚ．  Ｒａｎｄｏｍｉｚｅｄ  ｃａｃｈｅ  ｐｌａｃｅｍｅｎｔ  ｆｏｒ  ｅｌｉｍｉｎａｔｉｎｇ  ｃｏｎｆｌｉｃｔｓ．  ＩＥＥＥ  Ｔｒａｎｓ．  Ｃｏｍｐｕｔ．，  ４８，  Ｆｅｂｒｕａｒｙ  １９９９］。しかしながら、それらすべてのキャッシュ設計の挙動は、完全に決定性である。すなわち、プログラムのための所与のデータ入力セットが、そのプログラムに病的なアクセスパターンを生成させるときはいつも、このパターンが、プログラムのすべての実行においてそのような入力セットについて体系的に繰り返される。したがって、病的な事例の頻度が減らされても、それらの確率が拘束されることを証明するやり方が存在しないため、それらが依然として体系的に現れる可能性がある。
リアルタイムドメインにおいて、確率的タイミング分析（ＰＴＡ）（例えば、［Ｆ．  Ｊ．  Ｃａｚｏｒｌａ  ｅｔ  ａｌ．  Ｐｒｏａｒｔｉｓ：  Ｐｒｏｂａｂｉｌｉｓｔｉｃａｌｌｙ  ａｎａｌｙｓａｂｌｅ  ｒｅａｌ−ｔｉｍｅ  ｓｙｓｔｅｍｓ．  Ｔｅｃｈｎｉｃａｌ  Ｒｅｐｏｒｔ  ７８６９  （ｈｔｔｐ：／／ｈａｌ．ｉｎｒｉａ．ｆｒ／ｈａｌ−００６６３３２９），  ＩＮＲＩＡ，  ２０１２］、［Ｄ．  Ｇｒｉｆｆｉｎ  ａｎｄ  Ａ．  Ｂｕｒｎｓ．  Ｒｅａｌｉｓｍ  ｉｎ  Ｓｔａｔｉｓｔｉｃａｌ  Ａｎａｌｙｓｉｓ  ｏｆ  Ｗｏｒｓｔ  Ｃａｓｅ  Ｅｘｅｃｕｔｉｏｎ  Ｔｉｍｅｓ．  Ｉｎ  ｔｈｅ  １０ｔｈ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｗｏｒｋｓｈｏｐ  ｏｎ  Ｗｏｒｓｔ−Ｃａｓｅ  Ｅｘｅｃｕｔｉｏｎ  Ｔｉｍｅ  Ａｎａｌｙｓｉｓ  （ＷＣＥＴ  ２０１１），  ｐａｇｅｓ  ４４−５３，  ２０１０］、または［Ｊ．  Ｈａｎｓｅｎ，  Ｓ．  Ｈｉｓｓａｍ，  ａｎｄ  Ｇ．  Ａ．  Ｍｏｒｅｎｏ．  Ｓｔａｔｉｓｔｉｃａｌ−ｂａｓｅｄ  ＷＣＥＴ  ｅｓｔｉｍａｔｉｏｎ  ａｎｄ  ｖａｌｉｄａｔｉｏｎ．  Ｉｎ  ｔｈｅ  ９ｔｈ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｗｏｒｋｓｈｏｐ  ｏｎ  Ｗｏｒｓｔ−Ｃａｓｅ  Ｅｘｅｃｕｔｉｏｎ  Ｔｉｍｅ  （ＷＣＥＴ）  Ａｎａｌｙｓｉｓ，  ２００９］を参照）が、現在のＷＣＥＴ分析技術、すなわち静的なタイミング分析および測定にもとづくタイミング分析の課題に対する有望かつ効果的な技術的解決策として現れている。
【０００８】
ＰＴＡは、ハードウェアの設計に新たな要件を課す。より具体的には、キャッシュの設計において、ＰＴＡ技術は、メモリアクセスのタイミング挙動をベクトルのペアによって
2014059871.tif 000003
と定義できることを必要とし、ここでｌｉは、メモリの階層がデータを差し出すまでに要する可能性がある考えられるすべての待ち時間を挙げており、ｐｉは、それについての発生の確率である。所与の待ち時間の発生の確率が、その頻度とは異なり、頻度が過去の事象についての情報をもたらす一方で、確率が将来の事象の発生についての保証をもたらすことができることに、注意すべきである（例えば、［Ｆ．  Ｊ．  Ｃａｚｏｒｌａ  ｅｔ  ａｌ．  Ｐｒｏａｒｔｉｓ：Ｐｒｏｂａｂｉｌｉｓｔｉｃａｌｌｙ  ａｎａｌｙｓａｂｌｅ  ｒｅａｌ−ｔｉｍｅ  ｓｙｓｔｅｍｓ．  Ｔｅｃｈｎｉｃａｌ  Ｒｅｐｏｒｔ  ７８６９  （ｈｔｔｐ：／／ｈａｌ．ｉｎｒｉａ．ｆｒ／ｈａｌ−００６６３３２９），  ＩＮＲＩＡ，  ２０１２］を参照）。したがって、キャッシュリソースの場合について、ＰＴＡは、各々のアクセスについて、それがキャッシュにおいてヒットするか、またはミスするかの確率を計算できることを必要とする。
【０００９】
ランダム再配置ポリシーが、キャッシュセット（行）におけるキャッシュライン（セル）の選択をランダムにするために存在する。しかしながら、既存の配置ポリシーは、アクセスされるアドレスにもとづいて純粋に決定性である。したがって、２つの異なるアドレスへのアクセスが同じキャッシュセットについて競合するかどうかは、それらの特定のアドレスおよび使用された配置関数にもっぱら依存する。したがって、２つのアドレスが実行の開始時に同じキャッシュセットへと配置された場合、それらはプログラムの実行の最中に常に、プログラムのすべての動作において、そのキャッシュセットにおいて衝突する。挙動が純粋に決定性であるため、真の確率を計算することができない。したがって、確率的タイミング分析（ＰＴＡ）が必要とする確率論的性質が満たされない。
【００１０】
プロセッサのセキュリティにおいて、標準的なランダム化されていないキャッシュは、暗号鍵などの重要な情報の漏れに対して脆弱である。標準的なキャッシュへの攻撃は、キャッシュのヒットとミスとの間のタイミング差だけに頼る。ランダム再配置のキャッシュなどを使用することによって、アクセス間およびアクセスがヒットするか、またはミスするかの決定性を破ることで、ヒットおよびミスが所与の確率で生じるようにされ、情報が攻撃者にとって見えなくなるため、セキュリティが向上する。
【００１１】
全体として、いままでのところ、ランダム再配置を実行する１つのキャッシュセット（配置関数を必要としない）および複数のキャッシュウェイを有するキャッシュだけが、ＰＴＡ技術に適しており、セキュリティの脆弱性を軽減する。残念ながら、それらのキャッシュは、完全連想キャッシュ（ｆｕｌｌｙ−ａｓｓｏｃｉａｔｉｖｅ  ｃａｃｈｅ）としても知られるが、一般にエネルギーおよびエリアに関して高価であり、拡大縮小が容易でない。
【先行技術文献】
【非特許文献】
【００１２】
【非特許文献１】Ａ．  Ｇｏｎｚａｌｅｚ  ｅｔ  ａｌ．  Ｅｌｉｍｉｎａｔｉｎｇ  ｃａｃｈｅ  ｃｏｎｆｌｉｃｔ  ｍｉｓｓｅｓ  ｔｈｒｏｕｇｈ  ＸＯＲ−ｂａｓｅｄ  ｐｌａｃｅｍｅｎｔ  ｆｕｎｃｔｉｏｎｓ．  Ｉｎ  ＩＣＳ，  １９９７
【非特許文献２】Ａ．  Ｓｅｚｎｅｃ  ａｎｄ  Ｆ．  Ｂｏｄｉｎ．  Ｓｋｅｗｅｄ−ａｓｓｏｃｉａｔｉｖｅ  ｃａｃｈｅｓ．  Ｉｎ  ＰＡＲＬＥ．  １９９３
【非特許文献３】Ｎｉｇｅｌ  Ｔｏｐｈａｍ  ａｎｄ  Ａｎｔｏｎｉｏ  Ｇｏｎｚａｌｅｚ．  Ｒａｎｄｏｍｉｚｅｄ  ｃａｃｈｅ  ｐｌａｃｅｍｅｎｔ  ｆｏｒ  ｅｌｉｍｉｎａｔｉｎｇ  ｃｏｎｆｌｉｃｔｓ．  ＩＥＥＥ  Ｔｒａｎｓ．  Ｃｏｍｐｕｔ．，  ４８，  Ｆｅｂｒｕａｒｙ  １９９９
【非特許文献４】Ｆ．  Ｊ．  Ｃａｚｏｒｌａ  ｅｔ  ａｌ．  Ｐｒｏａｒｔｉｓ：  Ｐｒｏｂａｂｉｌｉｓｔｉｃａｌｌｙ  ａｎａｌｙｓａｂｌｅ  ｒｅａｌ−ｔｉｍｅ  ｓｙｓｔｅｍｓ．  Ｔｅｃｈｎｉｃａｌ  Ｒｅｐｏｒｔ  ７８６９  （ｈｔｔｐ：／／ｈａｌ．ｉｎｒｉａ．ｆｒ／ｈａｌ−００６６３３２９），  ＩＮＲＩＡ，  ２０１２
【非特許文献５】Ｄ．  Ｇｒｉｆｆｉｎ  ａｎｄ  Ａ．  Ｂｕｒｎｓ．  Ｒｅａｌｉｓｍ  ｉｎ  Ｓｔａｔｉｓｔｉｃａｌ  Ａｎａｌｙｓｉｓ  ｏｆ  Ｗｏｒｓｔ  Ｃａｓｅ  Ｅｘｅｃｕｔｉｏｎ  Ｔｉｍｅｓ．  Ｉｎ  ｔｈｅ  １０ｔｈ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｗｏｒｋｓｈｏｐ  ｏｎ  Ｗｏｒｓｔ−Ｃａｓｅ  Ｅｘｅｃｕｔｉｏｎ  Ｔｉｍｅ  Ａｎａｌｙｓｉｓ  （ＷＣＥＴ  ２０１１），  ｐａｇｅｓ  ４４−５３，  ２０１０
【非特許文献６】Ｊ．  Ｈａｎｓｅｎ，  Ｓ．  Ｈｉｓｓａｍ，  ａｎｄ  Ｇ．  Ａ．  Ｍｏｒｅｎｏ．  Ｓｔａｔｉｓｔｉｃａｌ−ｂａｓｅｄ  ＷＣＥＴ  ｅｓｔｉｍａｔｉｏｎ  ａｎｄ  ｖａｌｉｄａｔｉｏｎ．  Ｉｎ  ｔｈｅ  ９ｔｈ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｗｏｒｋｓｈｏｐ  ｏｎ  Ｗｏｒｓｔ−Ｃａｓｅ  Ｅｘｅｃｕｔｉｏｎ  Ｔｉｍｅ  （ＷＣＥＴ）  Ａｎａｌｙｓｉｓ，  ２００９
【発明の概要】
【発明が解決しようとする課題】
【００１３】
本発明の目的は、キャッシュ構造へのアクセスを制御するための装置であって、従来技術の欠点を回避する装置を提供することにある。
【課題を解決するための手段】
【００１４】
上記を達成するために、本発明は、第１の態様によれば、少なくとも１つのコンピュータプログラムの実行時に複数のキャッシュセットを備えるキャッシュ構造へのアクセスを制御するための装置であって、前記少なくとも１つのコンピュータプログラムの実行時にシード値（ｓｅｅｄ  ｖａｌｕｅｓ）を生成するためのモジュールと、前記キャッシュ構造にアクセスするためのキャッシュセット識別子を生成するためのパラメータハッシュ関数モジュール（ｐａｒａｍｅｔｒｉｃ  ｈａｓｈ  ｆｕｎｃｔｉｏｎ  ｍｏｄｕｌｅ）とを備えており、前記識別子が、前記シード値を生成するためのモジュールによって生成されたシード値と、前記キャッシュ構造に関連付けられたメインメモリにアクセスするためのアドレスの所定のビットとを組み合わせることによって生成される装置を提供する。
【００１５】
このやり方で、複数のセットを有するキャッシュ構造において、シード値を用意することによって、真の確率を有する所与のアクセスが、アドレスの値にかかわらずにキャッシュ構造のキャッシュセットの各々へと割り当てられることが保証される。すなわち、本発明は、マイクロプロセッサなどのプロセッサモジュールを通じてコンピュータプログラムによってアクセスされる各々のアドレスに、複数のセットを備えるキャッシュ構造の任意の特定のキャッシュセットへと割り当てられるべき真の確率を結び付けることができることを保証することができる。
【００１６】
生成されたシード値を、定期的または特定の事象の発生時に更新できることに、注目することが重要である。このやり方で、シード値をコンピュータプログラムの実行の開始時または終了時にのみ更新することができるが、異なる時点における更新あるいはより高い頻度またはより低い頻度での更新も、本発明の範囲に包含される。
【００１７】
結果として、シード値が変更される場合、所与の固定のアドレスについて得られるセット識別子も変化する。本発明において、任意のパラメータハッシュ関数モジュールを、アドレスを任意のセットへとマッピングできる真の確率が存在する限りにおいて、使用することができる。任意のシード値を使用することができる。しかしながら、入力アドレスおよび／またはシード値に生じる変化が小さい場合でも、パラメータハッシュ関数モジュールがその出力のセット識別子に大きな変動を生じさせ、シードが乱数または疑似乱数値に設定される場合、高度のランダム化が達成される。
【００１８】
さらに、配置関数を実行する複数のセットを有するキャッシュ構造が、エネルギーに関してより好都合である。複数のセットを有するそれらのキャッシュ構造は、セットごとに１つのキャッシュラインしか持たない（再配置ポリシーが不要である）場合には、直接マッピングキャッシュとして知られ、セットごとに２つ以上のキャッシュラインを有する（配置および再配置の両方のポリシーが必要である）場合には、セット連想キャッシュとして知られる。
【００１９】
本発明の好ましい実施形態によれば、前記キャッシュ構造は、２ｎ個のセットを備えることができ、前記生成されるキャッシュセット識別子が、ｎ個のビットを含むことができる。
【００２０】
好ましくは、前記所与のアドレスは、ビットの並びを含んでおり、その一部が、オフセットに対応しており、前記アドレスの前記所定のセット識別子ビットが、前記オフセットを除いた前記ビットの並びを含むことができる。
【００２１】
別の実施形態によれば、前記キャッシュ構造は、セット連想キャッシュ構造または直接マッピングキャッシュ構造など、セットごとに少なくとも１つのキャッシュラインを備えることができる。
【００２２】
本発明の別の実施形態によれば、少なくとも１つのコンピュータプログラムの実行時にシード値を生成するための前記モジュールは、ハードウェアまたはソフトウェアのどちらで実現してもよい疑似乱数発生器を備えることができる。例えば、シード値を生成するためのモジュールを、電子素子（例えば、論理ゲート）によってハードウェアにて実現することができる。
【００２３】
さらに、装置は、前記生成されたシード値を保存するためのメモリモジュールを備えることができ、すべての生成されたシード値を、メモリモジュールに保存することができる。あるいは、新たに生成されたシード値が、以前に生成されたシード値を置き換えてもよい。
【００２４】
別の態様によれば、本発明は、少なくとも１つのコンピュータプログラムの実行時に複数のキャッシュセットを備えるキャッシュ構造へのアクセスを制御する方法であって、
−前記少なくとも１つのコンピュータプログラムの実行時にシード値を生成するステップと、
−前記キャッシュ構造に関連付けられたメインメモリにアクセスするためのアドレスを受信するステップと、
−前記キャッシュ構造にアクセスするためのキャッシュセット識別子を、生成されたシード値と前記受信されたアドレスの所定のビットとを組み合わせることによって生成するステップと
を含む方法を提供する。
【００２５】
本発明のさらに別の態様によれば、キャッシュ構造へのアクセスを制御する上述の方法をコンピュータに実行させるためのプログラム命令を含んでいるコンピュータプログラム製品が提供される。さらに本発明は、記憶媒体（例えば、ＣＤ−ＲＯＭ、ＤＶＤ、ＵＳＢドライブ、コンピュータメモリ、または読み出し専用メモリ）上に具現化され、あるいは担体信号（例えば、電気または光担体信号）上を運ばれる上述のコンピュータプログラム製品に関する。
【００２６】
さらに本発明は、複数のキャッシュセットを備えるキャッシュ構造であって、当該キャッシュ構造へのアクセスを制御するための上述の装置を備えるキャッシュ構造を提供する。
【００２７】
本発明の実施形態のさらなる目的、利点、および特徴は、本明細書を検討することによって当業者にとって明らかになり、あるいは本発明を実施することによって学習可能である。
【００２８】
本発明の特定の実施形態を、添付の図面を参照しつつ、あくまでも本発明を限定するものではない例によって、以下で説明する。
【図面の簡単な説明】
【００２９】
【図１】本発明によるキャッシュ構造へのアクセスを制御するための装置を備えているキャッシュ構造を配置するプロセッサの構成を概略的に示している。
【図２】キャッシュ構造に組み合わせられたプロセッサモジュールによって与えられるメインメモリの特定のアドレスに関するキャッシュ構造へと要求を含んでいるアドレスレジスタを概略的に示している。
【図３】図１に示したキャッシュ構造へのアクセスを制御するための装置に含まれるパラメータハッシュ関数モジュールの実施形態のブロック図を示している。
【図４】図３に示したパラメータハッシュ関数モジュールに使用される循環モジュールのブロック図を示している。
【図５】図３に示したパラメータハッシュ関数モジュールに使用されるＸＯＲモジュールのブロック図を示している。
【発明を実施するための形態】
【００３０】
好ましい実施形態の以下の説明において、多数の具体的詳細が、本発明の充分な理解をもたらすために説明される。しかしながら、当業者であれば、本発明をそのような具体的詳細を必要とせずに実施できることを、理解できるであろう。他の場合には、周知の構成要素が、無用な詳細にて本発明を不明瞭にすることがないよう、概略図またはブロック図の形態で示されている。
【００３１】
また、別段の指示がない限りは、本明細書において説明される機能を、ハードウェアもしくはソフトウェアのいずれか、またはそれらの何らかの組み合わせにて実行できることに、注意すべきである。しかしながら、好ましい実施形態においては、機能が、別段の指示がない限りは、コンピュータまたは電子データプロセッサなどのプロセッサによって、コンピュータプログラムコードなどのコード、ソフトウェア、および／またはそのような機能を実行するようにコーディングされた集積回路に従って実行される。
【００３２】
コンピュータシステム（例えば、パーソナルコンピュータ）におけるコンピュータプログラムの実行は、コンピュータシステムが自身のプロセッサを通じてコンピュータプログラムの命令を実行する処理に関する。これらの命令の一部は、コンピュータシステムに含まれるメインメモリの所定のアドレスに保存されたデータへのアクセスを必要とする可能性がある。このように、プロセッサは、必要なデータを得るために所定のアドレスに従ってメインメモリへのアクセスを試みる場合に、まずは必要なデータがメインメモリに組み合わせられたキャッシュ構造に保存されているかどうかを確認する。これが、キャッシュ構造が情報の保存に使用することができる通常は小さくて高速な記憶バッファを備えている理由であり、結果としてプロセッサがより迅速かつ効率的に情報にアクセスすることができ、すなわちプロセッサにとって、キャッシュ構造のより小さなメモリを読み出すことが、メインメモリを読み出すことよりも高速である。
【００３３】
すでに説明したように、キャッシュ構造は、概念的には、Ｓ個のセット（概念的には、行）およびＷ個のウェイ（概念的には、列）に配置されたＳ＊Ｗ個のキャッシュライン（概念的には、セル）からなる行列である。キャッシュへのデータが配置されるセット（すなわち、行）は、配置ポリシーによって決定される。配置ポリシーは、メモリアドレスの特定のビットを使用して、各々の特定のメモリラインを特定のキャッシュセット（行）へとマッピングするハッシュ関数を実行する。異なるメモリラインが同じキャッシュセットへと衝突する可能性があるため、キャッシュセットは、ウェイ（すなわち、列）と呼ばれる所与の数のラインで構成される。すべてのセットが、キャッシュの連想性を決定する同数のウェイを有する。したがって、Ｗウェイのセット連想キャッシュは、セットごとにＷ個のウェイを備える。所与のセットについて、メモリラインが配置されるウェイ（キャッシュライン）は、再配置ポリシーによって決定される。ミスであることが判明したキャッシュアクセスの事象において、再配置ポリシーは、所与のセット（行）のすべてのウェイ（列）のなかから、どのメモリラインを新たなメモリラインのためのスペースを作るために退去させるかを選択する。次いで、新たなメモリラインが、ただいま中身（メモリライン）を退去させたキャッシュラインに保存される。各々のラインを、１つまたは複数のワードで構成することができる。ワードの粒度は、通常はバイトを単位に測定される（例えば、１、２、または４バイト）。
【００３４】
図１は、キャッシュ構造１０が配置されたプロセッサの構成を示している。キャッシュ構造１０は、複数のウェイＷ１〜Ｗ８および複数のセットＳ１〜Ｓ４を備えている（すなわち、４＊８個のキャッシュラインからなる行列）。キャッシュ構造１０は、中央演算処理装置（ＣＰＵ）１１およびメインメモリ１２へと接続されている。さらに、キャッシュ構造１０は、ＣＰＵ１１から発せられたメインメモリ１２へのアクセスのための所与のアドレスを割り当てるためにキャッシュセットＳ１〜Ｓ４のうちのどのセットが使用されるのかを決定するセット配置論理モジュール１３も備えている。セット配置論理モジュール１３は、本発明に従ってキャッシュ構造へのアクセスを制御するための装置１４からキャッシュ構造１０にアクセスするためのキャッシュセット識別子を受け取る。
【００３５】
制御装置１４は、例えば疑似乱数発生器（図示せず）によって生成されるシード値１６とメインメモリ１２へのアクセスのための所与のアドレスの所定のビット１７とを組み合わせるパラメータハッシュ関数モジュール１５を備えている。
【００３６】
この時点で、疑似乱数発生器をハードウェアまたはソフトウェアのいずれでも実現できるが、シード値を得るための任意の他のやり方も本発明の範囲に含まれることに、注意することが重要である。
【００３７】
さらに、本発明は、コンピュータプログラムの実行の始めおよび終わりにおいてのみシード値１６を更新することを提案するが、他の時点における更新、またはより高い頻度もしくはより低い頻度での更新も、本発明の範囲に含まれる。
【００３８】
結果として、シード値が変更される場合、アドレスは同じままであるが、得られるセット識別子が変化する。アドレスを任意のセットへとマッピングできる真の確率が存在する限りにおいて、任意のパラメータハッシュ関数モジュールを使用することができる。任意のシード値を使用することができる。しかしながら、入力アドレスおよび／またはシード値に生じる変化が小さい場合でも、パラメータハッシュ関数モジュールがその出力のセット識別子に大きな変動を生じさせ、シードが乱数または疑似乱数値に設定される場合に、ＰＴＡ結果がより良好（より短い実行時間）である。
【００３９】
さらに、制御装置１４が、生成されたシード値１６を保存するためのレジスタ（図示せず）をさらに備えることができる。
【００４０】
図２が、ＣＰＵ１１から発せられる、メインメモリ１２へのアクセスのためのアドレス２０の例を示しており、その所定のビット１７が、キャッシュ構造１０へのアクセスのためのキャッシュセット識別子を得るためにシード値１６と組み合わせられる。基本的には、アドレス２０は、３つのビット部分を含んでいる。
・タグ２１
・インデックス２２
・オフセット２３
【００４１】
説明のための例として、アドレスが１６ビットの幅であり、キャッシュラインのサイズが６４バイト（２６バイト−一般に、バイト数は２ｎである）である場合、図１から知られるキャッシュ構造（４つのセットＳ１〜Ｓ４、８つのウェイＷ１〜Ｗ８）について、アドレスビットは以下のように分類され、すなわち最上位の８つのビットがタグ２１であり、次の２ビット（すなわち、キャッシュが４つのセットを備えることから、すべてのセットをアドレスするために２ビットが必要である）がインデックス２２であり、最下位の６つ（すなわち、「ｎ」個）のビットがオフセット２３である。このやり方で、アドレスが（２進法で）「００１１  ００１１  ０１００  ０１１１」である場合、タグ２１が「００１１  ００１１」であり、インデックス２２が「０１」であり、オフセット２３が「００  ０１１１」である。
【００４２】
伝統的な配置ポリシーは、インデックス２２（この例では、「０１」）を使用し、これらのビットをセット配置論理モジュール１３へと供給することによってアクセスされるキャッシュセットを選択する。この例では、インデックスのビットが「００」である場合にセットＳ１がアクセスされ、インデックスのビットが（今回の例のように）「０１」である場合にセットＳ２がアクセスされ、インデックスのビットが「１０」である場合にセットＳ３がアクセスされ、インデックスのビットが「１１」である場合にセットＳ４がアクセスされる。タグ２１とインデックス２２とを組み合わせてキャッシュセット識別子を生成する他の配置ポリシーも知られている。しかしながら、これらの配置ポリシーは、生成されるキャッシュセット識別子がアクセスされるアドレスにのみ依存しているため、明らかに決定性である。
【００４３】
本発明による装置１４は、タグ２１およびインデックス２２のビット（すなわち、アドレス２０の所定のビット１７）とシード値１６とを組み合わせ、パラメータハッシュ関数モジュール１５によってキャッシュセット識別子を生成する。
【００４４】
図３が、パラメータハッシュ関数モジュール１５の実施形態を示している。当然ながら、シード値１６およびアドレス２０の所定のビット１７（すなわち、この実施形態ではタグ２１およびインデックス２２）の組み合わせを、キャッシュ構造へのアクセスのためのキャッシュセット識別子を生成するという目的で、さまざまなやり方で実行することができ、そのために、パラメータハッシュ関数モジュール１５は、さまざまな設定を有することができる。
【００４５】
図３に示した実施形態において、パラメータハッシュ関数モジュール１５は、アドレス２０の所定のビット１７を受け取って保存するためのレジスタ３０を備えている。この実施形態においては、アドレスが３２ビットであるため、アドレスの所定のビットは、アドレスのビット５〜３１である（すなわち、オフセット２３を除くアドレス２０）。
【００４６】
さらに、パラメータハッシュ関数モジュール１５は、シード値１６（この実施形態においては、シード値は３２個のビットを含む）を受け取って保存するためのレジスタ３６と、アドレス２０の所定のビット１７を、シード値１６のいくつかのビット３２ａ、３２ｂ、３２ｃ、３２ｄまたは所定のビット１７のいくつかのビットのどちらかにもとづいて循環させるための複数のモジュール３１ａ、３１ｂ、３１ｃ、３１ｄと、シード値１６のビット、アドレス２０の所定のビット１７、および各々の循環モジュール３１ａ、３１ｂ、３１ｃ、３１ｄの出力において得られたビットを連結するためのモジュール３３と、連結後の２進値のビット数をすべてのキャッシュセットをインデックスするために必要なビット数の２進値へと適合させるための種々の長さの複数のＸＯＲ折り畳み論理モジュール３４ａ、３４ｂ、３４ｃ、３４ｄ、３４ｅとをさらに備えている。ＸＯＲ折り畳み論理モジュール３４ａの出力が、キャッシュセット識別子に対応し、キャッシュ構造１０にアクセスし、キャッシュセットのデータを取得し、あるいはキャッシュセットにデータを入力するために、セット配置論理モジュール１３へと識別子を供給するレジスタ３５によって受信される。上述のように、セット配置論理モジュール１３が、所与のアドレス２０の割り当てにキャッシュセットＳ１〜Ｓ４のうちのどのセットを使用するかを決定する。
【００４７】
以下で、図３に示したパラメータハッシュ関数モジュール１５に含まれる循環モジュール３１ａ、３１ｂ、３１ｃ、３１ｄの動作を、図４から説明する。
【００４８】
基本的に、この実施形態においては、各々の循環モジュールが、値レジスタ４０に保存された２進値を位置Ｎ個分だけ左方に循環させる目的の循環論理素子４１を備えており、ここでＮは、制御レジスタ４２によって決定される。循環論理素子４１の出力が、レジスタ４３によって受信され、保存される。したがって、値レジスタ４０における２進値の最も左側のＮ個のビットが、出力レジスタ４３の最も右側のＮ個のビットになり、値レジスタ４０における２進値の最も右側の残りのＭ個のビットが、出力レジスタ４３の最も左側のＭ個のビットになる。制約ではないが、２進値のビット数が２の累乗（例えば、２ビット、４ビット、８ビット、など）であり、制御レジスタ４２が、２進値のサイズの２を底とする対数と同数のビットを有することが推奨される。例えば、２進値が３２ビットの幅である場合、制御レジスタ４２は、２進値の３２個の異なる循環（０〜３１ビットの循環）を生成できる３２個の異なる値をとることができるよう、５つのビットを有するべきである。
【００４９】
以下の例が、循環モジュール３１ａ、３１ｂ、３１ｃ、３１ｄがどのように働くのかを説明する。２進値が（２進法で）００１１０１１１であり、制御レジスタ４２が１０１である場合、出力レジスタ４３は、１１１００１１０になる。制御レジスタ４２が、２進値を位置５つ分（２進法で１０１）だけ左方へと循環させ、したがって２進値（００１１０）の最も左側の５つのビットが、出力レジスタ４３に保存される２進値の最も右側の５つのビットになり、２進値の最も右側の残りの３つのビット（１１１）が、出力レジスタ４３に保存される２進値の最も左側の３つのビットになる。
【００５０】
図３に眼を向けると、この説明がこの図に示されている循環モジュールに適用される場合、対応は以下のとおりである。
−  循環モジュール３１ａ（図４の循環論理素子４１に対応）：２進値が、アドレスレジスタ３０（図４の２進値レジスタ４０に対応）に保存されたアドレス２０のビット５〜３１（すなわち、所定のビット１７）を含み、
制御レジスタ３２ａが図４の制御レジスタ４２に対応し、制御レジスタ３２ａが、アドレスレジスタ３０のビット０〜４でもあるアドレスの所定のビット１７のビット５〜９を保存している。循環モジュール３１ａの出力が、連結モジュール３３へと送信される。
−  循環モジュール３１ｂ（循環論理素子４１に対応）：２進値が、やはりアドレスレジスタ３０（図４の２進値レジスタ４０に対応）に保存されたアドレス２０のビット５〜３１（すなわち、所定のビット１７）を含み、制御レジスタ３２ｂが図４の制御レジスタ４２に対応し、制御レジスタ３２ｂが、アドレスレジスタ３０のビット５〜９でもあるアドレスの所定のビット１７のビット１０〜１４を保存している。循環モジュール３１ｂの出力が、連結モジュール３３へと送信される。
−  循環モジュール３１ｃ（循環論理素子４１に対応）：２進値が、やはりアドレスレジスタ３０（図４の２進値レジスタ４０に対応）に保存されたアドレス２０のビット５〜３１（すなわち、所定のビット１７）を含み、制御レジスタ３２ｃが図４の制御レジスタ４２に対応し、制御レジスタ３２ｃが、シード値１６のビット０〜４を保存している。循環モジュール３１ｃの出力が、連結モジュール３３へと送信される。
−  循環モジュール３１ｄ（循環論理素子４１に対応）：２進値が、アドレスレジスタ３０（図４の２進値レジスタ４０に対応）に保存されたアドレス２０のビット５〜３１（すなわち、所定のビット１７）を含み、制御レジスタ３２ｄが図４の制御レジスタ４２に対応し、制御レジスタ３２ｄが、シード値１６のビット５〜９を保存している。循環モジュール３１ｄの出力が、連結モジュール３３へと送信される。
【００５１】
より具体的には、すべての循環モジュール３１ａ、３１ｂ、３１ｃ、３１ｄのための入力のうちの１つが、オフセットビット２３を除くアドレス２０のビットである。図３の実施形態の詳細においては、５つのオフセットビットが存在し、アドレス２０は３２ビットの幅であり、したがってアドレスの内の２７ビットが使用される。それらが、左側において値が０００００である５ビットで延長され、合計で３２ビットになる。各々の循環モジュールは、制御レジスタ３２ａ、３２ｂ、３２ｃ、３２ｄとして異なるビットセットを使用する。これらのビットは、２進値（すなわち、値が０００００である左側の５ビットで延長されたアドレス２０の所定のビット１７）をいくつの位置だけ循環させるかを決定するために使用される。例えば、図３において、最も左側の循環モジュール３１ａは、オフセットを廃棄した後のアドレス２０の最下位の５ビットを使用する。換言すると、タグ２１およびインデックス２２のペアの最も右側の５ビット（右から左へと数えて位置０、１、２、３、４のビット）を使用する。左から２番目の循環モジュール３１ｂは、タグ２１およびインデックス２２のペアの次の５つの最下位ビット（位置５〜９のビット）を使用する。残りの２つの循環モジュール３１ｃ、３１ｄは、シード値１６からのビットを使用する。とくには、ビット０〜４およびビット５〜９をそれぞれ使用する。
【００５２】
このやり方で、連結モジュール３３が、アドレス２０のビット５〜３１と、シード値１６のビット０〜３１と、第１の循環モジュール３１ａの出力（すなわち、所定のビット１７と値が０００００である左側の５ビットとを含む２進値の循環の結果である３２ビット）と、第２の循環モジュール３１ｄの出力（すなわち、３２ビット）と、第３の循環モジュール３１ｃの出力（すなわち、３２ビット）と、第４の循環モジュール３１ａの出力（すなわち、３２ビット）とを連結し、１８７ビット（２７＋３２＋３２＋３２＋３２＋３２＝１８７ビット）のただ１つの２進値を得る。
【００５３】
次いで、いくつかのＸＯＲモジュール３４ａ、３４ｂ、３４ｃ、３４ｄ、３４ｅが、２進値がすべてのキャッシュセットをインデックスするために必要な数と同数のビットを有するまで、連結モジュール３３の出力へと縦続の様相で適用される。結果として、ＸＯＲモジュールが、２進値がすべてのキャッシュセットをインデックスするために必要な数と同数のビットを有するまで、２進値のビット数を減らすことを可能にする。
【００５４】
ＸＯＲモジュールの動作を、図５に従って説明する。図において見て取ることができるとおり、ＸＯＲモジュールは、２進値が９個のビットを有する場合に合わせて構成されているが、その機能は、入力として使用される２進値のビット数にかかわらず同じである。基本的に、ＸＯＲモジュールは、第１のレジスタ５０に保存された２進値のビットを２つの半分へと分割し、各々の半分において対称な位置に位置するビットの各ペアの間でＸＯＲ演算５１ａ、５１ｂ、５１ｃ、５１ｄを実行し、すなわちビット０および７、ビット１および６、ビット２および５、ならびにビット３および４の間でＸＯＲを実行する。ビットの数が奇数である場合、最上位のビットが、単純に出力へと伝えられる（これが、図５に示されている場合である）。２つの入力ビットによるＸＯＲ演算は、入力ビットが異なる（すなわち、一方が「０」であって、他方が「１」である）場合、「１」を生じ、入力ビットが一致する（両方が「０」または「１」のいずれかである）場合、「０」を生じる。得られた２進値が、出力レジスタ５２に保存される。
【００５５】
例えば、連結モジュール３３によってもたらされる連結の２進値が、２００個のビットを有し、キャッシュセットの数が３２個である場合、これらの２００ビットを、すべてのキャッシュセットをインデックスするための５ビット（５は３２の２を底とする対数である）だけを有するまで、ＸＯＲしなければならない。したがって、異なるレベルのＸＯＲモジュールが、ビットの数を２００から１００へと減らし、１００から５０へと減らし、５０から２５へと減らし、２５から１３へと減らし、１３から７へと減らし、７から５へと減らす。
【００５６】
入力のビット数がセットのインデックスに必要なビット数の２倍よりも少ない（例えば、７は５の２倍よりも小さい）場合はいつも、ＸＯＲ論理が、入力ビットの数（この例では、７）から必要とされる出力ビットの数（この例では、５）を引いた数と同数のビットペアにだけ適用され、すなわち２つのビットペアにだけ適用されることに、注意すべきである。この目的のため、必要とされる数のビット（この場合には、３ビット）が入力の左側から単純に伝えられ、残りのビット（この例では、４ビット）がＸＯＲによって折り畳まれ、伝えられたビット（３ビット）および該ペアのＸＯＲの出力（２ビット）が出力として得られる。
【００５７】
図３に眼を向け、図５について行なった説明を考慮に入れると、第１のＸＯＲモジュール３４ｅが、１８７ビットの２進値（上述のとおり）を連結モジュール３３から受け取り、これを９４ビットの２進値に変換する。第２のＸＯＲモジュール３４ｄが、この９４ビットの２進値を受け取り、４７ビットの２進値に変換する。この出力値を第３のＸＯＲモジュール３４ｃが受け取り、４７ビットの２進値を２４ビットの２進値に変換する。この２４ビットの２進値を第４のＸＯＲモジュール３４ｂが受け取り、１２ビットの２進値に変換する。１２ビットの２進値が第５のＸＯＲモジュール３４ａへと送られ、第５のＸＯＲモジュール３４ａが、この１２ビットの２進値を、キャッシュ構造のすべてのキャッシュセットをインデックスするために必要な数と同数のビットを有する値へと変換する。適切な値が得られると、その値が、キャッシュ構造１０へのアクセスのためにセット配置論理モジュール１３へと２進値を供給する出力レジスタ３５に保存される。
【００５８】
本発明を、特定の好ましい実施形態および例の文脈において開示したが、本発明が、具体的に開示された実施形態を超えて、本発明の他の代案の実施形態および／または使用ならびにそれらの自明な変更および均等物にまで広がることを、当業者であれば理解できるであろう。したがって、本明細書に開示された本発明の範囲は、上述の特定の開示された実施形態に限定されるべきではなく、以下の特許請求の範囲を公正に検討することによってのみ決定されるべきである。
【００５９】
オフセットビットを持たない入力アドレスにビットを追加することが推奨されるが、必須ではないことに注意すべきである。循環モジュール４１の制御レジスタ４２に使用されるビットの数が、２進値レジスタ４０のサイズの２を底とする対数に設定されるが、他のビット数も使用可能であることに注意すべきである。
【００６０】
アドレスおよびシードのビットの任意の組み合わせを、循環モジュールの入力のいずれにも使用できることに注意すべきである。
【００６１】
本発明は、それらの決定のいずれにも限定されず、循環モジュール、ＸＯＲモジュール、または任意の他の種類の論理を使用する任意の他のパラメータハッシュ関数モジュール１５が、パラメータハッシュ関数モジュールの入力がアドレスおよびシードを含む限りにおいて、本発明の範囲に包含される。
【００６２】
さらに、図面を参照して説明された本発明の実施形態は、コンピュータ装置およびコンピュータ装置において実行される処理を含んでいるが、本発明は、本発明を実施するように構成されたコンピュータプログラム、とくには担体上または担体内のコンピュータプログラムにも広がる。プログラムは、ソースコード、オブジェクトコード、或る程度までコンパイルされた形態などのソースおよびオブジェクトコードの中間のコードの形態、または本発明による処理の実行における使用に適した任意の他の形態であってよい。担体は、プログラムを保持することができる任意のエンティティまたは装置であってよい。
【００６３】
例えば、担体は、ＲＯＭ（例えば、ＣＤ  ＲＯＭもしくは半導体ＲＯＭ）または磁気記録媒体（例えば、フロッピーディスクもしくはハードディスク）などの記憶媒体を備えることができる。さらに、担体は、電気もしくは光ケーブルまたは無線または他の手段によって伝達することが可能であってよい電気信号もしくは光信号などの伝送可能な担体であってよい。
【００６４】
プログラムが、ケーブルもしくは他の装置または手段によって直接伝達することができる信号に具現化されるとき、担体を、そのようなケーブルもしくは他の装置または手段によって構成することができる。
【００６５】
あるいは、担体は、プログラムが組み込まれた集積回路であってよく、この集積回路は、関連の処理を実行するように構成されるか、または関連の処理の実行に使用されるように適合される。
【符号の説明】
【００６６】
１０  キャッシュ構造
１１  中央演算処理装置（ＣＰＵ）
１２  メインメモリ
１３  セット配置論理モジュール
１４  制御装置
１５  パラメータハッシュ関数モジュール
１６  シード値
１７  所定のビット
２０  アドレス
２１  タグ
２２  インデックス
２３  オフセット
３０、３６、５０  レジスタ
３０  アドレスレジスタ
３１ａ、３１ｂ、３１ｃ、３１ｄ  循環モジュール
３２ａ、３２ｂ、３２ｃ、３２ｄ  制御レジスタ
３３  連結モジュール
３４、３４ａ、３４ｂ、３４ｃ、３４ｄ、３４ｅ  ＸＯＲ折り畳み論理モジュール
３５、４３、５２  出力レジスタ
４０  ２進値レジスタ
４１  循環論理素子
４２  制御レジスタ
５１ａ、５１ｂ、５１ｃ、５１ｄ  ＸＯＲ演算
【図１】
2014059871.tif 000004
【図２】
2014059871.tif 000005
【図３】
2014059871.tif 000006
【図４】
2014059871.tif 000007
【図５】
2014059871.tif 000008
【外国語明細書】
2014059871000001.pdf
2014059871000002.pdf
2014059871000003.pdf
2014059871000004.pdf