作者ggg12345 (ggg)
看板CSSE
标题Re: [问题]想请问中断和中断向量的差别和个别意思?
时间Mon Jun 2 01:39:26 2008
※ 引述《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