Linux 中断子系统(六)Tasklet
原图
为什么有 tasklet
linux kernel 已经把中断处理分成了 top half 和 bottom half,看起来已经不错了,那为何还要提供 softirq、tasklet 和 workqueue 这些 bottom half 机制。
workqueue 和 softirq、tasklet 有本质的区别:
workqueue 运行在 process context,而 softirq 和 tasklet 运行在 interrupt context。因此,出现 workqueue 是不奇怪的,在有 sleep 需求的场景中需要。
softirq 更倾向于性能。软中断的种类是编译时静态定义的,在运行时不能添加或删除,同一种软中断的处理函数可以在多个处理器上同时执行,处理函数必须是可以重入的,需要使用锁保护临界区。
tasklet 更倾向于易用性。Tasklet 可以在运行时添加或删除,一个 Tasklet 同一时刻只能在一个处理器上执行,不要求处理函数是可以重入的。
数据结构
Tasklet 的数据结构如下:
12345678910111213<incl ...
Linux 中断子系统(五)SoftIRQ
原图
软中断的定义
软中断(softirq)是中断处理程序在开启中断的情况下执行的部分,可以被硬中断抢占内核定义了一张软中断向量表,每种软中断有一个唯一的编号,对应一个 softirq_actior 实例,softirq_action 实例的成员 action 是处理函数。
123456789101112131415161718<kernel/softirq.c>static struct softirq_action softirq_vec[NR_SOFTIRQS] __cacheline_aligned_in_smp;...enum{ HI_SOFTIRQ=0, TIMER_SOFTIRQ, NET_TX_SOFTIRQ, NET_RX_SOFTIRQ, BLOCK_SOFTIRQ, IRQ_POLL_SOFTIRQ, TASKLET_SOFTIRQ, SCHED_SOFTIRQ, HRTIMER_SOFTIRQ, RCU_SOFTIRQ, /* Preferable RCU should always be the last softirq */ NR_S ...
Linux 中断子系统(四)中断驱动实现
原图
数据结构
理解一个软件架构最重要的是要理清楚里面的数据结构的内容以及数据结构之间的关系,在本文中列出数据结构之前先来说明几个问题。首先是中断控制器 irq controller 这个在 arm 上一般是 gic,有可能会出现 irq controller 集联的情况,但是一般情况下是一个 controller,一个 controller 上有很多中断线,irq line 一般就是连接到 gpio 控制器上的,在一个中断线上可能有多个设备(共享中断)action,那么就涉及到这几种数据结构,描述中断控制器的数据结构可以组成链表,描述中断线 irq line 的数据结构可以组成链表,挂在中断线上的中断设备可以组成链表关系。 除此之外硬件中断号于 linux 中断号之间有一个映射关系,也需要抽象出数据结构来描述。下面看下 linux 内核下对中断的抽象出的数据结构,如下:
原图
irq_desc(描述中断线连接中断设备和中断控制器)
irq_desc 是中断描述符也就是用于描述硬件中断线的数据结构。他一方面通过 irq_data 连接中断控制器,一边连接中断设备, ...
Linux 中断子系统(三)Linux 中断处理过程
原图
中断控制器
ARM 公司提供了一种标准的中断控制器,称为通用中断控制器(Generic IntermurController,GIC)。目前 GIC 架构规范有 4 个版本:v1~v4。GICv2 最多支持 8 个处理器。GIC v3 最多支持 128 个处理器,GICv3 和 GICv4 只支持 ARM64 处理器。
GICv2 控制器的两个主要功能
分发器(Distributor):系统中所有的中断源连接到分发器,分发器的寄存器用来控制单个中断的属性:优先级、状态、安全、转发信息(可以被发送到哪些处理器)和使能状态。分发器决定哪个中断应该通过处理器接口转发到哪个处理器
处理器接口(CPU Interface):处理器通过处理器接口接收中断。处理器接口提供的寄存器用来屏蔽和识别中断,控制中断的状态。每个处理器有一个单独的处理器接口。软件通过中断号识别中断,每个中断号唯一对应一个中断源
中断有以下 4 种类型
软件生成的中断(Software Generated Interrupt,SGI):中断号 0~15,通常用来实现处理器间中断(Inter-Processo ...
WordPress搭建博客
准备 LAMP 环境
安装wordpress
12wget https://cn.wordpress.org/latest-zh_CN.zipunzip latest-zh_CN.zip
安装Mysql
123sudo apt install mysql-server -ysudo systemctl start mysqlsudo systemctl enable mysql
修改密码权限
12345678910111213141516171819202122232425262728293031cat /etc/mysql/debian.cnf[client]host = localhostuser = debian-sys-maintpassword = ROmgNW5hP8tsSwrBsocket = /var/run/mysqld/mysqld.sock[mysql_upgrade]host = localhostuser = debian-sys-maintpassword = ROmgNW5hP8tsSwrBsocket = ...
Linux 中断子系统(二)ARM64 的异常处理过程
原图
异常级别
通常 ARM64 的进程执行在 EL0 级别,内核执行在 EL1 级别。
虚拟机是现在流行的虚拟化技术,在计算机上创建一个虚拟机,虚拟机里可以运行一个操作系统。常用的开源虚拟机管理软件是 QEMU,QEMU 支持基于内核的虚拟机 KVM,KVM 的特点是直接在处理器上执行客户机的操作系统,所以虚拟机的执行速度很快。
ARM64 架构的安全扩展定义了两种安全状态,正常世界和安全世界,两个世界只能通过异常级别 3 的安全监视器切换。
异常类型
中断
在 ARM 处理器中,FIQ(Fast Interruptre Quest)的优先级要高于 IRQ(Interrupt ReQuest)。在芯片内部,分别由 IRQ 和 FIQ 两根中断线连接到中断控制器再连接到处理器内部,发送中断信号给处理器。
中止
中止(abort)主要有指令中止(instruction abort)和数据中止(data abort)两种,通常是因为访问外部存储单元时发生了错误,处理器内部的 MMU(Memory Management Unit)能捕获这些错误并且报告给处理器。指令中止是指当处 ...
Linux 中断子系统(一)综述
原图
硬件链接相关描述
在上图中主要分为三部分,产生中断的外部设备(中断源)、用于管理中断的中断控制器以及处理中断信号的 cpu。
中断处理流程
在 ARM 处理器上会有一个中断向量的连续地址,一般是零地址开始,之后地址每增加 1 的地址上存放一条跳转指令,用于处理不同的中断信号,当有不同的中断发生时就到对应的地址执行跳转指令,而具体不同的中断信号就在不同中断标号位置进行处理。
保存现场(当前线程环境)— 跳转执行中断服务程序 — 返回恢复现场。
Linux 系统对中断处理的方式
首先需要先明确几个问题:
中断处理过程中是关全局中断的,也就是中断程序处理期间不能响应新的中断。
基于第一点,Linux 内核不允许中断嵌套,其实第一点就已经决定了中断不能嵌套。
基于以上两点,当 Linux 系统的中断任务比较多的时候系统响应就会有很大延迟,为此 Linux 系统将中断设计为上半部和下半部,上半部处理紧急的必须要处理的任务而耗时的不紧急的任务放到中断下半部来处理,中断下半部就是普通的软件程序(但是有一点区别就是 softirq 和 tasklet 运行在中断上下文,而 wor ...
工具推荐
效率类
Notion
Notion 是一款提供笔记、任务、数据库、看板、维基、日历和提醒等组件的应用程序。用户可以将这些组件连接起来,来创建自己的系统,用于知识管理、笔记记录、数据管理、项目管理等。这些组件和系统可以单独使用,也可以与他人进行跨平台协作。Notion
Page
Notion 的 Page(Page 无处不在)可以创建各种 Block,可以创建链接到其他文章,可以创建链接到 Database,因此 Page 可以用于管理一切想要管理的东西。实际上 Page 是 Notion 的页面基本组成元素与层级关系,作为文件夹,作为文章皆可。
Block
notion 中最基本的数据单位被称为“块”(block),所有的数据都是一个又一个的块结构,可以对这些块结构进行任意的排列组合,按照自己的工作需要进行设计布局,并且可以同步到所有的设备端。notion 提供了超过 40 种块数据类型以供选择,从最基本的文字,到图片、文件、视频、网页、等媒体 ,更有表格、数据库、任务追踪等复杂结构等等。
下面是一些基本的 Block 介绍:
列表
notion 提供了几种基本的列表可以 ...
一种用于实时视频稳定的新型相机路径规划算法
Introduction
视频稳定根据运动模型分为 2D 和 3D 方法。 第一种方法是 2D 视频稳定 [2],它使用 2D 运动模型(例如简单的平移模型、2D 刚性模型和 2D 仿射模型 [3-12])描述两个连续帧之间的关系。 如果相机在 3D 空间中沿 x 轴和 y 轴的旋转很小,则 2D 视频稳定可提供良好的性能 [13]。 然而,随着相机运动变得动态,二维运动模型无法描述连续帧之间的几何关系,性能非常有限。 lee 等 提出了一种无需明确估计相机运动即可直接稳定视频的方法 [14]。 该方法找到一组变换来平滑特征轨迹 [15, 16] 并稳定视频。
第二种方法是 Buehler 等人引入的 3D 视频稳定 [17]。早期的 3D 方法使用来自运动的结构 (SFM) 技术重建场景和相机运动的 3D 模型 [18]。然后在新的 3D 相机路径上渲染稳定的视图 [17, 19]。 3D 视频稳定提供比 2D 方法更好的性能。由于这些 3D 方法在处理缺乏视差的视频时经常失败,因此它们在许多情况下并不实用 [20]。 Liu 提出了结合 2D 和 3D 视频稳定优点的子空间视频稳 ...
基于陀螺仪的视频稳定非线性滤波器
Abstract
我们提出了一种对移动设备上捕获的视频进行视频稳定和滚动快门校正的方法。该方法使用来自机载陀螺仪的数据来跟踪相机的角速度,并且可以在相机捕获期间内实时运行。我们消除了由于手抖动引起的小抖动和滚动快门失真,营造出在三脚架上拍摄的视频的效果。
Introduction
大多数中高端移动设备包含一个多核 CPU 复合体、一个图形处理单元 (GPU) 和一个带有 3 轴陀螺仪的惯性测量单元 (IMU)。 在本文中,我们解决了在此类设备上执行视频稳定的挑战,使用陀螺仪进行运动跟踪。 与大多数稳定方法不同,它们作为捕获视频的后处理步骤运行,我们的方法可以作为相机捕获的一部分实时运行。
Background and Prior Work
视频稳定消除了视频中的抖动,它本质上是一个三阶段过程,包括运动估计阶段、平滑测量运动的滤波阶段和生成新视频序列的重新合成阶段。
当深度变化引起像素运动时,基于图像的跟踪方法会受到影响,视差,单应性不容易建模。此外,滚动快门成像传感器可以引入非刚性的帧到帧对应关系,不能简单地通过全局帧到帧运动模型进行建模。为了解决滚动快门问题,Baker 等人 ...
