首页 > 系统相关 >[IMX6ULL驱动开发]-Linux对中断的处理(一)

[IMX6ULL驱动开发]-Linux对中断的处理(一)

时间:2024-05-23 21:55:15浏览次数:30  
标签:中断 现场 ARM 处理 Linux IMX6ULL 异常 CPU

目录

中断概念的引入

ARM架构中断的流程

异常向量表

Linux系统对中断的处理

ARM对程序和中断的处理

Linux进程中断处理


中断概念的引入

如何理解中断,我们可以进行如下抽象。把CPU看做一个母亲,当它正在执行任务的时候,可以看为是一个母亲在看书。此时可能发生许多不同的情况,比如说:远处传来猫叫声、快递敲门、房间中小孩子传来哭声,如上三种,其实都可以看做CPU的中断,可以根据重要性来进行判断是否要放下手头中正在看的书(CPU暂时暂停处理任务去执行中断)进行处理。

此时,还有可能发生如下情况,比如说地震了、突然掉下来一只蜘蛛、水突然烧开了,此时肯定是要停止看书去处理这些突发事件的(发生异常的时候,CPU必须马上处理)。

如果这个母亲决定去处理听到的事,那么首先她需要先使用书签夹在书上,记录下当前看到的位置(保存现场),然后再去处理问题(处理异常),回来后,通过书签找到之前阅读的位置(恢复现场)。


ARM架构中断的流程

ARM架构中断的流程如下:

1、初始化

        首先设置中断源让它们可以产生中断(只有外界可以产生声音,比如猫叫、小孩子哭等,才可以产生中断),比如让一个GPIO引脚可以产生中断。然后设置中断控制器,设置中断的优先级、或者屏蔽某些中断,比如耳朵听见了,但是不想去处理,可以假装没有听见,这样就是屏蔽了某个中断。最后需要开启CPU的中断总开关(如果母亲是聋子的话,对于外界所有声音都是无效的)

2、CPU执行任务

3、产生中断

        按下按键,中断信号发给中断控制器,中断控制器再发给CPU。

4、CPU每执行一条指令都会检查是否有异常/中断产生(硬件决定)

5、发生异常/中断,开始处理

        对于不同异常,跳到不同地址执行处理(异常向量表),这些地址上是函数指针或者函数地址,用来处理不同的异常

6、保存现场、执行处理函数、恢复现场


异常向量表

当发生异常的时候,CPU会根据不同的异常来执行不同的处理。

从异常向量表跳转过去处理异常的时候,首先会保护现场、处理异常最后恢复现场


Linux系统对中断的处理

ARM对程序和中断的处理

如何理解栈在进程、线程、中断中的作用,我们需要先了解ARM是怎么处理程序的,ARM芯片属于精简指令集计算机,它对于内存是只有读、写操作的。

比如说我们要进行a=a+b的运算,那么我们需要先读取a到CPU中,然后在读取b到CPU中,在CPU中执行a+b,然后在写入到a当中。

如果在看的更加细节,那么我们可以通过下图来进行解释。CPU首先会先取代码,才能知道我们一步步要进行什么操作(这里代码需要转化为机器码),我们首先把a的值取到R0寄存器中,然后把b的值取到R1寄存器中,让R1、R0寄存器相加存放到R0寄存器,然后再把R0寄存器的值读取到a中。

假如,此时发生了中断,那么CPU是怎么进行处理的呢?

Linux进程中断处理

当进程A执行到一半的时候发生了中断,此时需要保存现场,然后执行中断,再恢复现场。当进程A继续执行,此时再次发生了中断,继续保存现场,执行中断,恢复现场。定时器发现进程A的时间用完之后,会保存A的现场,然后恢复B的现场。(对于这个定时器个人理解为,单核CPU并发执行进程,每个进程执行一段时间切换,宏观上看成并行)

标签:中断,现场,ARM,处理,Linux,IMX6ULL,异常,CPU
From: https://blog.csdn.net/m0_72372635/article/details/139157209

相关文章

  • 在linux中离线安装docker操作指南
    1.在有网络连接的环境下,下载Docker安装包,包名为docker-xx.x.x.tgz。 下载地址:https://download.docker.com/linux/static/stable/x86_64/2.将压缩包上传到目标服务器,解压压缩包。3.执行如下命令卸载旧版docker。 yumremovedocker*4.将解压的所有文件拷贝到/usr/bin目录......
  • 【Linux C | 网络编程】基础概念
    一、IP和端口1、IP地址用来标识一台电脑的地址,它由四个字节组成,我们平时看到的192.168.100.30是把IP地址的四个字节按字节单独取出来显示的,在电脑中这个四个数字是存在一个32位的无符号整数中的,所以它的数值一般比较大2、端口每台电脑上有很多需要上网的程序,这些程序都是同......
  • 使用tc命令模拟linux网络延迟环境
    tc(TrafficControl)是Linux中用于流量控制和网络模拟的强大工具。你可以使用它来模拟网络延迟、带宽限制、数据包丢失等。以下是一个使用tc模拟网络延迟的基本步骤:1.查看当前的qdisc(队列规则)和filter(过滤器)首先,确保你的网络接口没有设置任何qdisc。你可以使用以下命令查......
  • Linux学习笔记16---常用操作命令(free命令)
    free命令显示系统内存的使用情况,包括物理内存、虚拟内存(swap)和内核缓冲区内存。如果加上-h选项,输出的结果会友好很多:有时我们需要持续的观察内存的状况,此时可以使用-s选项并指定间隔的秒数:$free-h-s3上面的命令每隔3秒输出一次内存的使用情况,直到你按下ctr......
  • Win11 Linux子系统安装失败错误代码0x800701bc解决方法
    Win11Linux子系统安装失败错误代码0x800701bc解决方法 报错提示:Installing,thismaytakeafewminutes…WslRegisterDistributionfailedwitherror:0x800701bcError:0x800701bcWSL2???https://aka.ms/wsl2kernelPressanykeytocontinue… 处理方法......
  • linux常用命令
     系统信息top实时显示系统进程和资源使用情况  top-10:40:36•系统当前时间up10days,35min•系统到目前为止已运行的时间1user•当前登录系统的用户数量loadaverage:0.39,0.35,0.48•系统负载(任务队列的平均长度),3个数值分别为1分钟、5分......
  • Linux 开启定时任务执行脚本
    接到领导一个需求,要把压缩包放到当天日期的目录下,所以需要每天生成一个当前日期的文件夹1、创建sh文件,我这边命名为zip.sh#!/bin/bashtime=$(date"+%Y-%m-%d")##获取当前时间并且格式化时间##切换到这个目录下cd/root/app/bankcard/zip/mkdir"${time}"##创建以时......
  • linux关闭numa
    以下内容在Centos8操作系统演示1、编辑/etc/default/grub2、在GRUB_CMDLINE_LINUX里添加numa=off3、输入命令grub2-mkconfig-o/boot/grub2/grub.cfg用更改的文件重新生成/boot/grub2/grub.cfg重启生效4、重启后查看cat/proc/cmdline再次确认......
  • Linux C++ IDE
    在linux下开发C++一般使用cmake,而我们也需要一个IDE来提高开发效率,之前使用过VSCode,这个需要装各种插件进行许多配置才能成为一个真正的IDE,后来知道了Clion是一个更好的选择。那么我们怎么使用呢?官网下载安装包,可以试用一个月,然后我们可以去淘宝买个共享帐号,我......
  • 在Linux中, 如何进行内存泄漏的诊断?
    在Linux中,诊断内存泄漏通常涉及几个步骤,包括监控内存使用情况、识别异常的内存消耗模式、定位可能的内存泄漏源以及分析相关代码。以下是一些常用的方法和工具:1.使用top或htop命令这些工具可以实时显示系统中进程的内存使用情况。top或者htop在这些工具中,可以按内存使用......