系统调用vs函数调用
典型的处理器逐个执行指令。但有时处理器必须停止当前指令并执行其他程序或代码段(驻留在其他地方)。完成此操作后,处理器将恢复正常执行,并从停止的位置继续。系统调用和函数调用就是这种情况。系统调用是对系统内置子例程的调用。函数调用是对程序本身内的子例程的调用。
什么是系统调用?
系统调用为运行在计算机上的程序提供与操作系统对话的接口。当一个程序需要从操作系统的内核请求一个服务(它没有自己的权限)时,它使用系统调用。用户级进程与直接与操作系统交互的进程没有相同的权限。例如,为了与外部I/O设备通信或与任何其他进程交互,程序使用系统调用。
什么是函数调用?
函数调用也称为子程序调用。子程序(也称为过程、函数、方法或例程)是负责执行特定任务的较大程序的一部分。较大的程序可能会执行繁重的工作负载,而子程序可能只是执行一个简单的任务,这也与剩余的程序编码无关。一个函数的编码方式使得它可以被多次调用,并且可以从不同的地方调用(甚至可以从其他函数内部调用)。当一个函数被调用时,处理器可以去该函数的代码所在的地方,逐个执行该函数的指令。完成这些功能后,处理器将返回到它停止的位置,并从下一条指令开始继续执行。函数是代码重用的一个很好的工具。许多现代编程语言都支持函数。函数的集合称为库。图书馆经常被用作共享和交易软件的手段。在某些情况下,整个程序可以是一系列子程序(例如线程代码编译)。
系统调用和函数调用有什么区别?