中断屏蔽技术

Posted PacosonSWJTU

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了中断屏蔽技术相关的知识,希望对你有一定的参考价值。

【README】

本文转自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐;


【1】中断屏蔽

1,中断屏蔽的意思是,在中断1的服务程序执行过程中,不允许被其他中断打扰;

2,按理,对于不同中断源,它有中断响应优先级,但这个是硬件决定的,无法修改;而如果要修改各个中断的优先级(即是否可以被打扰),可以通过中断屏蔽寄存器(人工设置该寄存器的值)来实现;这是提出中断屏蔽技术的原因所在;

3,中断屏蔽的具体原理是: 每个中断源都有一个中断屏蔽字(如16个bit); 当该中断被响应或执行该中断的服务请求时,对应中断源的屏蔽字设置到中断屏蔽寄存器;在中断响应时,cpu会根据屏蔽寄存器的值来判断是否响应该中断;

【1.1】屏蔽技术介绍

1 中断屏蔽技术

  • 1.1 通过设置中断屏蔽字来改变中断服务优先级,从而提高系统设计和响应的灵活性;
  • 1.2 中断屏蔽字是通过中断屏蔽触发器来设置的;INTR 是中断请求寄存器;MASK 是中断屏蔽触发器(MASK=0,非门输出1时表示未屏蔽);

2 如何提出中断请求?

  • 触发器D在完成后,提出中断请求,能够提出中断的条件是,这个中断源没有被屏蔽掉;

3 右图第2种方式实现中断屏蔽

  • 中断屏蔽字的长度等于中断源的个数,屏蔽字的每个bit对应到每个mask的取值上
  • 若maski等于1,则表示第i个中断源的中断请求不会被响应(或被屏蔽);当然也无法提出中断请求;

中断屏蔽触发器的作用是 屏蔽某个中断源发出中断请求,也不能参加中断请求优先级的排队;

【1.2】中断屏蔽字

屏蔽触发器对应的值是屏蔽字;
如,16个中断源,每个中断源都对应一个屏蔽字;
每个屏蔽字表示当中断源的中断服务程序在执行过程中,是否允许其他中断源提出中断请求
进入到排队器进行排队(即是否允许其他中断源提出中断请求);对应的bit位为1表示屏蔽,0表示不屏蔽;

如:1号中断源的中断服务程序在执行过程中,无论是1号还是2.。。。16号中断源提出的中断请求都不会进入中断排队器中排队(即1号中断源屏蔽其他中断源的中断请求);
但2号中断服务程序的执行过程中,允许1号中断源提出中断请求并被1号打断;


【2】 屏蔽技术可以改变中断处理优先级

【2.1】中断响应优先级与处理优先级

1,中断优先级分为响应优先级,处理优先级;

  • 响应优先级,属于中断硬件给定,无法修改;
  • 处理优先级,可以通过屏蔽技术进行修改;

2,处理优先级是可以改变的,通过重置屏蔽字,让低优先级的中断无法进入排队器排队;通过中断屏蔽字让某一个中断源的处理优先级被提高

【例】在执行C的中断服务程序的过程中,对应的中断屏蔽字(中断屏蔽寄存器)被设置为0110,只有A或D的中断请求可以进入中断排队器中排队;

 【2.2】例子,屏蔽技术修改中断处理优先级

响应优先级为 A B C D,降序排列, 无法修改;处理优先级修改为, A D C B,降序排列;

【例子】加入屏蔽技术后的多中断处理步骤

  • 步骤1:ABCD同时提出中断服务请求,因为主程序屏蔽字(即中断屏蔽寄存器)为0000(不会屏蔽任何中断),所以4个中断都会进入排队器;
  • 步骤2:又A的响应优先级最高,所以cpu先响应A,转而执行A的中断服务程序;在执行A中断服务程序过程中,因A的屏蔽字为1111,故它会把中断屏蔽字设置为1111,这会屏蔽其他中断源(ABCD)的中断请求;
  • 步骤3:A的中断服务程序执行后,返回主程序,这时主程序屏蔽字是0000,所以中断屏蔽字寄存器为0000; 即主程序随时可以被打断,DCB都可以进入中断排队器进行排队;
  • 步骤4:又B的响应优先级最高,所以先响应B,执行B的中断服务程序;又B的中断屏蔽字为0100,所以B允许被CD中断源打断;
  • 步骤5:在执行B的中断服务程序过程中,CD均可以提出中断请求,并进入中断排队器排队;
  • 步骤6:又C的响应优先级高于D,所以先响应C,转而执行C的中断服务程序(C中断B);响应C后, C的中断屏蔽字设置到中断屏蔽字寄存器,即0110;那么C的中断服务程序可以被AD中断源打断;
  • 步骤7:在执行C的中断服务程序过程中,D提出中断请求,进入排队器进行排队;又D的处理优先级高于C,所以中断C,转而执行D(D中断C);
  • 步骤8:执行D完成后,回到C的中断服务程序的断点,继续执行C,因为D中断的是C(中断谁就返回谁);
  • 步骤9: C执行完成后,再返回到B,因为C中断的是B;
  • 步骤10:B执行完成后,整个执行就结束了;

【3】新屏蔽字的设置

新屏蔽字的设置步骤:

序号

步骤

描述

1

保护现场

Push指令,把要用到的寄存器的值保存起来,以便从中断恢复后使用;

2

置屏蔽字

设置中断屏蔽字;

3

开中断

提前开中断,目的是实现多重中断;设置EINT=1

4

执行中断服务程序

5

关中断

因为恢复现场,恢复中断屏蔽字的过程不能被打断;设置EINT=0

6

恢复现场

把之前被保护的现场数据从内存恢复到寄存器;

7

恢复中断屏蔽字

把中断屏蔽寄存器的值设置为主程序的屏蔽字(0000),允许被任何中断打断;

8

开中断

允许中断;设置EINT=1

9

中断返回

从中断中恢复到主程序;

 

以上是关于中断屏蔽技术的主要内容,如果未能解决你的问题,请参考以下文章

(计算机组成原理)第七章输入和输出系统-第四节2:I/O方式之程序中断方式

linux中断处理函数

linux中断处理函数

23.核心初始化之中断屏蔽-2440

中断与异常

NMI 不可屏蔽中断(即CPU不能屏蔽)注意事项