Linux核心實現中斷和中斷處理(一)
- Linux實現中斷處理
核心是怎麼知道應用程式要呼叫系統呼叫的呢?或者說應用程式怎麼通知系統核心自己需要執行一個系統呼叫,這是通過軟中斷實現的,通過引發一個異常來促使系統切換到核心態去執行異常處理程式
PS:什麼時候會從使用者態切換到核心態呢?1.中斷;2.陷阱;3.系統呼叫
中斷分為兩種,硬中斷和軟中斷;
在許多處理器體系結構處理異常和處理中斷的方式類似,為了助於理解,可以把異常想象成軟中斷,我們通常說的中斷是硬中斷,硬中斷是由硬體引起而不是軟體引起的
每一種中斷都有一個對應的中斷處理程式,如果一種中斷裝置可以產生多種中斷,那這個中斷裝置就有多箇中斷處理程式對應,而一箇中斷處理程式就是該裝置對應的裝置驅動程式中的一部分
我們想讓中斷處理程式執行的快,還想讓中斷處理程式多幹活,顯然是有衝突的,所以我們把中斷程式分為兩個部分,中斷處理程式是上半部分,能夠被允許稍後完成的工作會推遲到下半部去(注意!在執行中斷上半部分的時候,是不允許產生其他中斷的,所以設定標誌位IRQF_DISABLED )
舉個栗子:拿我們可愛的網路卡來說事情吧,例如網路卡從網上收集了很多資料包,於是我們的朋友網路卡君就通知核心,嘿,我這來了一批新貨,要看看麼,於是核心屁顛屁顛的去處理了(呼叫中斷處理程式)中斷開始執行,通知硬體開始拷貝資料(從網路卡到記憶體),這件事是很緊迫的,因為網路卡有一定的快取,超過快取這傢伙就不幹活了(丟棄資料包),為了壓榨網路卡(讓他好好幹活),核心必須儘快處理這件事情,而且這件事情是硬體相關的(就是和網路卡脫不了干係),沒了網路卡幹不了,不能延後,拷貝完這些資料包之後的事情就可以放到下部分了,於是核心忙完了,又去處理剛才被中斷的程式了
- 中斷處理程式標誌
IRQF_DISABLED——在執行當前中斷處理程式的時候,禁止所有其他的中斷(野蠻!!儘量給想要儘快執行的輕量級中斷使用)
IRQF_SAMPLE_RANDOM——表明這個裝置的中斷對核心熵池有貢獻
PS:核心熵池負責提供從各種隨機事件匯出真正的隨機數,就是說中斷啥時候來(隨機的),有個中斷產生速率(自然也隨機了),就拿去扔池 子裡產生隨機數用了。。。和中斷關係似乎不是很大
IRQF_TIMER——專門為系統定時器的中斷處理而準備的
IRQF_SHARED——共享中斷線,中斷線可以理解為中斷單獨對著的一個號,同時一個號可以對應多個終端
- 中斷和鎖之間不得不說的那些事兒
這裡簡單的把鎖分為兩類,自旋鎖和睡眠鎖(當然對應著很多具體的鎖),分為兩類是因為,自旋鎖是可以用於中斷(爭用該鎖會導致忙迴圈)的,但是擁有睡眠性質的鎖是不能用於中斷(爭用該鎖會導致睡眠),只能用於程式。我們之前說了,中斷處理程式的上半部分是很緊迫的,這麼緊迫的事情你怎麼可以去睡眠偷懶呢?!哪怕現在輪不到你,你也得給我等著!
為什麼不能讓中斷睡眠?因為睡眠是為了程式排程存在的,但是中斷處理程式一旦睡眠不僅沒有事件可以喚醒中斷處理程式,而且無法排程,因為程式有個程式號,但是中斷沒有,一旦當前的中斷處理睡眠了,沒有其他的東西會獲得處理器,而且中斷處理永遠不會被喚醒,那麼系統就會癱瘓
一定要在獲取鎖之前,禁止本地中斷!!!為啥呢?見下圖
欲知下半部分如何,且聽下回分解
相關文章
- 中斷和中斷處理程式
- Linux 核心處理中斷全過程解析Linux
- Linux核心軟中斷Linux
- 中斷處理和GIC-V2
- Linux系統中對中斷的處理(學習筆記)Linux筆記
- LINUX中斷--申請中斷和解除安裝中斷Linux
- 【原創】Linux中斷子系統(二)-通用框架處理Linux框架
- Linux(核心剖析):19---中斷總體概述Linux
- Linux系統程式設計之訊號中斷處理(下)Linux程式設計
- Linux系統程式設計之訊號中斷處理(上)Linux程式設計
- Linux核心中斷Linux
- Linux中斷申請Linux
- linux中斷 簡介Linux
- react專案中不同寬度斷點處理React斷點
- PCIe掃盲——PCI匯流排的中斷和錯誤處理
- 雲桌面使用中經常出現的一些問題該如何去判斷和處理
- Linux中斷子系統Linux
- 【原創】Linux中斷子系統(一)-中斷控制器及驅動分析Linux
- ORACLE 11G DATAGUARD 日誌中斷處理方案Oracle
- 異常和中斷
- Linux核心筆記009 - 中斷、異常、陷阱、Bottom half、訊號Linux筆記
- Linux程式上下文和中斷上下文核心空間和使用者空間Linux
- 中斷
- 作業系統--怎麼實現中斷作業系統
- js函式中的if判斷和a==b判斷JS函式
- 文書處理技術:WORD也在不斷變化中
- 【原創】Linux中斷子系統(三)-softirq和taskletLinux
- Linux的中斷可以巢狀嗎?Linux巢狀
- 硬中斷,軟中斷,訊號,異常
- Linux常用命令(不斷更新中)Linux
- Linux 效能優化之 CPU 篇 ----- Linux 軟中斷Linux優化
- Linux效能優化實戰CPU篇之軟中斷(三)Linux優化
- 446_PIC18F系列MCU的中斷實現
- 原來定時器中斷是個偽中斷定時器
- minos 2.4 中斷虛擬化——中斷子系統
- Ruby 中的語句中斷和返回
- Envoy熔斷限流實踐(一)基於Rainbond外掛實現熔斷AI
- 缺頁中斷
- baremetal GPIO中斷REM