在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

當 CPU 空閑時它都在做什么?

5RJg_mcuworld ? 來源:未知 ? 作者:楊鑫 ? 2018-03-06 15:43 ? 次閱讀

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

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

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

因此,保持這種設計的連續性,并領先于那些邪惡計劃一步,操作系統開發者創建了一個空閑任務,當沒有其它任務可做時就調度它去運行。我們可以在 Linux 的 引導過程 中看到,這個空閑任務就是進程 0,它是由計算機打開電源時運行的第一個指令直接派生出來的。它在 rest_init 中初始化,在 init_idle_bootup_task 中初始化空閑調度類scheduling class。

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

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

cpu_idle_loop

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

native_halt

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

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

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

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

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

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

在這里的解決方案是 動態滴答,當 CPU 處于空閑狀態時,定時器中斷被 暫停或重計劃,直到內核知道將有事情要做時(例如,一個進程的定時器可能要在 5 秒內過期,因此,我們不能再繼續睡眠了),定時器中斷才會重新發出。這也被稱為無滴答模式。

最后,假設在一個系統中你有一個活動進程,例如,一個長時間運行的 CPU 密集型任務。那樣幾乎就和一個空閑系統是相同的:這些示意圖仍然是相同的,只是將空閑任務替換為這個進程,并且相應的描述也是準確的。在那種情況下,每 4 毫秒去中斷一次任務仍然是無意義的:它只是操作系統的性能抖動,甚至會使你的工作變得更慢而已。Linux 也可以在這種單一進程的場景中停止這種固定速率的滴答,這被稱為 自適應滴答 模式。最終,這種固定速率的滴答可能會 完全消失。

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11015

    瀏覽量

    215417

原文標題:當 CPU 空閑時它都在做什么?

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

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

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

    ADS1298讀取數據時DRDY信號線的疑問求解

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

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

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

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

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

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

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

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

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

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

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

    CPU時鐘周期的組成和作用

    CPU時鐘周期是計算機體系結構中一個至關重要的概念,直接關聯到CPU的運行速度和性能。以下是對CPU時鐘周期的定義、組成和作用的詳細解析。
    的頭像 發表于 09-26 15:32 ?1455次閱讀

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

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

    JAVA應用CPU跳點自動DUMP工具

    背景 在做系統監控時,CPU的使用率是一個關鍵的指標,反映了系統的性能穩定性以及是否存在異常情況,能幫助我們了解系統的負載情況。通過監控CPU使用率,可以判斷系統是否正常運行或者是否
    的頭像 發表于 08-05 17:48 ?671次閱讀

    ESP8266 UART0交換到GPIO13/15后,重啟進不去系統怎么解決?

    目前使用一個 8266 的 GPIO 13 和 15 連接到另外一個芯片的 TX 和 RX 由于另外一個芯片的 RX 和 TX 在空閑時是高電平的狀態 8266 重啟的時候,就會檢測到 15
    發表于 07-12 06:26

    如何將tc275的cpu0設置為空閑模式?

    如何將 tc275 的 cpu0 設置為空閑模式? 我試過英飛凌示例,但不起作用。
    發表于 07-04 07:12

    請問如何實現ESP32 uart的接收空閑中斷?

    我當前使用的是ESP-IDF.uart接收不定長的數據時,希望通過空閑中斷或者事件的方式來結束一幀uart數據的接收。我看了
    發表于 06-05 07:55

    鴻蒙開發接口資源調度:【@ohos.workScheduler (延遲任務調度)】

    開發者在開發應用時,通過調用延遲任務注冊接口,注冊對實時性要求不高的延遲任務,該任務默認由系統安排,在系統空閑時根據性能、功耗、熱等情況進行調度執行。
    的頭像 發表于 06-04 10:01 ?1213次閱讀
    鴻蒙開發接口資源調度:【@ohos.workScheduler (延遲任務調度)】

    串口的空閑字符是用來激活空閑中斷的嗎?

    網上搜到的內容也比較少,這個東西不知道怎么用,最近學串口,所以想要了解一下, 在手冊中是這么寫的: \" 空閑字符可理解為整個幀周期內電平均為“ 1”(停止位的電平也是“ 1”),該字符
    發表于 05-11 07:28
    主站蜘蛛池模板: 大色综合色综合资源站 | 国模私拍福利一区二区 | 亚洲成人自拍 | 国产黄色大片又色又爽 | 窝窝午夜看片 | 亚洲成a人一区二区三区 | 特级毛片免费视频播放 | 激情综合婷婷 | 国模大尺度在线 | 国产精品午夜久久久久久99热 | 日本在线一区 | 免费国产成高清人在线视频 | 老色鬼久久综合第一 | 天天干天天射天天舔 | 天天插天天色 | 国产精品久久久久久久久ktv | 亚洲伊人99综合网 | 亚洲一区二区视频 | 九九国产精品 | 亚洲精品www| 毛片网站网址 | 高清午夜线观看免费 | 亚洲青草视频 | 天天射天天干天天色 | 色婷婷基地 | 1000又爽又黄禁片在线久 | 奇米影视99 | 日本资源在线观看 | 在线观看视频你懂的 | www.黄色免费 | 97影院理论| 羞羞答答91麻豆网站入口 | 免费看又爽又黄禁片视频1000 | 国产乱理论片在线观看理论 | 国产精品va在线观看不 | 视频网站黄色 | 福利在线播放 | 国产免费一级高清淫日本片 | 国产亚洲人成网站天堂岛 | 婷婷丁香色综合狠狠色 | 美女在线看永久免费网址 |