操作系统之什么是中断?

什么是中断?

​ 在学习操作系统中,经常性的会看到中断这个概念,最典型的就是汇编代码中的int命令。

​ 用一个比较通俗的概念来说,就是计算机会连接许多外接设备,包括磁盘、显示器、键盘鼠标等等,而如何处理这些输入呢?对于一个处理器来讲,程序运行的过程是一个不断取指执行的过程。如何响应设备也就是常说的I/O输入呢?一种简单的办法就是当我们有数据输入时,想处理器提出请求,处理器过来处理我们的输入,在回去执行原来的程序代码,这样的一个过程就叫做中断(Interrupt)。

​ 如果同时有多个设备提出请求,那么CPU应该怎么样去处理呢?我们需要对这些中断有一个优先级的概念。这里就需要提到可编程中断控制器(PIC-Programmable Interrupt Controller),会对所有的中断进行判断并且选出最高优先级进行处理。这里值得注意的是中断不仅仅可以由硬件发出,同样也可以由软件发出,最典型的就是从磁盘中读取数据。对于软件以及硬件中断的不同以及CPU的处理过程如下图:

异常:又称为同步中断,是当指令执行时CPU控制单元产生的,之所以称为同步,是因为只有在一条指令终止执行后CPU才会发出中断。在不失进程执行连续性的同时,按引起的异常的指令是否能重新执行,且依据它们被报告的方式,异常分为错误陷阱,和终止三种情况。

错误:错误是一种通常可以能够被修正的异常,一旦修正,程序能够不失去连续性地接着执行。当报告错误发生时,处理器将机器状态恢复到执行错误之前的状态。错误处理例程的返回地址指向产生错误的指令,而不是错误指令之后的的那条指令。如页错误。

陷阱:当引起陷阱的指令发生时,马上产生该异常。陷阱允许程序不失去连续性的继续执行。陷阱处理例程的返回地址指向引起陷阱的指令的下一条指令(与错误本质上的区别)。如溢出。

终止:它并不总是报告产生异常的指令的确定位置,也不允许引起终止的进程或任务重新执行。如总线错误导致异常终止。

请添加图片描述

请添加图片描述

典型的非屏蔽中断源的例子是电源掉电,一旦出现,必须立即无条件地响应,否则进行其他任何工作都是没有意义的。

典型的可屏蔽中断源的例子是打印机中断,CPU对打印机中断请求的响应可以快一些,也可以慢一些,因为让打印机等待儿是完全可以的。

用户如果需要操作系统资源,则必须使用中断

用户程序和内核之间的交互主要是通过系统调用实现的,而内核和外部设备之间主要是通过硬中断

用户态、内核态以及其他内容我将会在其他的文章中做记录

什么是IDT(中断向量表)

中断描述符表IDT是一个系统表,它与每一个中断或异常向量相联系,每一个向量在表中有相应的中断或异常处理程序的入口地址。内核在允许中断发生前,必须适当的初始化IDT

(1)16-31共16位是中断处理程序所在的段选择符。

(2)0-15位和48-64位组合起来形成32位偏移量,也就是中断处理程序所在段(由16-31位给出)的段内偏移。

(3)40-43位共4位表示描述符的类型。(0111:中断描述符,1010:任务门描述符,1111:陷阱门描述符)

(4)45-46两位标识描述符的访问特权级(DPL,Descriptor Privilege Level)。

(5)47位标识段是否在内存中。如果为1则表示段当前不再内存中。

请添加图片描述

中断产生之后发生了什么?(以键盘为例)

请添加图片描述

  1. 引起一个中断
  2. 通过APIC判断中断优先级,同时向CPU发送int信号
  3. CPU中断后去查中断向量表,找到对应处理中断的程序,程序调用对应的设备驱动与外部设备之间通信

请添加图片描述

一个设备的中断处理程序是它设备驱动程序的一部分。中断处理程序与其他内核的真正区别在于:中断处理程序是被内核调用来响应中断的,而它们运行于我们称之为中断上下文的特殊上下文中。

Linux内核中断系统处理机制-详细分析
Linux中断和系统调用的解析
Linux内核完全注释

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉默终止

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值