![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux中断
文章平均质量分 63
One Piece&
这个作者很懒,什么都没留下…
展开
-
linux中断系统中,重要的数据结构
1、硬件中断的发生这里举得例子有点难度,我们先来介绍一下:什么是共享中断?多个中断源,使用同一个GPIO引脚(这个GPIO引脚,已经配置好了,用做中断引脚)。2 中断系统中用到的关键结构体:3 硬件中断号和虚拟中断号3.1 假设,有两个中断,分别是GPIO1模块中的5号中断和GPIO2模块中的5号中断。虽然他们用的是同一号中断,但是属于不同的模块。显然,在设备树中,他们的配置是不同的。在设备树中,指定一个中断的方式如下://表示要使用的GPIO 1模块里面的引脚interrupt -原创 2021-04-15 14:59:45 · 143 阅读 · 0 评论 -
linux中,中断的处理方法的改进 中断线程化
前言之前使用的用内核线程去处理中断(任务队列),对于单CPU系统来说,是很高效的一种方式,但是随着CPU越来越多,这种方法就显得不是很高效。因为,一个CPU只能创建一个内核线程Kworker。多个中断的work都是由一个worker线程来处理。这会导致内核线程kworker对CPU的占用率过高,而其他CPU却空着。这对于多CPU系统来说,显然不能被接收!!1 改进改进的地方在于:我们不用再自己定义work结构体,也无需再使用函数schedule_work(&work)。我们可以使用reque原创 2021-04-15 14:55:17 · 393 阅读 · 0 评论 -
linux中,中断的处理方法 工作队列
1、前言为了提高中断的执行速度,我们将不是特别耗时的任务交给下半部tasklet来做(tasklet在在中断的上下文中工作,无法休眠),但是,当有非常复杂的操作需要执行的时候,如果依旧采用下半部tasklet来做,虽然系统依旧可以响应中断,但是,应用应用程序是不能执行的。因为整个系统都在执行软中断或是硬中断。将耗时的操作放在某一个线程(内核线程)去做,可以解决系统的卡顿问题,因为线程可以休眠。这就是工作队列。2 内核线程的介绍:内核会为我们自动创建一个kworker线程(一个CPU一个*),每个原创 2021-04-15 14:47:27 · 454 阅读 · 0 评论 -
异常与中断的概念以及处理流程
1、异常与中断的处理流程(中断属于异常):2、小节:中断函数是怎么被调用的????当有中断信号被cpu检测到,cpu会通过中断向量表,知道他要跳转到0x18地址。Cpu就会强制跳转这个地址(这个是由硬件决定的,硬件保证了cpu必须跳到0x18地址),我们在这个地址,放一条跳转指令ldr pc,_irq;根据这个指令,cpu会再次跳转,跳转到irq函数。函数做的事情是(这部分是由软件决定的):1)、保存现场。2)、处理异常–》执行不同的中断处理函数(在这个函数里面,做的事情是:分辨中断源;调用对原创 2021-03-29 16:14:07 · 1087 阅读 · 0 评论 -
linux系统对中断的处理
1、ARM处理器程序运行的过程扩展:1)、在CPU里面,有一个很重要的单元名叫MMU,内存管理单元。关于内存管理单元,有如下介绍:2)、进程控制块:PCB进程控制块(也叫做进程描述符)(位于内核空间):本质就是结构体(上百行)。注:每个程序都是一个进程,每个进程都有一个进程控制块。进程控制块位于虚拟内存(3G-4G(对于 32位系统来说))里面包含很多的内容,重点掌握以下部分:(1)、存放进程ID。系统的每一个进程有唯一的id。在c语言中,用pid_t类型表示。其实就是一个非负整数。p原创 2021-03-29 16:17:22 · 323 阅读 · 0 评论 -
linux中,中断的处理方法 tasklet软中断
1、在linux中,对中断的处理有原则对中断的处理原则有两个:1)、中断不能嵌套中断(即使发生了更高优先级的中断)–》防止栈空间不够用。因为每个中断被执行,都要先保存现场。如果中断1在执行的过程中,嵌套了中断2;那么在中断2在被执行之前,中断1的现场应该先被保存(保存在栈中)。同样,如果还嵌套了其他中断,还要将现场保存在栈中。这样,就会发生一个问题,如果嵌套的中断很多,那么可能会导致栈空间不够用。为了避免这个问题,不允许中断嵌套。2)、对中断的处理应当越快越好。假设系统只有一个CPU,一个进程在执原创 2021-04-01 13:25:33 · 514 阅读 · 0 评论