中断


激活内核的方式
用系统调用来同步地激活内核
从硬件使用中断触发来异步激活内核。

中断的分类(一)

硬件中断(hardware interrupt)

由系统自身和与之连接的外设自动产生。它们用于支持更高效地实现设备驱动程序,也用于引起处理器自身对异常或错误的关注,需要与内核代码进行交互。

在处理器上,硬件中断的最大数目通常是有限的,需要硬件和内核同时支持使用中断共享(interrupt sharing)技术
引入了一个用于中断和IRQ的通用框架。各个平台现在只负责在最低层次上与硬件交互。所有其他功能都由通用代码提供。

软中断(SoftIRQ)

用于有效实现内核中的延期操作。内核经常需要一些机制,将某些活动延迟到未来的某个时间执行,或将活动置于某个队列上,在时间充裕时进行后续处理。它们的运作方式与上文描述的中断类似,但完全是用软件实现的。
软中断机制的核心部分是一个表,包含两个成员变量的数据项,action指向处理程序例程的指针,data指向处理程序函数私有数据的指针。默认情况下,系统上只能使用32个软中断。只有中枢的内核代码才使用软中断。

中断的分类(二)

硬件中断一般是异步信号,软件中断一般是同步中断。同步中断一般都是异常
异常【狭义】与中断最大的区别在于中断-外因,异常-内因,由CPU内部事件或程序执行中事件引起【本身硬件故障】
中断和狭义的异常都属于广义上的异常。

同步中断和异常

由CPU自身产生,针对当前执行的程序。异常可能因种种原因触发:运行时发生的程序设计错误(典型的例子是除0)、出现了异常的情况或条件e.g:缺页,使处理器需要“外部”的帮助才能处理。异常情况不一定是由进程直接导致的,但必须借助于内核才能修复。

异步中断

外部设备产生,可能发生在任意时间。不同于同步中断,异步中断并不与特定进程关联。它们可能发生在任何时间,而不牵涉系统当前执行的活动。e.g:网卡通过发出一个相关的中断来报告新分组的到达。

共同点

如果CPU当前不处于核心态,则发起从用户态到核心态的切换。在内核中执行一个专门的例程,称为中断服务例程(interrupt service routine,简称ISR)或中断处理程序(interrupt handler)。

硬件IRQ过程

中断不能由处理器外部的外设直接产生,必须借助于标准组件中断控制器interrupt controller来请求,该组件存在于每个系统中。控制器将IRQ中断请求转发到CPU的中断输入。
在CPU得知发生中断后,它将进一步的处理委托给一个软件例程ISR,该例程可能会修复故障、提供专门的处理或将外部事件通知用户进程。由于每个中断和异常都有唯一的编号,内核使用一个数组,数组项是指向处理程序函数的指针。相关的中断号根据数组项在数组中的位置判断

CPU对ISR(中断服务程序)的调用,包括了进入/退出路径和ISR本身。
因为内核还要使用CPU资源执行其代码,进入路径必须保存用户应用程序当前的寄存器状态。内核并不使用全部寄存器,只保存整个寄存器集合的一部分。

处理程序执行期间禁用中断来防止嵌套,但这会引起其他问题,如遗漏重要的中断。屏蔽Masking【选择性地禁用一个或多个中断】因而只能短时间使用。

ISR必须满足如下两个要求。
(1) 实现(特别是在禁用其他中断时)必须包含尽可能少的代码。
(2) 可以在其他ISR执行期间调用的中断处理程序例程,不能彼此干扰。尽管后一个要求可以通过高超的编程和精巧的ISR设计来满足,然而前一个要求更难满足。根据具体的中断,必须运行某个程序,来满足中断处理的最低要求。因而代码长度无法任意缩减。
内核如何解决?并非ISR的每个部分都同等重要。通常,每个处理程序例程都可以划分为3个部分,具有不同的意义。
(1) 关键操作必须在中断发生后立即执行。否则,无法维持系统的稳定性,或计算机的正确运作。在执行此类操作期间,必须禁用其他中断
(2) 非关键操作也应该尽快执行,但允许启用中断(因而可能被其他系统事件中断)
(3) 可延期操作不是特别重要,不必在中断处理程序中实现。内核可以延迟这些操作,在时间充裕时进行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值