質問

CPUキャッシュの内容を読み取る方法はありますか? アーキテクチャはARM用です。

アドレスの範囲を無効にし、無効になっているかどうかを確認したい。 無効化と無効化のチェックの有無にかかわらず、アドレス範囲の読み取りと書き込みを行うことができますが、キャッシュの内容を読み取ることができるかどうかを知りたいです

ありがとう!!

役に立ちましたか?

解決

ARM9は、キャッシュ操作とテストレジスタを提供し、キャッシュの状態を調べることができます。合理的な出発点は次のとおりです。

http:// infocenter .arm.com / help / index.jsp?topic = / com.arm.doc.ddi0151c / Chdcfejb.html

  

ICacheおよびDCacheは、ARM v4Tプログラマーのモデルによって定義されたCP15レジスタ7および9へのMCRおよびMRC命令を使用して維持されます。 MCRおよびMRC to CP15レジスタ15を使用して追加の操作を使用できます。これらの操作は、レジスタ7および9を使用した操作と組み合わされて、ソフトウェアでキャッシュを完全にテストできます。

これらは特権命令であるため、ターゲットプラットフォームでアクセスできない場合があります。

すべてのキャッシュラインの状態をダンプする簡単なプログラムから始めます。これにより、キャッシュタグが提供するメモリ位置を読み取るだけで、キャッシュ内のデータを読み取るのに十分な情報が得られます。

他のヒント

私はそれを書くのをためらうのは不可能なので、私はそれを書くのは非常に難しいです。おそらく一般的な答えはありません。 CPUキャッシュが透過的に機能する場合、キャッシュコンテンツを変更せずに接続されたCPUからコンテンツを読み取ることはできません。 CPUキャッシュは通常、CAM(連想メモリ、連想メモリ)として実装されます。CPUがデータにアクセスしようとすると、キャッシュが検索され、データがない場合はメモリからフェッチされますが、このプロセスはCPUに対して透過的です。

オプションは、HW観測モジュールの一種を使用し、システムバス上でスニフし、キャッシュをRAMに接続します。データの要求がバスに表示される場合、要求されたデータはキャッシュにありませんでした。

より深いハードウェアの知識を持つ人が光を放つことを願っています。

ウィキペディアには、CPUキャッシングについて説明したエントリがあります。 http://en.wikipedia.org/wiki/CPU_cache

定義により、キャッシュコンテンツを読み取るために必要なことは、キャッシュに保存されているメモリの場所を読み込むことだけです。キャッシュが適切に機能している場合、キャッシュからコンテンツを抽出します。

ただし、Iキャッシュの内容を読み取ろうとする場合、アーキテクチャに依存します。さらに、考慮すべき競合条件があります。キャッシュコンテンツを読み取るための命令は、キャッシュコンテンツ自体を誤って上書きする可能性があります。

このスレッドに記載されているように、単にCPUはキャッシュの内容を変更する可能性があります。 (ほとんどの)キャッシュの実装はCPUに対して意図的に完全に透過的であるため、従来のCPUで実行されているソフトウェア内からキャッシュの内容を直接表示することはできません。

このようなことを行うには、キャッシュ対応CPU(キャッシュを制御するための特別な指示が必要です。実際に存在するかどうかはわかりません)、またはキャッシュを表示するには別のHWモジュールをインストールする必要があります。ここに私が持っている2つのアイデアがあります:

  1. 元のキャッシュコントローラーを、追加の制御機能を備え、システムバスに接続してデータを読み取ることができるコントローラーに置き換えます。このコントローラーは「間に」置かれます。 CPUとキャッシュ。

  2. セカンダリモジュールを元のキャッシュと並行して、読み取り専用キャッシュアクセスで配置します。特別な割り込みライン(または同様のハードウェア-ソフトウェアソフトウェア信号)を使用して、CPUはこのモジュールのメモリへのキャッシュのダンプをトリガーし、後で(バス経由で)読み戻すことができます。このコントローラーは、キャッシュの操作には影響しません。いつでもスナップショットを撮ることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top