久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
Linux內核的中斷實現機制
[打印本頁]
作者:
51黑tt
時間:
2016-3-5 19:52
標題:
Linux內核的中斷實現機制
本文詳解了Linux內核的中斷實現機制。首先介紹了中斷的一些基本概念,然后分析了面向對象的Linux中斷的組織形式、三種主要數據結構及其之間的關系。隨后介紹了Linux處理異常和中斷的基本流程,在此基礎上分析了中斷處理的詳細流程,包括保存現場、中斷處理、中斷退出時的軟中斷執行及中斷返回時的進程切換等問題。最后介紹了中斷相關的API,包括中斷注冊和釋放、中斷關閉和使能、如何編寫中斷ISR、共享中斷、中斷上下文中斷狀態等。
1 中斷概述
1.1 為什么需要中斷?
處理器的速度跟外圍硬件設備的速度往往不在一個數量級上,因此,如果內核采取讓處理器向硬件發出一個請求,然后專門等待回應的辦法,顯然差強人意。既然硬件的響應這么慢,那么內核就應該在此期間處理其他事務,等到硬件真正完成了請求的操作之后,再回過頭來對它進行處理。想要實現這種功能,輪詢(polling)可能會是一種解決辦法。可以讓內核定期對設備的狀態進行查詢,然后做出相應的處理。不過這種方法很可能會讓內核做不少無用功,因為無論硬件設備是正在忙碌著完成任務還是已經大功告成,輪詢總會周期性地重復執行。更好的辦法是由我們來提供一種機制,讓硬件在需要的時候再向內核發出信號(變內核主動為硬件主動)。這就是中斷機制。
1.2 中斷的表示形式
硬件設備生成中斷的時候并不考慮與處理器的時鐘同步—換句話說就是中斷隨時可以產生。因此,內核隨時可能因為新到來的中斷而被打斷。
從物理學的角度看,中斷是一種電信號,由硬件設備生成,并直接送入中斷控制器的輸入引腳上。然后再由中斷控制器向處理器發送相應的信號。處理器一經檢測到此信號,便中斷自己的當前工作轉而處理中斷。此后,處理器會通知操作系統已經產生中斷,這樣,操作系統就可以對這個中斷進行適當的處理了。
不同的設備對應的中斷不同,而每個中斷都通過一個惟一的數字標識。因此,來自鍵盤的中斷就有別干來自硬盤的中斷,從而使得操作系統能夠對中斷進行區分,并知道哪個硬件設備產生了哪個中斷。這樣,操作系統才能給不同的中斷提供不同的中斷處理程序。
這些中斷值通常被為中斷請求(IRQ)線。通常IRQ都是一些數值量。例如在PC上,IRQ0是時鐘中斷,而IRQ 1是鍵盤中斷。但并非所有的中斷號都是這樣嚴格定義的。例如,對于連接在PCI總線上的設備而言,中斷是動態分配的。而在嵌入式系統中,由于中斷線有限,一般外設和中斷都是一一匹配的,很少有動態分配中斷的。不管怎樣,重點在于特定的中斷總是與特定的設備相關聯,并且內核要知道這些信息。
1.3 異常
在操作系統中,討論中斷就不能不提及異常。廣義的中斷可分為同步(synchronous)中斷和異步(asynchronous)中斷:
同步中斷:是當指令執行時由 CPU 控制單元產生,之所以稱為同步,是因為只有在一條指令執行完畢后 CPU 才會發出中斷,而不是發生在代碼指令執行期間,比如系統調用。
異步中斷:是指由其他硬件設備依照 CPU 時鐘信號隨機產生,即意味著中斷能夠在指令之間發生,例如鍵盤中斷。
一般由處理器本身產生的同步中斷稱為異常(exception),異步中斷被稱為中斷(interrupt)。中斷可分為可屏蔽中斷(Maskable interrupt)和非屏蔽中斷(Nomaskable interrupt)。異常可分為故障(fault)、陷阱(trap)、終止(abort)三類。
表 1:中斷類別及其行為
類別
原因
異步/同步
返回行為
中斷
來自I/O設備的信號
異步
總是返回到下一條指令
陷阱
有意的異常
同步
總是返回到下一條指令
故障
潛在可恢復的錯誤
同步
返回到當前指令
終止
不可恢復的錯誤
同步
不會返回
在處理器執行到由于編程失誤而導致的錯誤指令(例如被0除)的時候,或者是在執行期間出現特殊情況(例如缺頁),必須靠內核來處理的時候,處理器就會產生一個異常。因為許多處理器體系結構處理異常與處理中斷的方式類似,因此,內核對它們的處理也很類似。
通過軟中斷實現系統調用,那就是陷人內核,然后引起一種特殊的異常—系統調用處理程序異常。你將會看到,中斷的工作方式與之類似,其差異只在于中斷是由硬件而不是軟件引起的。
1.4 中斷處理程序
在響應一個特定中斷的時候,內核會執行一個函數,該函數叫做中斷處理程序(interrupt handler)或中斷服務例程(interrupt service routine, ISR)。產生中斷的每個設備都有一個相應的中斷處理程序。
在Linux中,中斷處理程序看起來就是普普通通的C函數。只不過這些函數必須按照特定的類型聲明,以便內核能夠以標準的方式傳遞處理程序的信息。中斷處理程序與其他內核函數的真正區別在于:中斷處理程序是被內核調用來響應中斷的,而它們運行于我們稱之為中斷上下文的特殊上下文中。
中斷可能隨時發生,因此中斷處理程序也就隨時可能執行。所以必須保證中斷處理程序能夠快速執行,這樣才能保證盡可能快地恢復中斷代碼的執行。因此,盡管對硬件而言,迅速對其中斷進行服務非常重要,但對系統的其他部分而言,讓中斷處理程序在盡可能短的時間內完成運行也同樣重要。
即使是最精簡版的中斷服務程序,它也要與硬件進行交互,告訴該設備中斷已被接收。我們可以考慮一下網絡設備的中斷處理程序面臨的挑戰。該處理程序除了要對硬件應答,還要把來自硬件的網絡數據包拷貝到內存,對其進行處理后再交給合適的協議棧或應用程序。顯而易見,這種工作量不會太小,尤其對于如今的千兆比特和萬兆比特以太網卡而言。
因此我們一般把中斷處理切為兩個部分或兩半。中斷處理程序是上半部 (top half)—接收到一個中斷,它就立即開始執行,但只做有嚴格時限的工作,例如對接收的中斷進行應答或復位硬件,這些工作都是在所有中斷被禁止的情況下完成的。能夠被允許稍后完成的工作會推遲到下半部(bottom half)去。此后,在合適的時機,下半部會被開中斷執行。
以網卡作為實例,當網卡接收流入網絡的數據包時,需要通知內核數據包到了。網卡需要立即完成這件事,從而優化網絡的吞吐量和傳輸周期,以避免超時。因此,網卡立即發出中斷:嘀,內核,我這里有最新數據包了。內核通過執行網卡已注冊的中斷處理程序來做出應答。
中斷開始執行,應答硬件,拷貝最新的網絡數據包到內存,然后讀取網卡更多的數據包。這些都是重要、緊迫而又與硬件相關的工作。處理和操作數據包的其他工作在隨后的下半部中進行。
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
a级在线免费观看
|
天天操天天射天天
|
亚av在线
|
国产 亚洲 网红 主播
|
欧美a在线
|
久久久久国产一区二区三区
|
91伦理片
|
一级一片在线观看
|
日韩欧美视频免费在线观看
|
亚洲成人免费在线观看
|
四虎成人av
|
日韩欧美一级精品久久
|
丝袜美腿一区
|
久久久看
|
黄网站涩免费蜜桃网站
|
精品一区二区三区四区
|
日韩在线一区二区
|
国产精品一区在线观看
|
日韩视频在线观看中文字幕
|
青青伊人久久
|
午夜成人在线视频
|
欧美精品乱码久久久久久按摩
|
欧美一级片在线看
|
国内精品免费久久久久软件老师
|
四虎免费视频
|
精品国产乱码久久久久久影片
|
成人日韩精品
|
一本综合久久
|
久久在线视频
|
国产成人jvid在线播放
|
91视频一区二区
|
久久国产精品72免费观看
|
成人在线免费
|
日韩欧美二区
|
精品一区二区三区在线播放
|
久久久久久久久毛片
|
欧美日韩在线观看一区二区三区
|
男人天堂网址
|
国产精品久久久久久久久久
|
色欧美片视频在线观看
|
中文久久
|