2

当操作系统(假设 Linux)通过 GPF 或 SIGKILL 或类似的方式突然终止进程时,操作系统是否会将修改后的 CPU 缓存行刷新到主内存?是否有不同的行为取决于 CPU 或操作系统?

我正在评估非易失性内存功能,并且想知道应用程序在崩溃时将什么状态写入内存。具体来说是否缺少当前修改的 CPU 缓存行。我还没有找到关于这个的官方声明。

谢谢你的帮助!

4

1 回答 1

2

一般来说,的。“崩溃”进程不会导致最近的内存写入丢失。

从 CPU 的角度来看,引发异常对于“正常”事件的使用频率与对于致命事件的使用频率一样高。例如,访问未映射的内存页并不总是会通过 GPF/SEGV 导致崩溃;许多操作系统将使用此事件来实现动态内存分页(例如,读入内存映射文件的页面;为零填充内存区域分配物理内存;复制 COW 内存页面)。类似地,其他 CPU 异常,例如软件中断或软件模拟指令,可能会被操作系统解释并传递回进程而不杀死它。

(另外:考虑核心转储生成和调试器的情况。被杀死的进程并不总是立即销毁;操作系统可能出于各种目的将其状态保留在内存中。)

大多数操作系统要么在上下文切换时刷新缓存,要么允许 CPU 从缓存中正常写出页面。在任何一种情况下,最近的写入肯定不会被忽略。

于 2016-03-22T23:18:33.410 回答