中断优先级不仅在处理机响应中断源的中断服务请求时使用,而且为每个中断源的中断服务程序也赋予同样的中断优先级。因为中断服务程序必须在处理机上执行,因此,把这种设置中断屏蔽的方法称为处理机优先级屏蔽法。
  如果一台处理机共有n个中断源,则在处理机的状态字中需要设置个中断屏蔽位。
  处理机本身的优先级一般设置为最低。例如,设置为"0级",通常,处理机在运行主程序时,其优先级即为0级。另外,要为每一个中断源分别建立处理机状态字,通常把它们存放在主存储器的一个固定区域中。这些中断源的处理机状态字中同样也有一个中断优先级字段,而且每个中断优先级字段一般都可以由程序员用通过软件来进行修改。
  处理机在响应某一个中断源的中断服务请求后,就把属于这个中断源的处理机状态字作为当前处理机的状态字,这时候处理机的优先级也就有改变了,变成了程序员为这个中断源设置的中断优先级。这时,只有中断优先级高于当前处理机优先级的中断源才能中断当前的中断服务程序。
  正常工作的情况,在各个中断源的处理机状态字中设置的中断优先级应该与这个中断源本身的硬件中断优先级相同。这时,处理机响应中断源的中断服务请求和完成中断服务的过程将严格按照中断源的硬件中断优先级进行。
  如果要改变中断源的中断服务顺序,即在有多个中断源同时请求中断服务时,让某些硬件中断优先级较低的中断源先得到处理机的服务,可以通过修改相关中断源的处理机状态字来实现。
  下面,举一个简单的例子。
  例如,某处理机共有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个中断源同时请求中断服务,图7.10给出处理机实际响应中断源的中断服务请求和完成中断服务的过程。
图 7.10 采用处理机优先级时的中断处理过程