DragonOS的中断处理设计

2022-10-31 15:10:33 浏览数 (1)

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

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

写这篇文章的时候,代码版本长这样:https://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_numparameterregs

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

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

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

0 人点赞