0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

看一下中断及ARM体系中对中断的处理

安芯教育科技 来源:老秦谈芯 2023-02-01 17:04 次阅读

中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。

中断的几个主要目的。第一,通过中断可以提高CPU效率。假设一种场景,CPU通知其它设备完成某项工作,当设备完成任务后,CPU如何知道呢?一种方式是设备标记状态寄存器,等待CPU来查询,这种做法弊端是程序员在编写程序时不能确切知道设备完成任务所需的时间,也就是说需要定时去查询设备的状态。

我们知道,现代CPU一般频率很高,如果去频繁查询外部设备,尤其是低速设备,必将浪费很多的CPU资源;如果查询的时间间隔长,那么外设的利用率就不高。有一种解决办法,那就是外设处理完任务,主动告诉CPU,从而省去了CPU的查询开销。

中断的第二个用途是,可以维护系统正常运行。现代的操作系统都是多任务系统,表面看起来多个程序在并行,实际上真正的CPU是分时复用的(假设最简单的单核单线程),并不是真的并行。如果这时有一个恶意程序,一直霸占CPU资源不释放,是不是整个系统就会挂死呢?答案是并不会,因为CPU的分配是由操作系统负责完成的,原理就是通过中断把控制权从程序手中交还给操作系统。另外,CPU访问内存或其它设备时,也可能发生一些错误。对于不同错误有不同的处理方式,也可以通过中断来完成。

对于一些特定的应用场景,设备系统需要满足实时性。所谓实时性,就是要求系统在规定的或者可预期的时间内作出反应。此类需求也可以通过中断来满足。

还记得前面讲ARM异常时的概念吗?中断算一种异步异常,《ARM系列 -- 异常和特权》。A系列处理器提供四个管脚来实现中断,分别是:

nIRQ:物理普通中断

nFIQ:物理快速中断

nVIRQ:虚拟普通中断

nVFIQ:虚拟快速中断

如下图所示:

ecfc7bdc-a20e-11ed-bfe3-dac502259ad0.png

其中虚拟中断是为了实现虚拟化而准备的,这部分留待以后讲虚拟化时再说。我们只看物理中断。

在开始介绍中断概念时,我们说中断可能会有很多种,每个设备都可能要发中断,而ARM处理器只有两个管脚,那怎么办?这时,就需要有一个模块来收集所有的中断,然后转发给处理器。在ARM的体系中,这个模块就是通用中断处理器(generic interrupt controller,以下简称GIC)。

类似ARM的处理器,GIC有架构和实现之分。GIC的架构经历了GICv1,GICv2,GICv3和GICv4。每个架构下有有对应的设计实现,比如GIC-600就是支持GICv3架构的最新IP。

在介绍GIC-600之前,有必要先讲一下中断的一些基本概念。首先,中断是分优先级的。很多个设备同时发送中断,处理器必须遵守一定的规则来给所有中断排序,从而决定先响应哪个。这个规则就是中断优先级,操作系统需要维护中断处理器中的优先级寄存器。

既然有了优先级,就有了中断嵌套。当处理器处理某个低优先级的中断时,来了一个高优先级的中断,CPU可以保留低优先级的中断处理现场,转而处理高优先级中断,待高优先级处理完再继续处理低优先级中断。如果CPU在某段时间内,选择不响应某设备,其中断也可以被屏蔽。

在ARM体系中,对于每个中断,有四个状态:

inactive:中断处于无效状态

pending:中断处于有效状态,但是CPU没有响应该中断

active:中断处于有效状态,CPU在响应该中断

active and pending:CPU在响应该中断,但是该中断源又发送中断过来

在ARM体系中,中断分为以下几个类型(不讨论虚拟中断):

PPI:(Private Peripheral Interrupt,私有外设中断),该中断来源于core,但是该中断只对指定的core有效,所谓的私有即指对core私有;

SPI:(Shared Peripheral Interrupt,共享外设中断),该中断来源于外部设备,该中断可以对所有的core有效;

SGI:(Software Generated Interrupt,软件中断),用于给其它的core发送中断信号

LPI:(Locality-specific Peripheral Interrupt,特定局部外设中断),是一种基于消息的边沿中断。

ARM又为每种中断分配了中断号,用以区分,其中1020-1023是特殊的中断号。

ed1ed92a-a20e-11ed-bfe3-dac502259ad0.png

图1GICv3中断号分配

对于每个中断,从产生到处理再到结束,是有一个完整的生命周期的。

ed3af844-a20e-11ed-bfe3-dac502259ad0.png

图2 物理中断生命周期

generate:外设或软件发起一个中断

distribute:中断经过分组,优先级仲裁等,发送给对应的CPU interface

deliver:CPU interface将中断发送给core

activate:当CPU core开始响应中断,GIC将最高激活优先级的中断设置为激活

priority drop: core发信号给GIC,通知最高优先级中断,GIC可以重置优先级

deactivation:清除中断

这里要解释一下CPU interface。前面也提到了,core提供给中断的物理管脚只有两个,中断会有成百上千个,GIC怎么把这些中断发送给core是一个问题。这时就需要CPU interface了。CPU interface将GIC发送的中断信息,通过IRQ,FIQ管脚,发送给连接到core。CPU interface提供了以下的功能:

将中断请求发送给core

中断进行认可

中断完成识别

设置中断优先级屏蔽

定义中断抢占策略

决定当前处于pending状态最高优先级中断

在GICv3架构中,CPU interface被抽离出来,实现在core内部的。也就是说,在GIC-600中,是不包含CPU interface的。这样做的好处是,可以减少中断响应的时间,并且减少系统总线的占用。对于众核SoC设计来说,其物理设计非常大,CPU interface实现在core内部,也就意味着某些中断寄存器可以放在其内部,这样core就可以很快的访问到这些寄存器了。

对于那些常用的寄存器,core不用跋山涉水的通过系统总线或片上网络去频繁访问GIC了。CPU interface与GIC之间,是通过专用的AXI-stream总线来传输信息的。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM
    ARM
    +关注

    关注

    134

    文章

    9083

    浏览量

    367360
  • 寄存器
    +关注

    关注

    31

    文章

    5336

    浏览量

    120224
  • 中断
    +关注

    关注

    5

    文章

    898

    浏览量

    41468
  • FIQ
    FIQ
    +关注

    关注

    0

    文章

    9

    浏览量

    2305

原文标题:技术分享 | 系列 -- 中断(一)

文章出处:【微信号:Ithingedu,微信公众号:安芯教育科技】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    ARM体系架构处理器的中断程序分析

    基础知识 ARM体系架构的处理通常将低地址32字节作为中断向量表,当中断产生时会执行以下操作
    的头像 发表于 11-21 11:10 2541次阅读
    <b class='flag-5'>ARM</b><b class='flag-5'>体系</b>架构<b class='flag-5'>处理</b>器的<b class='flag-5'>中断</b>程序分析

    ARM中断体系和ZYNQ中断体系详解

    01、ARM中断体系ARM体系,在存储地址的低位,固化了
    的头像 发表于 11-27 11:01 6325次阅读
    <b class='flag-5'>ARM</b><b class='flag-5'>中断</b><b class='flag-5'>体系</b>和ZYNQ<b class='flag-5'>中断</b><b class='flag-5'>体系</b>详解

    什么是ARM中断事件?ARM中断异常处理具体过程

    ARM处理器是种流行的处理器架构,用于许多现代移动设备和嵌入式系统中断和异常是
    发表于 09-05 15:45 1881次阅读
    什么是<b class='flag-5'>ARM</b><b class='flag-5'>中断</b>事件?<b class='flag-5'>ARM</b><b class='flag-5'>中断</b>异常<b class='flag-5'>处理</b>具体过程

    ARM体系中断处理资料分享

    1、通用中断处理器的介绍今天来看一下中断ARM体系
    发表于 04-13 18:09

    ARM向量中断机制在uClinux的设计

    ARM体系结构,硬件产生的外部中断( IRQ) 具有单的程序入口。为了识别籽源,进而运行
    发表于 06-27 15:45 64次下载
    <b class='flag-5'>ARM</b>向量<b class='flag-5'>中断</b>机制在uClinux<b class='flag-5'>下</b>的设计

    ARM中断处理的研究

    ARM处理器的普通中断处理、任务切换中断处理、可重人中断
    发表于 07-06 12:08 4274次阅读
    <b class='flag-5'>ARM</b><b class='flag-5'>中断</b><b class='flag-5'>处理</b>的研究

    ARM9的中断处理技术及其在Windows CE实现的研究

    文中介绍ARM9系列嵌入式微处理器的中断体系结构 ,论述 Windows CE.net 的中断处理
    发表于 03-14 16:11 0次下载

    ARM体系的异常中断及其应用

    ARM体系的异常中断及其应用
    发表于 09-22 16:51 4次下载
    <b class='flag-5'>ARM</b><b class='flag-5'>体系</b><b class='flag-5'>中</b>的异常<b class='flag-5'>中断</b>及其应用

    ARM异常中断的原因及处理措施

    ARM异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。当异常中断处理
    的头像 发表于 06-17 10:05 8078次阅读

    riscv的plic中断处理与eclic详解

    浅析riscv的plic与eclic 1.PLIC中断处理 2.sifive中断的编程模型 3.关于eclic 4.关于jalmnxti 1.PLIC
    的头像 发表于 04-15 13:50 1.3w次阅读
    riscv<b class='flag-5'>中</b>的plic<b class='flag-5'>中断</b><b class='flag-5'>处理</b>与eclic详解

    arm中断是怎么实现的

    的机制,能够提高系统的实时性和可靠性。在ARM处理中断的实现主要涉及到下面的几点。 中断
    的头像 发表于 09-05 16:22 1071次阅读

    arm处理器有哪些中断源?arm处理器对异常中断的响应过程

    arm处理器有哪些中断源?arm处理器对异常中断的响应过程 
    的头像 发表于 10-19 16:35 1441次阅读

    ARM的异常中断是如何实现进入中断程序的?如何进入呢?

    ARM的异常中断是如何实现进入中断程序的?如何进入呢? 在计算机系统,异常和中断是两个常见的
    的头像 发表于 10-19 16:36 1025次阅读

    中断ARM体系中断处理

    今天来看一下中断ARM体系中断处理,直接进入
    的头像 发表于 11-07 17:11 757次阅读
    <b class='flag-5'>中断</b>及<b class='flag-5'>ARM</b><b class='flag-5'>体系</b><b class='flag-5'>中</b>对<b class='flag-5'>中断</b>的<b class='flag-5'>处理</b>

    arm中断是怎么实现的

    ARM中断的实现是通过中断控制器和异常模式实现的。ARM处理器通过中断控制器来接收和
    的头像 发表于 01-05 15:18 890次阅读