今天來看兩個特殊的指令,WFI(Wait For Interrupt)和WFE(Wait For Event)。這兩條指令的語法非常簡單,不需要帶任何參數(shù)。如果大家讀過前面文章,肯定對中斷(interrupt)不陌生。至于事件(event),與中斷有點像,不同的是處理器對二者的處理方式不一樣??梢韵葘⑹录斫獬商厥獾闹袛唷?/p>
先看WFI,首先,我們研究一下ARM處理器進入低功耗狀態(tài)的機制。當(dāng)一個處理器核的工作負(fù)載不高時,可以通過降壓降頻(DVFS)的方式來讓處理器運行在較低的頻率,從而降低整個芯片的功耗。如果處理器的沒有工作負(fù)載,完全空閑下來,這時就需要其它方法讓處理器進入更低的功耗模式。如果大家對ACPI有一些了解,就知道其中定義的“睡眠(sleep)”模式就有好幾種,每種模式對應(yīng)的電源和時鐘狀態(tài)不同。處理器芯片進入空閑狀態(tài)的大體順序應(yīng)該是這樣的,應(yīng)用處理器(Application Processor)判斷是否具備進入空閑狀態(tài)的條件,如果滿足條件則進行一些準(zhǔn)備工作;發(fā)消息給系統(tǒng)控制器(System control processor);等待全部操作執(zhí)行完;執(zhí)行WFI進入空閑狀態(tài);等待系統(tǒng)控制器做出下一步動作,或者關(guān)閉時鐘,或者關(guān)閉電源等等。
從WFI這個名字可以看出,喚醒(wake up)處理器的一個機制就是發(fā)送中斷給處理器。與A系列處理器搭配的中斷處理器是GIC,這在前面介紹過。GIC接到中斷后,產(chǎn)生喚醒信號給系統(tǒng)控制器或者是電源管理模塊(PowerManagement Unit),系統(tǒng)控制器或者PMU根據(jù)處理器核的狀態(tài)以及系統(tǒng)狀態(tài),決定下一步的動作。如果喚醒信號是給系統(tǒng)控制器,則可以考慮接到系統(tǒng)控制器的中斷處理接口,比如,采用M系列作為系統(tǒng)控制器時,可以接到NVIC(Nested Vectored Interrupt Controller)。喚醒機制要根據(jù)具體情況具體分析,法無定法。
WFE與WFI很像,只不過等待的是事件,也就是說系統(tǒng)可以通過發(fā)送事件來喚醒應(yīng)用處理器。WFE的一個典型應(yīng)用場景是自旋鎖。當(dāng)多個應(yīng)用處理器競爭同一個臨界區(qū)資源時,只有一個應(yīng)用處理器能獲得權(quán)限,其它的應(yīng)用處理器需要等待臨界區(qū)資源被釋放,也就是這些應(yīng)用處理器“自旋”。當(dāng)然操作系統(tǒng)也可以采取其它的處理方式,比如把時間片分給其它的應(yīng)用程序,不過這不在今天的研究范疇。顯然,應(yīng)用處理器簡單的“自旋”對于功耗不友好,一個解決辦法就是讓這些“自旋”的應(yīng)用處理器進入一種低功耗模式,獲得臨界區(qū)資源的應(yīng)用處理器在完成當(dāng)前進程后,喚醒這些應(yīng)用處理器去重新競爭臨界區(qū)資源。這時的喚醒機制不宜采取中斷方式,因為效率不高。ARM中采用的是事件方式,即通過執(zhí)行SEV(Send Event)指令向其它應(yīng)用處理器發(fā)送喚醒的事件。
WFI和WFE還有一種變體形式,WFIT和WFET,其中的T是超時(timeout)的意思,也就是說,喚醒機制多了一種超時的方式,沒有中斷或者事件產(chǎn)生,時間到了也會發(fā)出喚醒。
審核編輯:湯梓紅
-
處理器
+關(guān)注
關(guān)注
68文章
19038瀏覽量
228457 -
指令
+關(guān)注
關(guān)注
1文章
604瀏覽量
35582 -
中斷
+關(guān)注
關(guān)注
5文章
894瀏覽量
41321 -
wfi
+關(guān)注
關(guān)注
0文章
2瀏覽量
1452
原文標(biāo)題:ARM系列 -- WFI和WFE
文章出處:【微信號:Ithingedu,微信公眾號:安芯教育科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論