關於中斷的一些整理

2021-08-03 18:54:05 字數 3146 閱讀 5355

中斷裝置和中斷處理程式統稱為中斷系統。中斷系統是計算機的重要組成部分。實時控制、故障自動處理、計算機與外圍裝置間的資料傳送往往採用中斷系統。中斷系統的應用大大提高了計算機效率。

不同的計算機其硬體結構和軟體指令是不完全相同的,因此,中斷系統也是不相同的。計算機的中斷系統能夠加強cpu對多工事件的處理能力。中斷機制是現代計算機系統中的基礎設施之一,它在系統中起著通訊網路作用,以協調系統對各種外部事件的響應和處理。中斷是實現多道程式設計的必要條件。中斷是cpu對系統發生的某個事件作出的一種反應。 引起中斷的事件稱為中斷源。中斷源向cpu提出處理的請求稱為中斷請求。發生中斷時被打斷程式的暫停點成為斷點。cpu暫停現行程式而轉為響應中斷請求的過程稱為中斷響應。處理中斷源的程式稱為中斷處理程式。cpu執行有關的中斷處理程式稱為中斷處理。而返回斷點的過程稱為中斷返回。中斷的實現實行軟體和硬體綜合完成,硬體部分叫做硬體裝置,軟體部分成為軟體處理程式

中斷:cpu對系統發生的某個事件作出的一種反應

中斷源:引起中斷的事件

斷點:發生中斷時被打斷程式的暫停點

中斷響應:cpu暫停現行程式而轉為響應中斷請求的過程

中斷處理程式:處理中斷源的程式

中斷處理:cpu執行有關的中斷處理程式

中斷返回:返回斷點的過程

硬體裝置 :中斷的實現實行軟體和硬體綜合完成,其中的硬體部分

軟體處理程式:中斷的實現實行軟體和硬體綜合完成,其中的軟體部分

中斷、異常和系統呼叫

所謂中斷是指cpu對系統發生的某個事件做出的一種反應,cpu暫停正在執行的程式,保留現場後自動地轉去執行相應的處理程式,處理完該事件後再返回斷點繼續執行被「打斷」的程式。

中斷可分為三類,第一類是由cpu外部引起的,稱作中斷,如i/o中斷、時鐘中斷、控制台中斷等。第二類是來自cpu的內部事件或程式執行中的事件引起的過程,稱作異常,如由於cpu本身故障(電源電壓低於105v或頻率在47~63hz之外)、程式故障(非法操作碼、位址越界、浮點溢位等)等引起的過程。

第三類由於在程式中使用了請求系統服務的系統呼叫而引發的過程,稱作「陷入」(trap,或者陷阱)。前兩類通常都稱作中斷,它們的產生往往是無意、被動的,而陷入是有意和主動的。

1.中斷處理

中斷處理一般分為中斷響應中斷處理兩個步驟。中斷響應由硬體實施,中斷處理主要由軟體實施。

(1)中斷響應

對中斷請求的整個處理過程是由硬體和軟體結合起來而形成的一套中斷機構實施的。發生中斷時,cpu暫停執行當前的程式,而轉去處理中斷。這個由硬體對中斷請求作出反應的過程,稱為中斷響應。一般說來,中斷響應順序執行下述三步動作:

◆中止當前程式的執行;

◆儲存原程式的斷點資訊(主要是程式計數器pc和程式狀態暫存器ps的內容);

◆從中斷控制器取出中斷向量,轉到相應的處理程式。

通常cpu在執行完一條指令後,立即檢查有無中斷請求,如果有,則立即做出響應。

當發生中斷時,系統作出響應,不管它們是來自硬體(如來自時鐘或者外部裝置)、程式性中斷(執行指令導致「軟體中斷」—software interrupts),或者來自意外事件(如訪問頁面不在記憶體)。

如果當前cpu的執行優先順序低於中斷的優先順序,那麼它就中止對當前程式下條指令的執行,接受該中斷,並提公升處理機的執行級別(一般與中斷優先順序相同),以便在cpu處理當前中斷時,能遮蔽其它同級的或低階的中斷,然後儲存斷點現場資訊,通過取得的中斷向量轉到相應的中斷處理程式的入口。

(2)中斷處理

cpu從中斷控制器取得中斷向量,然後根據具體的中斷向量從中斷向量表idt中找到相應的表項,該表項應是乙個中斷門。於是,cpu就根據中斷門的設定而到達了該通道的總服務程式的入口。

核心對中斷處理的順序主要由以下動作完成:

◆儲存正在執行程序的各暫存器的內容,把它們放入核心棧的新幀麵中。

◆確定「中斷源」或核查中斷發生,識別中斷的型別(如時鐘中斷或盤中斷)和中斷的裝置號(如哪個磁碟引起的中斷)。系統接到中斷後,就從機器那裡得到乙個中斷號,它是檢索中斷向量表的位移。中斷向量因機器而異,但通常都包括相應中斷處理程式入口位址和中斷處理時處理機的狀態字。

◆核心呼叫中斷處理程式,對中斷進行處理。

◆中斷處理完成並返回。中斷處理程式執行完以後,核心便執行與機器相關的特定指令序列,恢復中斷時暫存器內容和執行核心棧退棧,程序回到使用者態。如果設定了重排程標誌,則在本程序返回到使用者態時做程序排程。

2.系統呼叫

在unix/linux系統中,系統呼叫像普通c函式呼叫那樣出現在c程式中。但是一般的函式呼叫序列並不能把程序的狀態從使用者態變為核心態,而系統呼叫卻可以做到。

c語言編譯程式利用乙個預先確定的函式庫(一般稱為c庫),其中有各系統呼叫的名字。c庫中的函式都專門使用一條指令,把程序的執行狀態改為核心態。linux的系統呼叫是通過中斷指令「int 0x80」實現的。

每個系統呼叫都有惟一的號碼,稱作系統呼叫號。所有的系統呼叫都集中在系統呼叫入口表中統一管理。

系統呼叫入口表是乙個函式指標陣列,以系統呼叫號為下標在該陣列中找到相應的函式指標,進而就能確定使用者使用的是哪乙個系統呼叫。不同系統中系統呼叫的個數是不同的,目前linux系統中共定義了221個系統呼叫。

另外,系統呼叫表中還留有一些餘項,可供使用者自行新增。

當cpu執行到中斷指令「int 0x80」時,硬體就做出一系列響應,其動作與上述的中斷響應相同。cpu穿過陷阱門,從使用者空間進入系統空間。相應地,程序的上下文從使用者堆疊切換到系統堆疊。

接著執行核心函式system_call()。首先,進一步儲存各暫存器的內容;接著呼叫syscall_trace( ),以系統呼叫號為下標檢索系統呼叫入口表sys_call_table,從中找到相應的函式;然後轉去執行該函式,完成具體的服務。

執行完服務程式,核心檢查是否發生錯誤,並作相應處理。如果本程序收到訊號,則對訊號作相應處理。最後程序從系統空間返回到使用者空間。

上面簡要介紹了linux核心的主要資料結構和相應的演算法。

關於排序的一些整理

第一部分 stl中的sort排序 在stl中,排序是通過使用函式模板sort來完成的。這裡給出一些使用的例子 sort v.begin v.end 整個容器v按非降序排列 sort v.begin v.end greater 將整個容器降序排列 sort v.begin v.begin v.end ...

關於Linux中斷一些思考

目錄前言 關於中斷歷史與發展 linux中斷設計 linux中斷下半部實現 軟中斷 tasklet 工作佇列 關於可重入和不可重入函式 在我們學習中斷的時候,先要了解幾個概念。何為中斷?為什麼要使用中斷?中斷如何運作?弄明白這些再去使用中斷會顯得得心應手。何為中斷?cpu在執行的過程中,由於外部因素...

關於SOCKET程式設計的一些整理!

1.int socket int af int type int protocol 1.首先來看af 協議域又稱協議族,協議族決定了socket的位址型別,在通訊中必須採用對應的位址,2.type 指socket型別,常用到的有 sock stream sock dgram sock raw soc...