第四章 输入输出系统

 例4.2:某处理机共有4个中断源D1、D2、D3和D4,它们在串行排队链中的硬件中断优先级从低到高分别为1级、2级、3级和4级。处理机本身的优先级最低,为0级。在中断源D1、D2、D3、D4的处理机状态字中,程序员为它们设置的优先级分别为4级、3级、2级、1级。
  因为有4个中断源,因此在处理机状态字中要设置3个中断屏蔽位。其中,000为处理机本身的优先级,001~100分别表示4个中断源的中断优先级。如果当处理机正在执行主程序时,4个中断源同时请求中断服务,图4.8给出处理机实际响应中断源的中断服务请求和完成中断服务的过程。

  当处理机运行主程序时,处理机的优先级最低,为0级。4个中断源同时请求中断服务,通过硬件排队器选择其中硬件中断优先级最高的中断源D4,处理机首先响应它的服务请求,并且把处理机的优先级改变为1级。这时,由于D1、D2、D3三个中断源仍然在请求中断服务,而且,它们的硬件中断优先级都比当前处理机的优先级高,因此,处理机要响应其中硬件中断优先级最高的中断源D3的中断请求,并且把处理机的优先级改变为2级。这时,还剩下D1和D2两个中断源在请求中断服务,它们的硬件中断优先级都不高于当前处理机的优先级,因此,中断源D3的中断服务程序能够一直执行完成。当处理机从中断源D3的中断服务程序返回到中断源D4的中断服务程序中时,处理机的中断优先级又变成了1级。这时,还没有得到处理机响应的两个中断源D1和D2中,只有中断源D2的硬件中断优先级高于当前处理机的中断优先级。因此,处理机将立即响应中断源D2的中断服务请求,又把处理机的优先级改变为3级。由于剩下的中断源D1的硬件中断优先级低于当前处理机的优先级,处理机将把中断源D2的中断服务程序全部执行完毕后才会返回到中断源D4的中断服务程序中。这时,最后一个没有被处理机响应的中断源D1的硬件中断优先级与当前处理机的优先级相同,要等待处理机把中断源D4的中断服务程序全部执行完成,并返回到主程序之后,中断源D1的的中断服务请求才能得到处理机的响应。由于中断源D1是最后一个被处理机响应,并得到服务的中断源,因此,它的中断服务程序能够一直执行完成。在中断源D1的中断服务程序全部执行完成,处理机返回来执行主程序时,全部中断源的中断服务请求也就处理完成了。
  从图4.8中看到,虽然4个中断源D1、D2、D3、D4的硬件中断优先级是从低到高顺序排列的,并且4个中断源同时请求中断服务,但是,通过改变各个中断源所属的处理机状态字内的中断优先级,使得处理机实际完成中断服务的顺序改变成了D3、D2、D4、D1。当然,还可以根据需要,任意改变中断服务的顺序。
  改变处理机优先级的方法与每一个中断源都设置一个中断屏蔽位的方法相比,两者都能由程序员通过软件来改变中断源的中断服务顺序,因此,它们都具有灵活性好的特点。它们的差别有两个,第一,两者使用的概念不同。前者使用的是中断屏蔽,后者使用的是中断优先级。第二,前者要为每一个中断源设置一个中断屏蔽位,所需要的位数比较多,而后者表示中断优先级所使用的位数要少得多。当然,前者使用起来要比后者方便些,例如,前者可以任意屏蔽掉一个或几个中断源,而后者只能屏蔽掉比某一个中断优先级低的中断源。从上面所举的两个例子中也可以看到它们的差别。