ファイルに大量のデータを保存しています。このファイルは mmap されていますが、常に少量のデータにしかアクセスできません。データの順序を最適化できるように (頻繁にアクセスするデータが同じページにグループ化されるように)、プログラムのアクセス パターンを理解したいと考えています。目標は、mmaped ファイルのワーキング セットを減らすことです。
そこで、R/W 両方を無効にしてファイルをマッピングすることを考えています。読み取り/書き込みの試行ごとに SEGV が発生します。私の SEGV ハンドラでは、アクセス アドレスを記録し、プログラムを続行できるようにします。
障害のあるアドレスで命令をデコードし、そのアクションをシミュレートできます (それに応じてターゲット レジスタとメモリ位置を変更することにより)。
ただし、Linux は SEGV から回復できないとどこかで読みました。これは本当ですか?シグナル ハンドラーが呼び出されたときに、OS に「すべて問題ありません。エラーが発生した命令の直後に続行してください」と示すにはどうすればよいですか?
シミュレートしたように、障害のある命令をやり直したくないことに注意してください。
今のところ、x86/x64 アーキテクチャだけが気になります。
ありがとう!