其实中断是一个很大的概念,可以有硬件层面的理解和软件层面的实现和切换两方面,操作系统主要对软件实现进行解释,计算机组成主要对硬件层面进行解释;
1、既然引入了用户态和核心态,从而也要实现切换,实际即是通过异常或者中断来实现的,当异常或者中断发生时,即能够进入核心态,需要注意的一点是:不论异常还是中断,都是通过硬件来实现的;怎么理解这个都是通过硬件来实现呢?可以想象有一个寄存器的一个bit表示CPU所处的工作状态,0表示核心态,1表示用户态,当状态转换时就要在硬件层面对这个寄存器进行修改,所以归根到底是通过硬件来实现的;
2、操作系统主要介绍软件层面的知识,即:用户程序中使用访管指令,发生访管中断,进入核心态,根据访管指令的指令码和中断号来确定在核心态下执行什么样的系统调用子程序(也即是系统调用命令,它只能在核心态下工作),之行结束之后,就通过中断返回指令(它属于特权命令,所以也只能工作在核心态)转向用户态;
3、为了更清楚的认识这一过程,需要对访管指令的形式有一定的了解:
/*copy过来的,如果原博主看见可不要打我~*/
访管指令由指令码和访管中断号两部分组成,即 SVC n ,式(1) 其中SVC(super visor call)为指令码,表明是访管指令;n为访管中断号,其值是一整数,具体表示何种访问请求。当中断发生时,硬件终端装置将访管中断号n送入旧的程序状态字内的中断码字段,访管中断总控程序由系统堆栈中将其取出,并据此转入对应的服务程序中。(这里面有点需要注意的,系统调用的程序是根据访管中断号来确定的)。
在实际使用时,用户程序与操作系统之间还需要相互传递参数和返回值。因此,用户使用访管指令的一般形式为:准备参数 ;SVC n ;取返回值 式(2)。根据具体房管要求约定,参数及返回值可以通过寄存器传递,也可以通过内存传递。对于后者,操作系统必须能够访问进程空间。
通常,将式(2)称为系统调用指令,它除了访管指令外,还有准备参数和取返回值。为了使用方便,在高级语言中一般将其写为同过程调用相类似的形式,即:返回值=系统调用名称(参数1,参数2,...,参数n) 式(3)。 当然,编译程序会将式(3)翻译成形如(2)的形式。其中,系统调用名称对应式(1),不同的系统调用名称对应不同的整数n。在有些书籍中,也称式(3)为代表式(2)的宏指令或广义指令。
4、感觉网上对中断的各种分类介绍的挺多但是也挺杂乱无章的,下面给出一点自己的理解:按照操作系统上的分类,可以按照中断源进行分类,即来自CPU执行指令以外的事件的发生的称为外中断(中断),源自CPU执行指令内部的事件的称为内中断(异常);
比如外中断有:设备发出的I/O结束中断;时钟中断;这一类中断通常是与当前程序运行无关的事件,即与它们当前CPU运行的程序无关;
比如内中断有:程序的非法操作码;地址越界;算术溢出;虚存系统的缺页;专门的陷入指令引起的事件;对异常的处理一般要依赖于当前程序的运行现场,并且异常不能被屏蔽,一旦出现应立即处理;
5、至于什么同步中断、异步中断、软中断、硬中断,就从计组的角度去认识;