第四章 输入输出系统

  从某一个中断源发出中断服务请求,到这个中断服务请求全部处理完成所经过的主要过程如图4.6所示。

  中断处理过程开始
     
  
● 现行指令执行结束,且没有更紧急的服务请求
  ● 关CPU中断,CPU不能再响应其它任何中断源的中断服务请求
  ● 保存中断点,指保存程序计数器PC中的内容,在中断服务完成之后返回到原来的程序中去
  ◎ 撤消设备的中断服务请求,如果这个中断源的中断请求不撤消的话,那么在CPU开中断后,它必然将再次请求中断服务
  ◎ 保存硬件现场,主要指保存处理机状态字PSW及堆栈指针SP等中的内容
  ◎ 识别中断源
  ◎ 改变设备的屏蔽状态
  ● 转向中断服务程序入口,一般还要在中断服务程序中通过软件才能找到具体中断源的中断服务程序入口
  ◎ 保存软件现场,主要指保存将要被中断服务程序破坏的通用寄存器中的内容等
  ○ 开CPU中断,CPU可以响应其它更高级中断源的中断服务请求,中断源之间可实现中断嵌套
  ○ 中断服务
  ○ 关CPU中断,CPU不响应任何中断源的中断服务请求。在下一次开CPU中断之前,正在运行的程序不允许被中断
  ◎ 恢复软件现场,恢复被中断服务程序破坏的通用寄存器中的内容等
  ◎ 恢复屏蔽状态
  ◎ 恢复硬件现场,包括恢复处理机状态字PSW及堆栈指针SP等中的内容等,准备返回中断点
  ◎ 开CPU中断,如果用硬件实现,这条指令必须延迟执行,要在程序回到中断点之后才能实际打开CPU的中断
  ○ 返回到中断点

    
  中断处理过程全部结束
图4.6 中断处理过程

  在图4.6中,每一行开头的标记分别表示:
  ● 表示本行的功能一般用硬件来实现。
  ○ 表示本行的功能一般用软件来实现。
  ◎ 表示本行的功能可以用硬件来实现,也可以用软件来实现。
  在图4.6中给出的中断处理顺序,在不同的计算机系统中可能有所不同。例如,"转向中断服务程序入口"这一功能可以插在从"保存中断点"之后,到第一次"开CPU中断"之间的任何一个地方。具体插在什么地方要看中间的一些功能,如"撤消设备的中断服务请求"、"保存硬件现场"、"识别中断源"、"改变设备的屏蔽状态"和"保存软件现场"等是用硬件来实现,还是用软件来实现。一般要在采用硬件实现的功能全部结束之后,才能执行"转向中断服务程序入口"这一功能。用软件实现的所有功能都在中断服务程序中完成。
  实际上,在图4.6所列的全部功能中,除了"现行指令执行结束"之外,只有"保存中断点"和"转向中断服务程序入口"这两个功能是必须用硬件来实现的。这是因为中断响应发生在现行程序的什么地方是不确定,不能由程序员来安排。另外,第一次"关CPU中断"一般也用硬件来实现,它只要用很简单的组合逻辑就能实现,几乎不需要花费时间。而"保存中断点"和"转向中断服务程序入口"这两个功能,实际上可以隐含地执行一条子程序调用指令来实现。
  同样,也只有"中断服务"和"返回到中断点"这两个功能必须用软件来实现。其中,"返回到中断点"需要执行一条中断返回指令,就象从子程序中返回到主程序那样。至于"中断服务"当然是要用软件来实现的,否则也就不能称为"程序中断方式"了。
  从中断源向处理机发出中断服务请求开始,到处理机实际开始为这个中断源服务时为止,这一段时间称为中断响应时间。如果中断响应时间过长,在实时控制系统中,很可能失去控制的时机或丢失控制信号。在数据采集或数据传输系统中,有可能丢失数据。