(57)【要約】プロセッサでは、プログラムのいくつかの部分および複数の命令が、該プログラムの実行の前にデータキャッシュ内に存在できる状況がある。該プロセッサの性能を改良するために、命令キャッシュ内でミスがあった後に該データキャッシュ内で命令をフェッチするハードウェア技術およびソフトウェア技術が提供される。命令キャッシュ内に命令が存在しない場合、命令フェッチアドレスがデータフェッチアドレスとして該データキャッシュに送られる。その供給された命令フェッチアドレスで該データキャッシュ内に有効データが存在している場合、該データは実際には命令であり、該データキャッシュのエントリはフェッチされ、命令としてプロセッサ複合体に供給される。データキャッシュが該命令に関してチェックされるべきであることを命令キャッシュ内のミスについて示すために、追加ビットが命令ページテーブル内に含まれることができる。
2009524168.tif 000002
【特許請求の範囲】
【請求項１】
下記を具備する、命令キャッシュから分離しているデータキャッシュ内で命令を見いだすための方法：
フェッチ試行が命令フェッチアドレスでの前記命令に関して前記命令キャッシュ内でミスしたことを決定すること、
前記命令フェッチアドレスをデータフェッチアドレスに変換すること、および
前記変換されたデータフェッチアドレスでの前記命令に関して前記データキャッシュ内でフェッチ試行をすること。
【請求項２】
前記データキャッシュ内にデータとして格納される命令を生成すると、チェックデータキャッシュ属性をアクティブに設定することをさらに備える、請求項１に記載の方法。
【請求項３】
チェックデータキャッシュ属性がアクティブかどうかを決定すること、および
前記チェックデータキャッシュ属性がアクティブである場合だけ前記命令に関して前記データキャッシュ内で前記フェッチ試行を可能にすることをさらに備える、請求項２に記載の方法。
【請求項４】
前記チェックデータキャッシュ属性は命令ページテーブル内に格納されたビットである、請求項２に記載の方法。
【請求項５】
前記命令フェッチアドレスを変換する前記ステップは、下記をさらに具備する請求項１に記載の方法：
前記命令フェッチアドレスおよびデータフェッチアドレスを多重化すること、ならびに
前記変換されたデータフェッチアドレスとして前記データキャッシュに適用すべき前記命令フェッチアドレスを選択すること、ここにおいて前記命令フェッチアドレスは、前記命令フェッチ試行が前記命令キャッシュ内でミスしたことを決定した後に選択される。
【請求項６】
前記データキャッシュ内でフェッチ試行をする前記ステップは、下記をさらに具備する、請求項１に記載の方法：
前記データキャッシュ内での前記命令ヒットを決定すること、および
前記命令を前記データキャッシュからフェッチすること。
【請求項７】
下記をさらに備える、請求項１に記載の方法：
前記データキャッシュ内での前記フェッチ試行がミスしたことを決定すること、および
前記データキャッシュ内での前記フェッチ試行がミスしたことを命令メモリ制御に通知すること。
【請求項８】
前記命令をシステムメモリからフェッチすること
をさらに備える、請求項７に記載の方法。
【請求項９】
下記を具備するプロセッサ複合体：
命令キャッシュ、
データキャッシュ、および
選択信号に基づいて命令フェッチアドレスまたはデータフェッチアドレスを選択するための第１のセレクタ、前記選択信号は、前記命令フェッチアドレスまたは前記データフェッチアドレスを前記データキャッシュに適用させ、それによって命令またはデータが前記データキャッシュから選択的にフェッチされることができる。
【請求項１０】
前記第１のセレクタの前記選択信号は、データアクセス動作に応答して前記データフェッチアドレスを選択する、請求項９に記載のプロセッサ複合体。
【請求項１１】
前記第１のセレクタの前記選択信号は、ミスが前記命令キャッシュ内での命令フェッチ動作で生じたことを、命令ミス信号が示す場合に前記命令フェッチアドレスを選択する、請求項９に記載のプロセッサ複合体。
【請求項１２】
プロセッサの命令バス入力に適用されるべき前記命令キャッシュからの命令出力バスまたは前記データキャッシュからのデータ出力バスを選択するための第２のセレクタをさらに備える、請求項９に記載のプロセッサ複合体。
【請求項１３】
前記第２のセレクタは、前記第１のセレクタにより選択された前記命令フェッチアドレスにおいてミスが前記命令キャッシュ内で生じ、かつヒットが前記データキャッシュ内で生じた場合に、前記データキャッシュからの前記データ出力バスを選択する、請求項１２に記載のプロセッサ複合体。
【請求項１４】
前記第２のセレクタは、ヒットが前記命令キャッシュ内で生じる場合に前記命令出力バスを選択する、請求項１２に記載のプロセッサ複合体。
【請求項１５】
前記命令キャッシュの命令バス入力に適用されるべきシステムメモリからのメモリ出力バスまたは前記データキャッシュからのデータ出力バスを選択するための第３のセレクタ
をさらに備える、請求項９に記載のプロセッサ複合体。
【請求項１６】
前記第３のセレクタは、前記第１のセレクタにより選択された前記命令フェッチアドレスにおいてミスが前記命令キャッシュ内で生じ、かつヒットが前記データキャッシュ内で生じた場合に、前記データキャッシュからの前記データ出力バスを選択する、請求項１５に記載のプロセッサ複合体。
【請求項１７】
下記を具備する、プログラムコードを実行するための方法：
データキャッシュ内にデータとして格納される命令を生成すること、
前記生成された命令を使用する前記プログラムコードの実行の前に命令キャッシュを無効にすること、および
前記命令が前記命令キャッシュ内で見いだされない場合に前記データキャッシュから直接、命令をフェッチすること、それによって前記プログラムコードが実行される。
【請求項１８】
前記命令を生成するステップは、前記データキャッシュ内に複数の命令をロードする前記動作を含む、請求項１７に記載の方法。
【請求項１９】
前記命令キャッシュを前記無効にすることは、
前記生成された命令が格納される前記命令キャッシュの一部分だけを無効にすることをさらに備える、請求項１７に記載の方法。
【請求項２０】
下記をさらに具備する、請求項１７に記載の方法：
命令が前記データキャッシュ内にあり得ることを示すために命令ページテーブル内でチェックデータキャッシュ属性をオンに設定すること、および
前記命令が前記命令キャッシュ内で見いだされず、かつ前記チェックデータキャッシュ属性がオンである場合に、前記データキャッシュから前記命令をフェッチすること。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は一般に、命令キャッシュおよびデータキャッシュを有するメモリから命令をフェッチするための技術に関し、より具体的には、命令がデータキャッシュに存在する場合、該データキャッシュから該命令を直接フェッチすることにより命令キャッシュ内でのミスの後に該命令をフェッチするための改良された手法に関する。
【背景技術】
【０００２】
携帯電話、ラップトップコンピュータ、携帯情報端末（ＰＤＡｓ）などの一般の携帯(portable)製品は、通信プログラムおよびマルチメディアプログラムなどのプログラムを実行するプロセッサの使用を必要とする。このような製品のための処理システムは、命令およびデータを格納するためのプロセッサおよびメモリ複合体(complex)を含む。例えば、命令およびデータは、例えば、命令キャッシュ、データキャッシュ、およびシステムメモリを含むマルチレベルのキャッシュから成る階層メモリ内に格納されることができる。個別の命令キャッシュおよび個別のデータキャッシュの使用はハーバードアーキテクチャ(Harvard architecture)として知られている。ハーバードアーキテクチャは命令キャッシュをデータキャッシュから隔離しているので、複数の命令がデータキャッシュ内に格納されると、複数の問題が生じる可能性がある。
【０００３】
ハーバードアーキテクチャを用いて処理する汎用システムでは、命令がデータキャッシュ内に格納されうる状況が生じる。例えば、プログラムが暗号化されるか、または圧縮された形である場合、それは、該プログラムを実行可能にする前に解読され(decrypted)／圧縮解除され(decompressed)なければならない。解読／圧縮解除プロセスは、暗号化された／圧縮されたプログラムを処理するためにそれをデータとして扱い、解読された／圧縮解除された命令をシステムメモリに至る途中に、データキャッシュ（例えば、レベル１データキャッシュ）内にデータとして格納する。Ｊａｖａ（登録商標）バイトコードからの命令の生成は、システムメモリへの、データキャッシュを含むデータ経路を使用して格納されるデータとして命令が最初に扱われる他の状況である。プログラム命令がデータとして扱われているプログラムの初期の状態は、プログラムの少なくともいくつかの部分が該プログラムの実行前に該データキャッシュ内に存在する可能性があるので、メモリ階層内でコヒーレンス問題を生成する。
【０００４】
コヒーレンス問題を解決するために、典型的にはソフトウェア手法がとられ、ここにおいて該データキャッシュ内の該プログラムまたはプログラムセグメントがプログラム制御下でシステムメモリに移動され、典型的には命令キャッシュは任意の古いプログラムセグメントのキャッシュを取り除く(clean)ために無効にされ、次いでプログラムを備える命令がシステムメモリからフェッチされる。実行前のシステムメモリからの命令のフェッチおよびデータキャッシュからシステムメモリへの命令の移動は数サイクル要し、プログラムがプロセッサ上で実行される前にデータキャッシュ上に最初に存在する命令にアクセスするために生じなければならない処理時間のオーバヘッドのためにプロセッサの性能を低下させる可能性がある。
【発明の開示】
【発明の概要】
【０００５】
そのいくつかの観点の中で、本開示は、データキャッシュ内の命令を処理する(dealing with)ためのオーバヘッドが、プロセッサの性能を限定しており、場合によっては、達成され得るサービスの品質を限定している可能性があることを認識する。本開示はまた、データキャッシュ内に存在している命令にアクセスすることが望ましい場合があることも認識する。
【０００６】
さらに、本開示は、命令が命令キャッシュ内で見いだされず（命令キャッシュミス）、そしてその命令がデータキャッシュ内にあると決定されると、その命令をデータキャッシュから直接フェッチするための装置、方法、およびコンピュータ可読媒体を説明する。命令キャッシュミス後にデータキャッシュから命令を直接フェッチすることによって、プロセッサ性能は改良されることができる。
【０００７】
このような目的のために、本発明の１つの実施形態は、命令キャッシュから分離されているデータキャッシュ内で命令を見いだす方法を含む。このような方法では、フェッチ試行は命令フェッチアドレスにおけるその命令に関する命令キャッシュ内でミスしたことが決定される。命令フェッチアドレスはデータフェッチアドレスに変換される。さらに、データキャッシュ内でのフェッチ試行は、変換されたデータフェッチアドアレスにおける命令に関してなされる。
【０００８】
本発明の他の実施形態は、命令をフェッチするためのプロセッサ複合体に対処する。プロセッサ複合体は、命令キャッシュ、データキャッシュ、および第１のセレクタを適切に含むことができる。第１のセレクタは、命令フェッチアドレスまたはデータフェッチアドレスを選択するために使用される。選択されたフェッチアドレスはデータキャッシュに適用され、それによって命令またはデータはデータキャッシュから選択的にフェッチされることができる。
【０００９】
本明細書で開示された本発明の概念ならびに他の特徴のより完全な理解が、下記の詳細な説明および添付図面から明らかである。
【詳細な説明】
【００１０】
本開示の発明の観点が、本開示のいくつかの実施形態が示される添付図面を参照してより完全に説明される。しかし、本発明の実施形態は、様々な形で具現化されることができ、本明細書で記載される実施形態に対して限定されるものと解釈されるべきではない。むしろこれらの実施形態は、この開示が徹底的で完全であり、当業者に対して開示の範囲を完全に伝達するように提供される。
【００１１】
本開示が方法、システム、またはコンピュータプログラム製品として具現化されることができることが理解されよう。したがって、本明細書で開示される本発明の概念は、ハードウェア実施形態、ソフトウェア実施形態、またはソフトウェアとハードウェアの観点を備えた実施形態の形をとることができる。さらに本明細書で開示される本発明の概念は、媒体内で具現化されるコンピュータ使用可能プログラムコードを有するコンピュータ使用可能記憶媒体上でのコンピュータプログラム製品の形をとることができる。ハードディスク、ＣＤ−ＲＯＭｓ、光学記憶装置、フラッシュメモリ、または磁気記憶装置を含む任意の適切なコンピュータ可読媒体が使用されることができる。
【００１２】
プロセッサにロードされ、アセンブルされ(assembled)、コンパイルされる(compiled)ことができるコンピュータプログラムコードは、Ｃ、Ｃ＋＋、ネイティブアセンブラ（native Assembler）、ＪＡＶＡ、スモールトーク（Smalltalk）、ＪａｖａＳｃｒｉｐｔ（登録商標）、Ｖｉｓｕａｌ  Ｂａｓｉｃ（登録商標）、ＴＳＱＬ、パール（Perl）などのプログラミング言語で、または本開示の教示にしたがった様々な他のプログラミング言語で最初に書かれることができる。プログラムコードまたはコンピュータ可読媒体は、フォーマットがプロセッサによって理解可能であるオブジェクトコードなどの機械語コードを意味する。本開示のソフトウェア実施形態は、特定のプログラミング言語を用いるそれらの実装に依存しない。プログラムコードが実行されると、プログラムコードのための動作環境を定義する新しいタスクが生成される。
【００１３】
図１は、本開示の１つの実施形態が使用されることができる例示の無線通信システム１００を示す。説明のために、図１は、３つの遠隔装置１２０、１３０、および１５０ならびに２つの基地局１４０を示す。典型的な無線通信システムは、複数の遠隔装置および複数の基地局を有することできることが認識されるであろう。遠隔装置１２０、１３０、および１５０は、以下さらに詳細に説明されるように本開示を具現化するように構成されたコンポーネント１２５Ａ、１２５Ｃ、および１２５Ｂによってそれぞれ表されるように複数のハードウェアコンポーネント、複数のソフトウェアコンポーネント、または両方を含む。図１は、複数の基地局１４０から遠隔装置１２０、１３０、および１５０への順方向リンク信号１８０ならびに遠隔装置１２０、１３０、および１５０から複数の基地局１４０への逆方向リンク信号１９０を示す。
【００１４】
図１では遠隔装置１２０は移動電話として示され、遠隔装置１３０はポータブル(portable)コンピュータとして示され、遠隔装置１５０は無線ローカルループ(local loop)システム内の固定位置(fixed location)遠隔装置として示されている。例えば、遠隔装置は、携帯電話、ハンドヘルド(handheld)パーソナル通信システム（ＰＣＳ）装置、携帯情報端末などのポータブルデータ装置、またはメータ読取り装置などの固定位置データ装置であってよい。図１には本開示の教示による複数の遠隔装置が示されているが、本開示はこれらの例示的な示された装置に限定されない。本開示は、命令キャッシュ、データキャッシュ、およびシステムメモリと共にプロセッサを有する任意の装置内で適切に使用されることができる。
【００１５】
図２は、通常のデータキャッシュ動作が本明細書でさらに説明されるより効率的な命令フェッチのために適応されるプロセッサおよびメモリの複合体２００の機能ブロック図である。プロセッサおよびメモリの複合体２００は、プロセッサ２０２、レベル１（Ｌ１）命令キャッシュ２０４、Ｌ１命令キャッシュ制御装置２０６、Ｌ１データキャッシュ２０８、Ｌ１データキャッシュ制御装置２１０、制御セクション２１１、およびシステムメモリ２１２を含む。Ｌ１命令キャッシュ制御装置２０６は、セット連想(associative)キャッシュ内で使用されることができる、命令タグマッチング(matching)のための命令内容アドレス可能(addressable)メモリを含むことができる。制御セクション２１１は、多重化エレメント(elements)２２０、２２６、および２３４、ゲーティング(gating)デバイス２３２および２３８、ならびにインバータ２４０を含む。プロセッサ複合体に接続することができる周辺デバイスは、本開示の説明の明瞭化のために示されていない。プロセッサおよびメモリ複合体２００は、システムメモリ２１２内に格納されるプログラムコードを実行するためにコンポーネント１２５Ａ〜Ｃ内で適切に使用されることができる。
【００１６】
プロセッサおよびメモリ複合体２００内で命令をフェッチするために、プロセッサ２０２は、望まれる命令の命令フェッチアドレス（ＩＡ）２１４を生成し、命令フェッチアドレスをＬ１命令キャッシュ制御装置２０６に送る。Ｌ１命令キャッシュ制御装置２０６は、命令がＬ１命令キャッシュ２０４内に存在するかどうかを調べるためにチェックする。例えば、このチェックは、供給された命令フェッチアドレスとの一致のために連想サーチ(search)で内部の内容アドレス可能メモリ（ＣＡＭ）を使用することにより実行される。命令が存在するときに一致が生じ、Ｌ１命令キャッシュ制御装置２０６は、命令が命令キャッシュ２０４内に存在することを示す。命令が存在しない場合、一致がＣＡＭの連想サーチで見いだされず、Ｌ１命令キャッシュ制御装置２０６は、命令が命令キャッシュ２０４内に存在しないことを示す。
【００１７】
命令が存在する場合、命令フェッチアドレスでの命令が命令キャッシュ２０４から選択される。次いで命令は、プロセッサ２０２に多重化エレメント２２６を介して命令出力バス２１６上で送られる。
【００１８】
命令が命令キャッシュ内に存在しない場合、命令キャッシュミス信号（Ｉ＄Ｍ＝１）２１８が、ミスが生じたことを示すアクティブに設定される。命令キャッシュ内でミスを検出すると、該プロセッサおよびメモリ複合体２００は、Ｌ１データキャッシュ２０８から望まれる命令をフェッチしようと試みる。この目的のために、多重化エレメント２２０は、命令フェッチアドレス２１４を選択するためにミス信号（Ｉ＄Ｍ＝１）２１８によって使用可能にされる。次いで、命令フェッチアドレス２１４は、多重化エレメント２２０を通ってＤアドレスバス２２２上に進み、データフェッチアドレスとしてＬ１データキャッシュ制御装置２１０に送られる。プロセッサおよびメモリ複合体２００は、例えば、Ｄアドレスバス２２２上への命令フェッチアドレス２１４の適用が、Ｄアドレスバス２２２へのアクセスが得られることができる前にアービトレーション(arbitration)または待ち期間を必要としうるのでシステムの論理ビューを表すことが認識される。プロセッサが生成したデータアドレス２２３と共に命令フェッチアドレス２１４を多重化するためにとられる手法は、変更されることができ、命令キャッシュおよびデータキャッシュ設計でとられる特定の手法に依存する。
【００１９】
Ｌ１データキャッシュ制御装置２１０は、例えば、供給された命令フェッチアドレスについて、内部の連想サーチにより、供給された命令フェッチアドレスにおいてＬ１データキャッシュ２０８内にヒットがあるかどうかを調べ見るためにチェックする。ヒットは、供給された命令フェッチアドレスにデータが存在することを示す。実際にはこのデータは命令であり、データキャッシュのエントリは、Ｌ１データキャッシュ２０８からフェッチされ、データ出力バス２２４上に置かれる。Ｌ１データキャッシュ２０８からフェッチされるデータを命令としてプロセッサに供給するために、多重化エレメント２２６が適切に使用されることができる。命令キャッシュ内にミスがあり、それに続いて命令フェッチアドレスでデータキャッシュ内にヒットがあるとき、データ出力バス２２４は多重化エレメント２２６によって選択され、データキャッシュからフェッチされたデータをプロセッサの命令バス２２８上に置く。アクティブハイ(active high)であるミス信号（Ｉ＄Ｍ＝１）２１８によって示される命令キャッシュ内のミスの発生、それに続くアクティブハイであるヒット信号（Ｄ＄Ｈ＝１）２３０によって示される同じ命令フェッチアドレスでのデータキャッシュ内のヒットは、ＡＮＤゲート２３２によって論理的に表される。ＡＮＤゲート２３２の出力は、多重化エレメント２２６のための選択信号２３３である。データキャッシュ内で見いだされた命令はまた、ＡＮＤゲート２３２によって論理的に提供される選択信号２３３を使用して多重化エレメント２３４によって命令キャッシュ２０４の中にロードするために多重化される。データ出力バス２２４が命令をプロセッサに転送している間、プロセッサの読取りデータ入力２３６は、選択信号２３３の逆のもの(inverse)を提供するためのインバータ２４０を使用してＡＮＤゲート２３８によって非活動化される。
【００２０】
供給された命令フェッチアドレスでデータキャッシュ内にミスがあったことが決定された場合、命令はデータキャッシュ内にはなく、命令はシステムメモリ２１２からフェッチされる。ヒット信号（Ｄ＄Ｈ＝１）２３０はまた、データキャッシュ２０８内で命令の位置を捜し出そうと試みてミスが生じたことをその非アクティブ状態によって示すためにＬ１命令キャッシュ制御装置２０６に送られる。他のシグナリング手段は、データキャッシュ２０８内で命令の位置を捜し出そうと試みてミスが生じたことを示すために使用されることができることに留意されたい。命令は命令キャッシュ２０４内になく、そしてデータキャッシュ２０８内にないので、それはシステムメモリ２１２からフェッチされなければならない。命令がシステムメモリ２１２から得られると、命令はプロセッサ２０２に送られる。命令キャッシュまたはデータキャッシュ内でのミスのせいで命令を供給するための、およびデータキャッシュ内でのミスのせいでデータを供給するためのシステムメモリからの経路は、本開示を明らかに示すために図示されていないことに留意されたい。
【００２１】
図３は、データキャッシュ内にデータとして最初に格納された命令を処理することに一般に関連したオーバヘッドを最小限に抑えるために、命令キャッシュ内でミスがあった後にデータキャッシュ内で命令を直接フェッチするための方法３００の例示的流れ図である。図３のステップと図２のエレメントとの間の例示的な関係は、プロセッサおよびメモリ複合体２００からのエレメントが、方法３００のステップを実行するためにどのようにして適切に協働することができるかを説明することによって示される。
【００２２】
命令をフェッチするために、命令フェッチアドレスはステップ３０４で生成される。例えば、プロセッサ２０２などのプロセッサは、望まれる命令の命令フェッチアドレスを生成し、命令フェッチアドレス２１４をＬ１命令キャッシュコントローラ２０６に送る。ステップ３０８では、命令キャッシュのヒットまたはミスがあるかどうかが決定される。例えば、Ｌ１命令キャッシュコントローラ２０６は、命令が命令キャッシュ２０４内に存在するかどうかを見るためにチェックする。命令が存在する場合、その存在はヒットとして示される。命令が存在する場合、方法３００はステップ３１２に進み、命令フェッチアドレスでの命令が選択される。ステップ３１６では命令がプロセッサに送られる。例えば、選択された命令は、命令出力バス２１６上に置かれ、多重化エレメント２２６を介してプロセッサ２０２に送られる。
【００２３】
ステップ３０８において決定されたときに命令が命令キャッシュ内に存在しない場合、ステップ３２０において、ミスが生じ、そしてデータキャッシュから命令をフェッチするための試行がなされるという表示が与えられる。例えば、命令フェッチアドレス２１４が、データフェッチアドレス２２２として多重化エレメント２２０を通ってデータキャッシュ２０８に送られる。ステップ３２４では、例えば、チェックが、供給された命令フェッチアドレスに有効データが存在するかどうかを見るためにＬ１データキャッシュコントローラ２１０によってなされる。供給された命令フェッチアドレスにおいてデータキャッシュ内に有効データが存在する場合、そのデータは実際には命令であり、ステップ３２８でそのデータキャッシュのエントリがフェッチされる。ステップ３１６では、データキャッシュからフェッチされたデータは、命令としてプロセッサに送られる。例えば、データキャッシュ２０８からデータ出力バス２２４上にフェッチされるデータは、多重化エレメント２２６を通って送られ、命令バス２２８上でプロセッサ２０２に命令として供給される。
【００２４】
ステップ３２４では、供給された命令フェッチアドレスでデータキャッシュ内にミスがあった場合、命令はデータキャッシュ内になく、ステップ３３２において命令がシステムメモリからフェッチされる。例えば、データキャッシュヒット信号（Ｄ＄Ｈ＝１）２３０は、データキャッシュ２０８内で命令の位置を捜し出そうと試みてミスが生じたことをその非アクティブ状態によって示すためにＬ１命令キャッシュ制御装置２０６に送られる。命令は命令キャッシュ２０４内になく、データキャッシュ２０８内にないので、命令はシステムメモリ２１２からフェッチされなければならない。命令がシステムメモリ２１２から得られると、命令はステップ３１６で示されるようにプロセッサ２０２に送られる。
【００２５】
図４は、本開示による命令フェッチの効率的な動作のために通常のデータキャッシュ動作が適応される命令ページテーブルを含むプロセッサおよびメモリ複合体４００の機能ブロック図である。プロセッサおよびメモリ複合体４００は、プロセッサ４０２、レベル１（Ｌ１）命令キャッシュ４０４、命令メモリ管理装置（ＩＭＭＵ）およびキャッシュ制御（ＩＭＭＵ／＄制御）４０６、Ｌ１データキャッシュ４０８、データメモリ管理装置（ＤＭＭＵ）およびキャッシュ制御（ＤＭＭＵ／＄制御）４１０、制御セクション４１１、ならびにメモリ階層４１２を含む。ＩＭＭＵ／＄制御４０６は、例えば、仮想対物理命令アドレス変換プロセスを含むことができる。制御セクション４１１は、多重化エレメント４３２、４３８、および４４８、ゲーティングデバイス４２８、４４４、および４５２、ならびにインバータ４５４を含む。プロセッサ複合体に接続することができる周辺装置は、本開示の説明を明瞭にするために示されていない。プロセッサおよびメモリ複合体４００は、システムメモリ４１２内に格納されるプログラムコードを実行するためにコンポーネント１２５Ａ〜Ｃ内で適切に使用されることができる。
【００２６】
命令キャッシュは、命令キャッシュの性能を改良するために命令ページテーブルを含む変換ルックアサイド(look aside)バッファ（ＴＬＢ）を使用することができる。例えば、仮想ページ数に関連した物理ページ数および各ページ数のエントリに関連した追加情報のリストを有する命令ページテーブル。命令ページテーブルのエントリは、命令アドレス範囲内のメモリの１ページが命令キャッシュまたはデータキャッシュ内にロードされると、生成される。メモリのページのロードは、オペレーティングシステム（ＯＳ）の監視下で行われることができる。動作において、命令ページテーブルは、ＴＬＢに供給された仮想ページ数との一致のために調査される。命令ページテーブルを有するＴＬＢが命令ＭＭＵおよびキャッシュ制御４０６の一部として本明細書で説明されているが、代替の手法が使用されることができることが理解されよう。
【００２７】
プロセッサおよびメモリ複合体４００内で命令をフェッチするために、プロセッサ４０２は、望まれた命令のために命令フェッチアドレス（ＩＡ）４１４を生成し、その命令フェッチアドレスをＩＭＭＵ／＄制御４０６に送る。ＩＭＭＵ／＄制御４０６内に配置されたページテーブル４１６などの命令ページテーブル内の適切なエントリは、ＩＡ４１４の一部である供給されたページ数に基づいて選択される。選択されたページテーブルのエントリに基づいた命令アドレスは、ＩＡ４１４の一部でもあるページアドレスと組み合わされて、Ｌ１命令キャッシュ４０４に内部的に適用される命令アドレス（ＧＡ）４１８を生成する。ページテーブル４１６から選択されたエントリは、そのエントリと共に格納された追加情報を含む。各ページテーブルのエントリと共に格納されることができる情報の追加ビットのうちの１つは、Ｄビット４２０としてラベル付けされるチェックデータキャッシュ属性である。
【００２８】
Ｄビットは、命令ページテーブル内のエントリが１ページの命令をデータキャッシュ内にロードすることにより生成されると、または処理中にデータキャッシュ内の１ページ内に格納される命令を生成すると、「１」に設定される。典型的にはＤビットは、ページの内容がデータと命令の両方として使用されることができることを示すためにオペレーティングシステム（ＯＳ）によって設定される。例示のシナリオでは、命令として使用されることになるデータを生成するプログラムは、適切なページが関連のページテーブルのエントリ内でＤビットを設定することによって表されることを要求するためにＯＳを呼び出す。他のシナリオではプログラムは、設定されたＤビットを用いて既に確立されているページをＯＳに要求することもできる。Ｄビットは、必ずしも明白に消去される必要はない。プログラムが、データキャッシュが適切なＤビットまたは複数のＤビットを設定させることによって命令を含むことができることを規定する場合、その仕様書はプログラムの期間中に有効であってよい。次にＤビットまたは複数のＤビットは、ページテーブルが異なるプロセスのために使用されると、その後消去され(cleared)てよい。
【００２９】
ＩＭＭＵ／＄制御４０６は、命令が命令キャッシュ４０４内に存在するかどうかを見るためにチェックする。命令が存在する場合、この存在はヒットとして示される。命令が存在する場合、命令フェッチアドレスにおける命令は命令キャッシュ４０４から選択される。次いで命令は、命令出力バス４２２上で多重化エレメント４３８を通ってプロセッサ４０２に送られる。命令が存在しない場合、ミスが生じ、そして命令キャッシュミス信号（Ｉ＄Ｍ＝１）４２４が、ミスが生じたことを示すているという表示がＩＭＭＵ／＄制御４０６によって与えられる。
【００３０】
選択されたＤビットが「１」に設定されていることに関連して命令キャッシュ内のミスを検出すると、プロセッサおよびメモリ複合体４００は、望まれた命令をＬ１データキャッシュ４０８からフェッチしようとする。この試行は、例えばゲーティング機能で選択されたＤビットを使用することによって適切に実行されることができる。選択されたページテーブルのエントリからのＤビット４２０は、Ｄビット信号４２６として出力される。例えば、Ｄビット信号４２６は、ミス表示（Ｉ＄Ｍ＝１）４２４と共にＡＮＤゲート４２８によって論理積をとられる（ＡＮＤｅｄ）。次いでＡＮＤゲート４２８の出力４３０は、生成された命令アドレス（ＧＡ）４１８またはプロセッサ４０２からのデータアドレス４３３を選択するために多重化エレメント４３２によって使用される。選択されると、ＧＡ４１８は、多重化エレメント４３２を通ってＤアドレスバス（ＤＡ）４３４上に進み、命令がデータフェッチアドレスにおいてデータキャッシュ４０８内に存在するかどうかを決定するためにデータＭＭＵおよびキャッシュ制御４１０に送られる。例えば、Ｄアドレスバス４３４上への生成された命令アドレス４１８の適用にはＤアドレスバス４３４へのアクセスが得られることができる前にアービトレーションまたは待ち期間が必要なので、プロセッサおよびメモリ複合体４００はシステムの論理ビューを表すことが認識される。プロセッサが生成したデータアドレス４３３と共に生成された命令アドレス４１８を多重化するためにとられる手法は、変更されることができ、命令キャッシュおよびデータキャッシュ設計でとられる特定の手法に依存する。
【００３１】
次いで、データキャッシュは、供給された命令フェッチアドレスに有効データが存在するかどうかを見るためにチェックする。供給された命令フェッチアドレスに有効データが存在する場合、実際にはデータは命令であり、データキャッシュのエントリは、Ｌ１データキャッシュ４０８からフェッチされ、データ出力バス４３６上に置かれる。データキャッシュのエントリを命令としてプロセッサに供給するために、例えば多重化エレメント４３８が使用される。多重化エレメント４３８は、命令キャッシュ内にミスがあり、選択されたＤビットが「１」に設定され、それに続いて命令フェッチアドレスでデータキャッシュ内にヒットがあるとき、データ出力バス４３６をプロセッサの命令バス４４０上に進むように使用可能にされる。アクティブハイであるミス信号（Ｉ＄Ｍ＝１）４２４によって示される命令キャッシュ内のミスの発生、および「１」に設定されるＤビット信号４２６、それに続く、アクティブハイであるヒット信号（Ｄ＄Ｈ＝１）４４２によって示される生成された命令アドレスにおけるデータキャッシュ内のヒットが、ＡＮＤゲート４４４によって論理的に表される。ＡＮＤゲート４４４の出力は多重化エレメント４３８のための選択信号４４６である。データ出力バス上の命令はまた、選択信号４４６を使用して多重化エレメント４４８によって命令キャッシュ内にロードするために多重化される。Ｌ１データキャッシュのデータ出力バス４３６は命令をプロセッサ４０２に転送している間に、データ出力バス４３６は、インバータ４５４によって提供される選択信号４４６の逆のものを使用してＡＮＤゲート４５２によってプロセッサの読取りデータ入力４５０への転送に関してゲートオフされる。
【００３２】
供給された命令フェッチアドレスにおいてデータキャッシュ内にミスがあったと決定された場合、命令はデータキャッシュ内になく、命令はシステムメモリ４１２からフェッチされる。ヒット信号（Ｄ＄Ｈ＝１）４４２は、データキャッシュ４０８内で命令の位置を捜し出そうと試みてミスが生じたことを、その非アクティブ状態によって示すためにＩＭＭＵ／＄制御４０６にも送られる。命令がシステムメモリ４１２から得られると、命令はプロセッサ４０２に送られる。命令キャッシュまたはデータキャッシュ内のミスにより命令を供給するための、およびデータキャッシュ内のミスによりデータを供給するためのメモリ階層からの経路は示されていないが、使用されるアプリケーションおよびプロセッサに一致する多種多様の接続手法のうちの任意のものが使用されることができることを留意されたい。
【００３３】
図５は、命令キャッシュ内でミスがあった後にデータキャッシュ内で命令をフェッチするための方法５００の例示の流れ図であり、チェックデータキャッシュ属性は、データキャッシュが命令のためにチェックされるべきであることを示す。図５のステップと図４のエレメントとの間の例示の関係は、図５の方法５００のステップを実行するために適切に使用されることができるプロセッサおよびメモリ複合体４００からの例示のエレメントを参照することによって示される。
【００３４】
命令をフェッチするために、望まれた命令のための命令フェッチアドレスが、ステップ５０２で生成される。例えば、プロセッサ４０２などのプロセッサは、命令フェッチアドレスを生成し、命令フェッチアドレス４１４をＬ１命令キャッシュコントローラ４０６に送る。命令フェッチアドレスは、ページ数５０４およびページアドレス５０６で構成される仮想アドレスであってよい。ステップ５０８では、命令ページテーブル４１６などの命令ページテーブル内の適切なエントリが供給されたページ数５０４に基づいて選択される。選択されたページテーブルのエントリに基づいて生成されたアドレスは、ステップ５０９で命令キャッシュアドレスを生成するためにページアドレス５０６と組み合わされる。
【００３５】
命令ページテーブル４１６から選択されたエントリは、そのエントリと共に格納される追加情報を含む。各ページテーブルのエントリと共に格納されることができる情報の追加ビットのうちの１つは、Ｄビット４２０としてラベル付けられるビットなどのチェックデータキャッシュ属性である。ステップ５１０でこの属性が選択される。
【００３６】
ステップ５１２では、命令キャッシュのヒットまたはミスがあるかどうかが決定される。例えば、命令キャッシュは、命令が存在するかどうかを見るためにチェックする。命令が存在する場合、その存在はヒットとして示される。命令が存在する場合、方法５００はステップ５１４に進み、命令フェッチアドレスでの命令が選択される。ステップ５１６において命令がプロセッサに送られる。例えば、選択された命令は命令出力バス４２２上に置かれ、多重化エレメント４３８を介してプロセッサ４０２の命令バス４４０に送られる。
【００３７】
ステップ５１２で決定されたときに命令が命令キャッシュ内に存在しない場合、ミスが生じたという表示が与えられ、方法５００はステップ５１８に進む。ステップ５１８では、ステップ５１０で選択されたＤビットは、Ｄビットが、データキャッシュが命令のためにチェックされるべきであることを示す「１」に設定されているかどうかを見るためにチェックされる。Ｄビットが「１」に設定された場合、ステップ５２０でプロセッサはデータキャッシュから命令をフェッチしようとする。例えば、生成された命令フェッチアドレス４１８は、データフェッチアドレス４３４としてデータキャッシュに送られる。
【００３８】
ステップ５２４において、データキャッシュは、供給された命令フェッチアドレスに有効データが存在するかどうかを見るためにチェックする。供給された命令フェッチアドレスに有効データが存在する場合、実際にはデータは命令であり、ステップ５２８でデータキャッシュのエントリがフェッチされる。ステップ５１６では、データキャッシュからフェッチされたデータが命令としてプロセッサに送られる。例えば、データ出力バス４３６上にフェッチされたデータは、多重化エレメント４３８を介して送られ、命令バス４４０上で命令としてプロセッサ４０２に供給される。
【００３９】
ステップ５１８に戻ると、ステップ５１８でＤビットが「０」であったと決定されると、命令がデータキャッシュ内に存在しないことが知られ、方法５００はステップ５２２に進む。ステップ５２４で決定されたように、ステップ５２２はまた、供給された命令フェッチアドレスでデータキャッシュ内にミスがあった状況のために到達される。いずれにしても、命令は命令キャッシュ内にまたはデータキャッシュ内に存在しないことが知られ、ステップ５２２で示すように命令はシステムメモリからフェッチされる。例えば、システムメモリ４１２は命令のためにアクセスされることになる。命令がシステムメモリ４１２から得られると、命令はステップ５１６で示されるようにプロセッサ４０２に送られる。
【００４０】
図６は、データとして生成され、データキャッシュ内に格納されるプログラムコードを実行するための方法６００の例示の流れ図である。この方法に従うプログラムコードは、図２および図４に関連して説明されたものなどの命令キャッシュ、データキャッシュ、およびシステムメモリを有するプロセッサおよびメモリ複合体上で実行されることができ、図１のコンポーネント１２５Ａ〜Ｃ内で適切に使用されることができる。
【００４１】
ステップ６０２では、プログラムがコードを生成する。この種の生成は、例えば、プログラムが圧縮されたプログラムから実行可能なコードを生成するときに行われることができる。生成されたコードは、最初は、データとして扱われ、それが生成された後にデータキャッシュ内に格納される。プログラムを実行する前に、命令キャッシュは、ステップ６０４で無効にされる。無効ステップは、生成されたコードと同一のアドレスには命令がないことを保証する。ステップ６０６において、生成されたコードは、命令キャッシュ内のプログラムアドレス空間から命令をフェッチすることによってプロセッサによって実行され、データキャッシュ内に格納される命令を含むことができる。データキャッシュ内に格納されるそれらの命令について、本開示の技術は、データキャッシュが命令キャッシュ内におけるミスの発生時の命令に関してチェックされることを可能にすることにより後続されることができる。データキャッシュ内で命令を見いだすと、命令はプロセッサ上で実行するためにデータキャッシュから直接フェッチされる。
【００４２】
本開示は現在好ましい情況で開示されているが、本教示は本開示および添付の特許請求の範囲に一致する様々な情況に適応されることができることが認識されるであろう。
【図面の簡単な説明】
【００４３】
【図１】本開示の１つの実施形態が使用されることができる例示的な無線通信システムのブロック図。
【図２】本発明の１つの実施形態による、メモリの効率的な命令フェッチ動作のためにデータキャッシュ動作が適応されるプロセッサおよびメモリ複合体の機能ブロック図。
【図３】本開示によりデータキャッシュ内にデータとして最初に格納された命令に関連したミス処理のオーバヘッドを低減するために、該データキャッシュ内に格納された該命令をフェッチする例示的な方法の流れ図。
【図４】本開示による効率的な命令フェッチのためにデータキャッシュ動作が適応される命令ページテーブルを含むプロセッサおよびメモリ複合体の機能ブロック図。
【図５】本開示による、データキャッシュ内に格納された命令をフェッチする例示的な方法の流れ図。
【図６】本開示による、データとして生成されてデータキャッシュ内に格納されるコードを実行する例示的な方法の流れ図。
【図１】
2009524168.tif 000003
【図２】
2009524168.tif 000004
【図３】
2009524168.tif 000005
【図４】
2009524168.tif 000006
【図５】
2009524168.tif 000007
【図６】
2009524168.tif 000008
【国際調査報告】
2009524168.tif 000009
2009524168.tif 000010