全国 【切换城市】欢迎您来到装修百科!
关注我们
我要装修

操作系统 - 中断

发布:2024-07-01 浏览:29

核心提示:让我们先考虑一个典型的计算机操作:一个执行输入输出的程序。为了开始一个输入输出的操作,设备驱动先把合适的寄存器装载进设备控制器。接着,设备控制器检查这些寄存器里的内容,然后再决定执行怎么样的操作。控制器开始把数据从设备传送到本地缓存。一旦传输完成,设备控制器会通知设备驱动传输数据完成。然后,设备驱动会把控制权限给予操作系统中其他的部分。这里如果是读操作的话,设备驱动会直接返回数据或是指向数据的指针;如果是其他操作的话,设备驱动可能返回诸如“写成功”或“设备正忙”的信息。但是,控制器是怎么通知设备驱动---

让我们先考虑一个典型的计算机操作:一个执行输入输出的程序。
为了开始一个输入输出的操作,设备驱动先把合适的寄存器装载进设备控制器。
接着,设备控制器检查这些寄存器里的内容,然后再决定执行怎么样的操作。
控制器开始把数据从设备传送到本地缓存。
一旦传输完成,设备控制器会通知设备驱动传输数据完成。
然后,设备驱动会把控制权限给予操作系统中其他的部分。
这里如果是读操作的话,设备驱动会直接返回数据或是指向数据的指针;如果是其他操作的话,设备驱动可能返回诸如“写成功”或“设备正忙”的信息。
但是,控制器是怎么通知设备驱动---它已经完成了操作呢?这是通过“中断interrupt”来完成的。
硬件可以在任何时候,通过发送一个信号给CPU,从而触发一个中断,通常是通过系统总线。
(在计算机系统中有许多总线,但系统总线是绝大多数部件之间的主要通讯途径)。
中断也被用作其他的目的并且是硬件和操作系统中交互的重要部分。
当CPU被中断时,他会把当前正在做的事情停下来,并且立即把执行的场所转移到一个固定的地方。
这个固定的地方通常是中断服务程序所在的开始的地方。
然后,中断服务程序执行。
程序执行完以后,CPU会恢复到中断前的正在做的事情。
上述操作的时间轴如下:中断是计算机架构中的一个重要部分。
每个计算机的设计都有它自己的中断机制,但有几个功能是相同的。
中断必须传输控制给合适中断服务程序。
最直接的管理这个传输的方法是调用一个最通用的程序去检查中断信息。
然后,这个程序会去调用中断指定的处理中断的程序。
然而,因为中断发生的很快,所以中断必须快速的处理。
中断程序的指针表(table of pointers)被用来满足这样的速度。
中断程序间接得从这张表中被调用,并且无需中间的服务程序。
一般情况下,指针表被存储在内存的低地址段(前100位置)。
这些位置存储着不同设备的中断服务程序的地址。
这个地址数组,或者说是地址的中断向量表interrupt vector,每一项都有一个独一无二的索引,去映射中断请求,然后查找出中断服务程序所在的地址。
像Windows和Unix这样不同的操作系统,也都是以这种方式调度中断的。
无论什么被中断了,中断架构必须要存储状态信息,以便于在中断服务程序完成后恢复信息。
如果中断程序需要修改处理器的状态,比如说修改寄存器值,它必须明确地保存当前的状态,然后在中断返回前恢复原先的状态。
中断服务完成后,中断前程序运行的地址被装载回去,然后继续运行原有的程序,就好像中断没发生过一样。
最基本的中断机制是这样工作的:CPU的硬件上有一根被称为中断申请的线路,每次执行完一条指令后,CPU都会感知一下这条线路当CPU侦测到一个控制器在这条线路上触发了一个信号,它会读取中断信号的数值,把这个当作索引,去中断向量表中查找对应的中断程序的入口地址。
然后从这个地址开始执行程序中断程序会先保存它在执行期间会改变的任何状态,确定中断的原因,执行必要的处理,执行状态的恢复,然后通过执行“return_from_interrupts”指令,让CPU返回到中断前执行状态。
习惯上,我们是这么描述上述行为的:设备控制器在CPU的中断申请线路上通过发出一个信号而raise了一个中断CPUcatch了这个中断,然后通过它dispatch对应的中断处理程序中断程序clear中断具体描述如下图:中断的实现基本中断机制描述了当设备控制器准备好服务时,怎么让CPU去回应这样一个异步的事件。
然而在现代的操作系统中,我们需要更加复杂的处理中断的特性:当我们在处理一些很关键很重要的程序时,我们不希望被中断打扰,又不想丢弃这个中断,因此我们需要推迟这个中断的机制。
我们需要一个高效率的方法去为设备调度合适的中端处理程序。
我们需要多级别的中断,好让操作系统区分低优先级和高优先级,然后按照紧急程度去调度调度中断程序。
在现在计算机硬件中,这三个特性由CPU提供,被称为硬件中断(interupt-controller hardware)。
大多数的CPU有两条中断申请线路。
一条是不可屏蔽中断(nonmaskable interrupt),用来为诸如不可恢复的内存错误的事件服务;第二条线路是可屏蔽的,当CPU在执行一些关键的不能被中断程序指令前,CPU可以先关闭这些中断。
可屏蔽中断线路被设备控制器用来申请中断。
向量化中断机制的目的为了避免单个中断申请必须去从所有的中断处理中去查找匹配的中断处理程序。
实际上,计算机有远比向量表中地址所能容纳的更多的设备。
一个通常的做法是使用中端链接interrupt chaining,也就是让每一个中断处理形成一个链表,当有一个中断申请时,从该链表的头开始查询,直到查找到匹配的为止。
这种结构是一种在超大中断向量表的开销和非高效率调度单个中断程序间的折中办法。
下图展示了Intel处理器的中断向量表的设计。
从事件编号0到31是不可屏蔽的,用来指示各种各样的错误信息。
事件编号32~255是可屏蔽的中断,被用作一般的设备产生的中断请求。
中断机制也通常以中断优先级的形式来实现。
这些级别可以让CPU推迟处理低优先级的中断而不用屏幕所有的终端,并且可以让高优先级的中断抢占(preempt)低优先级的中断而率先执行。
总的来说,现代操作系统使用中断来处理异步事件。
设备控制器和硬件错误可以产生中断。
现在计算机使用中断优先级从而让最紧急的任务最先得到执行。
正是因为中断被大量用于对时间敏感的处理,才需要有效的中断处理从而能让我们获得良好的系统性能。

  • 收藏

分享给我的朋友们:

上一篇:一文讲透计算机的“中断”(计算机中断处理过程流程图) 下一篇:[太原沐林装饰]新房装修预算不足怎么办?装修如何省钱呢?(太原沐林装饰)

一键免费领取报价清单 专享六大服务礼包

装修全程保障

免费户型设计+免费装修报价

已有312290人领取

关键字: 装修报价 装修网 装修风格

发布招标得免费设计

申请装修立省30%

更多装修专区

点击排行