当OS通过GPF或SIGKILL等突然终止进程(让我们假设Linux)时,操作系统是否将进程的修改后的CPU缓存行刷新到主内存?是否有不同的行为取决于CPU或操作系统?
我正在评估非易失性内存功能,并且想知道应用程序在发生崩溃时写入内存的状态。具体是否缺少当前修改的CPU缓存行。我还没有找到关于此的官方声明。
感谢您的帮助!
答案 0 :(得分:2)
一般来说,是。 “崩溃”进程不会导致最近的内存写入丢失。
从CPU的角度来看,引发异常的情况与“正常”事件的使用频率一样,对于致命事件也是如此。例如,访问未映射的内存页并不总是通过GPF / SEGV导致崩溃;许多操作系统将使用此事件来实现动态内存分页(例如,读取内存映射文件的页面;为零填充内存区域分配物理内存;复制COW内存页面)。类似地,操作系统可以解释其他CPU异常,例如软件中断或软件模拟指令,并将其传递回进程而不会将其终止。
(另外:考虑核心转储生成和调试器的情况。一个被杀死的进程并不总是立即被销毁;操作系统可能会将其状态保留在内存中以用于各种目的。)
大多数操作系统将刷新上下文切换上的缓存,或者允许CPU正常地从缓存中写出页面。在任何一种情况下,最近的写作肯定不会被忽略。