(转载)http://www.cnblogs.com/Huayuan/archive/2012/05/18/2507150.html
1、中断:
通常被定义成一个事件,该事件改变处理器执行的指令顺序。这样的事件与cpu芯片外部电路产生
的电信号相对应。
2、中断的产生:
每个能够发出中断请求的硬件设备控制器都有一条称为IRQ的输出线(中断线)。所有的IRQ线都
与一个中断控制器的输入引脚相连,中断控制器与cpu的intr引脚相连。
3、中断向量:
每个中断由0-255之间的一个8位数来标识。称为中断向量。
4、中断描述符表:
IDT是一个系统表,它与每一个中断或者异常向量相联系,每一个向量在表中有相应的中断处理程
序的入口地址。cpu的idtr寄存器执行IDT表的物理基地址。
5、中断的硬件处理:
在内核被init进程初始化后,cpu运行在保护模式下。当执行一条指令后,sc和eip这对寄存器包
含了下一条将要执行的指令的逻辑地址。在执行这条指令之前,cpu控制单元会检查在运行前一条指令时是
否发生了一个中断。如果发生了,cpu控制单元处理中断。
软中断:
软中断是利用硬件中断的概念,用软件方式进行模拟,实现宏观上的异步执行效果。
硬中断是外部设备对cpu的中断。
软中断通常是硬中断服务程序对内核的中断。(中断服务程序和中断处理程序不同)
信号则是由内核或者其他进程对某个进程的中断。
理解:因为每个进程空间或者线程空间都是在一定程度上相对逻辑独立的,类似于外部设备DMA相
对于cpu。所以从理论上说,是可以实现中断的。
扩展:信号量与消息队列都是提供给用户程序的,是内核服务的一种封装。
进程内核栈和用户栈:
每个进程都有两个栈:用户栈和内核栈。当进程在用户空间运行时,cpu堆栈指针寄存器里面的内
容是用户堆栈地址。同理,进程在内核空间运行时,eip值是内核栈空间地址。
进程用户栈和内核栈的切换,当进程因为中断或者系统调用而陷入内核态执行时,进程所使用的
堆栈也要从用户栈转到内核栈。
检查信号中断时在内核态即将进入用户态的时候,而不是任何时候都检查的。
软中断时软件实现的中断,也就是程序运行时其他程序对它的中断。
中断源发中断请求或者软中断信号后,cpu或者接收进程在适当的时机自动进行中断处理或者完成
软中断信号对应的功能。
软中断发生的时间是由程序控制的,而硬中断时随机的。
构成软中断机制的核心元素:
软中断状态寄存器irq_stat:
软中断向量表:
软中断守护daemon:这是软中断实现的核心,通过查询irq_stat判断软中断是否发生。
软中断的工作过程模拟了硬中断过程,当某一个软中断事件发生后,首先需要设置对应的中断标
记位,触发中断事务,然后唤醒守护进程去检查中断状态寄存器,如果查询发现某一个软中断事务发生,
那么通过软中断向量表调用软中断服务程序action。