相信每位接触过计算机的朋友都经历过电脑死机。在我的印象中,天气热的时候打游戏就经常出现电脑蓝屏,每次都给我气的半死,但又拿蓝屏没什么办法。

学了计算机后,我不再无能狂怒了,在遇到电脑死机时,会理性地分析蓝屏的原因。

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

众所周知,计算机的核心中枢是中央处理器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操作系统内核中,就有大量的全局性的锁,一个不小心造成死锁,其他想要的线程都得进入等待队列,那就凉凉了。

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

电脑死机(蓝屏)的时候,到底是怎么回事?相关推荐

  1. 电脑死机什么导致,带你一次性了解所有导致电脑死机蓝屏原因!

    电脑蓝屏绝对是小白最蛋疼的事,今天修姐就来讲下电脑为什么会出现死机蓝屏! 造成电脑蓝屏的原因很多,但总体来说也就两大类,硬件问题OR软件问题,今天就带你们一次性了解大多数导致电脑死机原因! 由硬件问题 ...

  2. 使用脚本让开挂玩家电脑死机蓝屏命令

    使用脚本让开挂玩家电脑死机蓝屏命令;可以使用皓月独有的,封超级不卡反加速游戏网关,并且设置好惩罚,触发脚本执行. 脚本将写在QF脚本内.     使用U变量,记录超速次数,如下: [@UsePlugi ...

  3. 电脑死机蓝屏怎么办 电脑死机蓝屏原因介绍【解决方法】

    引起电脑蓝屏的原因有很多,如电脑超频过度引起电脑蓝屏,内存条接触不良或内存损坏导致电脑蓝屏,硬盘出现故障导致电脑蓝屏,以及安装的软件存在不兼导致电脑蓝屏等.本文将逐一介绍分析出现电脑蓝屏现象的原因与解 ...

  4. 服务器供电不足系统会蓝屏吗,故障电源导致硬盘供电不足,引起电脑死机蓝屏(穆童)...

    上个星期炸雷声声,被打烂的电器多多.某客户的电脑电源被打坏,自己换了一个上普SP-385WB 电源.换了第二天,在耍游戏时电脑突然蓝屏死机,重启后无法进入系统,卡在硬盘引导系统处. 经检测后MTOOU ...

  5. idea报错 电脑死机蓝屏

    1.删除.idea 2.Maven路径不要在D盘 3.重启idea

  6. ensp启动设备蓝屏_为什么早期的Windows经常死机蓝屏,现在却很少发生?这些你都知道吗?...

    往事不堪回首呀,试问当年有多少小伙伴的电脑被一些看起来很好用的小工具弄到蓝屏的呢?老实说哦. 但大家不妨想想,对比于今天的电脑,发生蓝屏死机的概率确实比以往少了许多,这是为什么呢?老毛桃涉猎了一番,据 ...

  7. 插拔usb设备计算机管理无反应,插拔USB设备引起死机蓝屏0x000000FE分析解决措施...

    我们操作电脑故障中最常见的那就是蓝屏,导致蓝屏的原因有很多,更新驱动.安装软件.系统补丁.甚至外接USB设备等等都会有可能导致蓝屏.今天介绍的蓝屏故障0x000000FE就是外接设备USB所引起的故障 ...

  8. 笔记本电脑死机 笔记本老是死机 蓝屏死机

    笔记本电脑死机 笔记本老是死机 蓝屏死机 2010年08月12日 [b] 第一种 系统问题[/b] 操作系统对于整个电脑使用来说是至关重要的,而系统问题导致出现的蓝屏,一般是系统文件损坏,或者是启动文 ...

  9. 记一次amd平台win10/win11随机死机蓝屏重启的问题

    先说一下这次的平台是 主板:华硕b550m-e wifi, cpu:amd r5 5600G, 内存:金士顿的ddr4 3200hz 16g, 主要硬盘:金士顿 nvme m2接口 512g. 问题是 ...

  10. 解决笔记本一插电源就死机蓝屏,drive_power_state_failure报错的问题

    这几天电脑突然会卡住,然后操作一下就会蓝屏.在重装系统后,发现问题还是没有解决,drive_power_state_failure报错其实是很宽泛的问题,但是我也重装了上一版本的显卡驱动,还是会有这样 ...

最新文章

  1. 【蓝桥杯】2019年第十届蓝桥杯省赛B组试题J — 灵能传输(前缀和,猜想结论)难度⭐⭐⭐⭐
  2. 分步骤学习自动化测试
  3. html将图片做成标签,HTML(图片标签)
  4. 网关是个啥?为什么电脑不设置网关就没法上网?笔记本为啥不用设置网关?
  5. nyoj-205--求余数--(大整数取模)
  6. OBD技术速成——J1850协议概述
  7. MySQL数据以全量和增量方式,向ES搜索引擎同步流程
  8. android 隐私空间,不想用隐私空间?安卓用户原来还可以这样隐藏手机秘密
  9. java quartz Scheduler 操作Trigger
  10. TokenInsight:反映区块链行业整体表现的TI指数较昨日同期上涨6.21%
  11. Zookeeper11问
  12. 22. 栈的压入、弹出队列(C++版本)
  13. 呕心沥血之飞冰(icejs)项目使用vue组件 -- vuera
  14. 【R语言文本挖掘】:n-grams和相关性计算
  15. python的try语句
  16. vue3视频播放插件vue3-video-play的具体使用方法
  17. 在Django中进行数据库迁移
  18. 流媒体服务器FFMPEG转码流摄像头取流
  19. HA HADOOP集群和HIVE部署
  20. S4 HANA连接其他数据库(oracle,sqlserver)

热门文章

  1. 09.less-----less中的变量
  2. ICPC训练联盟2021寒假冬令营(7)部分题解
  3. ORACLE中的rowid用法
  4. Python基础之格式化输出
  5. 微信小程序多选标签的实现(单选或者多选)
  6. HTML中横线的运用方法
  7. 基于JSP网上机票销售系统的设计与实现
  8. 基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
  9. 视差图(Disparity)三维重投影得到特征点的三维空间坐标的2种方法
  10. Java 网络编程之NIO(Channel)