首页 > 系统相关 >简析Linux内核中断机制

简析Linux内核中断机制

时间:2022-09-05 00:33:27浏览次数:114  
标签:场景 中断 简析 指令 内核 Linux 执行 CPU 处理器

目录

一、背景介绍

1、什么是中断?为什么要有中断?
2、中断完整流程是什么?
3、中断为什么要分上下半部?
4、下半部有哪些机制,如何选择?
5、如何使用同步机制保护中断临界区?
6、中断风暴?

二、基本原理

中断:改变处理器正常执行指令顺序的事件,可由硬件设备或者CPU本身产生。

中断与轮询:
(1)处理器与外部设备通信时,它必须在向该设备发出指令后进行忙等待(Busy waiting),反复轮询该设备是否完成了动作并返回结果。这就造成了大量处理器周期被浪费。
(2)引入中断以后,当处理器发出设备请求后就可以立即返回以处理其他任务,而当设备完成动作后,发送中断信号给处理器,后者就可以再回过头获取处理结果。
(3)这样,在设备进行处理的周期内,处理器可以执行其他一些有意义的工作,而只付出一些很小的切换所引发的时间代价,极大提高资源利用率。

三、分类

中断分类
interrupt/中断
由I/O设备生成的外部事件引起(包括CPU之间发送消息,IPI中断),也叫硬件中断;异步,需要切换到中断执行场景,存在上下文切换
可屏蔽中断
通过INTR线向CPU请求的中断,不影响系统运行,可以随时处理,主要来自外部设备(键盘、打印机、网卡等)
进程执行场景(process context)和中断执行场景(interrupt context)有两个区别:一是进程执行场景是可以调度、可以休眠的,而中断执行场景是不可以调度不可用休眠的;二是在进程执行场景中是可以接受中断信号的,而在中断执行场景中是屏蔽中断信号的。所以如果中断执行场景的执行时间太长的话,就会影响我们对新的中断信号的响应性,所以我们需要尽量缩短中断执行场景的时间。
中断执行场景为什么要屏蔽中断信号?
异步中断的处理有下面两类办法:
1.立即完全处理:
对于简单好处理的异步中断可以立即进行完全处理。
2.立即预处理 + 稍后完全处理:
对于处理起来比较耗时的中断可以采取立即预处理加稍后完全处理的方式来处理。
在Linux中,中断预处理叫做上半部,中断后处理叫做下半部。由于“上半部、下半部”词义不明晰,我们在本文中都用中断预处理、中断后处理来称呼。中断预处理只有一种方法,叫做hardirq(硬中断)。中断后处理有很多种方法,分为两类,直接中断后处理有softirq(软中断)、tasklet(微任务),线程化中断后处理有workqueue(工作队列)、threaded_irq(中断线程)。
不可屏蔽中断
通过NMI线向CPU请求的中断,不建议屏蔽,如电源掉电、硬件故障等。
exception/异常
处理器本身在执行指令过程中检测到的条件(包括CPU异常和指令中断),也叫软件中断 ;同步,均在进程执行场景,不需要上下文切换,直接执行相关指令
trap/陷阱
有意的,预先安排的异常事件;不需要修复,执行完成后继续执行下一条指令
linux使用陷阱指令:int 0x80进行系统调用
fault/故障
引起故障的指令被执行时但未结束时,CPU检测到的意外事件,需要修复且有可能修复;故障处理程序完成后,尝试修复错误,重新执行引起故障的指令。
常见的Page fault/缺页异常
abort/终止
发生致命错误,需要修复但是无法修复,因此直接终止程序

四、中断流程

CPU收到中断信号后会首先保存被中断程序的状态,然后再去执行中断处理程序,最后再返回到原程序中被中断的点去执行。
中断描述符、中断向量号、中断过程、寄存器保存

接受中断信号

查找向量表

五、exception/异常

代码流程分析

六、interrupt/中断

外设连接中断控制器(PIC,APIC),IRQ分配过程分析,通过IRQ进入中断处理程序

1、hardirq

2、softirq

tasklet、workqueue

七、中断与同步

八、参考资料

【1】https://zhuanlan.zhihu.com/p/360548214
【2】https://zhuanlan.zhihu.com/p/540897981
【3】http://www.wowotech.net/sort/irq_subsystem
【4】https://linux-kernel-labs.github.io/refs/heads/master/lectures/interrupts.html#
【5】https://zhuanlan.zhihu.com/p/94788008
【6】https://www.cnblogs.com/aaronLinux/p/10842499.html

标签:场景,中断,简析,指令,内核,Linux,执行,CPU,处理器
From: https://www.cnblogs.com/HZL2017/p/16656655.html

相关文章

  • Linux系统
    Linux目录Linux自己对Linux的理解Linux发行版Linux能做什么NAS自己对Linux的理解自己对Linux的接触是从大学开始接触的,之前对于电脑的理解只有windows操作系统。大学学......
  • F1C100S rt-smart 内核移植(二)
    前言本篇的内容进入了rt-smart内核的C语言世界,因此会同时涉及到较多的.c文件,需要读者对rt-smart内核有基本的认识,至少需要大致了解内核的文件结构。在上一章节中,我们从启......
  • linux 增加swap分区容量 --文件方式
    背景:用笔记本做openstack测试时,由于需要同时开启多台虚拟机且每台内存要求8G以上,笔记本硬件已无法满足,故通过增加swap的方式处理操作一、查看扩容前swap分区容量fre......
  • 在hyper-v虚拟机中安装并配置linux
    虽然都是自己写的,还是贴个原文链接吧,如果文章里的图片错乱了,可能就是我贴错了,去看原文吧。⚠多图警告WSL2真香?WSL2相比于WSL1前者更类似于虚拟机,配合上WindoesTermi......
  • linux driver --- platform框架应用完整实例
    平台设备文件button_device.c#include<linux/module.h>#include<linux/init.h>#include<linux/platform_device.h>staticvoidbutton_release(structdevice*d......
  • Linux 安装MySql
     1.下载MySql下载MySql:https://downloads.mysql.com/archives/community/2.上传到linux服务器上    3.解压将xz转换成tarxz-dmysql-8.0.20-linux-glibc2......
  • Linux驱动移植错误垃圾桶
    移植错误:1.uboot在make的时候类似提示:ERROR:#include<config/.h>其原因是配置uboot时部分参数无法完全配对。检查三个文件,并定义目标板子TARGET_XXXcon......
  • 《Unix/Linux系统编程》第一、二章学习笔记
    第一章引言让我最有收获的内容:1.8关于UnixUnix是一种通用操作系统。开发者:肯·汤普森(KenThompson)和丹尼斯·里奇(DennisRichie)诞生日期:20世纪70年代早期经典书目......
  • Linux基础——shell语法
    shell语法概论shell是我们通过命令行与操作系统沟通的语言。shell脚本可以直接在命令行中执行,也可以将一套逻辑组织成一个文件,方便复用。ACTerminal中的命令行可以看......
  • Linux常用基础命令三
    一、ln软链接软链接也称为符号链接,类似于windows里的快捷方式,有自己的数据块,主要存放了链接其他文件的路径。在查看文件目录中,软连接是以‘l’开头创建软链接ln......