每台计算机都连接有很多外设,那操作系统对这些外设进行管理时要如何通信呢?一般有轮询(Polling)和中断(Interrupt)两种,第一种是操作系统定时主动去查询这些外设,看有没有设备需要进行处理,而第二种则是外设需要处理时主动向操作系统发送请求信号,然后操作系统再做相应的处理。这第二种不需要定时去查询,只有在设备需要时才进行处理,节省了CPU的消耗,提高了效率。故而我们先尝试下如何去使用Linux内核的中断处理机制,本次采用共享中断的机制来学习我们的中断程序。
一般来说,一个中断有这样的操作步骤:
1.注册中断及服务子程序;
2.使能中断;
3.中断到来时调用服务子程序进行处理,处理完成后退出继续等待下一个中断的到来。
而在Linux内核源码include/linux/interrupt.h里有注册中断需要用到的如下函数:
static inline int __must_check request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev) ;