(57)【特許請求の範囲】
【請求項１】
データプロセッサであって、
主メモリと、
各々が複数のキャッシュページとして構成される命令キャッシュ及びデータキャッシュと、を有し、
必要とされる命令を前記命令キャッシュにおいて検索し、前記必要とされる命令が前記命令キャッシュに存在しない場合、前記データキャッシュにおいて検索し、前記必要とされる命令が前記データキャッシュに存在する場合、前記必要とされる命令を含むページを前記データキャッシュから前記命令キャッシュにフェッチし、前記必要とされる命令が前記データキャッシュに存在しない場合、前記必要とされる命令を含むページを前記主メモリから前記命令キャッシュにフェッチするように機能する命令フェッチロジックと、
データ値を前記データキャッシュの関連するページのデータアドレスの位置に書き込み、そして前記ページと同じページが前記命令キャッシュにおいても記述されている場合、前記データ値を前記命令キャッシュの前記ページの対応するアドレスの位置に書き込むように機能するデータライトロジックと、
前記データキャッシュから前記主メモリにページを転送するように機能する、前記命令キャッシュに格納されたデータ値を前記主メモリに書き戻すことのないキャッシュ制御ロジックと、
を実行するデータプロセッサ。
【請求項２】
請求項１記載のデータプロセッサであって、
前記命令キャッシュは直接マッピング方式であり、前記データキャッシュが連想型であること、
を特徴とするデータプロセッサ。
【請求項３】
請求項１又は２記載のデータプロセッサであって、
前記命令キャッシュおよび前記データキャッシュが複数キャッシュページを記憶するように構成されていること、
を特徴とするデータプロセッサ。
【請求項４】
請求項３記載のデータプロセッサであって、
前記命令キャッシュ又は前記データキャッシュへの転送、あるいは、前記命令キャッシュ又は前記データキャッシュからの転送がページ単位で実行されること、
を特徴とするデータプロセッサ。
【請求項５】
請求項３又は４記載のデータプロセッサであって、
前記命令フェッチロジックは、必要なページが前記命令キャッシュ又は前記データキャッシュに保持されているか否かを調べることにより前記命令キャッシュおよび前記データキャッシュを検索するように機能すること、
を特徴とするデータプロセッサ。
【請求項６】
請求項３乃至５のいずれか１項に記載のデータプロセッサであって、
前記キャッシュ制御ロジックは、新たに必要とされるページを前記データキャッシュに書き込む際に、アクセス頻度が最も低いデータページが修正されたデータを含んでいる場合には、前記アクセス頻度が最も低いページを前記データキャッシュから前記主メモリに転送すること、
を特徴とするデータプロセッサ。
【請求項７】
請求項３乃至６のいずれか１項に記載のデータプロセッサであって、
前記命令フェッチロジックは、必要とされる命令が前記命令キャッシュと前記データキャッシュのいずれにも存在しない場合、前記必要とされる命令を前記主メモリから前記命令キャッシュにフェッチするように機能すること、
を特徴とするデータプロセッサ。
【請求項８】
請求項３乃至７のいずれか１項に記載のデータプロセッサであって、
前記命令キャッシュ及び前記データキャッシュのそれぞれが、各ページ４キロバイトの８ページに構成された３２キロバイトを保有すること、
を特徴とするデータプロセッサ。
【請求項９】
請求項１乃至８のいずれか１項に記載のデータプロセッサであって、
命令を実行するための命令実行ロジックを有すること、
を特徴とするデータプロセッサ。
【請求項１０】
請求項９記載のデータプロセッサであって、
前記命令実行ロジックは、命令の実行をエミュレートするソフトウェアを実行するデータ処理構成を有すること、
を特徴とするデータプロセッサ。
【請求項１１】
請求項１乃至１０のいずれか１項に記載のデータプロセッサであって、
該データプロセッサは、前記命令キャッシュにおける項目を無効にする機能を提供しないこと、
を特徴とするデータプロセッサ。
【請求項１２】
主メモリと、各々が複数のキャッシュページとして構成される命令キャッシュ及びデータキャッシュと、を有するシステムにおけるデータ処理方法であって、
必要とされる命令を前記命令キャッシュにおいて検索するステップと、
前記必要とされる命令が前記命令キャッシュに存在しない場合に前記データキャッシュを検索するステップと、
前記必要とされる命令が前記データキャッシュに存在する場合、前記必要とされる命令を含むページを前記データキャッシュから前記命令キャッシュにフェッチするステップと、
前記必要とされる命令が前記データキャッシュにも存在しない場合、前記必要とされる命令を含むページを前記主メモリから前記命令キャッシュにフェッチするステップと、
データ値を書き込むべき場合、そのデータ値を前記データキャッシュの関連するページのデータアドレスの位置に書き込み、前記ページと同じページが前記命令キャッシュにおいても記述されている場合、前記データ値を前記命令キャッシュの前記ページの対応するアドレスの位置にも書き込むステップと、
前記データキャッシュから前記主メモリへページを転送する、前記命令キャッシュに格納されたデータ値を前記主メモリに書き戻すことのないステップと、
を有するデータ処理方法。
【請求項１３】
請求項１２記載の方法を実行するためのプログラム。
【請求項１４】
請求項１３記載のプログラムを記録した記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理におけるメモリキャッシングに関する。
【背景技術】
【０００２】
ここでは、特定のマイクロプロセッサのエミュレーションに関して例示的な問題を説明するが、本発明はより広範に適用することができる。
【０００３】
マイクロプロセッサコアは、テレビセットトップボックスやソニー（登録商標）のプレイステーション２（ＰＳ２）（商標）ファミリーコンピュータエンターテインメントシステム等の様々な適用分野で用いられている。ＰＳ２の入出力プロセッサ（ＩＯＰ）の場合、コアには２メガバイトの主メモリと非常に小さなキャッシュが設けられている。そこでは、いわゆる「ライトスルー」方式のキャッシュが採用されており、プロセッサによりキャッシュされたメモリ位置に書き戻された情報は、元の主メモリにも書き込まれる。これは、新しい情報は、すぐにまた読み出す必要がある場合にはキャッシュに書き込まれるが、主メモリへのアクセスがその都度必要であるため、書き込みオペレーションそのものはキャッシュされないことを意味している。この構成の１つの利点は、自己書き換えプログラムコードをより容易に実行できることである。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ＩＯＰメモリとして２ＭＢを使用するには小さい内部メモリを有するエミュレーションプロセッサによってＩＯＰをエミュレートすることが提案されてきた。外部メモリにアクセスすることは可能ではあるが、それはＤＭＡコントローラを介してのみ行なわれる。従って、ＤＭＡコントローラを用いるエミュレーションシステムの場合、外部メモリへのアクセスが遅いため、エミュレーションを実用的な速度で行わせるためには、キャッシング方法を考える必要がある。必要とされる外部メモリへのアクセスの数を削減するには、キャッシング方法はデータの読み込みだけではなくデータの書き込みのキャッシングも含まなければならない。しかし、これは自己書き換えコードを容易にエミュレートすることができないことを意味する。
【課題を解決するための手段】
【０００５】
そこで、本発明は、データプロセッサであって、
主メモリ、
命令キャッシュ、および、
データキャッシュ、を有し、
必要とされる命令を前記命令キャッシュから検索し、前記必要とされる命令が前記命令キャッシュに存在しない場合、前記必要とされる命令を前記データキャッシュから検索し、前記必要とされる命令が前記データキャッシュに存在しない場合、前記必要とされる命令を前記主メモリから前記命令キャッシュにフェッチするように機能する命令フェッチロジックと、
データ値を前記データキャッシュのデータアドレスの箇所に書き込み、そして前記命令キャッシュにおいても前記アドレスが記述されている場合、そのデータ値を前記命令キャッシュに書き込むように機能するデータライトロジックと、
前記データキャッシュから前記主メモリにデータを転送するように機能するキャッシュ制御ロジックと、
を実行するデータプロセッサを提供する。
【０００６】
本発明は、主メモリへアクセスする必要性を減少しつつ、データおよび命令にアクセスする効率的な方法を提供する。
【０００７】
二番目の側面から見た場合、本発明は、主メモリ、命令キャッシュ、および、データキャッシュ、を有するシステムにおけるデータ処理方法であって、
必要とされる命令を前記命令キャッシュから検索するステップと、
前記必要とされる命令が前記命令キャッシュに存在しない場合に、前記必要とされる命令を前記データキャッシュから検索するステップと、
前記必要とされる命令が前記データキャッシュにも存在しない場合に、前記必要とされる命令を前記主メモリから前記命令キャッシュにフェッチするステップと、
データ値を書き込むべき場合、そのデータ値を前記データキャッシュのデータアドレスの箇所に書き込み、そのアドレスが前記命令キャッシュにおいても記述されている場合、前記データ値を前記命令キャッシュにも書き込むステップと、
前記データキャッシュから前記主メモリへデータを転送するステップと、
を有するデータ処理方法を提供する。
【０００８】
本発明の更に別の特徴としては、上記方法を実行するプログラムコードを含むコンピュータソフトウェアと、そのようなプログラムコードを提供する媒体（例えば、伝送媒体あるいは記憶媒体）が含まれる。
【発明を実施するための最良の形態】
【０００９】
以下、添付図面を参照して本発明の実施形態を説明するが、これらの実施形態は一例にすぎない。
【００１０】
図１は、エミュレートされるデータ処理システムの概略図である。本システムは、主メモリ２０からデータおよび命令を読み出し、主メモリ２０にデータおよび修正された命令を書き込むプロセッサ１０を有する。
【００１１】
以下の説明は、エミュレートされるシステムにおける主メモリ２０に記憶されるイメージを保持するには小さすぎるローカルメモリを備えるプロセッサを用いて、図１のシステムで行うオペレーションをエミュレートする技術に関するものである。このような制約があるため、キャッシュを用いた解決策を採用する必要がある。
【００１２】
図２は、エミュレーションのための構成を概略的に示したものである。エミュレーション技術は一般的によく知られており、説明を明瞭にするために、本実施形態に直接関係のない特徴については省略する。エミュレーションは、エミュレーションプロセッサが、そのエミュレーションプロセッサ用の言語で記述されたエミュレーションソフトウェアを実行することにより行われ、従って、エミュレートされるシステムにおける命令の処理をエミュレートするために、そのようなエミュレーションプロセッサ用の言語で記述された命令の一群が実行される。以下の説明において、「命令」という語は、エミュレートされるシステムにおける命令を指しており、エミュレーションソフトウェアにおいてエミュレーションプロセッサ用の言語で記述された命令を指しているものではない。
【００１３】
図２に示されているように、エミュレーションソフトウェア１２０を実行するプロセッサ１１０が、命令キャッシュ（Ｉ）１４０およびデータキャッシュ（Ｄ）１５０を介して主メモリ１３０にアクセスする。ＩキャッシュおよびＤキャッシュを用いる理由は、プロセッサ１１０のローカルメモリが小さすぎてエミュレートされるシステムにおける主メモリ２０のイメージを保持できないからであり、また、プロセッサ１１０が対応する主メモリ１３０にアクセスするには費用のかかる（すなわち、時間のかかる）ＤＭＡアクセスによる必要があるからである。
【００１４】
Ｉキャッシュ１４０は、アクセス速度を考慮して直接マッピング方式であり、各々が４キロバイトのメモリページを８ページ保有している（即ち、各ページが複数のキャッシュラインを有している）。本実施形態では少数の大きなメモリページを使用しているが、それはキャッシュヒットのチェックをより効率的にするためである。ページサイズが大きいことにより、メモリに対するアクセスの遅さを埋め合わせることができる。メモリページが主メモリ１３０からＩキャッシュ１４０に読み込まれることで、プロセッサはＩキャッシュ１４０から命令を読み出すことができる。しかし、Ｉキャッシュ１４０に格納された値が主メモリ１３０に書き戻されることは決してない。
【００１５】
キャッシュへの転送およびキャッシュからの転送は、ページ単位で行なわれる。同様に、必要なデータ項目が保持されているかどうかを検出するためのキャッシュの検索は、その項目を含むページがそのキャッシュに保持されているかどうかを検出することによって行なわれる。
【００１６】
Ｄキャッシュ１５０は、いわゆる「スラッシング」（即ち、キャッシュされたページのめまぐるしく変更すること）を減らすために完全に連想型であり、やはり各ページ４キロバイトのページを８ページ保有している。主メモリ１３０から新たなページをＤキャッシュに読み込む場合、Ｄキャッシュに格納されているページの中でアクセス頻度が最も低いページ（そのページが主メモリから読み出されて以来変更されている場合）が、主メモリに書き戻される。従って、プロセッサがＤキャッシュのいずれかの格納データを修正した場合、そのページが主メモリ１３０に書き戻されるまで、その修正はＤキャッシュ１５０に保持されている。
【００１７】
以下、図３ないし図５に示されたフローチャートを参照しながら、ＤキャッシュとＩキャッシュの相互関係について説明する。
【００１８】
図３は、命令を読み取る処理に関する概略的なフローチャートである。
【００１９】
ステップ２００において、プロセッサ１１０は必要とされる命令へのアクセスをＩキャッシュ１４０において試みる。必要とされる命令がＩキャッシュ１４０に存在する場合、ステップ２１０の制御に進み、その命令がＩキャッシュ１４０から読み取られ、通常の方法で処理するためにプロセッサ１１０へ引き渡される。そしてプロセスは終了する。
【００２０】
しかし、必要とする命令がＩキャッシュ１４０に存在しない場合、必要とされる命令がＤキャッシュ１５０に格納された情報に含まれているかどうかが調べられる。このテストがステップ２２０として示されている。必要とされる命令が確かにＤキャッシュに存在する場合、ステップ２３０において、そのページ全体がＤキャッシュからＩキャッシュにコピーされる。これはＩキャッシュにおける１ページの上書きで済む。なぜなら、Ｉキャッシュからのデータは主メモリ１３０に書き戻されることはないからである。ステップ２３０から再びステップ２１０の制御へと進み、必要とされる命令がＩキャッシュから読み取られ、プロセスは終了する。
【００２１】
しかし、必要とする命令がＩキャッシュ（ステップ２００）にもＤキャッシュ（ステップ２２０）にも存在しない場合、ステップ２４０において、必要とされる命令を含むページが主メモリからＩキャッシュ１４０に読み込まれ、Ｉキャッシュの１ページを上書きする。再びステップ２１０の制御に進み、プロセスは終了する。
【００２２】
図４は、データ値の書き込み処理に関する概略的なフローチャートである。
【００２３】
ステップ３１０において、プロセッサ１１０はデータ値をＤキャッシュ１５０に書き込む。上述したように、これは最終的には主メモリ１３０を更新することになるが、Ｄキャッシュにおいてそのページが上書きされるまでは、主メモリ１３０の更新は行われない。
【００２４】
ステップ３２０において、新たに書き込まれたデータ値を有するページがＩキャッシュにも保持されているかどうかが検査される。その場合、ステップ３３０において、その新しい値はＩキャッシュの適切な位置にも書き込まれ、プロセスは終了する。しかし、問題のページがＩキャッシュに保持されていない場合、プロセスは単にそこで終了する。
【００２５】
図５は、データ値の読み取り処理に関する概略的なフローチャートである。ステップ４００で、プロセッサ１１０はＤキャッシュ１５０においてデータ値へのアクセスを試みる。必要なアドレスがＤキャッシュにキャッシュされている場合、ステップ４１０でその必要な値をＤキャッシュから読み出し、プロセスは終了する。しかし、必要なページがＤキャッシュに無い場合、ステップ４２０において使用頻度が最も低いページを（必要であれば、すなわち修正されていれば）Ｄキャッシュから主メモリ１３０に書き戻し、次いでステップ４３０において、必要なメモリアドレスを含むページを主メモリ１３０からＤキャッシュへと読み込む。そして、再びステップ４１０の制御へと進み、プロセスを終了する。
【００２６】
上に記載した方法を用いることにより、Ｉキャッシュ１４０に格納されている情報が主メモリ１３０に直接書き戻されることは決してなく、また、本実施形態においては、Ｉキャッシュの無効命令あるいは機能が提供されることもない。もし、プロセッサ１１０がいわゆる自己書き換えコードを実行することにより主メモリ１３０に格納されている命令が、その命令を実行する手段そのものにより生成された命令により上書きされたとしても、実行すべきコードに矛盾が生じる可能性は全くない。命令が上書きされるべき場合、新しい値がＤキャッシュに書き込まれ、そのページがＩキャッシュにも格納されているなら、それはＩキャッシュに書き込まれる。従って、いかなる変更に対してもＩキャッシュは最新の状態に保たれる。命令にアクセスする際に、その命令がＩキャッシュに無い場合、主メモリの前にＤキャッシュが検索される。従って、主メモリ１３０に書き戻されていない変更はＤキャッシュにまだ存在しており、修正された命令はＤキャッシュからＩキャッシュに転送される。
【図面の簡単な説明】
【００２７】
【図１】データ処理システムの概略図である。
【図２】データキャッシュおよび命令キャッシュを用いるデータ処理システムの概略図である。
【図３】命令の読み取りオペレーションに関する概略的なフローチャートである。
【図４】データ値の書き込みオペレーションに関する概略的なフローチャートである。
【図５】データ値の読み取りオペレーションに関する概略的なフローチャートである。
【符号の説明】
【００２８】
１０：プロセッサ、２０：主メモリ、１１０：プロセッサ、１２０：エミュレーション用ソフトウェア、１３０：主メモリ、１５０：Ｄキャッシュ、１４０：Ｉキャッシュ
【図１】
0004666511.tif 000002
【図２】
0004666511.tif 000003
【図３】
0004666511.tif 000004
【図４】
0004666511.tif 000005
【図５】
0004666511.tif 000006