我们知道计算机上运行的所有程序都是由许多人协作的庞大程序。
那么,当计算机挂起而我们无能为力时,会发生什么呢?另外,这种情况下所有冻结的事情也在程序中实现了吗?还是程序计数器卡住了并且无法递增,所以处理器中有问题吗?
在不同情况下,计算机可能会冻结。这些是我现在可以想到的:
x86CLI
和HLT
说明。CLI
禁用中断,因此没有异步事件(如定时器中断或按键)可以将CS:EIP
指令指针移至另一条指令并HLT
实际上使处理器停止。
例如,很少使用该指令,并且只有在引导代码中的某些初始化例程失败时,内核才允许使用该指令。尽管重新启动是一个更好的选择。
请注意,HLT
仅停止运行它的核心,而不是所有核心。
窗口没有响应(通常在Windows上找到)。这因应用程序而异。更多信息在这里。
尝试获取资源,但是资源受锁保护并且已经获取。进程等待(实际上是繁忙循环或产生另一个进程),直到最终可以获取资源为止。但是,这只是暂时状态,与...相反
僵局。可能发生多种情况,但常见的情况是两个进程试图同时获取彼此提供的资源。没有人可以处理获取请求,因为它们都在等待其他进程,因此这两个进程最终都不会中断。这是Linux上不间断进程的原因,尽管将信号发送到了该进程,但这些进程无法杀死。
在慢速处理器或线程少的处理器上执行多任务。不良的调度算法会使情况变得更糟。
由于一个进程至少占用一个线程,因此有效并发运行的进程数量非常少。不过,这可以通过非常快速的处理器来稳定。
这导致对鼠标单击等事件的响应时间较长。
对于x86系统,HLT
是唯一真正阻碍指令指针前进的指令。
所有其他情况都是(可能是无限的)循环或程序/操作系统错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句