linux内核的中断机制分析(栢图实验室)

linux内核的中断机制分析(栢图实验室)

ID:20355902

大小:101.00 KB

页数:11页

时间:2018-10-09

linux内核的中断机制分析(栢图实验室)_第1页
linux内核的中断机制分析(栢图实验室)_第2页
linux内核的中断机制分析(栢图实验室)_第3页
linux内核的中断机制分析(栢图实验室)_第4页
linux内核的中断机制分析(栢图实验室)_第5页
资源描述:

《linux内核的中断机制分析(栢图实验室)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Linux内核的中断机制分析一、中断的概念中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的CPU暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件服务的程序中去,服务完毕后再返回去继续运行被暂时中断的程序。Linux中通常分为外部中断(又叫硬件中断)和内部中断(又叫异常)。在实地址模式中,CPU把内存中从0开始的1KB空间作为一个中断向量表。表中的每一项占4个字节。但是在保护模式中,有这4个字节的表项构成的中断向量表不满足实际需求,于是根据反映模式切换的信息和偏移量的足够使得中断向量表的表项由8个字节组成,而中断向量表也叫做

2、了中断描述符表(IDT)。在CPU中增加了一个用来描述中断描述符表寄存器(IDTR),用来保存中断描述符表的起始地址。二、中断的请求过程外部设备当需要操作系统做相关的事情的时候,会产生相应的中断。设备通过相应的中断线向中断控制器发送高电平以产生中断信号,而操作系统则会从中断控制器的状态位取得那根中断线上产生的中断。而且只有在设备在对某一条中断线拥有控制权,才可以向这条中断线上发送信号。也由于现在的外设越来越多,中断线又是很宝贵的资源不可能被一一对应。因此在使用中断线前,就得对相应的中断线进行申请。无论采用共享中断方式还是独占一个中断,申请过程都是先讲所有的中断

3、线进行扫描,得出哪些没有别占用,从其中选择一个作为该设备的IRQ。其次,通过中断申请函数申请相应的IRQ。最后,根据申请结果查看中断是否能够被执行。中断机制的核心数据结构是irq_desc,它完整地描述了一条中断线(或称为“中断通道”)。以下程序源码版本为linux-2.6.32.2。其中irq_desc结构在include/linux/irq.h中定义:typedefvoid(*irq_flow_handler_t)(unsignedintirq,structirq_desc*desc);structirq_desc{unsignedintirq;struc

4、ttimer_rand_state*timer_rand_state;unsignedint*kstat_irqs;#ifdefCONFIG_INTR_REMAPstructirq_2_iommu*irq_2_iommu;#endifirq_flow_handler_thandle_irq;/*高层次的中断事件处理函数*/structirq_chip*chip;/*低层次的硬件操作*/structmsi_desc*msi_desc;void*handler_data;/*chip方法使用的数据*/void*chip_data;/*chip私有数据*/struc

5、tirqaction*action;/*行为链表(actionlist)*/unsignedintstatus;/*状态*/unsignedintdepth;/*关中断次数*/unsignedintwake_depth;/*唤醒次数*/unsignedintirq_count;/*发生的中断次数*/unsignedlonglast_unhandled;/*滞留时间*/unsignedintirqs_unhandled;spinlock_tlock;/*自选锁*/#ifdefCONFIG_SMPcpumask_var_taffinity;unsignedintn

6、ode;#ifdefCONFIG_GENERIC_PENDING_IRQcpumask_var_tpending_mask;#endif#endifatomic_tthreads_active;wait_queue_head_twait_for_threads;#ifdefCONFIG_PROC_FSstructproc_dir_entry*dir;/*在proc文件系统中的目录*/#endifconstchar*name;/*名称*/}____cacheline_internodealigned_in_smp;I、Linux中断的申请与释放:在

7、interrupt.h>,,实现中断申请接口:request_irq(unsignedintirq,irq_handler_thandler,unsignedlongflags,constchar*name,void*dev);函数参数说明unsignedintirq:所要申请的硬件中断号irq_handler_thandler:中断服务程序的入口地址,中断发生时,系统调用handler这个函数。irq_handler_t为自定义类型,其原型为:typedefirqreturn_t(*irq_handler_t)(int,void*);而irqreturn_t

8、的原型为:typedefenumirq

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。