久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: Linux內(nèi)核的中斷實現(xiàn)機制 [打印本頁]

作者: 51黑tt    時間: 2016-3-5 19:52
標題: Linux內(nèi)核的中斷實現(xiàn)機制
本文詳解了Linux內(nèi)核的中斷實現(xiàn)機制。首先介紹了中斷的一些基本概念,然后分析了面向對象的Linux中斷的組織形式、三種主要數(shù)據(jù)結構及其之間的關系。隨后介紹了Linux處理異常和中斷的基本流程,在此基礎上分析了中斷處理的詳細流程,包括保存現(xiàn)場、中斷處理、中斷退出時的軟中斷執(zhí)行及中斷返回時的進程切換等問題。最后介紹了中斷相關的API,包括中斷注冊和釋放、中斷關閉和使能、如何編寫中斷ISR、共享中斷、中斷上下文中斷狀態(tài)等。

1       中斷概述
1.1    為什么需要中斷?
處理器的速度跟外圍硬件設備的速度往往不在一個數(shù)量級上,因此,如果內(nèi)核采取讓處理器向硬件發(fā)出一個請求,然后專門等待回應的辦法,顯然差強人意。既然硬件的響應這么慢,那么內(nèi)核就應該在此期間處理其他事務,等到硬件真正完成了請求的操作之后,再回過頭來對它進行處理。想要實現(xiàn)這種功能,輪詢(polling)可能會是一種解決辦法。可以讓內(nèi)核定期對設備的狀態(tài)進行查詢,然后做出相應的處理。不過這種方法很可能會讓內(nèi)核做不少無用功,因為無論硬件設備是正在忙碌著完成任務還是已經(jīng)大功告成,輪詢總會周期性地重復執(zhí)行。更好的辦法是由我們來提供一種機制,讓硬件在需要的時候再向內(nèi)核發(fā)出信號(變內(nèi)核主動為硬件主動)。這就是中斷機制。

1.2    中斷的表示形式
硬件設備生成中斷的時候并不考慮與處理器的時鐘同步—換句話說就是中斷隨時可以產(chǎn)生。因此,內(nèi)核隨時可能因為新到來的中斷而被打斷。

從物理學的角度看,中斷是一種電信號,由硬件設備生成,并直接送入中斷控制器的輸入引腳上。然后再由中斷控制器向處理器發(fā)送相應的信號。處理器一經(jīng)檢測到此信號,便中斷自己的當前工作轉而處理中斷。此后,處理器會通知操作系統(tǒng)已經(jīng)產(chǎn)生中斷,這樣,操作系統(tǒng)就可以對這個中斷進行適當?shù)奶幚砹恕?br />
不同的設備對應的中斷不同,而每個中斷都通過一個惟一的數(shù)字標識。因此,來自鍵盤的中斷就有別干來自硬盤的中斷,從而使得操作系統(tǒng)能夠對中斷進行區(qū)分,并知道哪個硬件設備產(chǎn)生了哪個中斷。這樣,操作系統(tǒng)才能給不同的中斷提供不同的中斷處理程序。

這些中斷值通常被為中斷請求(IRQ)線。通常IRQ都是一些數(shù)值量。例如在PC上,IRQ0是時鐘中斷,而IRQ 1是鍵盤中斷。但并非所有的中斷號都是這樣嚴格定義的。例如,對于連接在PCI總線上的設備而言,中斷是動態(tài)分配的。而在嵌入式系統(tǒng)中,由于中斷線有限,一般外設和中斷都是一一匹配的,很少有動態(tài)分配中斷的。不管怎樣,重點在于特定的中斷總是與特定的設備相關聯(lián),并且內(nèi)核要知道這些信息。

1.3    異常
在操作系統(tǒng)中,討論中斷就不能不提及異常。廣義的中斷可分為同步(synchronous)中斷和異步(asynchronous)中斷:
同步中斷:是當指令執(zhí)行時由 CPU 控制單元產(chǎn)生,之所以稱為同步,是因為只有在一條指令執(zhí)行完畢后 CPU 才會發(fā)出中斷,而不是發(fā)生在代碼指令執(zhí)行期間,比如系統(tǒng)調(diào)用。
異步中斷:是指由其他硬件設備依照 CPU 時鐘信號隨機產(chǎn)生,即意味著中斷能夠在指令之間發(fā)生,例如鍵盤中斷。

一般由處理器本身產(chǎn)生的同步中斷稱為異常(exception),異步中斷被稱為中斷(interrupt)。中斷可分為可屏蔽中斷(Maskable interrupt)和非屏蔽中斷(Nomaskable interrupt)。異常可分為故障(fault)、陷阱(trap)、終止(abort)三類。
表 1:中斷類別及其行為
類別
原因
異步/同步
返回行為

中斷
來自I/O設備的信號
異步
總是返回到下一條指令

陷阱
有意的異常
同步
總是返回到下一條指令

故障
潛在可恢復的錯誤
同步
返回到當前指令

終止
不可恢復的錯誤
同步
不會返回


在處理器執(zhí)行到由于編程失誤而導致的錯誤指令(例如被0除)的時候,或者是在執(zhí)行期間出現(xiàn)特殊情況(例如缺頁),必須靠內(nèi)核來處理的時候,處理器就會產(chǎn)生一個異常。因為許多處理器體系結構處理異常與處理中斷的方式類似,因此,內(nèi)核對它們的處理也很類似。

通過軟中斷實現(xiàn)系統(tǒng)調(diào)用,那就是陷人內(nèi)核,然后引起一種特殊的異常—系統(tǒng)調(diào)用處理程序異常。你將會看到,中斷的工作方式與之類似,其差異只在于中斷是由硬件而不是軟件引起的。

1.4    中斷處理程序
在響應一個特定中斷的時候,內(nèi)核會執(zhí)行一個函數(shù),該函數(shù)叫做中斷處理程序(interrupt handler)或中斷服務例程(interrupt service routine, ISR)。產(chǎn)生中斷的每個設備都有一個相應的中斷處理程序。

在Linux中,中斷處理程序看起來就是普普通通的C函數(shù)。只不過這些函數(shù)必須按照特定的類型聲明,以便內(nèi)核能夠以標準的方式傳遞處理程序的信息。中斷處理程序與其他內(nèi)核函數(shù)的真正區(qū)別在于:中斷處理程序是被內(nèi)核調(diào)用來響應中斷的,而它們運行于我們稱之為中斷上下文的特殊上下文中。

中斷可能隨時發(fā)生,因此中斷處理程序也就隨時可能執(zhí)行。所以必須保證中斷處理程序能夠快速執(zhí)行,這樣才能保證盡可能快地恢復中斷代碼的執(zhí)行。因此,盡管對硬件而言,迅速對其中斷進行服務非常重要,但對系統(tǒng)的其他部分而言,讓中斷處理程序在盡可能短的時間內(nèi)完成運行也同樣重要。

即使是最精簡版的中斷服務程序,它也要與硬件進行交互,告訴該設備中斷已被接收。我們可以考慮一下網(wǎng)絡設備的中斷處理程序面臨的挑戰(zhàn)。該處理程序除了要對硬件應答,還要把來自硬件的網(wǎng)絡數(shù)據(jù)包拷貝到內(nèi)存,對其進行處理后再交給合適的協(xié)議棧或應用程序。顯而易見,這種工作量不會太小,尤其對于如今的千兆比特和萬兆比特以太網(wǎng)卡而言。

因此我們一般把中斷處理切為兩個部分或兩半。中斷處理程序是上半部 (top half)—接收到一個中斷,它就立即開始執(zhí)行,但只做有嚴格時限的工作,例如對接收的中斷進行應答或復位硬件,這些工作都是在所有中斷被禁止的情況下完成的。能夠被允許稍后完成的工作會推遲到下半部(bottom half)去。此后,在合適的時機,下半部會被開中斷執(zhí)行。

以網(wǎng)卡作為實例,當網(wǎng)卡接收流入網(wǎng)絡的數(shù)據(jù)包時,需要通知內(nèi)核數(shù)據(jù)包到了。網(wǎng)卡需要立即完成這件事,從而優(yōu)化網(wǎng)絡的吞吐量和傳輸周期,以避免超時。因此,網(wǎng)卡立即發(fā)出中斷:嘀,內(nèi)核,我這里有最新數(shù)據(jù)包了。內(nèi)核通過執(zhí)行網(wǎng)卡已注冊的中斷處理程序來做出應答。

中斷開始執(zhí)行,應答硬件,拷貝最新的網(wǎng)絡數(shù)據(jù)包到內(nèi)存,然后讀取網(wǎng)卡更多的數(shù)據(jù)包。這些都是重要、緊迫而又與硬件相關的工作。處理和操作數(shù)據(jù)包的其他工作在隨后的下半部中進行。





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 一区二区高清 | 国产三区四区 | 免费h视频| 欧美激情久久久 | 日韩一区二区在线视频 | 久久久亚洲一区 | 中文字幕日韩欧美一区二区三区 | 欧美一区二区在线观看视频 | 久久夜视频 | 国产在线中文字幕 | 日韩免费视频 | 久久久久久高潮国产精品视 | 精品视频一区二区三区在线观看 | 草草精品 | 桃色五月 | 亚洲精品久久嫩草网站秘色 | 久久久激情 | 涩涩鲁亚洲精品一区二区 | 亚洲欧美综合网 | 精品国产一区二区三区性色av | 国产乱码精品一区二区三区中文 | 一级片av | 99精品视频在线 | 国产精品不卡一区二区三区 | 欧美极品在线视频 | 欧产日产国产精品99 | 一级片在线观看 | 一区二区精品 | 区一区二区三在线观看 | 欧美中文字幕在线 | 色一级 | 日本精品视频一区二区 | 亚洲天堂男人的天堂 | 欧美成视频 | 操视频网站| 欧美精品一区三区 | 国产精品久久久99 | 免费久久99精品国产婷婷六月 | 农夫在线精品视频免费观看 | 在线观看成人av | 免费午夜电影 |