Libraries

系統呼叫和庫函式的區別

  • June 15, 2019

我已經通過這個問題的答案,但不太了解系統呼叫和庫函式之間的區別。從概念上講,兩者有什麼區別?

從概念上講,庫函式是您的過程的一部分。

在執行時,您的可執行程式碼和它所依賴的任何庫(例如 libc.so)的程式碼都連結到一個程序中。因此,當您呼叫此類庫中的函式時,它會作為您的程序的一部分執行,具有相同的資源和權限。這與呼叫您自己編寫的函式的想法相同(可能有 PLT 和/或蹦床函式等例外情況,如果您願意,可以查找)。

從概念上講,系統呼叫是一個特殊的介面,用於從您的程式碼(通常是無特權的)呼叫核心(它有權根據需要提升權限)。


例如,請參閱 Linux手冊 brk。當 C 程序呼叫malloc分配記憶體時,它正在呼叫 glibc 中的庫函式。

如果程序內部已經有足夠的空間分配,它可以進行任何必要的堆管理並將記憶體返回給呼叫者。

如果沒有,glibc 需要從核心請求更多記憶體:它(可能)呼叫brkglibc 函式,該函式又呼叫brksyscall。只有通過系統呼叫將控制權傳遞給核心後,才能修改全域虛擬記憶體狀態以保留更多記憶體,並將其映射到程序的地址空間。

引用自:https://unix.stackexchange.com/questions/57232