DragonOS的中断处理设计

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

首先,先上DragonOS的GitHub链接:GitHub - fslongjin/DragonOS: 一个64位的操作系统。A x86_64 operating system.icon-default.png?t=M3K6https://github.com/fslongjin/DragonOS

写这篇文章的时候,代码版本长这样:update README.md · fslongjin/DragonOS@5ec1b82 · GitHubicon-default.png?t=M3K6https://github.com/fslongjin/DragonOS/commit/5ec1b825e6f8b780027b29ec80b8d672dd8884bd

中断响应流程

1.硬中断

1.1. 中断处理模型

1.1.1. hardware_intr_controller结构

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

成员 参数 返回值 描述
enable irq_num void 使能中断操作接口
disable irq_num void 禁止中断操作接口
install irq_num, void*arg ul 安装中断操作接口
uninstall irq_num void 卸载中断操作接口
ack irq_num void 应答中断操作接口

1.1.2. irq_desc_t结构

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

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

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*data void 软中断处理函数
data void* 传递给软中断处理函数的数据

2.2软中断注册程序register_softirq

 * @param irq_num 软中断号

 * @param action 响应函数

 * @param data 响应数据结构体

2.3软中断卸载程序unregister_softirq

 * @param irq_num 软中断号

2.4软中断处理程序do_softirq

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

转载请注明来源:DragonOS的中断处理设计 | | 龙进的博客icon-default.png?t=M3K6https://longjin666.cn/?p=1401

猜你喜欢

转载自blog.csdn.net/qq_34026204/article/details/124369880