linux作業系統中斷 異常和系統呼叫

2021-08-20 19:01:53 字數 1820 閱讀 2294

中斷、異常和系統呼叫是作業系統中十分重要的概念,在這裡略作介紹,當作乙個複習。

首先,中斷和異常的聯絡是十分緊密的,廣義的中斷既包含中斷也包含異常。

中斷(廣義):會改變處理器執行指令的順序,通常與cpu晶元內部或外部硬體電路產生的電訊號相對應,廣義的中斷包括以下兩類:

1.來自cpu外部的中斷稱為外部中斷,比如鍵盤事件、滑鼠事件等。按照是否導致宕機來劃分可細分為可遮蔽中斷和不可遮蔽中斷。

2.來自cpu內部的中斷稱為內部中斷,比如除以0錯誤等。按照是否正常來劃分,可分為軟中斷和異常。

而我們常提及的系統呼叫則是由乙個int 0x80的軟中斷而陷入核心當中,故系統呼叫屬於軟中斷的一種(當然這裡很多人有不同的說法,也不必過於糾結)。

下面介紹中斷的具體知識:

1.外部中斷

外部中斷通過兩根線訊號線來通知cpu,這兩根線分別為intr和nmi,intr是用來傳輸不影響系統執行的中斷訊號,比如硬碟、網絡卡等發出的訊號,這類訊號由於忽略了也不會導致嚴重的後果而屬於可遮蔽中斷,nmi則是用來傳輸表示發生嚴重性錯誤、會影響系統執行的中斷,這類中斷由於不進行出來的話可能計算機就宕機了,必須立即處理而屬於不可遮蔽中斷。

2.內部中斷

2.1軟中斷

常見的軟中斷就是系統呼叫了,格式是 "int + 8位立即數",相信寫彙編的朋友對此比較熟 悉,更多的軟中斷這裡就不介紹了。

2.2異常

異常主要是程式執行過程中出現的執行錯誤,比如cpu發現除法中的除數為0,更多的知識在這裡也不再介紹。

3.中斷描述符表

在中斷系統中有兩個名字很相像的結構,就是中斷描述符表和中斷描述符陣列。這裡我們先說說中斷描述符表。​

中斷描述符表是保護模式下儲存中斷處理程式的入口(如果是在實模式下則稱為中斷向量表)。乙個系統中的中斷和異常加起來一共是256個,它們以向量的形式儲存在中斷描述符表中,每乙個向量是8位元組(整個表大小就是8x256=2048位元組),其主要儲存著許可權位和向量對應的中斷或異常處理程式的入口位址,在執行中斷之前,必須初始化idt(中斷描述符表),當然一般是在系統啟動時即初始化。而一般的,linux會將中斷描述符表中的0~31用於非遮蔽中斷和異常,其他的中斷用於32~255之間。這個中斷描述符表的基位址儲存在乙個特定的叫idtr的暫存器中。

intel把中斷描述符分三類:任務門、中斷門、陷阱門,而linux則分成五類:

1.中斷門:intel的中斷門,dpl = 0,描述中斷處理程式

2.系統門:intel的陷阱門,dpl = 3,用於系統呼叫

3.系統中斷門:intel的中斷門,dpl = 3,能夠被使用者程序訪問的陷阱門

4.陷阱門:intel陷阱門,dpl = 0,大部分的異常處理

5.任務門:intel任務門,dpl = 0,對"double fault"異常處理

如果產生的廣義中斷是異常,以系統呼叫為例,根據eax暫存器中存放的子功能號以及實現建立好的子功能表找到對應的服務程式。

而如果產生的是狹義的中斷的話則有些麻煩。

狹義中斷的處理過程:

能夠發出中斷請求的硬體裝置控制器都有一條稱為irq(interrupt request)的輸出線。所有的irq線都與乙個中斷控制器的輸入引腳相連,中斷控制器與cpu的intr引腳相連,各硬體通過此來提出中斷服務請求。而每個能夠產生中斷的裝置或者模組都會在核心中註冊乙個中斷處理程式,當產生中斷時,根據中斷向量找到中斷描述符,而中斷描述符這個結構中包含中斷處理程式,通過此可以執行中斷處理程式,在中斷處理程式中,首先會儲存中斷向量號和上下文,之後執行中斷線對應的中斷服務例程。

具體過程如下:

作業系統 中斷和異常

中斷是為了實現多道程式併發執行而引入的一種技術 當中斷發生時,cpu立即進入核心態 當中斷發生後,當前執行的程序暫停執行,並由作業系統核心對中斷進行處理 對於不同的中斷訊號,會進行不同的處理 發生了中斷,就意味著需要作業系統介入,開展管理工作。由於作業系統的管理工作 比如程序切換 分配i 0裝置等 ...

作業系統中斷和異常

1.1 中斷機制的誕生早期的計算機 只能序列執行,系統資源利用率低。為了解決資源利用率低的問題,人們發明了作業系統 作為計算機的管理者 引入中斷機制,實現了多道程式的併發執行。中斷的概念和作用 本質 發生中斷就意味著需要作業系統介入,開展管理工作。由於作業系統的管理工作 比如程序切換 分配i o裝置...

中斷和異常(作業系統5)

在本篇中,你將掌握 本質 發生中斷就意味著需要作業系統介入,開展管理工作 讓我們來看乙個具體的三個程序的例子 程序1在使用者態下進行執行 cpu收到計時部件發出的中斷訊號,切換為核心態對中斷進行處理 作業系統核心負責對中斷訊號進行處理 程序1的時間片已用完,換程序2執行 程序2在使用者態下進行執行 ...