最近,又看起来操作系统,对其中的一些概念还不是理解的很透彻,现在再来温习一遍。
访管指令。引用百度百科的一些理解:
当源程序中有需要操作系统服务的要求时,编译程序就会在由源程序转换成的目标程序中安排一条“访管指令”并设置一些参数。当目标程序执行时,中央处理器若取到了“访管指令”就产生一个中断事件,中断装置就会把中央处理器转换成管态,并让操作系统处理该中断事件。操作系统分析访管指令中的参数,然后让相应的“系统调用”子程序为用户服务。其次,访管指令是在目态下使用的指令。
我们知道,用户程序只能在目态下运行,并且不能使用特权指令。因而就存在这么一个问题:如果用户程序想要启动外设,或者要完成在目态下无法完成的工作,该怎么办?要解决这一问题必须有三个条件:
(1)需要有一条指令,能使处理机从目态进入管态,并向操作系统提交要代为完成的工作;
(2)在管态下由操作系统完成用户程序的请求;
(3)操作系统完成所做工作后能返回到用户程序,即从管态回到原来的目态。
解决这个问题要靠访管指令。访管指令本身不是特权指令,其基本功能是让程序拥有“自愿进管”的手段,从而引起访管中断。
还有自己找的一些资料,访管指令由指令码和访管中断号两部分组成,即 SVC n ,式(1) 其中SVC(super visor call)为指令码,表明是访管指令;n为访管中断号,其值是一整数,具体表示何种访问请求。当中断发生时,硬件终端装置将访管中断号n送入旧的程序状态字内的中断码字段,访管中断总控程序由系统堆栈中将其取出,并据此转入对应的服务程序中。(这里面有点需要注意的,系统调用的程序是根据访管中断号来确定的)。
在实际使用时,用户程序与操作系统之间还需要相互传递参数和返回值。因此,用户使用访管指令的一般形式为:准备参数 ;SVC n ;取返回值 式(2)。根据具体房管要求约定,参数及返回值可以通过寄存器传递,也可以通过内存传递。对于后者,操作系统必须能够访问进程空间。
通常,将式(2)称为系统调用指令,它除了访管指令外,还有准备参数和取返回值。为了使用方便,在高级语言中一般将其写为同过程调用相类似的形式,即:返回值=系统调用名称(参数1,参数2,...,参数n) 式(3)。 当然,编译程序会将式(3)翻译成形如(2)的形式。其中,系统调用名称对应式(1),不同的系统调用名称对应不同的整数n。在有些书籍中,也称式(3)为代表式(2)的宏指令或广义指令。
联系客服