我知道 Windows 系统崩溃时会显示停止错误和“蓝屏”几个常见原因,其中一些可能是:
- 在内核模式空间中运行的设备驱动程序或操作系统功能遇到未处理的异常(内存访问问题等)
- 设备驱动程序或操作系统功能由于检测到损坏或损坏风险而明确导致系统崩溃
- 硬件故障
我感兴趣的是,当检查崩溃转储(例如在 WinDBG 中)时,转储将始终指示导致崩溃的线程,这允许检查该线程的堆栈,提供导致错误检查和崩溃的调用的历史记录。检查此堆栈会提供有关如何在将来防止出现问题的线索(例如需要更新的特定驱动程序等)。
了解到这一点后,我问了自己以下问题,这个问题揭示了我的知识存在差距:
- 在多核/处理器系统上,多个线程将同时执行
- 因此肯定存在两个线程同时引发错误检查的可能性?
在这种情况下会发生什么?我是否对操作系统在并发执行和访问内存和硬件(IRQL 和延迟过程调用 (DPC) 等)方面如何处理多核/处理器系统存在根本性的误解?
谢谢