响应式布局网站实例,网站自定义301,网站 自适应js,wordpress数据电脑死机#xff0c;应该每个接触计算机的小伙伴都经历过吧。
尤其是早些年#xff0c;电脑配置还没现在这么高的时候#xff0c;多开几个重量级应用程序#xff0c;死机就能如约而至#xff0c;就算你把键盘上的CTRLALTDELETE按烂了#xff0c;任务管理器也出不来…电脑死机应该每个接触计算机的小伙伴都经历过吧。
尤其是早些年电脑配置还没现在这么高的时候多开几个重量级应用程序死机就能如约而至就算你把键盘上的CTRLALTDELETE按烂了任务管理器也出不来最后只能默默含泪长按关机按钮强制关机。
那么你有没有想过电脑在死机的时候它到底在干嘛呢
众所周知计算机的核心中枢是中央处理器CPU。上过计算机基础课程的同学都被教导过CPU是一根筋死脑筋只知道不断的取出指令来一条条执行直到关机方休。
所以理论上死机分为两种一种是CPU罢工不干了不再执行下一条指令了这属于硬件死机不过这种情况基本不会发生。
更多的是软件层面的死机也就是CPU被困在了某个地方出不来了导致本该执行的程序得不到执行看起来就是死机了一般。
聪明的你可能马上想到如果写一个死循环把CPU陷在里面出不去是不是就能死机了比如这样
voidnbsp;dead_loop()nbsp;{nbsp;nbsp;whilenbsp;(1)nbsp;{nbsp;nbsp;nbsp;nbsp;...nbsp;nbsp;}}
你可以试一下会发现为CPU降温的风扇可能会转起来但计算机依旧能正常工作并没有死机。
死循环CPU不是应该一直在这里转圈吗难道不会死机
这就不得不提到一个概念中断。
中断
中断这个概念绝对是计算机史上最伟大的发明之一。
中断顾名思义用于打断CPU正常的工作让它去执行别处的指令程序。
操作系统之所以能够掌控全局就得益于它启动时给CPU安插的一系列的中断处理函数比如我们最常见的时钟中断好让操作系统能周期性的收回CPU的执行权调度别的线程来执行。
所以即便你某个线程进入了死循环在你的时间片用完之后也得乖乖交出CPU让别的程序来执行。
想用一个死循环就把电脑搞死机那自然是不可能的。
其实想来也是如果这么容易就给你搞死机了那这操作系统也太菜了吧新手如果刚学编程还不得一天强制重起电脑十几回 退一万步讲就算不考虑中断的影响现在的CPU大都是多核一个线程进入死循环但还有别的核可以参与系统调度也依然不会死机。 那么回到开始的问题那到底CPU被困在了哪里出不来连中断都拿它没办法呢
其实有两种情况
1、中断确实拿它没办法
很多人都知道中断的概念但很多人不知道中断也是有优先级的。
这很容易理解比如CPU正在执行程序突然发生了一个中断事件。CPU保存好当前执行的上下文转头去处理这个中断事件但刚处理到一半儿这时又有一个新的中断事件来了那CPU怎么办要不要响应
所以中断也有优先级之分低优先级的中断无法打断高优先级的中断。
有了这个前提来试想一下如果由于操作系统内核代码写的不当在处理某个中断的时候陷入了死循环比如自旋锁会发生什么
因为在处理中断的时候CPU运行在一个很高的优先级上一般的中断是无法把执行权抢过去的这就导致这颗CPU核心成为了“植物人”怎么叫它都没反应了。
2、中断能抢到CPU但发现没有线程可以调度
程序员们对死锁这个概念应该不陌生两个线程A等待BB等待A两个线程互相等待对方让步释放锁形成僵持局面最后成为死锁。
如果死锁发生在应用层面那问题不大最多就是两个程序死了。但如果发生在内核呢
比如在Windows操作系统内核中就有大量的全局性的锁一个不小心造成死锁其他想要的线程都得进入等待队列那就凉凉了。 引用一段另一位大神Tim Chen的描述我觉得特别形象