系统调用与普通过程调用的异同点

系统调用与普通过程调用的异同点

  • 系统调用与普通过程调用的异同点

系统调用与普通过程调用的异同点

相同点:
改变指令流程
重复执行和公用
改变指令流程后需要返回原处

不同点:
系统调用是动态调用,而CALL调用方式是静态调用;
执行状态不同
进入方式不同
与进程调度的关系不同:
嵌套或递归调用

1. 系统调用是动态调用,而CALL调用方式是静态调用;
系统调用是动态调用,程序中不包含被调用代码
好处:
(1)用户程序长度缩短
(2)当OS升级时,调用方不必改变
系统调用方式的调用地址和返回地址都是不固定的:系统调用指令中不包含调用地址,只包含功能号;系统调用返回指令中也不包含返回地址,通过栈保存和弹出返回地址。
CALL调用方式是静态调用:被调用代码与调用代码在同一程序之内。CALL调用方式,其调用地址是固定的,包含在调用语句中

2. 执行状态不同
调用和返回经历了不同的系统状态:
核心和应用程序的代码分别运行在CPU的不同的状态下(系统态/核心态/管态和用户态/目态),所用地址空间也不同――核心的代码可以直接访问应用进程的地址空间,反之不然。

3.进入方式不同
利用int或trap指令进行系统调用;利用call或jmp指令进入普通的过程调用;
CALL指令的内部实现过程:
返回地址压栈(即该CALL指令所在的地址);
将该CALL指令中所含的地址(即被调用代码所在地址)送入PC
RET指令的内部实现过程:
从栈顶弹出返回地址送入程序计数器PC

4. 与进程调度的关系不同
采用抢先式调度的系统,在系统调用返回时,要进行重新调度的检查――是否有更高优先级的任务就绪(创建或唤醒)。

5. 嵌套或递归调用
对系统调用,一般不允许在同一个进程中发生嵌套或递归。

你可能感兴趣的:(操作系统,操作系统,系统调用)