青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

風雨兼程

ring my bells
posts - 49, comments - 14, trackbacks - 0, articles - 0

中斷

Posted on 2008-04-08 23:22 silentneil 閱讀(135) 評論(0)  編輯 收藏 引用
Linux通過使用多種不同硬件來執行許多不同任務。包括驅動顯示器的視頻設備、驅動硬盤的IDE設備等。 我們可以同步驅動這些設備,即我們可以發送一個請求執行一組操作(比如說將一塊內存數據寫入到磁盤)然后等待到執行完畢。這種方式雖然可以工作,但是效率很低,因為操作系統必須等待每個操作的完成,所以操作系統將花費大量時間在“忙等待”上。更為有效的方式是執行請求,然后轉去執行其它任務。當設備完成請求時再通過中斷通知操作系統。這樣系統中可以同時存在多個未完成的任務。 

不管CPU在作什么工作,為了讓設備產生中斷必須提供一些必要的硬件支持。幾乎所有的通用處理器如 Alpha AXP都使用近似的方法。CPU 的一些物理引腳被設計成可以改變電壓(如從+5V變成-5V)從而引起CPU停止當前工作并開始執行處理中斷的特殊代碼:中斷處理程序。這些引腳之一被連接到一個周期性時鐘上并每隔千分之一秒就接收一次中斷,其它引腳則可連接到系統中其它設備如SCSI控制器上。 

系統常使用中斷控制器來在向CPU中斷引腳發送信號之前將設備中斷進行分組。這樣可以節省CPU上中斷引腳個數,同時增加了系統設計的靈活性。此中斷控制器通過屏蔽與狀態寄存器來控制中斷。通過設置屏蔽寄存器中的某些位可以使能或者關閉中斷,讀取狀態寄存器可得到系統當前處于活動狀態的中斷。 

系統中有些中斷是通過硬連線連接的,如實時時鐘的周期性定時器可能被固定連接到中斷控制器的引腳3上。而其它連接到控制器的引腳只能由插到特定 ISA或PCI槽中的控制卡來決定。例如中斷控制器中的引腳4可能被連接到PCI槽號0,但可能某天此槽中插入一塊以太網卡而過幾天又會換成SCSI控制器。總之每個系統都有其自身的中斷路由機制,同時操作系統還應該能靈活處理這些情況。 

多數現代通用微處理器使用近似的方法來處理中斷。硬件中斷發生時,CPU將停止執行當前指令并將跳轉到內存中包含中斷處理代碼或中斷處理代碼指令分支的位置繼續執行。這些代碼在一種特殊CPU模式: 中斷模式下執行。通常在此模式下不會有其它中斷發生。但是也有例外;有些CPU將中斷的優先級進行分類,此時更高優先級的中斷還可能發生。這樣意味著必須認真編寫第一級中斷處理代碼,同時中斷處理過程應該擁有其自身的堆棧,以便存儲轉到中斷處理過程前的CPU執行狀態(所有CPU的普通寄存器和上下文)。一些CPU具有一組特殊的寄存器-它們僅存在于中斷模式中,在中斷模式下可以使用這些寄存器來保存執行所需要的執行上下文。 

當中斷處理完畢后CPU狀態將被重儲,同時中斷也將被釋放。CPU將繼續做那些中斷發生前要做的工作。中斷處理代碼越精煉越好,這樣將減少操作系統阻塞在中斷上的時間與頻率。 


7.1  可編程中斷控制器
系統設計者可以自由選擇中斷結構,一般的IBM PC兼容將使用Intel 82C59A-2 CMOS可編程中斷控制器或其派生者。這種控制器在PC誕生之前便已經產生,它的可編程性體現在那些位于眾所周知ISA內存位置中的寄存器上。非Intel系統如基于Alpha AXP的PC不受這些體系結構限制,它們經常使用各種不同的中斷控制器。 

圖7.1給出了兩個級連的8位控制器,每個控制器都有一個屏蔽與中斷狀態寄存器:PIC1和PIC2。這兩個屏蔽寄存器分別位于ISA I/O空間0x21和0xA1處,狀態寄存器則位于0x20和0xA0。對此屏蔽寄存器某個特定位置位將使能某一中斷,寫入0則屏蔽它。但是不幸的是中斷屏蔽寄存器是只寫的,所以你無法讀取你寫入的值。這也意味著Linux必須保存一份對屏蔽寄存器寫入值的局部拷貝。一般在中斷使能和屏蔽例程中修改這些保存值,同時每次將這些全屏蔽碼寫入寄存器。 

當有中斷產生時,中斷處理代碼將讀取這兩個中斷狀態寄存器(ISR)。它將0x20中的ISR看成一個16位中斷寄存器的低8位而將0xA0中的 ISR看成其高8位。這樣0xA0中ISR第1位上的中斷將被視作系統中斷9。PIC1 上的第二位由于被用來級連PIC2所以不能作其它用處,PIC2 上的任何中斷將導致PIC1的第二位被置位。 


7.2  初始化中斷處理數據結構
核心的中斷處理數據結構在設備驅動請求系統中斷控制時建立。為完成此項工作,設備驅動使用一組Linux核心函數來請求中斷,使能中斷和屏蔽中斷。 
每個設備驅動將調用這些過程來注冊其中斷處理例程地址。 

有些中斷由于傳統的PC體系結構被固定下來,所以驅動僅需要在其初始化時請求它的中斷。軟盤設備驅動正是使用的這種方式;它的中斷號總為6。有時設備驅動也可能不知道設備使用的中斷號。對PCI設備驅動來說這不是什么大問題,它們總是可以知道其中斷號。但對于ISA設備驅動則沒有取得中斷號的方便方式。Linux通過讓設備驅動檢測它們的中斷號來解決這個問題。 

設備驅動首先迫使設備引起一個中斷。系統中所有未被分配的中斷都被使能。此時設備引發的中斷可以通過可編程中斷控制器來發送出去。Linux再讀取中斷狀態寄存器并將其內容返回給設備驅動。非0結果則表示在此次檢測中有一個或多個中斷發生。設備驅動然后將關閉檢測并將所有未分配中斷屏蔽掉。 

如果ISA設備驅動成功找到了設備的IRQ號,就可以象平常一樣請求對設備的控制。 

基于PCI系統比基于ISA系統有更多的動態性。ISA設備使用的中斷引腳通常是通過硬件設備上的跳線來設置并固定在設備驅動中。PCI設備在系統啟動與初始化PCI時由PCI BIOS或PCI子系統來分配中斷。每個PCI設備可以使用A,B,C或D之中的任意中斷。這個中斷在設備建立時確定且通常多數設備的缺省中斷為 A。PCI槽中的PCI中斷連線A,B,C和D被正確路由到中斷控制器中。所以PCI槽4上的引腳A可能被路由到中斷控制器上的引腳6,PCI槽7上的引腳B被路由到中斷控制器上的引腳7等等。 

如何路由PCI中斷完全取決于特定的系統,一般設置代碼能理解PCI中斷路由拓撲。在基于Intel的PC上由系統BIOS代碼在啟動時作這些設置而在不帶BIOS(如Alpha AXP)系統中由Linux核心來完成這個任務。 

PCI設置代碼將每個設備對應的中斷控制器的引腳號寫入PCI配置頭中。通過得到PCI中斷路由拓撲及設備的PCI槽號和PCI中斷引腳設置代碼可以確定其對應的中斷引腳(或IRQ)號。設備使用的中斷引腳被保存在此設備的PCI配置頭中為此目的保留的中斷連線域中。當運行設備驅動時這些信息被讀出并用來控制來自Linux核心的中斷請求。 

系統中可能存在許多PCI中斷源,比如在使用PCI-PCI橋接器時。這些中斷源的個數可能將超出系統可編程中斷控制器的引腳數。此時PCI設備必須共享中斷號-中斷控制器上的一個引腳可能被多個PCI設備同時使用。Linux讓中斷的第一個請求者申明此中斷是否可以共享。中斷的共享將導致 irq_action數組中的一個入口同時指向幾個irqaction數據結構。當共享中斷發生時Linux將調用對應此中斷源的所有中斷處理過程。沒有中斷需要服務時,任何共享此中斷(所有的PCI設備驅動)的設備驅動都要準備好其中斷處理過程的調用。 


7.3  中斷處理



圖7.2 Linux中斷處理數據結構 


Linux中斷處理子系統的一個基本任務是將中斷正確路由到中斷處理代碼中的正確位置。這些代碼必須了解系統的中斷拓撲結構。例如在中斷控制器上引腳6上發生的軟盤控制器中斷必須被辨認出的確來自軟盤并路由到系統的軟盤設備驅動的中斷處理代碼中。Linux使用一組指針來指向包含處理系統中斷的例程的調用地址。這些例程屬于對應于此設備的設備驅動,同時由它負責在設備初始化時為每個設備驅動申請其請求的中斷。圖7.2給出了一個指向一組 irqaction的irq_action指針。每個irqaction數據結構中包含了對應于此中斷處理的相關信息,包括中斷處理例程的地址。而中斷個數以及它們被如何處理則會根據體系結構及系統的變化而變化。Linux中的中斷處理代碼就是和體系結構相關的。這也意味著irq_action數組的大小隨于中斷源的個數而變化。 

中斷發生時Linux首先讀取系統可編程中斷控制器中中斷狀態寄存器判斷出中斷源,將其轉換成irq_action數組中偏移值。例如中斷控制器引腳6來自軟盤控制器的中斷將被轉換成對應于中斷處理過程數組中的第7個指針。如果此中斷沒有對應的中斷處理過程則Linux核心將記錄這個錯誤,不然它將調用對應此中斷源的所有irqaction數據結構中的中斷處理例程。 

當Linux核心調用設備驅動的中斷處理過程時此過程必須找出中斷產生的原因以及相應的解決辦法。為了找到設備驅動的中斷原因,設備驅動必須讀取發生中斷設備上的狀態寄存器。設備可能會報告一個錯誤或者通知請求的處理已經完成。如軟盤控制器可能將報告它已經完成軟盤讀取磁頭對某個扇區的正確定位。一旦確定了中斷產生的原因,設備驅動還要完成更多的工作。如果這樣Linux核心將推遲這些操作。以避免了CPU在中斷模式下花費太多時間。在設備驅動中斷中我們將作詳細討論。

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品一区二区久久| 毛片一区二区| 国产字幕视频一区二区| 免费高清在线一区| 亚洲精品自在久久| 国产精品尤物| 欧美激情综合五月色丁香| 日韩视频在线观看免费| 久久久综合免费视频| 亚洲小视频在线观看| 国内精品**久久毛片app| 国产精品久久夜| 91久久精品国产91久久性色| 久久综合五月| 亚洲国产午夜| 亚洲午夜久久久| 久久三级福利| 欧美三级不卡| 亚洲精品中文字幕在线观看| 夜夜嗨av一区二区三区四季av | 国产日韩综合一区二区性色av| 国产精品自在线| 伊人影院久久| 亚洲午夜精品久久久久久app| 欧美在线网址| 亚洲人成在线观看| 欧美亚洲色图校园春色| 欧美国产日韩一区| 国内在线观看一区二区三区| 亚洲婷婷综合久久一本伊一区| 久久精品91久久久久久再现| 亚洲国产天堂网精品网站| 亚洲综合首页| 欧美激情亚洲精品| 一区精品在线播放| 欧美一区二视频| 日韩视频在线你懂得| 久久久亚洲综合| 国产欧美日韩综合| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美刺激性大交免费视频| 性欧美超级视频| 国产精品你懂的| 亚洲天堂网在线观看| 亚洲精品日韩精品| 免费成人你懂的| 亚洲国产婷婷| 免费不卡欧美自拍视频| 久久成人精品一区二区三区| 国产精品一区免费视频| 亚洲欧美在线高清| 精品99一区二区三区| 欧美一区二区三区喷汁尤物| 鲁鲁狠狠狠7777一区二区| 亚洲午夜电影网| 欧美福利在线| 在线观看视频一区二区欧美日韩| 午夜精品久久久久久久久久久久| 99视频有精品| 国产精品v欧美精品∨日韩| 国产精品一区久久久久| 亚洲一区二区视频在线观看| 欧美激情亚洲精品| 久久久久久91香蕉国产| 国内精品视频666| 久久综合影音| 狂野欧美激情性xxxx欧美| 亚洲高清二区| 亚洲国产欧美不卡在线观看| 免费av成人在线| 亚洲精品免费网站| 韩日在线一区| 麻豆av一区二区三区久久| 久久久久久久尹人综合网亚洲| 伊人一区二区三区久久精品| 欧美承认网站| 欧美午夜剧场| 欧美一区二区大片| 久久精品在线视频| 亚洲精品久久久久久久久久久| 亚洲人成在线影院| 国产精品v欧美精品v日韩精品| 亚洲欧美综合网| 久久精品中文| 99re6热在线精品视频播放速度| 99re6这里只有精品| 国产麻豆91精品| 欧美成年人视频| 欧美三级午夜理伦三级中视频| 欧美一级播放| 久久综合狠狠综合久久综合88| 亚洲精品九九| 先锋a资源在线看亚洲| 亚洲大片在线观看| 一本色道久久综合精品竹菊| 韩国欧美国产1区| 亚洲人成绝费网站色www| 国产精品一区免费视频| 欧美成人精品1314www| 欧美视频导航| 美女国内精品自产拍在线播放| 欧美日韩成人综合| 久久久99爱| 欧美深夜福利| 老牛影视一区二区三区| 国产精品jizz在线观看美国 | 国产私拍一区| 亚洲大黄网站| 亚洲国产精品久久精品怡红院| 久久蜜桃av一区精品变态类天堂| 久久亚洲国产成人| 在线观看91精品国产入口| 国产在线播精品第三| 亚洲激情女人| 蜜桃av久久久亚洲精品| 亚洲一区欧美| 欧美成人第一页| 久久亚洲私人国产精品va媚药 | 欧美日韩精品一区二区天天拍小说| 久久高清一区| 国产精品高潮呻吟久久av无限| 亚洲第一区在线观看| 国产亚洲成av人在线观看导航 | 国产精品chinese| 欧美色图五月天| 亚洲精品小视频| 久久国产精品久久w女人spa| 亚洲一区二区三区激情| 欧美日韩国产综合视频在线观看| 欧美ab在线视频| 韩国精品一区二区三区| 欧美在线观看一区二区三区| 性久久久久久久| 国产精品第一页第二页第三页| 91久久精品国产91性色| 亚洲欧洲视频| 欧美精品1区2区| 亚洲精品一二区| 亚洲午夜精品久久| 国产精品社区| 亚洲一品av免费观看| 亚洲欧美成人一区二区在线电影| 欧美日本在线播放| 亚洲理论在线| 亚洲综合色丁香婷婷六月图片| 欧美日韩色一区| 亚洲一区二区三区在线看| 亚洲欧美在线播放| 国产在线成人| 久久综合色播五月| 欧美高清视频一区| 亚洲美女一区| 欧美午夜无遮挡| 午夜视黄欧洲亚洲| 美女精品国产| 亚洲天堂av高清| 国产日韩精品一区二区浪潮av| 欧美一区二区私人影院日本| 久久aⅴ国产欧美74aaa| 日韩视频二区| 亚洲欧美在线视频观看| 久久久久久亚洲综合影院红桃| 久久精品视频在线看| 性做久久久久久| 亚洲激情精品| 久久亚洲春色中文字幕久久久| 欧美成人免费在线| 伊伊综合在线| 在线看无码的免费网站| 亚洲欧美日韩国产中文 | 欧美激情视频给我| 亚洲天堂av在线免费| 国产偷国产偷亚洲高清97cao | 国产精品亚洲综合久久| 欧美自拍丝袜亚洲| 亚洲二区三区四区| 午夜精品久久久久久久蜜桃app| 国内精品免费午夜毛片| 欧美激情亚洲激情| 欧美一区三区三区高中清蜜桃| 亚洲国产欧美一区二区三区久久 | 久久精品免视看| 亚洲免费电影在线观看| 国产欧美在线视频| 欧美精彩视频一区二区三区| 在线中文字幕不卡| 伊人久久久大香线蕉综合直播| 欧美婷婷在线| 久久女同精品一区二区| 亚洲影院在线观看| 亚洲九九精品| 亚洲成在线观看| 久久偷窥视频| 欧美在线www| 亚洲欧美成人一区二区三区| 99精品国产高清一区二区| 在线观看亚洲视频| 国产网站欧美日韩免费精品在线观看| 欧美喷潮久久久xxxxx| 免费在线视频一区|