Re: [問題]想請問中斷和中斷向量的差別和個別意思?
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):
CSSE 近期熱門文章
PTT數位生活區 即時熱門文章