当前课程知识点:Linux 内核分析与应用 >  第5章 中断 >  5.6 动手实践-中断下半部的代码分析及应用 >  Video

返回《Linux 内核分析与应用》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《Linux 内核分析与应用》慕课在线视频列表

Video课程教案、知识点、字幕

大家好 本节视频来给大家演示一下中断下半部分实验

那么在理论课程中我们知道 Linux将中断处理分成上下两部分

上半部分主要处理紧急的 必须马上处理的事情

下半部分就是一些不那么紧急的事情

那么Linux内核也提供了相应的机制

在这里我们使用理论课程中的tasklet机制

来进行一次实验 我们来进入实验代码

首先这个实验只需要在上一个实验的基础之上

增加一部分代码就可以使用了

首先我们要在中断服务例程 也就是上半部分中添加

tasklet的init函数

也就是将下半部分函数进行一个注册

然后最主要的是要把我们的下半部分处理函数挂载上去

之后调用tasklet_schedule进行调度

接下来需要编写我们自己的下半部分处理函数

在这里我们仅仅进行了一行信息的打印

在最后我们需要在模块退出函数中写上tasklet_kill

用来注销掉我们的tasklet 好我们来对代码进行编译

好 我们来插入模块

还是使用1号中断线

好我们 来查看一下中断的情况

这里看到我们的设备已经正确的插入了

接下来我们来打印日志信息

好 我们可以在这里看到

已经顺利的进入了我们下半部分的程序

好 我们来退出模块

好 已经顺利退出

好 我们在这里来查看一下内核中的tasklet_init函数

它位于kernel下的

softirq.c文件中 好 我们来查找

好 我们可以看到这里也就是一些字段的赋值

包括函数的挂载

还有一个函数是task_schedule函数 这个函数位

interrupt.h中 是在include/Linux下

好 我们来查找

就在这里 实际上它是进入了这个函数

那我们可以看出来这里是进行了一个字段的赋值

接下来是进入kernel/softirq.c文件中

那在这里我们就可以看到

实际上它的调度就是把我们传入的tasklet挂入到了链表的尾部

接下来执行TASKLET_SOFTIRQ类型的软中断

但是调度之后不代表就执行了 真正的执行

对于我们的TASKLET_SOFTIRQ类型

是tasklet_action函数

这个函数位于kernel/softirq.c 我们来查找

在这个里面最核心的一个

是我们的while(list)

也就是遍历我们的tasklet链表

真正执行的函数是在这里

这里也就是tasklet这个结构体的最后一个字段

其实是func的一个参数

然后继续执行下一个tasklet

好 那我们可以来查看一下内核源码中驱动代码

应用tasklet是如何应用的

那我们现在可以来进入net

mac802154的

main.C函数

那我们可以看到它在这里是使用了tasklet_init

对应的它的中断的

下半部分函数是ieee802154_tasklet_handler

那么这个函数是定义在这里的

它是定义在这里

之后它的调度函数是在它(目录)底下的rx.c文件中

是在这里进行的调度 最后在main函数中

在最后的注销中它会把它的tasklet进行一个注销

好 我们在最后来分享一个小功能

这个小功能实际上是在内核源码的

Documentation 也就是内核源码中的文档中所发现的一个小功能

值得一提的是这个

Documentation中的文件都是非常重要的

对我们都非常有帮助

在里面我们可以找到很多的有意思的文件

比如说我们可以在它的x86目录下

boot.txt中 我们就可以找到

关于启动时的一些说明

像这里有内存一开始的分配

还比如说就在

Documentation下的Changes

那我们在这里可以知道

知道编译内核最少需要的工具是哪些

当然我们可以在Documentation中找到中断

相关的一些文档

比如说Documentation下的IRQ

在这里就解释了什么是IRQ

这里可是开发人员的解释

相对应的我们还有一些

中断的API介绍

是位于Documentation下的core-api

这个文件中

在这个文件的最后我们就可以发现一些介绍

像我们刚才所看到的manage.c

chip.c handle.c 这些文件

在这里都有说明 那这个小功能是位于

Documentation下的IRQ-affinity.txt文件中

我们可以来演示一下这个功能

这个功能就是如果我们的机器有多个CPU

我们可以来指定产生的中断是在哪一个CPU上来进行处理

也就是绑定CPU

关于这里我们应该合理地根据自己的生产环境

和应用的特点来平衡IRQ中断

这有助于提高我们系统整体的吞吐能力和性能

不同的场景下我们需要不同的设置

也不是说我们修改了某些参数就叫做

性能优化 还需要经过大量的测试 观察和改进

我们来在红帽下演示

首先我自己的系统已经在运行irqbalance服务

这个服务就是要平衡我们的中断到各个CPU

这个服务可能对我们的演示造成一定的影响 所以我们关闭这个服务

我们先来查看我们的中断情况

这是我们的网卡

我们可以看到网卡的中断是由CPU0114来处理的

而CPU1没有进行处理 我们再来看一下文件

对应网卡的irq是19

我们来看这个文件

我们可以看到这里是1 对应的二进制也是1 那么就是

仅仅在我们的CPU0来处理网卡中断

而CPU1不进行 现在我们来进行修改

再来查看

2对应的二进制是10 也就是我们只使用CPU1

来处理我们的网卡中断 而CPU0不响应

我们再次来查看中断情况

这里可以看到是156-14再次查看

还是156这个变成18 再次查看

156-21也达到了我们想要的效果 这就是本次视频的全部内容

谢谢大家

Linux 内核分析与应用课程列表:

第1章 概述

-1.1 Linux操作系统概述

--1.1 Linux 操作系统概述

-1.2 Linux内核结构以及内核模块编程

--Video

-1.3 Linux内核源码中的双链表结构

--Video

-1.4 源码分析-内核中的哈希表

--Video

-1.5 动手实践-Linux内核模块的插入和删除

--Video

-第1章 概述--章节测验

-第1章导学--引领你进入Linux内核的大门

第2章 内存寻址

-2.1 内存管理之内存寻址

--Video

-2.2 段机制

--Video

-2.3分页机制

--Video

-2.4 动手实践-把虚拟地址转换成物理地址

--Video

-第2章 内存寻址--章节测验

-第二章导学-从零打造自己的操作系统

第3章 进程管理

-3.1 进程概述

--Video

-3.2 Linux进程创建

--Video

-3.3 Linux进程调度

--Video

-3.4 动手实践-打印进程描述符task_struct中的字段

--Video

-3.5工程实践-基于内核模块的负载监控

--Video

-第3章 进程管理--章节测验

-第三章导学-进程背后琳琅满目的宝贝到哪里挖?

第4章 内存管理

-4.1 Linux内存管理机制

--Video

-4.2 进程用户空间管理机制

--Video

-4.3 物理内存分配与回收机制(上)

--Video

-4.4 物理内存分配与回收机制(下)

--Video

-4.5 动手实践-Linux内存映射基础(上)

--Video

-4.6 动手实践-Linux内存映射实现(中)

--Video

-4.7 动手实践-Linux内存映射测试(下)

--Video

-4.8 初学者对内存管理的常见疑惑

--初学者对内存管理的常见疑惑(一)

--初学者对内存管理的常见疑惑(二)

--初学者对内存管理的常见疑惑(三)

-第4章 内存管理--章节测验

第5章 中断

-5.1 中断机制概述

--Video

-5.2 中断处理机制

--Video

-5.3 中断下半部处理机制

--Video

-5.4 时钟中断机制

--Video

-5.5 动手实践-中断上半部的代码分析及应用

--Video

-5.6 动手实践-中断下半部的代码分析及应用

--Video

-第5章 中断--章节测验

第6章 系统调用

-6.1 Linux中的各种API

--Video

-6.2 系统调用机制

--Video

-6.3 动手实践-添加系统调用(系统调用日志收集系统)

--Video

-第6章 系统调用--章节测验

第7章 内核同步

-7.1 内核同步概述

--Video

-7.2 内核同步机制

--Video

-7.3 动手实践-内核多任务并发实例(上)

--Video

-7.4 动手实践-内核多任务并发实例(下)

--Video

-第7章 内核同步--章节测验

第8章 文件系统

-8.1 虚拟文件系统的引入

--Video

-8.2 虚拟文件系统的主要数据结构

--Video

-8.3 文件系统中的各种缓存

--Video

-8.4 页高速缓存机制以及读写

--Video

-8.5 动手实践-编写一个文件系统(上)

--Video

-8.6 动手实践-编写一个文件系统(中)

--Video

-8.7 动手实践-编写一个文件系统(下)

--Video

-第8章 文件系统--章节测验

第9章 设备驱动

-9.1 设备驱动概述

--Video

-9.2 I/O空间管理

--Video

-9.3 设备驱动模型

--Video

-9.4 字符设备驱动程序简介

--Video

-9.5 块设备驱动程序简介

--Video

-9.6 动手实践-编写字符设备驱动程序

--Video

-9.7工程实践-编写块设备驱动的基础(上)

--Video

-9.8 工程实践-块设备驱动程序分析(中)

--Video

-9.9 工程实践-块设备驱动程序实现(下)

--Video

-第9章 设备驱动--章节测验

致谢与说明

-致谢与说明

--Video

直播视频:从Linux内核学习到自主操作系统研发

-从Linux内核学习到自主操作系统研发

附录:实验代码、课件以及相关素材

-各章实验代码

-《Linux内核分析与应用》课件

-《Linux操作系统原理与应用》教材课堂视频

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。