自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

電腦死機(jī)的時(shí)候,CPU到底在做什么?

系統(tǒng) 其他OS
操作系統(tǒng)之所以能夠掌控全局,就得益于它啟動(dòng)時(shí)給CPU安插的一系列的中斷處理函數(shù)(比如我們最常見(jiàn)的時(shí)鐘中斷),好讓操作系統(tǒng)能周期性的收回CPU的執(zhí)行權(quán),調(diào)度別的線程來(lái)執(zhí)行。

大家好,我是軒轅。

前幾天,讀者群里有人聊起了一個(gè)問(wèn)題:計(jì)算機(jī)為什么死機(jī),死機(jī)的時(shí)候CPU在干什么?

我想起之前寫(xiě)過(guò)這方面的文章,想著估計(jì)有不少新粉沒(méi)有看過(guò),就挖個(gè)墳給大家看看,這個(gè)有趣又能漲知識(shí)的問(wèn)題。

電腦死機(jī),應(yīng)該每個(gè)接觸計(jì)算機(jī)的小伙伴都經(jīng)歷過(guò)吧。

尤其是早些年,電腦配置還沒(méi)現(xiàn)在這么高的時(shí)候,多開(kāi)幾個(gè)重量級(jí)應(yīng)用程序,死機(jī)就能如約而至,就算你把鍵盤(pán)上的CTRL+ALT+DELETE按爛了,任務(wù)管理器也出不來(lái),最后只能默默含淚長(zhǎng)按關(guān)機(jī)按鈕,強(qiáng)制關(guān)機(jī)。

那么,你有沒(méi)有想過(guò),電腦在死機(jī)的時(shí)候,它到底在干嘛呢?

眾所周知,計(jì)算機(jī)的核心中樞是中央處理器CPU。上過(guò)計(jì)算機(jī)基礎(chǔ)課程的同學(xué)都被教導(dǎo)過(guò):CPU是一根筋死腦筋,只知道不斷的取出指令來(lái)一條條執(zhí)行,直到關(guān)機(jī)方休。

所以理論上,死機(jī)分為兩種,一種是CPU罷工不干了,不再執(zhí)行下一條指令了,這屬于硬件死機(jī),不過(guò)這種情況基本不會(huì)發(fā)生。

更多的是軟件層面的死機(jī),也就是CPU被困在了某個(gè)地方出不來(lái)了,導(dǎo)致本該執(zhí)行的程序得不到執(zhí)行,看起來(lái)就是死機(jī)了一般。

聰明的你可能馬上想到,如果寫(xiě)一個(gè)死循環(huán),把CPU陷在里面出不去,是不是就能死機(jī)了?比如這樣:

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

你可以試一下,會(huì)發(fā)現(xiàn)為CPU降溫的風(fēng)扇可能會(huì)轉(zhuǎn)起來(lái),但計(jì)算機(jī)依舊能正常工作,并沒(méi)有死機(jī)。

死循環(huán),CPU不是應(yīng)該一直在這里轉(zhuǎn)圈嗎?難道不會(huì)死機(jī)?

這就不得不提到一個(gè)概念:中斷。

中斷

中斷這個(gè)概念,絕對(duì)是計(jì)算機(jī)史上最偉大的發(fā)明之一。

中斷,顧名思義,用于打斷CPU正常的工作,讓它去執(zhí)行別處的指令程序。

操作系統(tǒng)之所以能夠掌控全局,就得益于它啟動(dòng)時(shí)給CPU安插的一系列的中斷處理函數(shù)(比如我們最常見(jiàn)的時(shí)鐘中斷),好讓操作系統(tǒng)能周期性的收回CPU的執(zhí)行權(quán),調(diào)度別的線程來(lái)執(zhí)行。

所以,即便你某個(gè)線程進(jìn)入了死循環(huán),在你的時(shí)間片用完之后,也得乖乖交出CPU,讓別的程序來(lái)執(zhí)行。

想用一個(gè)死循環(huán)就把電腦搞死機(jī),那自然是不可能的。

其實(shí)想來(lái)也是,如果這么容易就給你搞死機(jī)了,那這操作系統(tǒng)也太菜了吧,新手如果剛學(xué)編程,還不得一天強(qiáng)制重起電腦十幾回?

退一萬(wàn)步講,就算不考慮中斷的影響,現(xiàn)在的CPU大都是多核,一個(gè)線程進(jìn)入死循環(huán),但還有別的核可以參與系統(tǒng)調(diào)度,也依然不會(huì)死機(jī)。

那么回到開(kāi)始的問(wèn)題,那到底CPU被困在了哪里出不來(lái),連中斷都拿它沒(méi)辦法呢?

其實(shí)有兩種情況:

1、中斷確實(shí)拿它沒(méi)辦法

很多人都知道中斷的概念,但很多人不知道,中斷也是有優(yōu)先級(jí)的。

這很容易理解,比如CPU正在執(zhí)行程序,突然發(fā)生了一個(gè)中斷事件。CPU保存好當(dāng)前執(zhí)行的上下文,轉(zhuǎn)頭去處理這個(gè)中斷事件,但剛處理到一半兒,這時(shí)又有一個(gè)新的中斷事件來(lái)了,那CPU怎么辦?要不要響應(yīng)?

所以中斷也有優(yōu)先級(jí)之分,低優(yōu)先級(jí)的中斷無(wú)法打斷高優(yōu)先級(jí)的中斷。

有了這個(gè)前提來(lái)試想一下,如果由于操作系統(tǒng)內(nèi)核代碼寫(xiě)的不當(dāng),在處理某個(gè)中斷的時(shí)候陷入了死循環(huán),比如自旋鎖,會(huì)發(fā)生什么?

因?yàn)樵谔幚碇袛嗟臅r(shí)候,CPU運(yùn)行在一個(gè)很高的優(yōu)先級(jí)上,一般的中斷是無(wú)法把執(zhí)行權(quán)搶過(guò)去的,這就導(dǎo)致這顆CPU核心成為了“植物人”,怎么叫它都沒(méi)反應(yīng)了。

2、中斷能搶到CPU,但發(fā)現(xiàn)沒(méi)有線程可以調(diào)度

程序員們對(duì)死鎖這個(gè)概念應(yīng)該不陌生,兩個(gè)線程A等待B,B等待A,兩個(gè)線程互相等待對(duì)方讓步(釋放鎖),形成僵持局面,最后成為死鎖。

如果死鎖發(fā)生在應(yīng)用層面,那問(wèn)題不大,最多就是兩個(gè)程序死了。但如果發(fā)生在內(nèi)核呢?

比如在Windows操作系統(tǒng)內(nèi)核中,就有大量的全局性的鎖,一個(gè)不小心造成死鎖,其他想要的線程都得進(jìn)入等待隊(duì)列,那就涼涼了。

引用一段另一位大神Tim Chen的描述(我覺(jué)得特別形象):

責(zé)任編輯:武曉燕 來(lái)源: 編程技術(shù)宇宙
相關(guān)推薦

2019-09-15 19:11:14

CPU操作系統(tǒng)空閑

2025-01-17 10:49:44

數(shù)字化轉(zhuǎn)型數(shù)字化企業(yè)管理

2018-02-02 08:55:47

LinuxCPU

2013-11-04 11:05:34

Windows 8.1問(wèn)題

2009-03-12 11:08:00

技術(shù)顧問(wèn)職場(chǎng)雜談

2023-12-18 16:02:04

OpenAI人工智能

2020-10-29 11:08:06

CPUMySQL數(shù)據(jù)庫(kù)

2022-07-06 15:07:47

React開(kāi)發(fā)

2015-11-03 15:22:31

CDO大數(shù)據(jù)首席數(shù)據(jù)官

2021-08-26 11:09:51

systemdLinux

2021-08-26 13:55:45

systemdLinux目標(biāo)

2018-03-02 10:38:42

2017-08-24 10:00:05

SDWANGoogle網(wǎng)絡(luò)

2020-12-23 13:26:53

代碼麻省理工學(xué)院語(yǔ)言

2021-11-18 21:09:50

流批場(chǎng)景引擎

2013-02-22 09:59:22

移動(dòng)醫(yī)療創(chuàng)業(yè)公司

2012-11-27 10:17:04

2015-05-13 11:20:02

DockerDocker實(shí)踐者PaaS

2015-03-27 10:32:03

阿里巴巴IDST

2020-12-03 08:25:10

Nginx
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)