中断

中断

中断使得硬件得以发出通知给处理器,是一种变内核主动为硬件主动的方式。中断本质上是一种特殊的电信号。硬件在生成中断的时候并不需要考虑与处理器的时钟同步,即中断可以随时产生,内核随时可能因为新到来的中断而被打断

在这里插入图片描述

不同的设备对应的中断不同,而每个中断都通过唯一的数字标识,这样,操作系统才能给不同的中断提供对应的中断处理程序。硬件发出中断,就是在提醒内核,有新的请求需要读取并处理。

异常

异常与中断不同之处就是在于异常在产生时必须要考虑处理器与时钟同步,所以其经常被称为同步中。

异常的产生原因:

1.处理器由于执行到编程失误而导致的错误指令(如被0除)

2.执行期间出现特殊情况,例如缺页

3.系统调用陷入内核-----引起了系统调用处理程序异常

以上,产生异常,都需要内核处理。

中断处理程序

内核通过执行中断处理程序(interrupt handler)来对某一特定的中断进行响应,产生中断的每一个设备都有一个相应的中断处理程序。一个设备的中断处理程序是其设备驱动程序的一部分-----设备驱动程序是用于对设备进行管理的内核代码

中断处理程序被内核调用,运行于中断上下文,该上下文的执行代码不可阻塞。

上半部与下半部的对比

将中断处理分为两个部分。

中断处理程序是上半部分(top half),接收到一个中断会被立即执行,只做有严格时限的工作。

能够被允许稍后完成的工作会被推迟到下半部去执行。即处理和操作中断的非即时完成请求会在随后的下半部中执行。

中断上下文

当执行一个中断处理程序时,内核处于中断上下文中(interrupt context)。

注意:

  • 中断上下文没有后备进程,所以其不可以睡眠。如果一个函数要进行睡眠,就不能出现在中断处理程序中。
  • 中断处理程序实际上打断了其他的代码,这种异步执行的特性,要求所有的中断处理程序必须尽可能的快速、简单。尽量将工作从中断处理程序中分离出来,放在中断下半部执行。
  • 中断处理程序栈是一个配置选项。在内核早期版本中,中断处理程序是共享别人的堆栈,获取空间时非常节约。后期,中断处理程序有了自己的栈(中断栈),但无论无何,在内核中还是要尽可能的节省空间的使用,因为内核栈本身就是有限的。
  • 进程上下文是可以睡眠的

总结

大多数现代硬件都通过中断来与操作系统进行通信。对给定的硬件进行管理的驱动程序注册中断处理程序,是为了响应并处理来自相关硬件的中断。中断过程所作的工作包括应答并重新设置硬件,从设备拷贝数据到内存以及反之,处理硬件请求,并发送新的硬件请求。

内核提供的接口包括注册和注销中断处理程序、禁止中断、屏蔽中断线以及检查中断系统的状态。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值