99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

當(dāng) CPU 空閑時它都在做什么?

5RJg_mcuworld ? 來源:未知 ? 作者:楊鑫 ? 2018-03-06 15:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

操作系統(tǒng)行為的基本原理是,在任何一個給定的時刻,在一個 CPU 上有且只有一個任務(wù)是活動的。但是,如果 CPU 無事可做的時候,又會是什么樣的呢?

事實證明,這種情況是非常普遍的,對于絕大多數(shù)的個人電腦來說,這確實是一種常態(tài):大量的睡眠進(jìn)程,它們都在等待某種情況下被喚醒,差不多在 100% 的 CPU 時間中,都處于虛構(gòu)的“空閑任務(wù)”中。事實上,如果一個普通用戶的 CPU 處于持續(xù)的繁忙中,它可能意味著有一個錯誤、bug、或者運(yùn)行了惡意軟件。

因為我們不能違反我們的原理,一些任務(wù)需要在一個 CPU 上激活。首先是因為,這是一個良好的設(shè)計:持續(xù)很長時間去遍歷內(nèi)核,檢查是否有一個活動任務(wù),這種特殊情況是不明智的做法。最好的設(shè)計是沒有任何例外的情況。無論何時,你寫一個 if 語句,Nyan Cat 就會喵喵喵。其次,我們需要使用空閑的 CPU 去做一些事情,讓它們充滿活力,你懂得,就是創(chuàng)建天網(wǎng)計劃唄。

因此,保持這種設(shè)計的連續(xù)性,并領(lǐng)先于那些邪惡計劃一步,操作系統(tǒng)開發(fā)者創(chuàng)建了一個空閑任務(wù),當(dāng)沒有其它任務(wù)可做時就調(diào)度它去運(yùn)行。我們可以在 Linux 的 引導(dǎo)過程 中看到,這個空閑任務(wù)就是進(jìn)程 0,它是由計算機(jī)打開電源時運(yùn)行的第一個指令直接派生出來的。它在 rest_init 中初始化,在 init_idle_bootup_task 中初始化空閑調(diào)度類scheduling class。

簡而言之,Linux 支持像實時進(jìn)程、普通用戶進(jìn)程等等的不同調(diào)度類。當(dāng)選擇一個進(jìn)程變成活動任務(wù)時,這些類按優(yōu)先級進(jìn)行查詢。通過這種方式,核反應(yīng)堆的控制代碼總是優(yōu)先于 web 瀏覽器運(yùn)行。盡管在通常情況下,這些類返回 NULL,意味著它們沒有合適的任務(wù)需要去運(yùn)行 —— 它們總是處于睡眠狀態(tài)。但是空閑調(diào)度類,它是持續(xù)運(yùn)行的,從不會失敗:它總是返回空閑任務(wù)。

好吧,我們來看一下這個空閑任務(wù)到底做了些什么。下面是 cpu_idle_loop,感謝開源能讓我們看到它的代碼:

cpu_idle_loop

我省略了很多的細(xì)節(jié),稍后我們將去了解任務(wù)切換,但是,如果你閱讀了這些源代碼,你就會找到它的要點:由于這里不需要重新調(diào)度(即改變活動任務(wù)),它一直處于空閑狀態(tài)。以所經(jīng)歷的時間來計算,這個循環(huán)和其它操作系統(tǒng)中它的“堂兄弟們”相比,在計算的歷史上它是運(yùn)行的最多的代碼片段。對于 Intel 處理器來說,處于空閑狀態(tài)意味著運(yùn)行著一個 halt 指令:

native_halt

hlt 指令停止處理器中的代碼執(zhí)行,并將它置于 halt 的狀態(tài)。奇怪的是,全世界各地數(shù)以百萬計的 Intel 類的 CPU 們花費大量的時間讓它們處于 halt 的狀態(tài),甚至它們在通電的時候也是如此。這并不是高效、節(jié)能的做法,這促使芯片制造商們?nèi)ラ_發(fā)處理器的深度睡眠狀態(tài),以帶來著更少的功耗和更長休眠時間。內(nèi)核的 cpuidle 子系統(tǒng) 是這些節(jié)能模式能夠產(chǎn)生好處的原因。

現(xiàn)在,一旦我們告訴 CPU 去 halt(睡眠)之后,我們需要以某種方式讓它醒來。如果你讀過 上篇文章《你的操作系統(tǒng)什么時候運(yùn)行?》 ,你可能會猜到中斷會參與其中,而事實確實如此。中斷促使 CPU 離開 halt 狀態(tài)返回到激活狀態(tài)。因此,將這些拼到一起,下圖是當(dāng)你閱讀一個完全呈現(xiàn)的 web 網(wǎng)頁時,你的系統(tǒng)主要做的事情:

定時器中斷外的其它中斷也會使處理器再次發(fā)生變化。如果你再次點擊一個 web 頁面就會產(chǎn)生這種變化,例如:你的鼠標(biāo)發(fā)出一個中斷,它的驅(qū)動會處理它,并且因為它產(chǎn)生了一個新的輸入,突然進(jìn)程就可運(yùn)行了。在那個時刻, need_resched() 返回 true,然后空閑任務(wù)因你的瀏覽器而被踢出而終止運(yùn)行。

如果我們呆呆地看著這篇文章,而不做任何事情。那么隨著時間的推移,這個空閑循環(huán)就像下圖一樣:

在這個示例中,由內(nèi)核計劃的定時器中斷會每 4 毫秒發(fā)生一次。這就是滴答tick周期。也就是說每秒鐘將有 250 個滴答,因此,這個滴答速率(頻率)是 250 Hz。這是運(yùn)行在 Intel 處理器上的 Linux 的典型值,而其它操作系統(tǒng)喜歡使用 100 Hz。這是由你構(gòu)建內(nèi)核時在 CONFIG_HZ 選項中定義的。

對于一個空閑 CPU 來說,它看起來似乎是個無意義的工作。如果外部世界沒有新的輸入,在你的筆記本電腦的電池耗盡之前,CPU 將始終處于這種每秒鐘被喚醒 250 次的地獄般折磨的小憩中。如果它運(yùn)行在一個虛擬機(jī)中,那我們正在消耗著宿主機(jī) CPU 的性能和寶貴的時鐘周期。

在這里的解決方案是 動態(tài)滴答,當(dāng) CPU 處于空閑狀態(tài)時,定時器中斷被 暫?;蛑赜媱?,直到內(nèi)核知道將有事情要做時(例如,一個進(jìn)程的定時器可能要在 5 秒內(nèi)過期,因此,我們不能再繼續(xù)睡眠了),定時器中斷才會重新發(fā)出。這也被稱為無滴答模式。

最后,假設(shè)在一個系統(tǒng)中你有一個活動進(jìn)程,例如,一個長時間運(yùn)行的 CPU 密集型任務(wù)。那樣幾乎就和一個空閑系統(tǒng)是相同的:這些示意圖仍然是相同的,只是將空閑任務(wù)替換為這個進(jìn)程,并且相應(yīng)的描述也是準(zhǔn)確的。在那種情況下,每 4 毫秒去中斷一次任務(wù)仍然是無意義的:它只是操作系統(tǒng)的性能抖動,甚至?xí)鼓愕墓ぷ髯兊酶?。Linux 也可以在這種單一進(jìn)程的場景中停止這種固定速率的滴答,這被稱為 自適應(yīng)滴答 模式。最終,這種固定速率的滴答可能會 完全消失。

對于閱讀一篇文章來說,CPU 基本是無事可做的。內(nèi)核的這種空閑行為是操作系統(tǒng)難題的一個重要部分,并且它與我們看到的其它情況非常相似,因此,這將幫助我們理解一個運(yùn)行中的內(nèi)核。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11080

    瀏覽量

    217116

原文標(biāo)題:當(dāng) CPU 空閑時它都在做什么?

文章出處:【微信號:mcuworld,微信公眾號:嵌入式資訊精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    為什么 KT142C 芯片 BUSY 腳空閑高電平僅 0.2V?附低功耗模式配置指南

    文檔圍繞 KT142C 芯片 busy 引腳展開,該引腳為 15 腳 PA12,播放時輸出低電平,空閑時本應(yīng)輸出 3.3V 高電平,但芯片空閑 5 秒進(jìn)入 2μA 超低功耗狀態(tài)后,busy 腳呈高阻
    的頭像 發(fā)表于 06-16 09:38 ?274次閱讀
    為什么 KT142C 芯片 BUSY 腳<b class='flag-5'>空閑</b>高電平僅 0.2V?附低功耗模式配置指南

    DLPC7540EVM整個色段周期有80μs的時間RGB_EN都同時為低電平,請問DLP在做什么工作或者預(yù)留的這80μs是有什么用途?

    DLPC7540EVM整個色段周期有80μs的時間RGB_EN都同時為低電平,請問這個時間DLP在做什么工作或者預(yù)留的這80μs是有什么用途?
    發(fā)表于 02-24 07:20

    ADS1298讀取數(shù)據(jù)時DRDY信號線的疑問求解

    在讀取心電數(shù)據(jù),DRDY會按照一定頻率輸出一個低電平,空閑時為高電平。但我出來的怎么剛好相反,空閑為低電平,而且我斷開與MCU的鏈接,信號還是一樣,說明和MCU的管腳配置沒問題。 各位大哥,有碰到這問題的嗎?
    發(fā)表于 02-08 07:48

    歲末重薦!高可靠性隔離半雙工RS-485收發(fā)器-CMT83085

    CMT83085的傳輸速率可達(dá)12Mbps。CMT83085總線側(cè)的總線引腳對地?fù)碛小?2kV 的系統(tǒng)級ESD保護(hù),同時具有故障安全保護(hù)功能,當(dāng)接收器輸入處于開路、短路或者總線空閑時,能確保接收器輸出邏輯高。接收器的輸入阻抗為1/8單位負(fù)載,允許多達(dá)256個收發(fā)器掛在總線
    的頭像 發(fā)表于 01-09 16:19 ?901次閱讀
    歲末重薦!高可靠性隔離半雙工RS-485收發(fā)器-CMT83085

    MAX3590 RS422 芯片 RO輸出 起初的空閑時刻為低電平 怎么檢測起始位

    如下圖串口助手發(fā) 55 55 66 55 從上到下波形 依次是 max3490 的 A端 B端 RO端 RO端 空閑為低電平 且起始位也沒有了,送到fpga端的RX引腳,無法檢測起始位,數(shù)據(jù)接收都是
    發(fā)表于 12-14 17:58

    Linux之CPU調(diào)度策略和CPU親和性

    一、調(diào)度策略 調(diào)度進(jìn)程 單個 CPU一次只能執(zhí)行一個進(jìn)程,雖然 Linux 系統(tǒng)通過使用多任務(wù)同時處理多個進(jìn)程,但當(dāng)多個進(jìn)程同時運(yùn)行在一個CPU 上時,通過交錯執(zhí)行這些進(jìn)程。 內(nèi)核使
    的頭像 發(fā)表于 12-05 16:38 ?1118次閱讀
    Linux之<b class='flag-5'>CPU</b>調(diào)度策略和<b class='flag-5'>CPU</b>親和性

    AMC7836的SDO在空閑時為高阻,請問是否建議作上拉或者下拉?

    問題1:AMC7836的SDO在空閑時為高阻,請問是否建議作上拉或者下拉?(我看手冊中典型電路好像沒有上拉)然后,請問如果不作上下拉對芯片正常SPI通信是否存在較大風(fēng)險? 問題2:請問
    發(fā)表于 12-05 08:20

    為什么藍(lán)色通道的SDO空閑時會有1V左右的跟隨CLK的波形?

    》, 自己用示波器測試到的時序如下; 模擬輸入口的電壓是固定的2.46V, 但是每次讀到的值都不同; 程序如下: 問題: 1. 為什么藍(lán)色通道的SDO空閑時會有1V左右的跟隨CLK的波形? 2. 軟件讀不到值
    發(fā)表于 12-04 08:16

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-spi編程示例之spi硬件原理

    ,時鐘極性(CPOL)和相位(CPHA)共同決定讀取數(shù)據(jù)的方式: CPOL用來決定SCLK空閑時的電平:CPOL=0,空閑時為低電平;CPOL=1,空閑時為高電平。 CPHA用來決定采樣時刻:CPHA=0,每個周期的第一個時鐘沿
    發(fā)表于 11-06 09:17

    飛凌嵌入式ElfBoard ELF 1板卡-spi編程示例之spi硬件原理

    ,時鐘極性(CPOL)和相位(CPHA)共同決定讀取數(shù)據(jù)的方式: CPOL用來決定SCLK空閑時的電平:CPOL=0,空閑時為低電平;CPOL=1,空閑時為高電平。 CPHA用來決定采樣時刻:CPHA=0,每個周期的第一個時鐘沿
    發(fā)表于 11-05 08:44

    為什么外設(shè)要通過接口與CPU相連

    各種任務(wù)。接口(Interface)是連接外設(shè)和CPU的橋梁,允許數(shù)據(jù)在兩者之間傳輸。 引言 在現(xiàn)代計算機(jī)系統(tǒng)中,CPU(中央處理器)是核心組件,負(fù)責(zé)執(zhí)行程序指令和處理數(shù)據(jù)。然而,CPU
    的頭像 發(fā)表于 09-30 14:10 ?2375次閱讀

    CPU時鐘周期的組成和作用

    CPU時鐘周期是計算機(jī)體系結(jié)構(gòu)中一個至關(guān)重要的概念,直接關(guān)聯(lián)到CPU的運(yùn)行速度和性能。以下是對CPU時鐘周期的定義、組成和作用的詳細(xì)解析。
    的頭像 發(fā)表于 09-26 15:32 ?1903次閱讀

    CPU故障現(xiàn)象有哪些

    CPU作為計算機(jī)系統(tǒng)的核心部件,其穩(wěn)定性和性能直接影響到整個計算機(jī)系統(tǒng)的運(yùn)行。當(dāng)CPU出現(xiàn)故障時,會表現(xiàn)出多種不同的現(xiàn)象。以下是對CPU故障現(xiàn)象的詳細(xì)解析,包括常見的故障類型、具體表現(xiàn)
    的頭像 發(fā)表于 09-10 11:46 ?8639次閱讀

    什么是CPU緩存?它有哪些作用?

    CPU緩存(Cache Memory)是計算機(jī)系統(tǒng)中一個至關(guān)重要的組成部分,位于CPU與內(nèi)存之間,作為兩者之間的臨時存儲器。CPU緩存的主要作用是減少
    的頭像 發(fā)表于 08-22 14:54 ?6165次閱讀

    JAVA應(yīng)用CPU跳點自動DUMP工具

    背景 在做系統(tǒng)監(jiān)控時,CPU的使用率是一個關(guān)鍵的指標(biāo),反映了系統(tǒng)的性能穩(wěn)定性以及是否存在異常情況,能幫助我們了解系統(tǒng)的負(fù)載情況。通過監(jiān)控CPU使用率,可以判斷系統(tǒng)是否正常運(yùn)行或者是否
    的頭像 發(fā)表于 08-05 17:48 ?762次閱讀