【GIC】处理中断

news2025/1/13 10:11:21

目录

一、当中断变为pending时发生了什么?

二、中断响应

三、虚假的中断

四、运行优先级&抢占

五、结束中断

六、检查系统的当前状态

6.1最高优先级等待中断和运行优先级

6.2单个INTID的状态


一、当中断变为pending时发生了什么?

        前面的文章介绍了当中断源断言时,中断如何从 inactive状态转到pending状态。这通常是由于一个外围设备断言了一个专用的中断信号。当中断挂起(pending)时,中断控制器(gic)决定是否将中断发送到已连接的PE之一。中断控制器选择的PE,取决于以下设置:

  • Group enables

        前文描述了如何将INTID分配给一个组(Group 0,Secure Group1 or Non-secure Group 1)。对于每个组,在Distributor和CPU接口中都有一个Group bit。作为已禁用组的成员的中断不能向PE发出信号。

  • Interrupt enables

        单独禁用的中断可能会挂起,但不会转发到PE。

  • Routing controls

        根据中断的类型,中断控制器必须决定哪些PE可以接收到中断。

        对于SPI,这是由GICD_IROUTERn控制的。SPI可以针对一个特定的PE,或任何一个已连接的PE。

        对于LPI,如果集成了ITS,路由信息来自ITS。

        PPIs是特定于一个PE的,并且只能由该PE来处理。

        对于SGIs,原始PE定义了目标PE的列表。

  • Interrupt priority & priority mask

        每个PE在其CPU接口中都有一个优先级掩码寄存器(ICC_PMR_EL1)。此寄存器设置了将中断转发到该PE所需的最小优先级。只有优先级高于寄存器中的值的中断才会向PE发出信号。

  • Running priority

        运行优先级:如果PE尚未处理中断,则运行的优先级是空闲优先级(0xFF)。只有优先级高于运行优先级的中断才能抢占当前中断。

二、中断响应

        CPU接口有两个IAR寄存器。读取IAR将返回INTID,并向前推进中断状态机。在一个典型的中断处理程序中,处理中断的第一步是读取其中一个IAR。

三、虚假的中断

        INTID范围1020到1023如何被保留用于特殊用途。这些初始属性可以通过读取IAR返回,并指示异常处理中的特殊情况。

         INTID = 1023,当轮询IAR时,此值表示没有可供响应的中断。当中断触发后又撤回时,可以向寄存器写入这个ID,表示一个虚假的中断。

四、运行优先级&抢占

        PMR设置了一个中断必须被转发到一个特定的PE的最小优先级。GICv3体系结构具有运行优先级的概念。当PE响应一个中断时,其运行优先级就是该中断的优先级。当PE写入其中一个EOI寄存器时,当前运行优先级返回到其以前的值。

        当前的运行优先级将在CPU接口中的(ICC_RPR_EL1)寄存器上报。

        在考虑优先级抢占时,运行优先级的概念是很重要的。当高优先级中断指向已经在处理低优先级中断的PE时,就会发生抢占。抢占为软件带来了一些额外的复杂性,但是它可以防止低优先级中断阻塞对高优先级中断的处理。

         在某些情况下,可能不需要或不需要抢占。GICv3体系结构允许通过二进制点寄存器(ICC_BPRn_EL1)来控制抢占所需的优先级差异。

        (ICC_BPRn_EL1)寄存器将优先级分为两个字段,组优先级和子优先级:

 对于抢占,只考虑组优先级位,忽略子优先级位。例如,考虑以下三个中断:

        INTID A has priority 0x10,

        INTID B has priority 0x20,

        INTID C has priority 0x21,

在这种情况下,我们决定了:

        A可以抢占B或C。·

        B不能抢占C,因为B和C有相似的优先级。

为了实现这一点,组和子优先级之间的划分可以设置为N=4:

        通过这种分割,B和C现在被认为对抢占具有相同的优先权。但是,A仍然有更高的优先级,因此它可以抢占B或c。

注意:抢占要求编写中断处理程序支持嵌套。

五、结束中断

        当中断被处理时,软件必须通知中断控制器中断已经被处理,以便状态机可以转换到下一个状态。GICv3体系结构将其视为两个任务:

  • Priority drop

        这意味着将运行优先级放回执行中断之前的值。(IDLE)

  • Deactivation

        这意味着要更新当前正在处理的中断的状态机。通常,这将是从Active状态到Inactive状态的转换。

        在GICv3体系结构中,Priority drop和Deactivation可以同时发生或单独发生。这是由 ICC_CTLR_ELn.EOImode的设置决定的。

  • EOImode = 0

         Group 0 中断写ICC_EOIR0_EL1,Group 1中断写ICC_EOIR1_EL1,来同时执行priority drop和deactivation。这个模型通常用于简单的裸机环境。

  • EOImode = 1 

        Group 0 中断写ICC_EOIR0_EL1,Group 1中断写ICC_EOIR1_EL1,来执行priority drop。通过单独写ICC_DIR_EL1来执行deactivation。此模式通常用于虚拟化目的。

        在写入这些寄存器时,软件必须写入INTID。

六、检查系统的当前状态

6.1最高优先级等待中断和运行优先级

        顾名思义,最高优先级挂起中断寄存器(ICC_HPPIR0_EL1 & ICC_HPPIR1_EL1)上报此PE的最高优先级挂起中断的INTID。这在不同的PE上可能会有所不同。例如,因为SPI的路由设置不同而优先级不同。运行优先级在(ICC_RPR_EL1)上报。

6.2单个INTID的状态

        Distributor提供了指示每个SPI的当前状态的寄存器。同样地,Redistributor提供了指示其所连接PE的PPIs和SGIs状态的寄存器。这些寄存器还可以将一个中断移动到一个特定的状态。这可能很有用,例如,对于测试配置是否正确,而不需要外围设备断言中断。有单独的寄存器来报告active状态和pending状态。下表列出了active状态寄存器。Pending状态寄存器具有相同的格式

         注意:当启用了亲和路由时,GICD_ISACTIVER0和GICD_ICACTIVER0被视为保留值0。这是因为GICD_ISACTIVER0和GICD_ICACTIVER0对应于0-31的INTIDs,而INTID = 0-31是按每个PE备份(banked),并通过每个PE的Redistributor上报。

        注意:在非安全状态下执行的软件无法看到组0或安全组1的状态中断,除非GICD_NASCRn或GICR_NASCRn允许访问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/331514.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

0207 事件

事件监听事件监听版本事件类型事件概念事件在编程时系统内发生的动作或者发生的事情例子点击按钮鼠标经过拖拽鼠标事件监听(注册事件,绑定事件)让程序员检测是否有事件产生,一旦有事件触发,就立即调用一个函数做出响应…

PHP立体安全:一网打尽攻击向量

PHP立体安全:一网打尽攻击向量 所谓攻击向量,就是指黑传递有效负载或恶意结果而可以访问计算机或网络服务器的路径或方法。 PHP的安全并不只有危险函数, 这只是冰山一角 。本文将介绍PHP从汇编层面到框架层面直到标准层面的所有攻击向量。 攻…

【H5】html实现微信授权登陆

html实现微信授权登陆前言网页授权的两种 scope 的区别开发指南第一步:用户同意授权,获取code第二步:通过 code 换取网页授权access_token第三步:拉取用户信息(需 scope 为 snsapi_userinfo)代码实现:效果图总结前言 …

用Python出了3000道数学题,外甥表示要正月剪头

人生苦短,快学Python! 过年期间发现小外甥已经上小学了,我姐说老师今天给他们布置了寒假作业:每天坚持做乘法和加减法混合运算。 这我必须帮帮忙,用Python写了一段自动生成小学生计算题的代码,并支持导出…

Python入门之ChatGPT的API调(Python版)

一、Python环境部署 参考Python 环境搭建 | 菜鸟教程 Python官网:Welcome to Python.org Python文档下载地址:Our Documentation | Python.org 二、Thonny的安装 安装包地址:Thonny, Python IDE for beginners 三、ChatGPT的Key申请 网…

学Qt想系统的学习,看哪本书?

Qt 是一个跨平台应用开发框架(framework),它是用 C语言写的一套类库。使用 Qt 能为 桌面计算机、服务器、移动设备甚至单片机开发各种应用(application),特别是图形用户界面 (graphical user in…

虹科分享|在ntopng中使用多用户模式

并非所有 ntop 用户都知道 ntopng 本机实现了多用户支持。也就是说,您可以使用ntopng收集和分析来自多个用户的流量,并向每个用户显示自己的流量,隐藏其余所有流量。 您需要做的就是非常简单: 1. 启动 ntopng 并将其配置为接收受…

Python将字典转换为csv

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…

设计模式C++实现4:装饰模式

前言 参考大话设计模式; 详细内容参见大话模式一书第六章,该书使用C#实现,本实验通过C语言实现。 装饰模式(Decorator),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰…

MapReduce工作原理

一.MapReduce工作流程图 1、分片操作:FileInputstream,首先要计算切片大小,FileInputstream是一个抽象类,继承InputFormat接口,真正完成工作的是它的实现类,默认为是TextInputFormat,TextInputF…

docker一键部署网址导航+博客+管理系统(强势开源)

花森门户 在线地址(首次加载请耐心等待):http://n.huasen.cc/ 码云仓库地址:https://gitee.com/HuaSenJioJio/huasenjio-compose Github仓库地址:https://github.com/huasenjio/huasenjio-compose huasenjio 系列网站增添新作品,&…

CSCCTF-2019-Qual-FlaskLight

网页里有提示 参数为search,GET传值 测试{{7*7}} 存在SSTI模板注入,在这里简单介绍python魔法函数,与Flask内置 __class__ 返回类型所属的对象 __mro__ 返回一个包含对象所继承的基类元组,方法在解析时按照元组的顺序解析。 __bas…

Dropout的深入理解(基础介绍、模型描述、原理深入、代码实现以及变种)

目录前言一、DropOut简介1-1、DropOut论文图解1-2、DropOut介绍1-3、DropOut产生动机1-4、DropOut流程简介二、模型描述2-1、公式描述2-2、神经网络图描述2-3、一些需要注意的问题!三、Dropout代码实现以及相关变种(部分有实现)3-1、Dropout实…

Part 4 描述性统计分析(占比 10%)——上

文章目录【后续会持续更新CDA Level I&II备考相关内容,敬请期待】【考试大纲】【考试内容】【备考资料】1、统计基本概念1.1、统计学的含义及应用1.1.1、统计学的含义1.2.1、统计学的应用1.2、统计学的基本概念1.2.1、数据及数据的分类1.2.2、总体和样本1.2.3、…

体系结构原则

构建和设计软件解决方案时应考虑到可维护性。 本部分概述的原则可帮助指导你作出体系结构决策,生成简洁、可维护的应用程序。 一般而言,在这些原则的指导下构建的应用程序各部分间可通过显式接口或消息传送系统进行通信,并非松散耦合的离散组…

WinRAR自解压实现安装程序并开机自启

1、选择要打包的文件,右键添加到压缩文件,勾选“创建自解压格式压缩文件” 2、切换到高级,选择“自解压文件选项” 3、常规 - 指定解压缩路径 4、安装 - 解压缩后运行指定程序 5、模式 - 隐藏全部 全部显示:显示启动对话框&#…

bcript 算法

一、简介 今天要给大家介绍的一种“加密”算法叫做 bcrypt,bcrypt 是由 Niels Provos 和 David Mazires 设计的密码哈希函数,他是基于 Blowfish 密码而来的,并于 1999 年在 USENIX 上提出。 除了加盐来抵御 rainbow table 攻击之外&#xf…

Vue3电商项目实战-首页模块6【22-首页主体-补充-vue动画、23-首页主体-面板骨架效果、4-首页主体-组件数据懒加载、25-首页主体-热门品牌】

文章目录22-首页主体-补充-vue动画23-首页主体-面板骨架效果24-首页主体-组件数据懒加载25-首页主体-热门品牌22-首页主体-补充-vue动画 目标: 知道vue中如何使用动画,知道Transition组件使用。 当vue中,显示隐藏,创建移除&#x…

C语言基础(十)—— 文件操作

1. 概述1.1磁盘文件和设备文件磁盘文件指一组相关数据的有序集合,通常存储在外部介质(如磁盘)上,使用时才调入内存。设备文件在操作系统中把每一个与主机相连的输入、输出设备看作是一个文件,把它们的输入、输出等同于对磁盘文件的读和写。1.2 磁盘文件的…

【C++】nullptr C++中的空指针(C++11)

前言 在平时我们写C/C代码时你可能会看到有人使用NULL表示空指针,也有人用nullptr表示空指针,那么你可能会很好奇它们都是空指针吗?为什么空指针有两种写法?下面就带你了解这背后的原理。 我们都知道NULL是C语言中的空指针&#x…