【问题标题】:Does the OS flush CPU caches when a process crashes?当进程崩溃时,操作系统是否会刷新 CPU 缓存?
【发布时间】:2016-07-10 01:40:12
【问题描述】:

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

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

感谢您的帮助!

【问题讨论】:

  • 我投票结束这个问题,因为它属于 Unix&Linux
  • 了解更多与硬件相关的细节对于程序员来说是至关重要的,所以我认为这不是题外话。没错,它也可能是其他论坛的主题。

标签: linux crash cpu-cache non-volatile


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢您的回答,非常有帮助!您能否推荐任何好的文档资源,我可以在其中找到有关该主题的更多信息?也许我错过了要搜索的正确术语。
猜你喜欢
  • 2011-10-07
  • 1970-01-01
  • 2020-03-23
  • 1970-01-01
  • 2010-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-28
相关资源
最近更新 更多