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 を 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つのアイデアを次に示します。
元のキャッシュ コントローラーを、追加の制御機能を備え、システム バスに接続してデータを読み取ることができるコントローラーに交換します。このコントローラーは、CPU とキャッシュの「間に」置かれます。
セカンダリ モジュールを元のキャッシュと並列に配置し、読み取り専用キャッシュ アクセスを使用します。特別な割り込みライン (または同様のハードウェア (ソフトウェアではない) 信号) を使用して、CPU はキャッシュのダンプをこのモジュールのメモリにトリガーし、後で (バス経由で) 読み戻すことができます。このコントローラーは、キャッシュの操作には影響しません。いつでもスナップショットを作成できるようにするだけです。