系统调用与一般过程调用是不同的,下列对调用程序与被调用程序的描述中,哪一个是正确的
过程调用和系统调用的调用程序与被调用程序均位于核心态
过程调用和系统调用的调用程序与被调用程序均位于用户态
过程调用时通过改变状态字,从用户态的调用程序转到核心态的被调用程序
系统调用时需要通过陷入机制,从用户态的调用程序转到核心态的被调用程序
答案
系统调用时需要通过陷入机制,从用户态的调用程序转到核心态的被调用程序
解析
系统调用时需要通过陷入机制,从用户态的调用程序转到核心态的被调用程序
这是正确的描述。系统调用涉及到用户态到核心态的转换,通常通过执行一个特殊的指令(如陷阱指令或系统调用指令)实现这一转换,进而调用位于核心态的操作系统服务。而过程调用则在同一特权级(通常是用户态)内部进行,无需改变状态字或使用陷入机制。
系统调用与一般过程调用在调用程序与被调用程序的描述中,存在明显的差异。以下是对各个选项的详细分析和归纳:
过程调用和系统调用的调用程序与被调用程序均位于核心态:
这个描述是不正确的。系统调用的调用程序位于用户态,而被调用程序(即操作系统提供的服务)位于核心态。而一般过程调用可以发生在用户态或核心态,取决于调用者和被调用者的状态。
过程调用和系统调用的调用程序与被调用程序均位于用户态:
这个描述也是不正确的。系统调用的被调用程序(操作系统服务)一定位于核心态,以执行特权操作。
过程调用时通过改变状态字,从用户态的调用程序转到核心态的被调用程序:
这个描述是不准确的。一般过程调用不涉及用户态到核心态的转换。状态字的改变通常与CPU模式的切换相关,而一般过程调用是在同一模式下进行的。
系统调用时需要通过陷入机制,从用户态的调用程序转到核心态的被调用程序:
这个描述是正确的。系统调用是用户程序请求操作系统服务的一种方式,需要通过陷入机制(也称为软中断或异常)来触发,从而使用户态的调用程序能够进入核心态执行被调用程序(即操作系统服务)。
归纳:
系统调用与一般过程调用的主要区别在于执行状态和上下文切换机制。
系统调用时,调用程序位于用户态,被调用程序位于核心态,需要通过陷入机制进行上下文切换。
一般过程调用在同一模式下进行,不涉及用户态到核心态的转换。
因此,正确的描述是:“系统调用时需要通过陷入机制,从用户态的调用程序转到核心态的被调用程序”。