精華區beta CSSE 關於我們 聯絡資訊
※ 引述《uefang (雲飛(想出去玩))》之銘言: : take by http://0rz.tw/d948Z Wiki Interrupt : 在輪詢(Polling)時,為了避免處理器浪費寶貴的時間等待外部事件發生, : 因此採用一種叫做硬體中斷的方式。 : 中斷可由硬體的控制線來當作一套分別的系統實作,或是也可以整合到記憶體系統下。 : 如果在硬體下實作,在裝置與處理器的中斷接腳之間通常會有一個中斷控制器 : (controller)電路,用來多工處理數個中斷源,通常對應到一至兩條的處理器線路上。 : 如果實作成記憶體控制器的一部分,中斷則會對應到系統記憶體位置空間上。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 這個說法, 似乎很有趣 ! 傳統上中斷控制器似乎不會採這種說法. memory reference page fault 未 必是完整指令之間的插斷, 發生的時機可能在 未完整執行前的 fetch cycle 就已發生, 這就使得 op-code 或 operand 因無法立即正確取得, 而造成無 法執行, 必須進一步做例外處理. 這種例外發生的時候當然會記下該指令的 位置, 並記下是何處的記憶體位址產生此種錯誤. 這種例外處理的插斷與接 續是在 微指令(micro code) 內就必需先做 status save , 才能使得該指令 可以在 memory available 時可以將未完成的指令接續做完. page fault 相當於是一種 incomlete instruction 被執行, 這可被視 為是一種 illegal instruction trap , 伴隨這種同步型中斷而來的是 mode (user or priviledge mode)的檢視與改變, 這跟 int n 做為 system call trap 是具有同樣的特性. 中斷跳轉必須用到的 vector table 與所至的 ISR 程式位置, 當然是要 有實體記憶體存放, 才能被後續執行. 系統核心是常駐的, 因此, interrupt vector table 與 ISR 置於系統核心是合理的, 但未必就不能被 page out, 而 ISR 也未必就不能在 user space . ================================================================== 外部事件觸發的非同步中斷(Asynchronous interrupt). 中斷指的就是 接受外部事件發出的 訊息(signal), 因之改變 processor 正在執行的 循序次序, 跳到經由事先設定的對應轉向機制到達對應的中斷處理程式 (ISR)去執行或通知後續的程式(或程序)做後續的對應處理. 是否接受中斷可以使用 mask 來阻擋中斷訊息的進入, 如 NMI non-mask interrupt , 可關閉(disable)與開啟(enable)的 maskable interrupt 跳轉的轉向機制有 直接對應中斷訊號線的 fixed direct address. (如 RST n). 由中斷源(亦可透過中斷控制器)產生 transfer direct address 告知 cpu 直接跳轉. 由中斷源(亦可經由中斷控制器)產生 trnsfer vector table 的 index , 讓 processor 到 vector table 間接(indirect)取得 ISR 的入口位置, 再跳轉. (x86 的 vector interrupt) 目前常用的中斷跳轉機制(如 8086)相當於由下列動作: disable interupt push psw indirct call to vector table 三個指令一次整個完成. 因執行指令而隨指令立即發生的此類事件中斷, 通常稱為 synchronous interrupt 或 exception trap . 事件的來源因隨指令的執行而由 cpu 內部(processor , mmu)發出訊息, 如: Divided by zero Page fault int n 指令 ================= 多處理機或多核心的 interrupt 與 trap 會是個新的又有趣的狀況, 外部非同 步的中斷是打斷那個核心的執行次序 ? 跳轉機制要考慮是通知那個核心或處 理機. 同步的 exception trap 發生時, 執行的核心當然是不能再繼續原來的狀態, 那麼可以暫停或改做其他 thread 的工作, 而將需要 exception 處理的後續工 作, 通知並轉交給其他核心或處理機嗎 ? ======================================================================= : 中斷可以分類成:可遮罩式(maskable)中斷(參閱IRQ)、 : 不可遮罩式(non-maskable)中斷(參閱NMI)、 : 內部處理器中斷(interprocessor interrupt,簡稱IPI)、 : 軟體中斷,和偽中斷。 : 可遮罩式中斷(IRQ)是一種硬體中斷,透過設定中斷遮罩暫存器 : (interrupt mask register; IMR)內的位元遮罩(bit-mask)值來讓它可被系統忽略。 : 同樣地,不可遮罩式(NMI)也是硬體中斷,但卻和位元遮罩無關,意謂著它是無法被系統 : 忽略的。NMI通常使用於計時器(timers),特別像是看門狗計時器(watchdog timers) : 。 : 內部處理器中斷是一種中斷的特殊案例,在多處理器系統下,由某顆處理器產出中斷來通 : 知另一顆處理器之用。 : 軟體中斷是處理器內執行了某個指令後,所產生出的中斷。軟體中斷通常用來實作成系統 : 呼叫(System calls),因為它們是實作成某種例行性的副程式呼叫,用於處理器保護層 : 級(Ring (電腦安全))更動時。 : 偽中斷是一種非需求的硬體中斷。在某些系統狀況下會容易發生,如中斷線路上的電子干 : 擾,或是不正確的硬體設計。 : 處理器通常含有一個內部的中斷遮罩,當這個設定後,可讓軟體忽略所有的外部硬體中斷 : 。在可程式化中斷控制器(PIC)中,相較於去讀取中斷遮罩暫存器(IMR),這個遮罩可 : 提供較快的硬體存取,或是關閉裝置本身的中斷。 : 在某些例子中,像是x86架構下,在處理器本身關閉和開啟中斷會以記憶屏障 : (memory barrier)的方式運作,在此情況下實際上反而變慢。 : 若一個中斷使機器處於明確定義的狀態,則稱這中斷為精確中斷(precise interrupt)。 : 這類的中斷有下列四種特性: : 程式計數器(Program Counter; PC)會存入已知的位置。 : 在PC導向前所有的指令都會執行完畢。 : 超出PC導向後的指令不可以被執行。 : (並沒有限制超出PC後不可有指令,只是任何對暫存器或記憶體造成的改變必須在中斷發 : 生前復原。) : PC導向的指令執行狀態是已知的。 : 任何一種中斷其不符合這些需求的,稱作非精確中斷(imprecise interrupt)。 : 若耗費過多時間處理中斷,會造成整體系統效能被嚴重阻礙的現象, : 有人稱作中斷風暴(interrupt storm)。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.4.12