(1)什么是中断
中断是指CPU对系统发生某个时间做出的一种反应。(是外部设备向处理器发起的请求事件)中断的本质是处理器对外开放的实时受控接口。
(2)为什么引入中断?
中断的引入是为了支持CPU和设备之间的并行操作。举个例子为什么要引入中断呢?比如计算机打印业务,计算机不可能时刻的去监控着你的打印机状态。在打印机有打印需求时,计算机会产生一个中断信号,发送给cpu请求占用计算机核心态,进行打印操作。这个过程就是个中断过程。
一个没有中断的计算机体系是决定论的:得知某个时刻CPU和内存的全部数据状态,就可以推衍出未来的全部过程。这样的计算机无法交互,只是个加速器。添加中断后,计算机指定了会兼容哪些外部命令,并设定服务程序,这种服务可能打断当前任务。这使得CPU“正在执行的程序”与“随时可能发生的服务”,二者形成了异步关系,外界输入的引入使得计算机程序不再是决定论。由人实时控制的中断输入,是无法预测的。再将中断响应规则化,推广开,非计算机科学人群就能控制计算机,发挥创造力。电竞鼠标微操,数码板绘,音频输入合成,影像后期数值调整,键盘点评天下大势,这些都不是定势流程,是需要人实时创造参与其中的事件,就由中断作为载体,与计算机结合了起来。中断就是处理器的标准输入接口。至于硬件细节并不那么重要,取决于指令规范。可以直接拉外部引脚到CPU Retire单元;也可以内置一个中断控制器统筹接收外部信号,再做转发。x86上二者都有,后一项是由南桥发至IO APIC再发至核心APIC再发给Retire单元,而CPU也有一定的自由度,会在适当的时机响应。
(3)中断什么时候发生?
a.当I/O设备向CPU发来中断信号,CPU在收到中断信号以后,并不立即执行响应,而是在执行每条指令周期的最后一个时钟周期,一旦检测到中断信号有效,并且中断允许位置1的时候,CPU才在当前指令执行完以后转入中断响应周期。
b.CPU内部的事件,如:进程在运算中发生了上溢或下溢。或者程序出错:非法指令,地址越界,电源故障等。
(4)中断发生时CPU做什么,中断处理机制做什么?
CPU在做什么?
不是外界事件首先引发了中断跳转,跳转时顺便置上中断标志,而是外界事件导致置上了中断标志,然后中断标志再进一步引发了跳转。标志置上了并不等于立即就会引发跳转。标志本身只是用来看的,就是说,得等CPU看到这个标志,才能真正引发跳转。触发中断的,实质上既不是外部设备,也不是标志,而是CPU自己。CPU只在每个指令周期的开头看一眼中断标志,有,则进入处理过程,没有,则继续做它自己的事。如果不巧,标志置晚了,CPU已经看完了,那就只能等下一轮指令周期。所谓的屏蔽中断,就是人为在中断标志前面挂个幕布,不许看。只是不许看而已,但没有不许立标志,外部设备尽可以来立标志,只是立得再久也没人处理而已,直到幕布被摘下。当CPU看到了一个标志、并进入其处理过程之时,还会自己给自己戴个眼罩,此时哪怕还有别的标志,也看不见了,所以此时别的中断发生,也得不到处理。当CPU处理完了这个中断,会自己把眼罩摘掉,于是又能再次看标志了。如果有别的标志正巧竖在那,那就处理吧。显而易见,当CPU放眼一望的时候,看到不止一个中断标志是完全可能的,而它一次只能选一个来处理。一般来说肯定挑出其中最有价值的一个,剩下的先放着,等下回来再管。这就是传说中的中断优先级。再刨根问底一点,当CPU已经开始处理一个中断的时候,这标志会怎样?根据中断的具体类型不同,这标志可能被CPU自动清除掉,也可能不会,而要等用户程序来手动清除。如果用户犯2了没清除标志怎么办?那么下次CPU放眼瞅的时候,这个标志还在!会不会再被处理一遍?——会的,而且不止一遍,只要你不清,它就根本停不下来。
什么是中断处理机制?
操作系统需要管理外设,但是外设的速度远远低于CPU的速度,所以我们需要一种机制来弥补这种速度鸿沟,提高CPU的效率。为此我们引入了中断机制,让外设在需要操作系统处理外设相关事件的时候,能够主动通知操作系统,即打断操作系统和应用的正常执行,让操作系统完成外设的相关处理,然后在恢复操作系统和应用的正常执行。当CPU收到中断或者异常的事件时,它会暂停执行当前的程序或任务,通过一定的机制跳转到负责处理这个信号的相关处理例程中,在完成对这个事件的处理后再跳回到刚才被打断的程序或任务中。
为使系统能及时响应并处理发生的所有中断,系统根据引起中断事件的重要性和紧迫程度,硬件将中断源分为若干个级别,称作中断优先级。
在实际系统中,常常遇到多个中断源同时请求中断的情况,这时CPU必须确定首先为哪一个中断源服务,以及服务的次序。解决的方法是中断优先排队,即根据中断源请求的轻重缓急,排好中断处理的优先次序即优先级( Priority ),又称优先权,先响应优先级最高的中断请求。另外,当CPU正在处理某一中断时,要能响应另一个优先级更高的中断请求,而屏蔽掉同级或较低级的中断请求,形成中断嵌套。
中断处理机制的分类?
1.异步中断(asynchronous interrupt),由CPU外部设备引起的外部事件如I/O中断、时钟中断、控制台中断等是异步产
的(即产生的时刻不确定),与CPU的执行无关。也称外部中断,简称中断(interrupt)。
2.同步中断(synchronous interrupt),在CPU执行指令期间检测到不正常的或非法的条件(如除零错、地址访问越界)所引起的内部事件称作,也称内部中断,简称异常(exception)。
3.陷入中断(trap interrupt),在程序中使用请求系统服务的系统调用而引发的事件,也称软中断(soft interrupt)。
中断处理机制做什么?
在操作系统中,会预先设置一些中断处理函数,当CPU接收到中断时,会根据中断号去查找对应的处理函数,中断向量表就是记录中断号和处理函数映射关系的表。
中断、异常和系统调用都由中断向量表协调执行。
1.发生中断时,根据中断向量号查询中断向量表,根据里面的处理程序,协调设备驱动处理外部设备的中断请求
2.发生系统调用请求时,中断向量表查询系统调用表,然后执行对应的系统调用程序
3.发生异常时,查询中断向量表得到对应异常处理程序,处理异常
中断机制是为了弥补CPU速度和外设速度数量级差异的机制,它的核心是中断向量表。
中断机制主要进行如下操作:
A.测定是否有未相应的中断信号
每当设备完成一个数据块(可以是一个字符或者字)的读入或输出时,设备控制器就会向处理机发送一个中断请求信号,请求将要输入的数据传送到内存缓冲区或者将要输出的数据传送到设备控制器。
每次有一道指令执行后,处理机都会检测,是否存在未响应的上面提到的设备控制器所发出的中断信号。
有的话就会停止原有进程,准备转到中断处理程序,准备将处理机的控制权交给中断处理程序。反之继续执行下一条指令
PS.如果一个标志还没被处理呢,就有人要来竖一个同样的标志(重点是:同样的),会怎样?如果一个标志还没被处理呢,就有人要来竖一个同样的标志(重点是:同样的),会怎样?很多中断,属于不作不死型:即,只有发起相应操作,才能收到相应结果的中断。不种瓜不可能得瓜。——对于这种,只要在收到前一个操作的结果中断之前不发起后一个操作(且不管机能上能不能做得到),就不会面临中断丢失的情况。还有一些中断,来几个意义都不变。比如我妈喊我吃饭,没等我去,我爸又来喊我一遍,最后我妹又来喊我一遍。无论如何,我最终都是去吃这一顿饭而已,不会吃三顿。这种中断自然也不怕丢失。
B.保护中断进程的CPU环境
上面提到要转交处理机的控制权,在这之前需要保护被中断的CPU中正在运行的进程信息,以方便中断处理结束之后能够继续回来执行最初的进程。
首先,通常由硬件将处理机状态字(PSW)和保存在程序计数器(PS)中的下一条指令的地址保存到中断保留区(栈)中。这样就保存了之后恢复进程所需要的信息
然后,将CPU的现场信息(寄存器和段寄存器)内容都压入中断栈中(中断处理时可能会用到这些)。
C.转入相应的设备处理程序
处理机对中断源进行测试,确定本次中断的I/O设备,向提供中断信号的设备发送确认信号。
该设备收到确认信号之后,就会取消它所发出的中断请求信号。之后将相应的设备中断处理程序的入口地址装入程序计数器中。
这样当处理机运行时,便可自动转向中断处理程序。
D.中断处理
不同设备有不同的中断处理程序。
该程序先从设备控制器中读出设备状态,判断本次中断类型。
正常完成中断的话,中断程序就作结束处理。
还是异常结束中断的话,就根据发生异常的原因做相应处理。
E.恢复CPU的现场并退出中断
处理完成后就要恢复CPU现场,退出中断。有两种情况:
①若采用了屏蔽(禁止)中断方式,就会返回中断进程。
②若采用的是嵌套方式,若没有优先级更高的中断请求I/O,中断结束后返回原进程。反之将会去处理更高优先级的中断请求。
当返回到被中断进程,可将保存在中断的断栈中的被中断进程现场信息取出,放入寄存器中。信息包括:程序下一次要执行的指令的地址N+1、PWS、通用寄存器和段寄存器的内容。
(5)中断与系统调用有什么异同?(补充异常)
关于异步和同步:
1.同步是阻塞模式;
同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去。
2.异步是非阻塞模式;
异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其
他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。
同步和异步的差别就在于这条流水线上各个流程的执行顺序不同。
(6)为什么说中断机制是一种C/S模式?
什么是C/S分布式模式?
C/S分布式模式,是计算机用语。C是指Client,S是指Server,C/S模式就是指客户端/服务器模式。是计算机软件协同工作的一种模式,通常采取两层结构。服务器负责数据的管理,客户机负责完成与用户的交互任务。
为什么说中断机制是一种C/S模式?
C/S是客户端发出请求,服务端进行处理后响应请求。
中断机制是外设发出中断请求,然后CPU进行相应的处理并响应请求。
从机制上来看十分相似。
(7)你在Linux的proc目录下,查看了interrupts文件后,对中断是否有进一步的认识,请给出你的认识。
操作结果
什么是proc?
proc被称为虚拟文件系统,它是一个控制中心,可以通过更改其中某些文件改变内核运行状态,它也是内核提供给我们的查询中心,用户可以通过它查看系统硬件及当前运行的进程信息。
查看inerrupts文件则是能够列出系统注册的中断,记录中断号,中断次数发生,中断设备名称。
通过/proc/interrupts可以查看当前运行中的中断信息,但是如果中断退出后要查看它的历史使用情况怎么办呢?这里可以通过/proc/stat来查看,用cat会看到它有很多行输出,这里我们关注一下intr行
其中第一个数字表示所有的中断调用统计总数5167833次,后面依次是中断号为0,1,2,3…,从这里看看到从系统启动到执行当前命令后所有中断被调用的次数以及总和。
自我补充问题:
关于硬中断和软中断
1.硬中断:
a.硬中断由硬件产生。每个设备或者设备集都有自己的IRQ(中断请求)。
b.硬件中断又可以分为内中断和外中断。
c.处理中断的驱动是需要运行在CPU上的。在多核处理机上,一个中断只能中断一颗CPU。
d.硬中断可以直接中断CPU。硬中断可以中断软中断。
e.对于时钟中断,内核调度代码会将当前正在运行的进程挂起,从而让其他的进程运行。他的存在是为了让调度器可以调度多任务。
2.软中断:
a.软中断是当前进程产生的。
b.通常,软中断是一些对IO的请求。
c.软中断仅与内核联系。
d.软中断不会直接中断CPU。
组内问题互动
1.什么是IRQ?这个号是由谁分配的?
IRQ(Interrupt ReQuest),是中断请求号,计算机每个组成组件都会拥有一个独立的IRQ,除了使用PCI总线的PCI卡之外,每一组件都会单独占用一个 IRQ,且不能重复使用。电脑周边硬件需要处理器去执行某些工作时,该硬件就会发出一个硬件信号,通知处理器工作,而这个信号就是IRQ。
系统会自动为外部设备分配IRQ号
1.中断号是怎么共享的呢?
实际上每个中断号对应一个中断处理程序只是一个笼统的说法,当多个设备共用同一个中断号时,显然一个中断号会对应一组处理程序。实际上,在我们安装设备的驱动时,就会将该设备对应的中断处理程序注册到对应的中断号上,换句话说,内核会为每个中断号,维护一个处理程序链表,链表上的每个节点都对应了一个使用该中断号的设备。