當前位置:首頁 » 操作系統 » linux中斷處理

linux中斷處理

發布時間: 2022-04-29 10:20:51

linux中斷的下半部機制有哪些

一、中斷處理為什麼要下半部?Linux在中斷處理中間中斷處理分了上半部和下半部,目的就是提高系統的響應能力和並發能力。通俗一點來講:當一個中斷產生,調用該中斷對應的處理程序(上半部)然後告訴系統,對應的後半部可以執行了。然後中斷處理程序就返回,下半部會在合適的時機有系統調用。這樣一來就大大的減少了中斷處理所需要的時間。

二、那些工作應該放在上半部,那些應該放在下半部?
沒有嚴格的規則,只有一些提示:
1、對時間非常敏感,放在上半部。
2、與硬體相關的,放在上半部。
3、不能被其他中斷打斷的工作,放在上半部。
以上三點之外的,考慮放在下半部。

三、下半部機制在Linux中是怎麼實現的?
下半部在Linux中有以下實現機制:
1、BH(在2.5中刪除)
2、任務隊列(task queue,在2.5刪除)
3、軟中斷(softirq,2.3開始。本文重點)
4、tasklet(2.3開始)
5、工作隊列(work queue,2.5開始)

四、軟中斷是怎麼實現的(以下代碼出自2.6.32)?
軟中斷不會搶占另外一個軟中斷,唯一可以搶占軟中斷的是中斷處理程序。
軟中斷可以在不同CPU上並發執行(哪怕是同一個軟中斷)

1、軟中斷是編譯期間靜態分配的,定義如下:
struct softirq_action { void (*action)(struct softirq_action *); };

/*
* PLEASE, avoid to allocate new softirqs, if you need not _really_ high
* frequency threaded job scheling. For almost all the purposes
* tasklets are more than enough. F.e. all serial device BHs et
* al. should be converted to tasklets, not to softirqs.
*/
enum {
HI_SOFTIRQ=0,
TIMER_SOFTIRQ,
NET_TX_SOFTIRQ,
NET_RX_SOFTIRQ,
BLOCK_SOFTIRQ,
BLOCK_IOPOLL_SOFTIRQ,
TASKLET_SOFTIRQ,
SCHED_SOFTIRQ,
HRTIMER_SOFTIRQ,
RCU_SOFTIRQ, /* Preferable RCU should always be the last softirq */
NR_SOFTIRQS

② linux的中斷處理函數要滿足什麼特點

中斷處理程序不可以有入口參數或者返回值,interrupt將函數修飾為中斷函數,函數經過interrupt修飾後,程序員只編寫中斷服務程序的主體部分,中斷服務程序中的保護現場前綴段和恢復現場的後綴段,均由編譯程序完成。另外,編譯程序還將ret指令改成reti指令。中斷函數的最大特點是返回類型和參數均必須為void。

③ Linux幾種中斷信號的區別:HUP,INT,KILL,TERM,TSTP

Linux的HUP,INT,KILL,TERM,TSTP中斷信號區別為:鍵入不同、對應操作不同、啟用不同。

一、鍵入不同

1、HUP中斷信號:HUP中斷信號是當用戶鍵入<Ctrl+X>時由終端驅動程序發送的信號。

2、INT中斷信號:INT中斷信號是當用戶鍵入<Ctrl+I>時由終端驅動程序發送的信號。

3、KILL中斷信號:KILL中斷信號是當用戶鍵入<Ctrl+Z>時由終端驅動程序發送的信號。

4、TERM中斷信號:TERM中斷信號是當用戶鍵入<Ctrl+>時由終端驅動程序發送的信號。

5、TSTP中斷信號:TSTP中斷信號是當用戶鍵入<Ctrl+T>時由終端驅動程序發送的信號。二、對應操作不同

1、HUP中斷信號:HUP中斷信號的對應操作為讓進程掛起,睡眠。

2、INT中斷信號:INT中斷信號的對應操作為正常關閉所有進程。

3、KILL中斷信號:KILL中斷信號的對應操作為強制關閉所有進程。

4、TERM中斷信號:TERM中斷信號的對應操作為正常的退出進程。

5、TSTP中斷信號:TSTP中斷信號的對應操作為暫時停用進程。

三、啟用不同

1、HUP中斷信號:HUP中斷信號發送後,可以重新被用戶再次輸入恢復啟用進程。

2、INT中斷信號:INT中斷信號發送後,不可以重新被用戶再次輸入恢復啟用進程。

3、KILL中斷信號:KILL中斷信號發送後,不可以重新被用戶再次輸入恢復啟用進程。

4、TERM中斷信號:TERM中斷信號發送後,可以重新被用戶再次輸入啟用進程。

5、TSTP中斷信號:TSTP中斷信號發送後,可以重新被用戶再次輸入繼續使用進程。

④ linux中斷的問題

不會阻塞中斷處理函數,因為disable_irq_nosync只是屏蔽中斷觸發,而不是屏蔽中斷處理函數,
一般中斷分為上半部和下半部,中斷處理函數是在下半部,中斷屏蔽只是在上半部;你應該先了解中斷原理在來看代碼,你應該先看一下《深入理解linux內核》這本書的中斷部分

⑤ linux中斷處理程序使用的堆棧是內核的堆棧嗎,在哪裡

當然是,進程生成時,會被分配一個task_struct 結構(常說的進程式控制制塊),2.4內核中,在task_struct 結構體上面的7KB空間就是。加上task_struct結構本身(1KB),進程內核棧共8KB(兩個頁面 ),不會動態擴展,所以非常有限(你會見到內核代碼用"大塊"內存都會kmalloc申請的,就是這個原因)。2.6內核的沒注意,不知一樣否。詳見:《Linux內核源代碼情景分析(上)》267頁。
為什麼會在內核的原因是CPU的保護機制,中斷處理需要更高的許可權(可能執行硬體相關的操作),故要在0級,不會在用戶區的。

⑥ linux系統中的中斷指令是什麼

什麼是中斷
Linux 內核需要對連接到計算機上的所有硬體設備進行管理,毫無疑問這是它的份內事。如果要管理這些設備,首先得和它們互相通信才行,一般有兩種方案可實現這種功能:
輪詢(polling) 讓內核定期對設備的狀態進行查詢,然後做出相應的處理;中斷(interrupt) 讓硬體在需要的時候向內核發出信號(變內核主動為硬體主動)。
第一種方案會讓內核做不少的無用功,因為輪詢總會周期性的重復執行,大量地耗用 CPU 時間,因此效率及其低下,所以一般都是採用第二種方案 。
對於中斷的理解我們先看一個生活中常見的例子:QQ。第一種情況:你正在工作,然後你的好友突然給你發送了一個窗口抖動,打斷你正在進行的工作。第
二種情況:當然你有時候也會每隔 5 分鍾就去檢查一下 QQ
看有沒有好友找你,雖然這很浪費你的時間。在這里,一次窗口抖動就可以被相當於硬體的中斷,而你就相當於 CPU,你的工作就是 CPU
這在執行的進程。而定時查詢就被相當於 CPU 的輪詢。在這里可以看到:同樣作為 CPU 和硬體溝通的方式,中斷是硬體主動的方式,較輪詢(CPU
主動)更有效些,因為我們都不可能一直無聊到每隔幾分鍾就去查一遍好友列表。
CPU
有大量的工作需要處理,更不會做這些大量無用功。當然這只是一般情況下。好了,這里又有了一個問題,每個硬體設備都中斷,那麼如何區分不同硬體呢?不同設
備同時中斷如何知道哪個中斷是來自硬碟、哪個來自網卡呢?這個很容易,不是每個 QQ 號碼都不相同嗎?同樣的,系統上的每個硬體設備都會被分配一個
IRQ 號,通過這個唯一的 IRQ 號就能區別張三和李四了。
從物理學的角度看,中斷是一種電信號,由硬體設備產生,並直接送入中斷控制器(如
8259A)的輸入引腳上,然後再由中斷控制器向處理器發送相應的信號。處理器一經檢測到該信號,便中斷自己當前正在處理的工作,轉而去處理中斷。此後,
處理器會通知 OS 已經產生中斷。這樣,OS
就可以對這個中斷進行適當的處理。不同的設備對應的中斷不同,而每個中斷都通過一個唯一的數字標識,這些值通常被稱為中斷請求線。

⑦ linux內核在執行中斷處理時是關中斷的嗎

1、中斷處理程序與其他內核函數真正的區別在於,中斷處理程序是被內核調用來相應中斷的,而它們運行於中斷上下文(原子上下文)中,在該上下文中執行的代碼不可阻塞。中斷就是由硬體打斷操作系統。
2、異常與中斷不同,它在產生時必須考慮與處理器時鍾同步。異常被稱為同步中斷,例如:除0、缺頁異常、陷入內核(trap)引起系統調用處理程序異常。
3、不同的設備對應的中斷不同,而每個中斷都通過一個唯一的數字(中斷號)標識。
4、既想讓中斷處理程序運行得快,又想中斷處理程序完成的工作量多,為了在這兩個相悖的目標之間達到一種平衡,一般把中斷處理分為兩個部分。中斷處理程序是上半部(top half):接收到一個中斷,它就立刻開始執行,但只做有嚴格時限的工作,例如對接受的中斷進行應答或者復位硬體,這些工作都是在中斷被禁止的情況下完成的(上半部情況下,中斷被禁止);另一部分是下半部(bottom half):能夠被允許稍後完成的工作會推遲到下半部。

⑧ linux 在中斷處理時,要進去SVC模式,請問這到底是什麼原因

對ARM來說,當發生中斷的時候,CPU進入的是中斷mode, 只是Linux在SVC mode下處理中斷了. 當然,理論上來說,不在SVC下,而在 中斷mode下處理也可以。我猜想Linux這樣做的原因是,Linux要兼容絕大多數的ARCH,每一個ARCH相關的代碼都放在arch/目錄下,比如ARM是放在arch/arm下。所以,如果arm要是不利用現有Linux的框架,把絕大多數的代碼都放在arch/arm下(中斷處理的代碼也放在arch/arm下的irq mode中處理),那linux就非常臃腫。所以,arm Linux為了最大程度的利用Linux已有的架構,就放在SVC模式下處理了(Linux最早是在i386上開發的,i386隻利用了2個ring, 即,ring0 和 ring 3, ring 0,對應於ARM的svc mode)。 事實上,到了現在的ARMV8,AARCH64已經取消了這么多的MODE,而採取了4個Level, 分別是 0,1,2,3. 對於OS來說,支持0和1 兩個Level就可以了, Level 2 是用於虛擬化,Level 3 是用於monitor.

當fiq中斷發生的時候,也會進入FIQ mode, 只是 在ARM SOC中,很少有FIQ的外設。所以,Linux中,沒有對FIQ進行處理,但介面還是有的。

⑨ Linux下如何強制中斷一個程序的執行(利用按鍵,而不是kill命令)

Linux下強制中斷一個程序的執行,利用按鍵,而不是kill命令。

可嘗試以下方法:

1.CTRL + c中斷。

2.CTRL + z暫停放到後台。

3.CTRL + d保存退出。

熱點內容
為什麼堆配置打不過蘋果 發布:2024-10-05 01:22:11 瀏覽:623
垃圾緩存的英文 發布:2024-10-05 01:13:34 瀏覽:947
md5加密c實現 發布:2024-10-05 01:13:31 瀏覽:299
updatesql兩個表 發布:2024-10-05 01:13:30 瀏覽:4
趙南起韓國訪問 發布:2024-10-05 01:04:00 瀏覽:985
基於pid演算法 發布:2024-10-05 00:41:22 瀏覽:925
有什麼手機配置低的還好玩 發布:2024-10-05 00:40:23 瀏覽:669
redis資料庫查詢 發布:2024-10-05 00:27:43 瀏覽:946
如何消除安卓的彈窗 發布:2024-10-05 00:26:59 瀏覽:427
wget下載文件夾 發布:2024-10-05 00:26:22 瀏覽:44