• <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>

            那誰(shuí)的技術(shù)博客

            感興趣領(lǐng)域:高性能服務(wù)器編程,存儲(chǔ),算法,Linux內(nèi)核
            隨筆 - 210, 文章 - 0, 評(píng)論 - 1183, 引用 - 0
            數(shù)據(jù)加載中……

            linux內(nèi)核V2.6.11學(xué)習(xí)筆記(4)--中斷與異常處理概述

            Linux下面的中斷分兩種:
            同步的中斷,也稱為異常,之所以稱為"同步",是因?yàn)檫@些異常是在程序執(zhí)行的時(shí)候某條語(yǔ)句觸發(fā)的,比如除0錯(cuò)誤,缺頁(yè)異常等等,有名的段錯(cuò)誤也屬于其中的一種,這個(gè)時(shí)候,你的程序不能繼續(xù)往下走,而必須對(duì)這些異常做出回應(yīng),也就是處理.
            異步的中斷,也就是中斷,之所以稱為"異步",是因?yàn)檫@些中斷是在當(dāng)前指令之外的指令觸發(fā)的.比如你的程序正在執(zhí)行,來(lái)了一個(gè)I/O請(qǐng)求,或者定時(shí)器到時(shí)間被觸發(fā)了,等等.也就是說(shuō),程序無(wú)法預(yù)知中斷在什么時(shí)候到來(lái).

            有點(diǎn)兒亂了,小結(jié)一下:中斷分為兩種,同步的中斷叫做異常,一般由程序中的錯(cuò)誤觸發(fā);異步的中斷叫做中斷,一般由當(dāng)前程序外部觸發(fā),比如IO請(qǐng)求,定時(shí)器等觸發(fā).

            每一個(gè)中斷與一根IRQ線(Interrupt ReQuest (IRQ) line)對(duì)應(yīng),而IRQ是連接到可編程中斷控制器(Programmable Interrupt Controller,簡(jiǎn)稱PIC)上的.它完成下面的工作:
            1) 檢查與之相連的IRQ,看看哪個(gè)IRQ被觸發(fā)了,選擇最小的被觸發(fā)的IRQ.
            2) 將被中斷的IRQ轉(zhuǎn)換為一個(gè)中斷向量
            3) 將中斷向量存放在IO端口,CPU可以通過(guò)數(shù)據(jù)線讀取該中斷向量
            4) 發(fā)出INTR指令,告訴CPU:有一條中斷被觸發(fā)了
            5) 在以上步驟之后,PIC等待CPU對(duì)這個(gè)中斷做出響應(yīng),這段時(shí)間內(nèi)PIC不會(huì)去檢查新的中斷.當(dāng)CPU處理完這個(gè)中斷后,PIC再去清空INTR線以接收新的中斷.
            6) 重復(fù)第一步

            以上是PIC所做的,簡(jiǎn)單的說(shuō):監(jiān)控IRQ,將被觸發(fā)的IRQ轉(zhuǎn)換為中斷向量,然后通知CPU.

            下面來(lái)看看CPU的控制單元是怎么做的.

            <<深入理解Linux內(nèi)核>>中對(duì)這部分說(shuō)的比較詳細(xì)了(4.2.4節(jié)),下面做一點(diǎn)輔助解釋性的說(shuō)明:
            1) 首先,每個(gè)中斷向量都與與之對(duì)應(yīng)的處理程序,可以簡(jiǎn)單的理解為,這是一個(gè)大的數(shù)組,數(shù)組索引是中斷向量,而存放的元素是函數(shù)指針,也就是對(duì)這些中斷進(jìn)行處理的函數(shù).在系統(tǒng)初始化的時(shí)候初始化每個(gè)中斷向量的處理函數(shù).

            2) 書中的一段話,看著有點(diǎn)兒令人費(fèi)解的:Before dealing with that instruction, the control unit checks whether an interrupt or an exception occurred while the control unit executed the previous instruction. 實(shí)際上,這個(gè)查詢操作對(duì)程序來(lái)說(shuō)是透明的,是CPU的控制單元自己去做的事情,如果查詢到了有中斷被觸發(fā),再去調(diào)用上面已經(jīng)注冊(cè)的處理函數(shù).至于每次執(zhí)行指令之前是怎么做到高效查找的,我不清楚,哪位知道的麻煩告知一下.

            3)中斷向量的分類為:
            從0~31的向量對(duì)應(yīng)于異常和非屏蔽中斷。

            32~47的向量(即由I/O設(shè)備引起的中斷)分配給屏蔽中斷。

            剩余的從48~255的向量用來(lái)標(biāo)識(shí)軟中斷。Linux只用了其中的一個(gè)(即128或0x80向量)用來(lái)實(shí)現(xiàn)系統(tǒng)調(diào)用。當(dāng)用戶態(tài)下的進(jìn)程執(zhí)行一條int 0x80匯編指令時(shí),CPU就切換到內(nèi)核態(tài),并開(kāi)始執(zhí)行system_call(  )內(nèi)核函數(shù)

            4) 由于中斷被觸發(fā)時(shí)需要保護(hù)現(xiàn)場(chǎng),所以在發(fā)生中斷調(diào)用處理函數(shù)之前需要保護(hù)現(xiàn)場(chǎng),也就是一些寄存器指針;而中斷處理完畢后需要恢復(fù)現(xiàn)場(chǎng),因此需要將這些寄存器恢復(fù).當(dāng)然,在切換的時(shí)候,還需要考慮程序的運(yùn)行權(quán)限等等.


            以上就是對(duì)中斷和異常處理的大體流程.

            posted on 2009-04-28 23:28 那誰(shuí) 閱讀(3354) 評(píng)論(3)  編輯 收藏 引用 所屬分類: linux kernel

            評(píng)論

            # re: linux內(nèi)核V2.6.11學(xué)習(xí)筆記(4)--中斷與異常處理概述  回復(fù)  更多評(píng)論   

            哥們,提個(gè)建議,能不能把字體換成黑色宋體,眼睛好難受
            2009-04-29 08:54 | brightcoder

            # re: linux內(nèi)核V2.6.11學(xué)習(xí)筆記(4)--中斷與異常處理概述[未登錄](méi)  回復(fù)  更多評(píng)論   

            我最近也在看一些linux kernel方面的東西,跟你的內(nèi)容有點(diǎn)重疊。不過(guò)你是比較深入研究代碼,我只是皮毛的看了一些原理。比如我昨天的一些零散的整理:http://timyang.net/linux/linux-process/
            2009-05-04 23:54 | Tim

            # re: linux內(nèi)核V2.6.11學(xué)習(xí)筆記(4)--中斷與異常處理概述  回復(fù)  更多評(píng)論   

            @Tim
            你的blog在我google reader里面,時(shí)不時(shí)也會(huì)去看看,以后請(qǐng)多指教了.
            2009-05-05 00:03 | 那誰(shuí)
            久久99热这里只有精品国产| 亚洲国产另类久久久精品黑人| 欧美亚洲国产精品久久高清| 久久国产香蕉一区精品| 人人狠狠综合久久亚洲婷婷| 国产亚洲精久久久久久无码| 69久久夜色精品国产69| 精品熟女少妇av免费久久| 久久久久亚洲精品日久生情| 久久久久久综合网天天| 久久精品人人做人人爽电影| 久久AV高潮AV无码AV| 亚洲中文字幕无码久久2017| 无码人妻久久一区二区三区| 久久国产欧美日韩精品| 亚洲午夜精品久久久久久人妖| 国产精品成人无码久久久久久| 精品久久久久久99人妻| 欧美一级久久久久久久大| 精产国品久久一二三产区区别| 亚洲人成网亚洲欧洲无码久久 | 欧美牲交A欧牲交aⅴ久久| 狠狠狠色丁香婷婷综合久久俺| 久久精品男人影院| 亚洲国产成人精品无码久久久久久综合 | 精品久久久久久久久中文字幕| 欧美精品一区二区精品久久| 久久精品无码av| 久久久久久精品久久久久| 久久99精品久久久久子伦| 久久精品成人免费国产片小草| 综合久久精品色| 久久国产成人精品麻豆| 亚洲精品国产第一综合99久久| 久久99精品国产| 亚洲精品tv久久久久久久久久| 色综合久久中文字幕无码| 久久综合九色综合欧美狠狠| 无码人妻久久一区二区三区蜜桃| AV色综合久久天堂AV色综合在| 久久精品国产精品亚洲下载|