第三十八期-ARM Linux内核的中断(8)

作者:罗宇哲,中国科学院软件研究所智能软件研究中心

上一期中我们介绍了ARM Linux内核中的底半机制和软中断的处理流程,这一期我们将介绍ARM Linux内核中小任务的工作流程和与工作队列相关的关键数据结构。

一、ARM Linux内核中小任务的工作流程

在ARM Linux内核中,小任务分为高优先级的小任务和低优先级的小任务,它们是基于软中断实现的,ARM Linux内核通过softirq_init()函数将高优先级的小任务和低优先级的小任务分别注册为HI_SOFTIRQ类型的软中断和TASKLET_SOFTIRQ类型的软中断。softirq_init()函数的源码可以在openEuler源码仓库的openeuler/kernel/blob/kernel-4.19/kernel/softirq.c文件中可以找到(下文中没有特别说明的源码都在softirq.c文件中):
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZTaz2n3U-1591327792184)(media/840d98a0e556ebd2793dc242c68b2d50.png)]
该函数将为低优先级和高优先级的小任务注册了处理函数。低优先级的小任务的处理函数为tasklet_action,高优先级小任务的处理函数为tasklet_hi_action:
在这里插入图片描述
这两个函数调用了tasklet_action_common函数,并分别使用了tasklet_vec和tasklet_hi_vec,这两个参数定义如下:
在这里插入图片描述
从参数的定义可以看出,每个处理器有一个高优先级小任务链表和一个低优先级小任务链表。tasklet_struct结构体是小任务的关键数据结构,其定义可以在openeuler/kernel/blob/kernel-4.19/include/linux/interrupt.h 文件中找到:
在这里插入图片描述
该数据结构各字段的含义如下[1,3]:

  • next:tasklet单向链表中指向下一项的指针;
  • state:小任务的状态。当该值为0时代表小任务没有被调度;当该值的TASKLET_STATE_SCHED位为1时表示小任务被调度,即将被执行;当该值的TASKLET_STATE_RUN位为1时表示小任务正在被执行,这种情况只在对称多处理系统(SMP)[2]中发生;
  • count:计数变量,该值为0表示允许小任务执行,该值为非零值则表示禁止小任务被执行;
  • func:tasklet处理函数;
  • data:传给处理函数的参数。这是一个32位的无符号整数,其具体含义可供func函数自行解释,比如将其解释成一个指向某个用户自定义数据结构的地址值;

TASKLET_STATE_SCHED和TASKLET_STATE_RUN位的定义在interrupt.h文件中也可以找到:
在这里插入图片描述
其值分别为0和1。

tasklet_action_common()函数在关中断的情况下遍历输入的小任务链表,调用小任务处理函数,并调用__raise_softirq_irqoff()函数触发小任务类型对应的软中断:

static void tasklet_action_common(struct softirq_action *a,

struct tasklet_head *tl_head
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux内核 前言 第1章 硬件基础与软件基础 6 1.1 硬件基础 6 1.1.1 CPU 7 1.1.2 存储器 8 1.1.3 总线 8 1.1.4 控制器和外设 8 1.1.5 地址空间 9 1.1.6 时钟 9 1.2 软件基础 9 1.2.1 计算机语言 9 1.2.2 什么是操作系统 11 1.2.3 内核数据结构 13 第2章 内存管理 15 2.1 虚拟内存抽象模型 15 2.1.1 请求调页 17 2.1.2 交换 17 2.1.3 共享虚拟内存 18 2.1.4 物理寻址模式和虚拟寻址模式 18 2.1.5 访问控制 18 2.2 高速缓存 19 2.3 Linux页表 20 2.4 页分配和回收 21 2.4.1 页分配 22 2.4.2 页回收 22 2.5 内存映射 22 2.6 请求调页 23 2.7 Linux页缓存 24 2.8 页换出和淘汰 25 2.8.1 减少缓冲区和页缓存大小 25 2.8.2 换出System V共享内存页 26 2.8.3 换出和淘汰页 27 2.9 交换缓存 27 2.10 页换入 28 第3章 进程 29 3.1 Linux进程 29 3.2 标识符 31 3.3 调度 32 3.4 文件 34 3.5 虚拟内存 35 3.6 创建进程 36 3.7 时间和定时器 37 3.8 执行程序 38 3.8.1 ELF 39 3.8.2 脚本文件 40 第4章 进程间通信机制 41 4.1 信号机制 41 4.2 管道 42 4.3 套接字 44 4.3.1 System V的进程间通信机制 44 4.3.2 消息队列 44 4.3.3 信号量 45 4.3.4 共享存储区 47 第5章 PCI 49 5.1 PCI的地址空间 49 5.2 PCI配置头 50 5.3 PCI的I/O和存储地址空间 51 5.4 PCI-ISA桥 51 5.5 PCI-PCI 桥 51 5.5.1 PCI-PCI桥:PCI I/O和存储地址 空间的窗口 51 5.5.2 PCI-PCI桥:PCI配置周和PCI 总线编号 52 5.6 Linux PCI初始化 53 5.6.1 Linux内核PCI数据结构 53 5.6.2 PCI设备驱动程序 53 5.6.3 PCI的BIOS函数 56 5.6.4 PCI修正过程 57 第6章 中断处理与设备驱动程序 60 6.1 中断中断处理 60 6.1.1 可编程中断控制器 61 6.1.2 初始化中断处理数据结构 61 6.1.3 中断处理 62 6.2 设备驱动程序 63 6.2.1 测试与中断 64 6.2.2 直接存储器访问(DMA) 65 6.2.3 存储器 66 6.2.4 设备驱动程序与内核的接口 66 6.2.5 硬盘 69 6.2.6 网络设备 74 第7章 文件系统 77 7.1 第二个扩展文件系统EXT2 78 7.1.1 EXT2系统的inode节点 79 7.1.2 EXT2系统的超级块 80 7.1.3 EXT2系统的组描述符 80 7.1.4 EXT2系统的目录 81 7.1.5 在EXT2文件系统中查找文件 81 7.1.6 在EXT2文件系统中改变文件 的大小 82 7.2 虚拟文件系统 83 7.2.1 VFS文件系统的超级块 84 7.2.2 VFS文件系统的inode节点 84 7.2.3 注册文件系统 85 7.2.4 装配文件系统 85 7.2.5 在虚拟文件系统中查找文件 87 7.2.6 卸载文件系统 87 7.2.7 VFS文件系统的inode缓存 87 7.2.8 目录缓存 88 7.3 缓冲区缓存 88 7.3.1 bdflush内核守护进程 90 7.3.2 update进程 90 7.4 /proc文件系统 91 7.5 特殊设备文件 91 第8章 网络 92 8.1 TCP/IP网络概述 92 8.2 Linux中的TCP/IP网络层次结构 95 8.3 BSD套接字接口 96 8.4 INET的套接字层 97 8.4.1 创建BSD套接字 98 8.4.2 为INET BSD Socket绑定地址 99 8.4.3 建立INET BSD Socket连接 99 8.4.4 INET BSD Socket侦听 100 8.4.5 接受连接请求 100 8.5 IP层 100 8.5.1 套接字缓冲区 100 8.5.2 接收IP报文 101 8.5.3 发送IP报文 102 8.5.4 数据分片 102 8.6 地址解析协议 103 8.7 IP路由 104 第9章 内核机制与模块 107 9.1 内核机制 107 9.1.1 Bottom Half控制 107 9.1.2 任务队列 108 9.1.3 定时器 109 9.1.4 等待队列 110 9.1.5 自旋锁 110 9.1.6 信号量 110 9.2 模块 111 9.2.1 模块载入 112 9.2.2 模块卸载 113 第10章 处理器 115 10.1 X86 115 10.2 ARM 115 10.3 Alpha AXP处理器 115 第11章 Linux内核源代码 117 11.1 怎样得到Linux内核源码 117 11.2 内核源码的编排 117 11.3 从何处看起 118 第12章 Linux数据结构 120 附录A 有用的Web和FTP站点 138 附录B 词汇表 139

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值