什么是系统调用:
系统调用向操作系统发出请求,操作系统会对各个请求进行协调管理。
系统调用和普通调用的区别
系统调用本质上是一种过程调用,但它是一种特殊的过程调用,与一般用户程序中的过程调用有明显的区别 。
运行状态不同
运行状态不同。系统调用的调用过程和被调用过程运行在不同的状态,而普通的过程调用一般运行在相同的状态。
调用方法不同
调用方法不同。系统调用必须通过软中断机制首先进入系统核心,然后才能转向相应的命令处理程序。普通过程调用可以直接由调用过程转向被调用过程。
返回问题
返回问题。在采用抢先式调度的系统中,当系统调用返回时,要重新进行调度分析――是否有更高优先级的任务就绪。普通的过程调用直接返回调用过程继续执行。
系统调用和库函数的区别:
系统调用和库函数调用的区别:
1:系统调用是最底层的应用,是面向硬件的。而库函数的调用是面向开发的,相当于应用程序的API(即预先定义好的函数)接口;
2:各个操作系统的系统调用是不同的,因此系统调用一般是没有跨操作系统的可移植性,而库函数的移植性良好(c库在Windows和Linux环境下都可以操作);
3:库函数属于过程调用,调用开销小;系统调用需要在用户空间和内核上下文环境切换,开销较大;
4:库函数调用函数库中的一段程序,这段程序最终还是通过系统调用来实现的;系统调用调用的是系统内核的服务。
系统调用背后的过程:
访管指令:
同样从指令集的角度定义,或者说从硬件角度(cpu状态)。防管指令,是用户程序自愿进管的指令(进管同时也意味着程序放弃cpu的控制权),该指令本身属于非特权指令,可在用户态执行,执行后进入核心态。核心态是通过cpu置相应标志表明当前处于核心态。cpu进入核心态后可以执行指令集中的所有指令(包括特权指令和非特权指令,但不执行访管指令)
陷入指令:
陷入指令(Traps),又叫做自陷指令或访管指令,出现在计算机操作系统中,用于实现在用户态下运行的进程调用操作系统内核程序,即当运行的用户进程或系统实用进程欲请求操作系统内核为其服务时,可以安排执行一条陷入指令引起一次特殊异常。
用户程序执行陷入指令,相当于把CPU的使用权主动交给了操作系统内核程序。
陷入指令在计算机操作系统的中断处理机制、系统调用机制中有重要作用。陷入处理机制需要开辟现场保护区,以保存发生系统调用时的处理器现场。
陷入指令是唯一 一个只能在用户态执行,而不可在核心态执行的指令。
总结: