99国产精品欲av蜜臀,可以直接免费观看的AV网站,gogogo高清免费完整版,啊灬啊灬啊灬免费毛片

網易首頁 > 網易號 > 正文 申請入駐

CPU 空閑時在干嘛?

0
分享至

大家好,小編今天聊聊CPU空閑時在干啥。

人空閑時會發呆會無聊,計算機呢?

假設你正在用計算機瀏覽網頁,當網頁加載完成后你開始閱讀,此時你沒有移動鼠標,沒有敲擊鍵盤,也沒有網絡通信,那么你的計算機此時在干嘛?

有的同學可能會覺得這個問題很簡單,但實際上,這個問題涉及從硬件到軟件、從 CPU 到操作系統等一系列環節,理解了這個問題你就能明白操作系統是如何工作的了。

你的計算機 CPU 使用率是多少?

如果此時你正在計算機旁,并且安裝有 Windows 或者 Linux ,你可以立刻看到自己的計算機 CPU 使用率是多少。

這是博主的一臺安裝有 Win10 的筆記本:

可以看到大部分情況下 CPU 利用率很低,也就在 8% 左右,而且開啟了 283 個進程,這么多進程基本上無所事事都在等待某個特定事件來喚醒自己,就好比你寫了一個打印用戶輸入的程序,如果用戶一直不按鍵盤,那么你的進程就處于這種狀態。

有的同學可能會想也就你的比較空閑吧,實際上大部分個人計算機 CPU 使用率都差不多這樣(排除掉看電影、玩游戲等場景),如果你的使用率總是很高,風扇一直在嗡嗡的轉,那么不是軟件 bug 就有可能是病毒。。。

那么有的同學可能會問,剩下的 CPU 時間都去哪里了?

剩下的 CPU 時間去哪里了?

這個問題也很簡單,還是以 Win10 為例,打開任務管理器,找到 “詳細信息” 這一欄,你會發現有一個 “系統空閑進程”,其 CPU 使用率達到了 99%,正是這個進程消耗了幾乎所有的 CPU 時間。

那么為什么存在這樣一個進程呢?以及這個進程什么時候開始運行呢?

這就要從操作系統說起了。

程序、進程與操作系統

當你用最喜歡的代碼編輯器編寫代碼時,這時的代碼不過就是磁盤上的普通文件,此時的程序和操作系統沒有半毛錢關系,操作系統也不認知這種文本文件。

程序員寫完代碼后開始編譯,這時編譯器將普通的文本文件翻譯成二進制可執行文件,此時的程序依然是保存在磁盤上的文件,和普通沒有本質區別。

但此時不一樣的是,該文件是可執行文件,也就是說操作系統開始 “懂得” 這種文件,所謂 “懂得” 是指操作系統可以識別、解析、加載,因此必定有某種類似協議的規范,這樣編譯器按照這種協議生成可執行文件,操作系統就能加載了。

在 Linux 下可執行文件格式為 ELF ,在 Windows 下是 EXE 。

此時雖然操作系統可以識別可執行程序,但如果你不去雙擊一下(或者在Linux下運行相應命令)的依然和操作系統沒有半毛錢關系。

但是當你運行可執行程序時魔法就出現了。

此時操作系統開始將可執行文件加載到內存,解析出代碼段、數據段等,并為這個程序創建運行時需要的堆區棧區等內存區域,此時這個程序在內存中就是這樣了:

最后,根據可執行文件的內容,操作系統知道該程序應該執行的第一條機器指令是什么,并將其告訴 CPU ,CPU 從該程序的第一條指令開始執行,程序就這樣運行起來了。

一個在內存中運行起來的程序顯然和保存在磁盤上的二進制文件是不一樣的,總的有個名字吧,根據“弄不懂原則”,這個名字就叫進程,英文名叫做Process。

我們把一個運行起來的程序叫做進程,這就是進程的由來

此時操作系統開始掌管進程,現在進程已經有了,那么操作系統是怎么管理進程的呢?

調度器與進程管理

銀行想必大家都去過,實際上如果你仔細觀察的話銀行的辦事大廳就能體現出操作系統最核心的進程管理與調度。

首先大家去銀行都要排隊,類似的,進程在操作系統中也是通過隊列來管理的。

同時銀行還按照客戶的重要程度劃分了優先級,大部分都是普通客戶;但當你在這家銀行存上幾個億時就能升級為 VIP 客戶,優先級最高,每次去銀行都不用排隊,優先辦理你的業務。

類似的,操作系統也會為進程劃分優先級,操作系統會根據進程優先級將其放到相應的隊列中供調度器調度。

這就是操作系統需要實現的最核心功能。

現在準備工作已經就緒。

接下來的問題就是操作系統如何確定是否還有進程需要運行。

隊列判空:一個更好的設計

從上一節我們知道,實際上操作系統是用隊列來管理進程的,那么很顯然,如果隊列已經為空,那么說明此時操作系統內部沒有進程需要運行,這是 CPU 就空閑下來了,此時,我們需要做點什么,就像這樣:

if (queue.empty()) {  do_someting();}

這些編寫內核代碼雖然簡單,但內核中到處充斥著 if 這種異常處理的語句,這會讓代碼看起來一團糟,因此更好的設計是沒有異常,那么怎樣才能沒有異常呢?

很簡單,那就是讓隊列永遠不會空,這樣調度器永遠能從隊列中找到一個可供運行的進程。

而這也是為什么鏈表中通常會有哨兵節點的原因,就是為了避免各種判空,這樣既容易出錯也會讓代碼一團糟。

就這樣,內核設計者創建了一個叫做空閑任務的進程,這個進程就是Windows 下的我們最開始看到的“系統空閑進程”,在 Linux 下就是第 0號進程。

當其它進程都處于不可運行狀態時,調度器就從隊列中取出空閑進程運行,顯然,空閑進程永遠處于就緒狀態,且優先級最低

既然我們已經知道了,當系統無所事事后開始運行空閑進程,那么這個空閑進程到底在干嘛呢?

這就需要硬件來幫忙了。

一切都要歸結到硬件

在計算機系統中,一切最終都要靠 CPU 來驅動,CPU 才是那個真正干活的。

原來,CPU 設計者早就考慮到系統會存在空閑的可能,因此設計了一條機器指令,這個機器指令就是 halt 指令,停止的意思。

這條指令會讓部分CPU進入休眠狀態,從而極大減少對電力的消耗,通常這條指令也被放到循環中執行,原因也很簡單,就是要維持這種休眠狀態。

值得注意的是,halt 指令是特權指令,也就是說只有在內核態下 CPU 才可以執行這條指令,程序員寫的應用都運行在用戶態,因此你沒有辦法在用戶態讓 CPU 去執行這條指令。

此外,不要把進程掛起和 halt 指令混淆,當我們調用 sleep 之類函數時,暫停運行的只是進程,此時如果還有其它進程可以運行那么 CPU 是不會空閑下來的,當 CPU 開始執行halt指令時就意味著系統中所有進程都已經暫停運行。

軟件硬件結合

現在我們有了 halt 機器指令,同時有一個循環來不停的執行 halt 指令,這樣空閑任務進程的實際上就已經實現了,其本質上就是這個不斷執行 halt 指令的循環,大功告成。

這樣,當調度器在沒有其它進程可供調度時就開始運行空間進程,也就是在循環中不斷的執行 halt 指令,此時 CPU 開始進入低功耗狀態。

在 Linux 內核中,這段代碼是這樣寫的:

while (1) {while(!need_resched()) {      cpuidle_idle_call();  }}

其中 cpuidle_idle_call函數最終會執行 halt 指令,注意,這里刪掉了很多細節,只保留最核心代碼,實際上 Linux 內核在實現空閑進程時還要考慮很多很多,不同類型的 CPU 可能會有深睡眠淺睡眠之類,操作系統必須要預測出系統可能的空閑時長并以此判斷要進入哪種休眠等等,但這并不是我們關注的重點。

總的來說,這就是計算機系統空閑時 CPU 在干嘛,就是在執行這一段代碼,本質上就是 CPU 在執行 halt 指令。

實際上,對于個人計算機來說,halt 可能是 CPU 執行最多的一條指令,全世界的 CPU 大部分時間都用在這條指令上了,是不是很奇怪。

作者:島主小風哥

來源:碼農的荒島求生

編輯:小咕咕

轉載內容僅代表作者觀點

不代表中科院物理所立場

如需轉載請聯系原公眾號

1.2.

3.

4.

5.

6.

7.

8.

9.

10.

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關推薦
熱點推薦
吉利研究院被一鍋端!為規避競業協議,造車新勢力這招也太狠了!

吉利研究院被一鍋端!為規避競業協議,造車新勢力這招也太狠了!

青青子衿
2025-05-31 08:49:23
樊振東出國打球,中國乒協正式表態,釋放出三大重要信號!

樊振東出國打球,中國乒協正式表態,釋放出三大重要信號!

十點街球體育
2025-06-01 17:12:10
很多人在說:性蕭條時代來臨了

很多人在說:性蕭條時代來臨了

深度報
2025-05-29 22:26:07
盤點世界體壇六大無恥事件,韓國獨占其三,佩服佩服

盤點世界體壇六大無恥事件,韓國獨占其三,佩服佩服

第一體育
2025-06-01 14:51:15
一場惡戰打醒了俄羅斯,普京終于明白:最危險的人就在身邊

一場惡戰打醒了俄羅斯,普京終于明白:最危險的人就在身邊

藍色海邊
2025-06-02 01:35:25
江蘇婚禮婆婆搶風頭,表演倒立露底褲,新娘黑臉:為老不尊

江蘇婚禮婆婆搶風頭,表演倒立露底褲,新娘黑臉:為老不尊

農村情感故事
2025-05-29 17:42:14
“大尺度”女星的瓜!

“大尺度”女星的瓜!

文刀萬
2025-05-23 06:05:02
辛柏青失聯兩周!好友哽咽:“他垮了,說不出話!” 26年愛成絕唱

辛柏青失聯兩周!好友哽咽:“他垮了,說不出話!” 26年愛成絕唱

老吳教育課堂
2025-06-01 19:00:25
西卡首獲東決MVP:歷史第4人 系列賽3次30+生涯第2次總決賽

西卡首獲東決MVP:歷史第4人 系列賽3次30+生涯第2次總決賽

醉臥浮生
2025-06-01 10:47:51
為什么要禁止醫護擅自醫學科普?

為什么要禁止醫護擅自醫學科普?

歷史總在押韻
2025-06-01 00:43:00
楊瀚森35順位被76人選中,評論區討論激烈

楊瀚森35順位被76人選中,評論區討論激烈

大昆說臺球
2025-06-01 13:46:52
美媒:楊瀚森是姚明后最優秀的中國NBA新秀,價值或比弗拉格更高

美媒:楊瀚森是姚明后最優秀的中國NBA新秀,價值或比弗拉格更高

林小湜體育頻道
2025-06-02 00:02:18
佛山女教師婚內出軌多人,被“弟弟”頂得腰疼,次日勾搭另一男人

佛山女教師婚內出軌多人,被“弟弟”頂得腰疼,次日勾搭另一男人

社會醬
2025-05-16 17:30:43
場均24+13,卻遭全隊集體霸凌?季后賽最憋屈球員!趕緊離開吧

場均24+13,卻遭全隊集體霸凌?季后賽最憋屈球員!趕緊離開吧

毒舌NBA
2025-06-01 14:00:40
中國女生在哈佛畢業典禮上致辭!無懼特朗普禁令:我的學生夠優秀

中國女生在哈佛畢業典禮上致辭!無懼特朗普禁令:我的學生夠優秀

昨夜軍帖
2025-05-30 17:50:40
中美教育全面脫鉤,魯比奧正式宣布撤銷中國學生簽證,將禁止入境

中美教育全面脫鉤,魯比奧正式宣布撤銷中國學生簽證,將禁止入境

百態人間
2025-05-30 18:42:58
男子癌癥晚期、全身惡臭……上海專家拒絕手術,但最后被他說動了

男子癌癥晚期、全身惡臭……上海專家拒絕手術,但最后被他說動了

臺州交通廣播
2025-06-01 17:35:39
從小被允許吃冷飲和不允許吃的孩子,長大后真的不一樣,要注意!

從小被允許吃冷飲和不允許吃的孩子,長大后真的不一樣,要注意!

特約前排觀眾
2025-06-02 00:10:05
超級喜訊,2-1贏了!鄭欽文殺瘋了,首次進法網8強,靜候薩巴倫卡

超級喜訊,2-1贏了!鄭欽文殺瘋了,首次進法網8強,靜候薩巴倫卡

侃球熊弟
2025-06-01 20:43:49
57歲江珊和老公逛街,滿頭白發背超大購物袋,田小潔全程耐心陪伴

57歲江珊和老公逛街,滿頭白發背超大購物袋,田小潔全程耐心陪伴

史行途
2025-05-30 14:27:54
2025-06-02 03:00:49
中科院物理所 incentive-icons
中科院物理所
愛上物理,改變世界。
9042文章數 136212關注度
往期回顧 全部

科技要聞

熱搜!雷軍疑回應余承東

頭條要聞

選舉臨近 尹錫悅、文在寅、樸槿惠、李明博均出面站臺

頭條要聞

選舉臨近 尹錫悅、文在寅、樸槿惠、李明博均出面站臺

體育要聞

一邊倒的歐冠決賽,青春無敵的新科冠軍

娛樂要聞

等等小花給鄧超拍雜志 插畫由小花繪制

財經要聞

油價繼續下跌?歐佩克宣布將再度增產

汽車要聞

零跑汽車5月交付量達45,067臺 穩居新勢力前三

態度原創

家居
游戲
親子
時尚
房產

家居要聞

原木純白 邂逅自然本真

外媒稱《血源》是最意難平?續作到底有沒有戲?

親子要聞

又是一年畢業季,六歲的告別,帶著最真的不舍與愛

鞠婧祎:萬花世界,鋒芒自持

房產要聞

金地華南落子海南自貿港22萬㎡標桿項目,夯實代建行業領軍者地位

無障礙瀏覽 進入關懷版 主站蜘蛛池模板: 武功县| 吉林省| 太康县| 濉溪县| 新河县| 罗江县| 西峡县| 镇安县| 芮城县| 湟源县| 紫阳县| 黎川县| 武冈市| 赫章县| 永善县| 永登县| 博湖县| 涞源县| 确山县| 额尔古纳市| 昌邑市| 牡丹江市| 五大连池市| 平南县| 云霄县| 辉南县| 文水县| 都匀市| 新建县| 台南市| 堆龙德庆县| 斗六市| 虹口区| 南靖县| 新巴尔虎右旗| 磐安县| 兴和县| 玉门市| 金川县| 霍山县| 台南市|