local_irq_save和 local_irq_disable
生活随笔
收集整理的這篇文章主要介紹了
local_irq_save和 local_irq_disable
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?
1. 關(guān)中斷 可以通過(guò)下面兩個(gè)函數(shù)中的其中任何一個(gè)關(guān)閉當(dāng)前處理器上的所有中斷處理,這兩個(gè)函數(shù)定義在 <asm/system.h>中: void local_irq_save(unsigned long flags); void local_irq_disable(void); local_irq_save的調(diào)用把當(dāng)前的中斷狀態(tài)(開或關(guān))保存到flags中,然后禁用當(dāng)前處理器上的中斷。注意, flags 被直接傳遞, 而不是通過(guò)指針來(lái)傳遞,這是由于local_irq_save被實(shí)現(xiàn)為宏。 local_irq_disable不保存狀態(tài)而關(guān)閉本地處理器上的中斷發(fā)送; 只有我們知道中斷并未在其他地方被禁用的情況下,才能使用這個(gè)版本。 2. 開中斷 可通過(guò)如下函數(shù)打開中斷: void local_irq_restore(unsigned long flags); void local_irq_enable(void); local_irq_restore將保存的flags狀態(tài)值恢復(fù)(即local_irq_save的入?yún)lag), 恢復(fù)之前的狀態(tài)(開或關(guān))。 local_irq_enable則無(wú)條件打開中斷。 在一個(gè)關(guān)閉中斷的環(huán)境中調(diào)用local_irq_disable和local_irq_enable后會(huì)破壞之前的中斷響應(yīng)狀態(tài)。盡管調(diào)用local_irq_disable前是關(guān)中斷的環(huán)境,但是在調(diào)用local_irq_enable后卻變成開中斷,這顯然不是我們希望的。 調(diào)用local_irq_restore后不一定會(huì)開啟中斷,只會(huì)恢復(fù)調(diào)用local_irq_save之前的中斷狀態(tài),如果調(diào)用local_irq_save之前是開中斷,那么就打開中斷;如果調(diào)用local_irq_save之前是關(guān)中斷,那么就關(guān)閉中斷。 所以local_irq_save和local_irq_restore會(huì)更安全。 沒(méi)有方法全局禁用整個(gè)系統(tǒng)的所有中斷。 內(nèi)核開發(fā)者認(rèn)為關(guān)閉所有中斷的代價(jià)太高,因此沒(méi)有必要提供這個(gè)能力。 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的local_irq_save和 local_irq_disable的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 堡垒之夜在哪玩(《堡垒之夜》)
- 下一篇: 怎么把照片背景换成红色(word 轻松2