系統調用vs函數調用
典型的處理器逐個執行指令。但有時處理器必須停止當前指令並執行其他程序或代碼段(駐留在其他地方)。完成此操作後,處理器將恢復正常執行,並從停止的位置繼續。系統調用和函數調用就是這種情況。系統調用是對系統內置子例程的調用。函數調用是對程序本身內的子例程的調用。
什麼是系統調用?
系統調用為運行在計算機上的程序提供與操作系統對話的接口。當一個程序需要從操作系統的內核請求一個服務(它沒有自己的權限)時,它使用系統調用。用戶級進程與直接與操作系統交互的進程沒有相同的權限。例如,為了與外部I/O設備通信或與任何其他進程交互,程序使用系統調用。
什麼是函數調用?
函數調用也稱為子程序調用。子程序(也稱為過程、函數、方法或例程)是負責執行特定任務的較大程序的一部分。較大的程序可能會執行繁重的工作負載,而子程序可能只是執行一個簡單的任務,這也與剩餘的程序編碼無關。一個函數的編碼方式使得它可以被多次調用,並且可以從不同的地方調用(甚至可以從其他函數內部調用)。當一個函數被調用時,處理器可以去該函數的代碼所在的地方,逐個執行該函數的指令。完成這些功能後,處理器將返回到它停止的位置,並從下一條指令開始繼續執行。函數是代碼重用的一個很好的工具。許多現代編程語言都支持函數。函數的集合稱為庫。圖書館經常被用作共享和交易軟件的手段。在某些情況下,整個程序可以是一系列子程序(例如線程代碼編譯)。
系統調用和函數調用有什麼區別?