首頁 >運維 >linux運維 >linux中什麼是中斷

linux中什麼是中斷

青灯夜游
青灯夜游原創
2023-04-20 16:34:492539瀏覽

在linux中,中斷是硬體在需要的時候向CPU發出訊號,CPU暫時停止正在進行的工作,來處理硬體請求的一種機制。當硬體忙碌的時候,CPU很可能會做許多無用功(每次輪詢都是跳過不處理);所以為了提高CPU和外圍硬體(硬碟,鍵盤,滑鼠等等)之間協同工作的效能,引入了中斷的機制。

linux中什麼是中斷

本教學操作環境:linux7.3系統、Dell G3電腦。

1、中斷定義

中斷是硬體在需要的時候向CPU發出訊號,CPU暫時停止正在進行的工作,來處理硬體請求的一種機制。

具體說:
中斷是指在CPU正常運作期間,由於內部和外部事件或由程式預先安排的事件引起的CPU暫時停止正在運行的程序,轉而為該內部或外部事件或預先安排的事件服務的程式中去,服務完畢後再返回去繼續執行被暫時中斷的程式。

1.1 背景(為什麼需要中斷)

1.沒有中斷的話,CPU和周邊設備之間協同工作/通訊可能只有輪詢這個方法:CPU定期檢查硬體狀態,需要處理時就處理,否則就跳過。
2.處理器的速度跟外圍的硬體設備不在一個數量級上,因此提供一種機制讓硬體在需要的時候向核心發出訊號。

輪詢的缺點/引入中斷機制:
當硬體忙碌的時候,CPU很可能會做許多無用功(每次輪詢都是跳過不處理)。
所以,為了提高CPU和周邊硬體(硬碟,鍵盤,滑鼠等等)之間協同工作的效能,引入了中斷的機制。

1.2 中斷與訊號

#
中断: 硬件/进程发,内核收
信号:内核发,进程收,或者进程发进程收

#1.3 中斷處理過程(參考CSAPP書籍)

中断是异步发生的,是来自处理器外部的I/O设备的信号的结果

1. 硬件中断不是由任何一条专门的指令造成的,从这个意义上来说它是异步的
2. 硬件中断的异常处理程序常常被称为中断处理程序(interrupt handler)
下圖概述了一個中斷的處理。

圖8.5

linux中什麼是中斷

I/O設備,例如絡適配器、磁碟控制器和定時器晶片,透過向處理器晶片上的一個管腳發出訊號,並將異常號放到系統匯流排上,來觸發中斷,這個異常號標示了造成中斷的設備。

在目前指令完成執行之前,處理器注意到中斷腳的電壓變高了,就從系統匯流排讀取異常號,然後呼叫適當的中斷處理程序。當處理程序返回時,它就將控制權傳回給下一條指令(也就是,如果沒有發生中斷,在控制流中會在當前指令之後的那條指令)。結果是程式繼續執行,就好像沒有發生過中斷一樣。

剩下的异常类型(陷阱、故障和终止)是同步发生的,是执行当前指令的结果
我们把这类指令叫做故障指令(faulting instruction)

1.4 中斷本質及處理機制/流程

中斷本質是一種特殊的電訊號

linux中什麼是中斷

處理過程:

中斷由硬體設備生成,並直接送入中斷控制器(簡單的電子晶片)的輸入引腳中,中斷控制器採用複用技術將多路中斷管線只透過一個和處理器連接的管線與處理器通訊。處理器一經偵測到此訊號,便中斷自己目前的工作轉而處理中斷。硬體設備產生中斷的時候並不考慮與處理器的時脈同步,即中斷隨時可以產生,因此核心隨時可能因為新到來的中斷而被打斷。

2、中斷類型(分類)

Linux中通常分為外部中斷(又叫硬體中斷)和內部中斷(又叫異常)。

2.1 同步中斷(異常/內部中斷)

同步中斷(異常/內部中斷):同步中斷由CPU本身產生,又稱為內部中斷或異常

2.1.1 同步中斷舉例:缺頁中斷

CPU在執行一條指令時,如果發現他要存取的頁(虛擬位址的頁)沒有在實體記憶體中,那麼停止該指令的執行,並產生一個頁不存在的異常

一個可執行檔可能很大,放在磁碟上,一次只將其中一部分讀進記憶體(cpu局部性原理),
當他要存取剩餘內容時,會產生缺頁中斷,這時候再去從磁碟上換進來

2.2 非同步中斷(中斷/外部中斷)

#非同步中斷(中斷/外部中斷):非同步中斷是由外部硬體設備產生,又稱為外部中斷或中斷

2.2.1 异步中断举例:网卡的工作原理

当网卡接受到数据包时,通知内核,触发中断,所谓的上半部就是,及时读取数据包到内存,防止因为延迟导致丢失,这是很急迫的工作。
读到内存后,对这些数据的处理不再紧迫,此时内核可以去执行中断前运行的程序,而对网络数据包的处理则交给下半部处理。

2.3 中断与异常的区别

异常与中断不同,中断是由硬件引起的;
异常则发生在编程失误而导致错误指令,或者在执行期间出现特殊情况必须要靠内核来处理的时候(比如缺页)。它在产生时必须考虑与处理器时钟同步,因此异常也称同步中断。

3、中断请求实现:上下半部机制

3.1 背景

中断处理程序运行需要快速执行(因为不可阻塞),同时要能完成尽可能多的工作,这里存在矛盾。

因此把中断处理切分为两个部分,上半部分(top half)接收到一个中断后立即执行,但是只做有严格时限的工作,例如对接收到的中断进行应答或复位硬件。能够被允许稍后完成的工作会推迟到下半部分(bottom half)去,此后在合适的时机下半部分会被中断执行,Linux提供了实现下半部分的各种机制。

优点:这种设计可以使系统处于中断屏蔽状态的时间尽可能的短,以此来提高系统的响应能力。

3.2 上半部:

中断处理程序是上半部——接受中断,他就立即开始执行,但只有做严格时限的工作。
上半部简单快速,执行时禁止一些或者全部中断。
工作内容:处理紧急功能,取寄存器状态。

3.3 下半部:

能够被允许稍后完成的工作会推迟到下半部去,此后,在合适的时机,下半部执行
工作内容:完成中断事件绝大多数任务。
下半部稍后执行,而且执行期间可以响应所有的中断。
下半部的实现有软中断实现, tasklet 实现和工作队列实现。

3.4 上下半部划分原则

1) 如果一个任务对时间非常敏感,将其放在中断处理程序中执行;
2) 如果一个任务和硬件有关,将其放在中断处理程序中执行;
3) 如果一个任务要保证不被其他中断打断,将其放在中断处理程序中执行;
4) 其他所有任务,考虑放置在下半部执行

3.5 举例子: 用网卡来解释一下这两半。

当网卡接受到数据包时,通知内核,触发中断,所谓的上半部就是,及时读取数据包到内存,防止因为延迟导致丢失,这是很急迫的工作。
读到内存后,对这些数据的处理不再紧迫,此时内核可以去执行中断前运行的程序,而对网络数据包的处理则交给下半部处理。

4、中断号

中断对应着一个中断号,内核通过这个中断号查找相应的中断服务程序。

每个中断都通过一个唯一的数字标志,这样操作系统才能够给不同的中断提供对应的中断处理程序。
这些中断值即中断请求线,例如IRQ 0是时钟中断、IRQ 1是键盘中断。对于连接在PCI总线上的设备而言,中断请求线是动态分配的。

5、中断上下文

中断服务程序不在进程上下文中执行,而是在一个与所有进程都无关的、专门的中断上下文中运行,以此保证中断服务程序能够在第一时间响应和处理中断请求,然后快速地退出。

处理器在任何指定时间点上的活动必然属于以下三种情况之一:

运行于用户空间,执行用户进程;
运行于内核空间,处于进程上下文,代表某个特定的进程执行;
			 (CPU空闲时,内核执行空进程)
运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断;

相关推荐:《Linux视频教程

以上是linux中什麼是中斷的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn