18,777
社区成员
发帖
与我相关
我的任务
分享
root@primary:~# cat /proc/interrupts
CPU0
0: 378082 XT-PIC-XT timer
1: 4 XT-PIC-XT i8042
2: 0 XT-PIC-XT cascade
8: 0 XT-PIC-XT rtc0
11: 57704 XT-PIC-XT ehci_hcd:usb1, ohci_hcd:usb2, eth0
14: 15873 XT-PIC-XT ide0
NMI: 0 Non-maskable interrupts
MCE: 0 Machine check exceptions
MCP: 0 Machine check polls
ERR: 0
root@primary:~#
可以看出第11号中断被3个设备复用,即被两个usb和一块网卡占用,明白了这个那么你的中断服务程序的疑问便就解开了,为了能防止复用了同一个中断线的设备不发生冲突,因此在内核当中实现了中断服务程序,当一个新的设备连接到主板上并请求使用中断的时候需要在其驱动程序当中向该中断服务程序注册,并由中断服务程序来决策在什么情况下中断应该由谁来处理。
3.中断处理程序也分为硬件的中断处理程序和软件中断处理程序。
3.1硬件中断处理程序即为设备驱动程序中向中断服务程序注册的程序。它负责响应硬件中断,如一块使用光纤模块通信的硬件使用了4号中断,那么它的驱动程序当中就要注册中断号为4的中断处理程序。
3.2软件中断处理程序是由操作系统提供的为保证系统异步执行的机制。如在linux下由用户态向内核态转换需要调用0x80软件中断。
4.signal注册的信号处理函数为一种软件中断。其最终会调用sys_signal系统调用。