能力值:
( LV3,RANK:30 )
|
-
-
2 楼
还有为什么读写ssdt的时候需要通过sti,cli对中断进行屏蔽,原因是什么?要屏蔽掉哪些中断。
|
能力值:
( LV3,RANK:30 )
|
-
-
3 楼
1. 软件发起的中断:
使用 INT 指令,而 INT3, INTO 或者 BOUND 可以算是异常也可以算是软件发起。这些指令引发的中断是不能被屏蔽的。
2. 软件引发的异常:
由软件执行过程中,由于某些条件或错误引发异常,同样这些异常是不能被屏蔽,但是异常是有优先级的,同时产生多个异常时,响应优先级别高的异常。
3. 关于中断的屏蔽:
IF 标志位,只能对 makable(可屏蔽)的中断产生作用,就也是由 interrupt controller(中断控制器)产生的中断请求,这些中断请求可以通过 IF 标志进行屏蔽。
interrupt controller(中断控制器)包括:8259,local APIC 以及 IO APIC,因此:这些部件所产生的中断可以被屏蔽。
4. 关于 NMI(不可屏蔽中断)
NMI 直接通过处理器的 NMI pin 进行传递中断请求,是两个方法可以屏蔽 NMI:一是 PCH 上的处理器接口寄存器,二是能过 Loal APIC 来屏蔽。
5. 关于中断 vector(向量号)
0 到 31 号中断向量号是保留的, 32-255 是开放给软件自定义使用。
6. 关于 sti,cli 指令
sti 和 cli 指令会修改 IF 标志位,从而 开启 / 关闭 makable(可屏蔽)中断的响应许可!
|
能力值:
( LV3,RANK:30 )
|
-
-
4 楼
32-255是用户可以自己设置的,请问这些可以自己设置的是软中断还是异常?那外设的可屏蔽中断又使用IDT中的哪一部分呢??
我现在知道IDT的上部分0-31是cpu自己保留的,它们中有异常也有软中断,2号向量是NMI,其余的也是不可屏蔽的异常或者软中断。
那么我可以统计为0-31描述的是被保留的不可屏蔽向量区域(包含异常、软中断、NMI),那么剩下的32-255又该如何划分?它们都是让用户自己编程的软中断?还是说它们都是用于外设硬件对其设置的?对于后面这部分我糊涂了,Xuetr看到的是32-255中,上半部分是一些no used,下半部分全都是KiUnexpectedInterrupt n,这两者究竟是用于干什么的呢?
(int 2E算是自陷,可是为什么不包括在保留的32个向量中,有的文章提示道异常处理都在前32个向量,那么2E也是异常呀,但是它并不包括在IDT的头32个内,望指点....)。
|
|
|