硬中断和软中断

中断

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

整个操作系统可理解为一个由中断驱动的死循环,操作系统原理可用下面的伪代码解释:

其他所有事情都是由操作系统提前注册的中断机制和其对应的中断处理函数完成,点击鼠标和键盘,执行一个程序,都是用中断的方式来通知操作系统来处理这些事件,当没有任何需要操作系统处理的事件时,它就停在死循环里。

1 中断的分类

中断分为硬中断和软中断,其分类依据是,而不是触发机制,比如CPU硬中断,它是由CPU这个硬件实现的中断机制,但它的触发可以通过外部硬件,也可以通过软件的 INT 指令。

类似地,软中断是由软件实现的中断,是纯粹由软件实现的一种类似中断的机制,实际上是模仿硬件,在内存中存储着一组软中断的标志位,然后由内核的一个守护线程不断轮询这些标志位,如果有哪个标志位有效,则再去执行这个软中断对应的中断处理程序。

2 硬中断工作流程

由上图可知,每个中断 都对应一个中断描述符,那CPU收到一个中断 后,如何找到对应的中断描述符呢p>

CPU中预留了一个 ,操作系统通过,将中断描述符表的地址放在这个寄存器里,此寄存器的结构如下:

跟踪入口方法:

方法里面是各种初始化。

即开启内核软中断守护进程,进入此方法,主要内容如下:

可以看出软中断标志位的一位对应着软中断向量表中的一个元素,所以中断向量表这个数组大小是32,而中断标志位也有32个。

可以采用如下代码方式:

3.4 小结

  • 软中断的实现方式:一组软中断标志位,对应着软中断向量表中每个中断处理函数,有一个内核守护进程不断循环判断中断标志位,如果为1就调用对应的中断处理函数。
  • 由各个子系统调用,负责把软中断向量表赋上值。
  • 由各个需要触发软中断的地方调用,修改中断标志位的值。
  • 软中断守护线程循环判断中断标志位并调用对应的处理函数。
    硬中断和软中断
  • Linux一般会把中断分成上下两半部分执行,上半部分处理最简单的逻辑,下半部分直接交给一个软中断异步处理。
  1. https://mp.weixin.qq.com/sbiz=Mzk0MjE3NDE0Ng==&mid=2247498208&idx=1&sn=b784f8b4e627ebd1bfb9810d194fdb80&chksm=c2c5834df5b20a5bdee331002bfc61c90eb468da325bf67abeef780c303a9f51c8543e1a5981&scene=21#wechat_redirect
  2. https://mp.weixin.qq.com/s/g9rGKRQofAlWjdq8lDTTkQ

文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux25388 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年7月28日
下一篇 2021年8月1日

相关推荐