Linux操作系统基础知识之五:中断和异常

来源:岁月联盟 编辑:exp 时间:2011-10-15

Q1.        什么是中断?什么是异常?二者有何不同?
A:

1)        中断控制是为克服对I/O接口采用程序查询控制服务方式所带来的处理器低效率而产生的,它的主要优点是只有在I/O接口需要服务时才能得到处理器的响应,而不需要处理器不断地进行查询;因此,最初的中断全部是对外部设备而言的,称为外部中断(或硬件中断);

2)        异常也叫做内部中断,它是为解决机器运行时所出现的某些随机事件及编程的方便而出现的;

3)        256种中断分为外部可屏蔽中断(INTR)和外部非屏蔽中断(NMI),所有I/O设备产生的中断请求(IRQ)均引起可屏蔽中断,而紧急事件(如硬件故障)引起的故障则产生非屏蔽中断;

4)        异常又分为故障(fault)和陷阱(trap),它们的共同特点是既不使用中断控制器,又不能被屏蔽(异常其实是CPU发出的终端信号)。

 

Q2.        什么是中断向量?Linux是如何分配中断向量的?

A:

1)        为使处理器可以容易地识别每种中断源,将256种向量中断从0到255进行编号,即赋以一个中断类型码n,把这个8位的无符号整数叫做向量,即中断向量;

2)        Linux对256个中断向量的分配如下:

A.      编号为0~31的向量对应于异常和非屏蔽中断;

B.       编号为32~47的向量(即由I/O设备引起的中断)分配给可屏蔽中断;

C.       剩余的、编号为48~255的向量用来标识软中断;Linux只用其中的一个(即128或0x80向量)来实现系统调用。

 

Q3.        什么是中断描述符表?什么是门描述符?

A:

1)        在实地址模式下,CPU将内存中从0开始的1KB空间作为一个中断向量表,表中每个表项占4个字节;但在保护模式,由4个字节的表项构成的中断向量表满足不了要求;因此在保护模式下,中断向量表中的表项由8个字节组成,中断向量表也改称为中断描述符表(IDT);

2)        IDT中的每个表项叫做一个门描述符(gate descriptor)。

 

Q4.        门描述符有哪些类型?它们有什么不同?

A:门描述符中类型码占3位,表示门描述符的类型,主要分为以下几类:

1)        中断门(interrupt gate):其类型码为110,包含了一个中断或异常处理程序所在段的选择符和段内偏移量;

2)        陷阱门(trap gate):其类型码为111;

3)       系统门(system gate):是Linux内核特别设置的,用来让用户态的进程访问陷阱门。

摘自:zhouzxi的专栏