在这里简单记录一下目前DragonOS中的中断处理的设计吧。

首先,先上DragonOS的GitHub链接:https://github.com/fslongjin/DragonOS

写这篇文章的时候,代码版本长这样:https://github.com/fslongjin/DragonOS/commit/5ec1b825e6f8b780027b29ec80b8d672dd8884bd

中断响应流程

1.硬中断

1.1. 中断处理模型

1.1.1. hardware_intr_controller结构

该结构提供了对硬件中断的控制方法的统一抽象。

成员参数返回值描述
enableirq_numvoid使能中断操作接口
disableirq_numvoid禁止中断操作接口
installirq_num, void*argul安装中断操作接口
uninstallirq_numvoid卸载中断操作接口
ackirq_numvoid应答中断操作接口

1.1.2. irq_desc_t结构

该数据结构提供了对中断服务程序的抽象

成员类型参数返回值描述
controllerhardware_intr_controller硬件中断控制结构
irq_namechar*中断名
parameterul中断处理函数的参数
handler函数irq_num
parameter
regs
void中断服务程序
flagsul自定义标志位

1.1.3. 中断注册程序irq_register

该程序用于注册中断服务程序。

  * @param irq_num 中断向量号

  * @param arg 传递给中断安装接口的参数

  * @param handler 中断处理函数

  * @param paramater 中断处理函数的参数

  * @param controller 中断控制器结构

  * @param irq_name 中断名

1.1.4. 中断卸载程序irq_unregister

该程序用于卸载中断服务程序。

 * @param irq_num 中断向量号

2.软中断

软中断与硬中断类似,只是其由软件方式创建,且在处理时可被中断。可作为中断下半部使用,任务处理实时性低于硬中断。

软中断模块设计与硬中断的设计类似。其包括了一个软中断向量表及一些函数模型。

2.1软中断向量表表项定义

表项类型定义为softirq_t

成员类型参数返回值描述
action函数void*datavoid软中断处理函数
datavoid*传递给软中断处理函数的数据

2.2软中断注册程序register_softirq

 * @param irq_num 软中断号

 * @param action 响应函数

 * @param data 响应数据结构体

2.3软中断卸载程序unregister_softirq

 * @param irq_num 软中断号

2.4软中断处理程序do_softirq

在该函数中,先检测软中断是否正在被处理,如果空闲,则发起处理并置位标志位。

转载请注明来源:https://longjin666.cn/?p=1401

欢迎关注我的公众号“灯珑”,让我们一起了解更多的事物~

你也可能喜欢

发表评论