系统调用与一般过程调用是不同的,下列对被调用程序返回调用程序的描述中,哪一个是正确的
过程调用和系统调用均直接从被调用程序返回到调用程序
过程调用和系统调用从被调用程序返回到调用程序前,须先运行调度程序
系统调用直接返回到调用程序,过程调用在返回到调用程序前先运行调度程序
过程调用直接返回到调用程序,系统调用在返回到调用程序前先运行调度程序
答案
过程调用直接返回到调用程序,系统调用在返回到调用程序前先运行调度程序
解析
系统调用与一般过程调用在返回机制上确实存在不同。根据参考文章中的信息,我们可以清晰地比较两者的返回机制:
一般过程调用(即函数调用):
过程调用是在相同状态(用户态或核心态)下进行的,不涉及用户态到核心态的切换。
过程调用在被调用者执行完后,会直接返回到调用者的断点处继续执行。
不需要运行额外的调度程序,除非是在并发或多任务环境中,操作系统可能会进行进程调度。
系统调用:
系统调用是用户态程序请求操作系统服务的一种方式,需要通过陷入机制(如软中断)从用户态切换到核心态。
在系统调用处理结束后,由于可能涉及进程状态的变化(如进程切换、I/O操作等),操作系统可能会根据需要进行调度。
因此,系统调用在返回到调用程序前,可能会先运行调度程序。
现在,我们根据给出的选项进行分析:
过程调用和系统调用均直接从被调用程序返回到调用程序:这是不正确的,因为系统调用可能会涉及调度。
过程调用和系统调用从被调用程序返回到调用程序前,须先运行调度程序:这同样不正确,因为过程调用通常不会先运行调度程序。
系统调用直接返回到调用程序,过程调用在返回到调用程序前先运行调度程序:这不符合事实,因为系统调用可能涉及调度,而过程调用不会。
过程调用直接返回到调用程序,系统调用在返回到调用程序前先运行调度程序:这是正确的描述。
归纳:
过程调用(一般过程调用)在被调用者执行完后,会直接返回到调用者的断点处继续执行,不会先运行调度程序。
系统调用在返回到调用程序前,可能会因为进程状态的变化而先运行调度程序。
因此,正确的描述是:“过程调用直接返回到调用程序,系统调用在返回到调用程序前先运行调度程序”。