2.1 ARM64中断机制

Interrupt Pipeline系列文章大纲-CSDN博客

        在探索I-pipe(Interrupt Pipeline)中断流水线的代码之前,必须先搞清楚中断的相关概念。

        中断机制,顾名思义,就是允许突发事件,打断CPU上原本处于执行过程中的程序,抢到CPU的使用权来处理突发事件。中断信号通常被分为同步中断和异步中断两大类。同步中断,一般是由程序的错误产生,或者是由内核必须处理的事件(例如系统调用)产生。异步中断一般是由I/O外设和时钟产生。

        在不同的CPU架构中,对于中断机制的设计与实现不同,对中断信号的概念划分也有所不同。

        在Intel 80x86 CPU手册中,同步中断和异步中断也被分别称为异常(Exception)和中断(Interrupt)。还有第三种触发中断的方式,就是INT n指令,也称为软件中断。无论是哪种方式,最终都是让CPU收到一个中断号,中断号的范围是0~255。CPU收到一个中断号n后,会去中断描述表IDT(Interrupt Descriptor Table)中,找到第n个中断描述符,从中断描述符中找到中断处理程序。中断描述表IDT(Interrupt Descriptor Table)也被称为中断向量表。

        由中断描述表IDT这个名称可见,x86的中断机制的顶层概念是中断。

        ARM64的中断机制的顶层概念是异常,同步中断和异步中断被分别称为同步异常和异步异常两种。

        同步异常是指处理器需要等待异常处理的结果,然后再继续执行后面的指令,比如数据中止发生时我们知道发生数据异常的地址,因而可以在异常处理函数中修复这个地址。常见的同步异常如下。

  • 系统调用(SVC)、HVC或SMC指令
  • 因地址翻译或权限等导致的数据异常或指令异常
  • 尝试执行没有定义(UNDEFINED)的指令
  • 使用没有对齐的SP或执行没有对齐的PC指令
  • 调试导致的异常,比如断点异常、观察点异常、软件单步异常等

        I-pipe需要对系统调用SVC进行改造,确保实时内核触发的系统调用能够正确处理。其它同步异常发生时,意味着实时性已经被打破了,仍然可以交给Linux内核处理。

        异步异常发生时,处理器正在处理的指令和异常是完全没有关系的,它们之间没有依赖关系,常见的异步异常包括物理中断和虚拟中断。这里只讨论物理中断:

  • 中断IRQ,即普通优先级中断
  • 快速中断FIQ,即高优先级中断(Linux中不使用FIQ,仅使用IRQ)
  • 系统错误SError,由硬件错误触发的异常

        I-pipe需要对物理中断IRQ的相关代码进行重点改造。

点击查看系列文章 =》 Interrupt Pipeline系列文章大纲-CSDN博客

原创不易,需要大家多多鼓励!您的关注、点赞、收藏就是我的创作动力!

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值