2

プロセスが OS (Linux と仮定します) によって GPF や SIGKILL などを介して突然終了した場合、OS はプロセスの変更された CPU キャッシュ ラインをメイン メモリにフラッシュしますか? CPUやOSによって挙動が違うのですか?

不揮発性メモリの機能を評価していますが、クラッシュした場合にアプリケーションがメモリに書き込んだ状態がどのようなものか疑問に思っています。具体的には、現在変更されている CPU キャッシュ ラインが欠落しているかどうか。これに関する公式声明はまだ見つかっていません。

助けてくれてありがとう!

4

1 に答える 1

2

一般的に言えば、はい。プロセスを「クラッシュ」させても、最近のメモリ書き込みが失われることはありません。

CPU の観点から見ると、例外の発生は、致命的なイベントと同様に「通常の」イベントでも頻繁に使用されます。たとえば、メモリのマップされていないページにアクセスしても、GPF/SEGV によるクラッシュが常に発生するとは限りません。多くのオペレーティング システムは、このイベントを使用して動的なメモリ ページングを実装します (たとえば、メモリ マップ ファイルのページの読み取り、ゼロ フィル メモリ領域への物理メモリの割り当て、COW メモリ ページのコピー)。同様に、ソフトウェア割り込みやソフトウェア エミュレートされた命令などの他の CPU 例外は、オペレーティング システムによって解釈され、プロセスを強制終了せずにプロセスに戻される場合があります。

(また、コア ダンプの生成とデバッガーのケースを考えてみてください。強制終了されたプロセスは、常にすぐに破棄されるとは限りません。オペレーティング システムは、さまざまな目的でその状態をメモリに保持する場合があります。)

ほとんどのオペレーティング システムは、コンテキスト スイッチでキャッシュをフラッシュするか、CPU が通常どおりキャッシュからページを書き出せるようにします。どちらの場合でも、最近の書き込みは確実に無視されません。

于 2016-03-22T23:18:33.410 に答える