如何理解Linux中斷處理

2021-10-19 06:58:08 字數 1244 閱讀 3495

中斷是一種非同步事件的處理機制,可以提高系統的併發處理能力。為了減少對正常程序排程的影響,中斷處理程式需要盡可能快的執行,為》 了解決中斷程式執行過長和中斷丟失的問題,linux將中斷處理過程分成了兩個階段,即上半部與下半部。

上半部

proc/softirqs提供了軟中斷的運**況

proc/interrupts提供了硬中斷的運**況

需要注意以下兩點:

要注意軟中斷的型別,即第一列

要注意同一軟中斷在不同cpu上的分布情況,正常情況下同一種中斷在不同cpu上的累計次數差不多

# 每個tasklet只執行一次就會結束,並且只在呼叫它的函式所在的cpu上執行,因此會導致排程不均衡,不能在多個cpu上並行而帶來效能限制

➜ ~ cat /proc/softirqs

cpu0 cpu1 cpu2 cpu3 cpu4 cpu5 cpu6 cpu7

hi:00

0221

240timer:

154534

141883

143273

140968

146031

142005

155169

141926

net_tx:71

33117410

net_rx:

560773

848805

520878

975652

block:00

0000

00irq_poll:00

0000

00tasklet:

21026

6983

40525

257380

sched:

182731

138472

129632

121712

129113

124541

136262

123510

hrtimer:00

0000

00rcu:

113499

106495

108597

104906

109033

106882

112750

106392

Linux如何處理共享中斷

linux可以讓多個裝置共享乙個中斷號,而且共享同一中斷的中斷處理程式形成乙個鍊錶,核心對每個中斷處理程式都要執行,那麼,沒有產生中斷的裝置本 該靠邊站的,它的中斷處理程式也被執行了?到底是怎麼會事?實際上 共享的處理程式與非共享的處理程式在註冊和執行方式上比較相似,但差異主要有以下三處 reque...

linux 中斷理解

1 程序 執行緒只針對的是應用層,而核心呼叫 驅動沒有這種概念,呼叫的都是核心呼叫裡相同的函式或變數,所以應用層多個應用操作同個硬體時,特別是要加互斥操作,8250通過cs針腳決定傳送資料給哪個串列埠 2 傳送 接收的解決併發操作,主要防止重複呼叫該函式,等待函式的硬體還沒操作完才允許再呼叫,接收一...

Linux中斷處理

裝置管理過程中,中斷號的申請是乙個非常重要的操作。當裝置發出中斷之後,硬體裝置根據intel cpu的通用處理過程,跳轉到了該中斷號對應的中斷相應函式處。在linux作業系統中,必定要跳到do irq函式處。在do irq 函式中,進行了一部分公共的中斷響應處理之後,根據已經入棧了的中斷號查詢裝置中...