最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

#科普#CPU空閑時都在做什么呢?System Idle Process?

2019-02-26 22:31 作者:櫻井椎子  | 我要投稿

操作系統(tǒng)行為的基本原理是,在任何一個特定時刻,在一個 CPU (核心)上有且只有一個任務(wù)是活動的。除了當(dāng)前正在占用的程序,99.9999%的程序都處于中斷或休眠狀態(tài)。對于幾乎所有人來說,幾乎100%的CPU時間都是空閑的。那么,如果 CPU 無事可做的時候,又會是什么樣的呢?

吾輩的小站原文:http://www.shiiko.cn/2018/04/notes/system-idle-process/

關(guān)于以及一些碎碎念:http://www.shiiko.cn/about/

不難想到,既然CPU閑著,那不如讓他找點(diǎn)事情做唄!于是就有了第一種想法:

讓CPU持續(xù)很長時間去遍歷內(nèi)核,檢查是否有一個活動任務(wù)需要它,有的話就去做。

這是很多人第一想到的思路,CPU沒事情的話就讓他自己找點(diǎn)事情做。可惜這并不是一個明智的選擇,這樣帶來的是CPU時間的高消耗,連內(nèi)存/硬盤都難逃一劫。既然說“給操作系統(tǒng)寫內(nèi)核的人都是天才”,那么他們貢獻(xiàn)了沿用至今的一種很巧妙的方法:Cpu Idle Loop。

Cpu Idle Loop

有沒有注意到任務(wù)管理器中總有一個叫做System Idle Process的進(jìn)程使用著幾乎全部的CPU資源?

為了保證CPU能在我們需要它的時候被喚醒,又要讓他閑置的時候有事情做,不能徹底關(guān)閉掉;再加上又要讓CPU的功耗在閑置時降低...于是,操作系統(tǒng)開發(fā)者創(chuàng)建了一個空閑任務(wù),當(dāng)沒有其它任務(wù)可做時就調(diào)度它去運(yùn)行。在 Linux 中,這個空閑任務(wù)就是進(jìn)程 0,它是由計算機(jī)打開電源時運(yùn)行的第一個指令直接派生出來的。對于Windows來說,它就是System Idle Process。

通過一段簡化過的Linux內(nèi)核代碼來了解一下這個Loop到底是如何運(yùn)行的。

while (1) {
while(!need_resched()) {? ?//當(dāng)不需要重新安排給CPU安排任務(wù)的時候。
cpuidle_idle_call();? ? ? ? ? ? //執(zhí)行CPU空閑進(jìn)程,通俗的就是讓CPU去休息。
}

/*
//將CPU重新分配給其他需要它的進(jìn)程
*/
schedule_preempt_disabled();
}

對于Intel處理器來說,空閑狀態(tài)意味著運(yùn)行下面的指令。

static inline void native_halt(void)
{
asm volatile("hlt": : :"memory");
}

現(xiàn)在,我們已經(jīng)告訴 CPU 去?halt(睡眠)了,我們還需要以某種方式讓它醒來以便執(zhí)行其他任務(wù),不要就這樣睡死過去。天才們創(chuàng)建了很多喚醒它的巧妙方法——中斷。

中斷操作

返回去看到上面的源代碼:while(!need_resched()) 。當(dāng)不需要重新為CPU安排時間的時候做的事情。

“中斷”會讓你的CPU知道它現(xiàn)在需要分配到其他任務(wù)了(need_resched返回true的時候)。什么是中斷?比如當(dāng)你的鼠標(biāo)點(diǎn)擊了一下,因?yàn)樗a(chǎn)生了一個新的輸入鼠標(biāo)的驅(qū)動程序就會做出響應(yīng),告訴CPU進(jìn)程就可運(yùn)行了。在那個時刻, need_resched() 返回 true,然后空閑任務(wù)(cpuidle_idle_call();)因你的這次點(diǎn)擊而被踢出而終止運(yùn)行。

計時器中斷

那如果我就是不點(diǎn)擊,不輸入,那我的電腦為什么也沒有睡死過去呢?在這個示例中,由內(nèi)核計劃的定時器中斷會每 4 毫秒發(fā)生一次,也就是說不管什么情況,每隔4ms打斷一次CPU的工作,重新給他安排一次工作。這就是滴答tick周期。

計時器中斷

如圖所示,也就是說每秒鐘將有 250 個滴答,因此,這個滴答速率(頻率)是 250 Hz。這是運(yùn)行在 Intel 處理器上的 Linux 的典型值,而其它操作系統(tǒng)喜歡使用 100 Hz。

對于一個空閑 CPU 來說,它看起來似乎是個無意義的工作。如果外部世界沒有新的輸入,在你的筆記本電腦的電池耗盡之前,CPU 將始終處于這種每秒鐘被喚醒 250 次的地獄般折磨的小憩中。但是這讓CPU降低到了非常低的工作頻率,同時也降低到了非常低的功耗,而且讓CPU在任何需要它的時候都不會宕機(jī)。

最新的空閑策略

假如你有一個進(jìn)程要進(jìn)行超長的操作,然后你的內(nèi)核每4ms打斷一次CPU,再讓他繼續(xù)去做原來的工作,那這也太糟糕了。最新的解決方法是動態(tài)滴答和自適應(yīng)滴答。

#科普#CPU空閑時都在做什么呢?System Idle Process?的評論 (共 條)

分享到微博請遵守國家法律
宜阳县| 上虞市| 江达县| 红桥区| 武隆县| 舞钢市| 呼图壁县| 枣强县| 新泰市| 亳州市| 沙坪坝区| 庆阳市| 合阳县| 定南县| 平阳县| 新竹县| 三亚市| 旺苍县| 京山县| 肇源县| 云霄县| 辽中县| 舟山市| 广水市| 镇原县| 嵊州市| 集安市| 青州市| 寿阳县| 黔东| 阿鲁科尔沁旗| 辛集市| 甘谷县| 洛扎县| 安达市| 恩施市| 贵阳市| 前郭尔| 房产| 兴国县| 长岛县|