1. 程式人生 > >Linux的中斷機制

Linux的中斷機制

1.中斷概念

    中斷是指在CPU正常執行期間,由於內外部事件或由程式預先安排的事件引起的CPU暫時停止正在執行的程式,轉而為該內部或外部事件或預先安排的事件服務的程式中去,服務完畢後再返回去繼續執行被暫時中斷的程式。Linux中通常分為外部中斷(又叫硬體中斷)和內部中斷(又叫異常)。

    在實地址模式中,CPU把記憶體中從0開始的1KB空間作為一箇中斷向量表。表中的每一項佔4個位元組。但是在保護模式中,有這4個位元組的表項構成的中斷向量表不滿足實際需求,於是根據反映模式切換的資訊和偏移量的足夠使得中斷向量表的表項由8個位元組組成,而中斷向量表也叫做了中斷描述符表(IDT)。在CPU中增加了一個用來描述中斷描述符表暫存器(IDTR),用來儲存中斷描述符表的起始地址。

2. Linux中斷處理

  2.1 系統中斷號

  由上述中斷定義可知,系統中斷向量表中共可儲存256箇中斷向量入口,即IDT中包含的256箇中斷描述符(對應256箇中斷向量)。

  而0-31號中斷向量被intel公司保留用來處理異常事件,不能另作它用。對這 0-31號中斷向量,作業系統只需提供異常的處理程式,當產生一個異常時,處理機就會自動把控制轉移到相應的處理程式的入口,執行相應的處理程式;而事實 上,對於這32個處理異常的中斷向量,2.6版本的 Linux只提供了0-17號中斷向量的處理程式,其對應處理程式參見下表、中斷向量和異常事件對應表;也就是說,17-31號中斷向量是空著未用的。

  

      0-31號中斷向量已被保留,那麼剩下32-255共224箇中斷向量可用。 這224箇中斷向量又是怎麼分配的呢?2.6版本的Linux中,除了0x80 (SYSCALL_VECTOR)用作系統呼叫總入口之外,其他都用在外部硬體中斷源上,其中包括可程式設計中斷控制器8259A的15個irq;事實上,當 沒有定義CONFIG_X86_IO_APIC時,其他223(除0x80外)箇中斷向量,只利用了從32號開始的15個,其它208個空著未用。

2.2 中斷請求

  2.2.1 中斷請求概述

  外部裝置當需要作業系統做相關的事情的時候,會產生相應的中斷。

  裝置通過相應的中斷線向中斷控制器傳送高電平以產生中斷訊號,而作業系統則會從中斷控制器的狀態位取得那根中斷線上產生的中斷。而且只有在裝置在對某一條中斷線擁有控制權,才可以向這條中斷線上傳送訊號。也由於現在的外設越來越多,中斷線又是很寶貴的資源不可能被一一對應。因此在使用中斷線前,就得對相應的中斷線進行申請。無論採用共享中斷方式還是獨佔一箇中斷,申請過程都是先講所有的中斷線進行掃描,得出哪些沒有別佔用,從其中選擇一個作為該裝置的IRQ。其次,通過中斷申請函式申請相應的IRQ。最後,根據申請結果檢視中斷是否能夠被執行。

相關推薦

Linux中斷機制

orm private src 完整 不能訪問 時間 res pan 禁止 1.中斷概念 中斷是指在CPU正常運行期間,由於內外部事件或由程序預先安排的事件引起的CPU暫時停止正在運行的程序,轉而為該內部或外部事件或預先安排的事件服務的程序中去,服務完畢後再返回去繼續運行被

linux 中斷機制的處理過程

轉自https://blog.csdn.net/fan0520/article/details/52153836   一、中斷的概念 中斷是指在CPU正常執行期間,由於內外部事件或由程式預先安排的事件引起的CPU暫時停止正在執行的程式,轉而為該內部或外部事件或預先安排的事件服務的程

Linux中斷機制之三:中斷的執行

在核心程式碼中,對X86平臺中斷執行的基本過程是: 1、 通過IDT中的中斷描述符,呼叫common_interrupt; 2、 通過common_interrupt,呼叫do_IRQ,完成vector到irq_desc的轉換,進入Generic int

Linux中斷底半部機制

下半部 一個 span hand 實現 signed blank stat tar 參考: Linux下半部處理之軟中斷 linux中斷底半部機制 《深入理解Linux內核》軟中斷/tasklet/工作隊列 為了提高系統的響應能力和並發能力,Linux將中斷處理

linux中斷機制分析

軟中斷分析 最近工作繁忙,沒有時間總結核心相關的一些東西。上次更新部落格到了linux核心中斷子系統。這次總結一下軟中斷,也就是softirq。之後還會總結一些tasklet、工作佇列機制。 http://alloysystem.blog.chinaunix.n

Linux kernel 軟中斷機制之觸發軟中斷執行

在前面介紹中,我們知道如何對軟中斷的簡單初始化,軟中斷需要觸發,然後軟中斷處理函式才能被執行: 核心提供__raise_softirq_irqoff()類函式對指定的軟中設定標誌位。與此相關的函式還有: raise_softirq_irqoff()local中斷已經關閉

[Linux]互斥機制中斷遮蔽、原子操作、自旋鎖、訊號量)

基本概念 臨界區 對某段程式碼而言,可能會在程式中多次被執行,每次執行的過程我們稱作程式碼的執行路徑。 當兩個或多個程式碼路徑要競爭共同的資源的時候,該程式碼段就是臨界區。 互斥機制 訪問共享資源的程式碼叫做臨界區。共享資源被多個執行緒需要

Linux核心中斷機制(一):中斷註冊方法

今天在網上看到一份不錯的講解核心中斷原理的文章,分享給大家! 1.中斷註冊方法 在 linux 核心中用於申請中斷的函式是 request_irq(),函式原型在Kernel/irq/manage.c 中定義: int request_irq(unsigned int

Linux核心中斷機制(三):中斷處理上

核心中斷處理過程 S3C2410和Linux2.6.26核心為例講解處理過程 1.中斷向量表arch\arm\kernel\entry-armv.S __vectors_start: swi SYS_ERROR0 b vector_und + stubs_offset l

Linux中斷機制

1.中斷概念     中斷是指在CPU正常執行期間,由於內外部事件或由程式預先安排的事

Thread的中斷機制(interrupt)

accept 返回 pen red 復制 soc unit 底層 toolbar http://www.cnblogs.com/onlywujun/p/3565082.html 中斷線程 線程的thread.interrupt()方法是中斷線程,將會設置該線程的中斷狀態

Linux中斷(interrupt)子系統之一:中斷系統基本原理

兩個 ons ... req [0 共享 代碼 not spl 這個中斷系列文章主要針對移動設備中的Linux進行討論,文中的例子基本都是基於ARM這一體系架構,其他架構的原理其實也差不多,區別只是其中的硬件抽象層。內核版本基於3.3。雖然內核的版本不斷地提升,不過自從上一

14.linux-platform機制實現驅動層分離(詳解)

擴展性 blank 事件處理 相關 技術分享 消息 驅動 array iou 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 本節目標: 學習platform機制,如何實現驅動層分離 1.先來看看我們之前分析輸入子系統的分層概念

Linux poll機制

log 空間 num queue truct int with ive cif 1.用戶空間調用(參考 poll(2) - Linux man page) int poll(struct pollfd *fds, nfds_t nfds, int timeout); it

Linux中斷體系結構

depend machine lin extend process start eal 相關 開發 1.中斷處理體系結構 Linux內核將所有中斷統一編號,使用一個irq_desc結構數組來描述這些中斷。 數組聲明在/linux/kernel/irq/handle.c中,其

linux IPC機制學習博客

class chang strong 讀寫 com hang 創建 code 以及 要求 研究Linux下IPC機制:原理,優缺點,每種機制至少給一個示例,提交研究博客的鏈接 - 共享內存 - 管道 - FIFO - 信號 - 消息隊列 研究博客 管道(PIPE) 管道

Linux中斷的系統調用

例子 off ipc perror depend 重新開始 stat 適用於 data 早期UNIX系統的一個特性是:如果在進程執行一個低速系統調用而阻塞期間捕捉到一個信號,則該系統調用就被中斷不再繼續執行。該系統調用返回出錯,其errno設置為EINTR。這樣處理的理由是

Linux中斷 - ARM中斷處理過程

thum nio cti abort 兩個 alloc pos 不同 eve 一、前言 本文主要以ARM體系結構下的中斷處理為例,講述整個中斷處理過程中的硬件行為和軟件動作。具體整個處理過程分成三個步驟來描述: 1、第二章描述了中斷處理的準備過程 2、第三章描述了當發生中的

Linux中斷 - softirq

系統初始 了解 判斷 hpu 系統初始化 被調用 全部 enable 指定 一、前言 對於中斷處理而言,linux將其分成了兩個部分,一個叫做中斷handler(top half),是全程關閉中斷的,另外一部分是deferable task(bottom half),屬於不

Linux中斷 - tasklet

timer類 local handler 不同 ask store 圖片 軟硬件 () 一、前言 對於中斷處理而言,linux將其分成了兩個部分,一個叫做中斷handler(top half),屬於不那麽緊急需要處理的事情被推遲執行,我們稱之deferable task,或