计算机死机的时候,它在干什么?

简介: 计算机死机的时候,它在干什么?

今天花几分钟跟大家分享一个很有意思又能涨知识的问题:电脑死机的时候到底在干什么?

image.png

电脑死机,应该每个接触计算机的小伙伴都经历过吧。

尤其是早些年,电脑配置还没现在这么高的时候,多开几个重量级应用程序,死机就能如约而至,就算你把键盘上的 CTRL+ALT+DELETE 按烂了,任务管理器也出不来,最后只能默默含泪长按关机按钮,强制关机。

那么,你有没有想过,电脑在死机的时候,它到底在干嘛呢?

众所周知,计算机的核心中枢是中央处理器 CPU。上过计算机基础课程的同学都被教导过:CPU 是一根筋死脑筋,只知道不断地取出指令来一条条执行,直到关机方休。

所以理论上,死机分为两种,一种是 CPU 罢工不干了,不再执行下一条指令了,这属于硬件死机,不过这种情况基本不会发生。

更多的是软件层面的死机,也就是 CPU 被困在了某个地方出不来了,导致本该执行的程序得不到执行,看起来就是死机了一般。

聪明的你可能马上想到,如果写一个死循环,把 CPU 陷在里面出不去,是不是就能死机了?比如这样:

void dead_loop() {
  while (1) {
    ...
  }
}

你可以试一下,会发现为 CPU 降温的风扇可能会转起来,但计算机依旧能正常工作,并没有死机。

死循环,CPU 不是应该一直在这里转圈吗?难道不会死机?

这就不得不提到一个概念:中断

中断

中断这个概念,绝对是计算机史上最伟大的发明之一。

中断,顾名思义,用于打断 CPU 正常的工作,让它去执行别处的指令程序。

操作系统之所以能够掌控全局,就得益于它启动时给 CPU 安插的一系列的中断处理函数(比如我们最常见的时钟中断),好让操作系统能周期性地收回 CPU 的执行权,调度别的线程来执行。

所以,即便你某个线程进入了死循环,在你的时间片用完之后,也得乖乖交出 CPU,让别的程序来执行。

想用一个死循环就把电脑搞死机,那自然是不可能的。

其实想来也是,如果这么容易就给你搞死机了,那这操作系统也太菜了吧,新手如果刚学编程,还不得一天强制重启电脑十几回?

退一万步讲,就算不考虑中断的影响,现在的 CPU 大都是多核,一个线程进入死循环,但还有别的核可以参与系统调度,也依然不会死机。

那么回到开始的问题,那到底 CPU 被困在了哪里出不来,连中断都拿它没办法呢?

其实有两种情况:

1、中断确实拿它没办法

很多人都知道中断的概念,但很多人不知道,中断也是有优先级的。

这很容易理解,比如 CPU 正在执行程序,突然发生了一个中断事件。CPU 保存好当前执行的上下文,转头去处理这个中断事件,但刚处理到一半儿,这时又有一个新的中断事件来了,那 CPU 怎么办?要不要响应?

所以中断也有优先级之分,低优先级的中断无法打断高优先级的中断。

有了这个前提来试想一下,如果由于操作系统内核代码写得不当,在处理某个中断的时候陷入了死循环,比如自旋锁,会发生什么?

因为在处理中断的时候,CPU 运行在一个很高的优先级上,一般的中断是无法把执行权抢过去的,这就导致这颗 CPU 核心成为了“植物人”,怎么叫它都没反应了。

2、中断能抢到 CPU,但发现没有线程可以调度

程序员们对死锁这个概念应该不陌生,两个线程 A 等待 B,B 等待 A,两个线程互相等待对方让步(释放锁),形成僵持局面,最后成为死锁。

如果死锁发生在应用层面,那问题不大,最多就是两个程序死了。但如果发生在内核呢?

比如在 Windows 操作系统内核中,就有大量的全局性的锁,一个不小心造成死锁,其他想要的线程都得进入等待队列,那就凉凉了。

image.png

引用一段另一位大神 Tim Chen 的描述(我觉得特别形象):

image.png



相关文章
OPENVPN双网卡路由规则
iptables -t nat   -A POSTROUTING -s 10.7.0.0/24 -d 10.18.101.0/24 -j SNAT --to-source 10.
3329 0
|
4月前
|
JSON 自然语言处理 数据处理
集结MIT、英伟达等名校名企!FoundationMotion革新视频运动理解,开源模型竟超闭源大模型
MIT、英伟达等联合推出FoundationMotion,首创全自动视频运动标注 pipeline,生成50万“视频-描述-QA”数据,覆盖7维运动语义与5类推理问题。模型微调后在MotionBench、AV-Car等评测中显著超越闭源大模型,推动视频理解迈向高精度自动标注新阶段。
184 0
 集结MIT、英伟达等名校名企!FoundationMotion革新视频运动理解,开源模型竟超闭源大模型
|
4月前
|
人工智能 自然语言处理 安全
适合零售行业的智能客服系统推荐(2025年12月更新)
2025年,零售智能客服已成服务升级核心。瓴羊Quick Service、合力亿捷、环信、智齿科技等系统凭借AI技术,实现多渠道协同、高并发响应与业务系统集成,助力企业降本增效,提升客户体验。
|
9月前
|
存储 人工智能 算法
当机器学会思考:人类在AI镜像中的自我发现
《当机器学会思考:人类在AI镜像中的自我发现》探讨人工智能如何成为映照人性的镜子。从情感模拟到意识探索,从技术工具到文明伙伴,AI不仅改变生活方式,更促使人类重新理解自身的思维、情感与存在意义。在人机共舞的时代,我们既是创造者,也是被解读的对象。
|
算法 搜索推荐 Windows
审稿人直呼简洁,单点PageRank终极版!人大STOC论文让复杂度优化至理论最优
人民大学研究团队在STOC发表论文《Revisiting Local Computation of PageRank: Simple and Optimal》,提出一种局部计算PageRank的新算法,显著降低计算复杂度。该算法仅关注目标节点及其周围节点,避免遍历全网,提升大规模网络处理效率。研究改进了ApproxContributions算法的时间复杂度,并通过简洁的分析方法证明其最优性,解决了长期存在的开放问题。论文还优化了PageRank中心性的计算复杂度,为信息检索和网络分析提供新思路。然而,结果可能受限于特定网络模型,实际应用效果需进一步验证。
269 7
|
Oracle Java 关系型数据库
2023年震撼!Java在TIOBE排行榜滑坡至历史最低!
自2023年6月起,Java在TIOBE编程语言排行榜中跌至历史最低的第4位,与C#的差距缩小至1.2%。Java受欢迎程度下降的主要原因是Oracle在Java 8后引入付费许可模式,导致用户流失。尽管如此,Java仍是一门成熟、稳定且跨平台的语言,拥有庞大的用户群和丰富的生态系统。Oracle通过推出Java 17免费版及Java 21的新特性,努力保持其竞争力。未来,Java将继续与其他编程语言竞争并发展。
426 1
|
监控 安全 网络协议
透明防火墙:网络安全的隐形守护者
【8月更文挑战第24天】
745 0
|
存储 缓存 Java
|
存储 JavaScript Serverless
函数计算产品使用问题之如何实现项目自动化部署
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
265 0
|
XML Java Maven
IDEA配置Log4j2日志框架(非Maven)
首先,在项目中新建一个文件夹,文件夹名为lib。
724 0

热门文章

最新文章

下一篇
开通oss服务