Unix / Linux 庫函數與系統調用的區別聯繫

庫函數     系統調用 的區別聯繫程序員

一,概念函數

系統調用英語system call),指運行在用戶空間應用程序操做系統內核請求某些服務的調用過程。 系統調用提供了用戶程序與操做系統之間的接口。通常來講,系統調用都在內核態執行。因爲系統調用不考慮平臺差別性,由內核直接提供,於是移植性較差(幾乎無移植性)。spa

庫函數(library function),是由用戶或組織本身開發的,具備必定功能的函數集合,通常具備較好平臺移植性,經過庫文件(靜態庫或動態庫)向程序員提供功能性調用。程序員無需關心平臺差別,由庫來屏蔽平臺差別性。操作系統


二,區別接口

函數庫調用 VS 系統調用進程

函數庫調用ip

系統調用ci

平臺移植性好資源

依賴於內核,不保證移植性開發

調用函數庫中的一段程序(或函數)

調用系統內核的服務

一個普通功能函數的調用

是操做系統的一個入口點

用戶空間執行

內核空間執行

它的運行時間屬於用戶時間

它的運行時間屬於系統時間

屬於過程調用,調用開銷較小

在用戶空間和內核上下文環境間切換,開銷較大

庫函數數量較多

UNIX中大約有90個系統調用,較少

典型的C函數庫調用:printf scanf malloc

典型的系統調用:fork open write

 

三,聯繫

通常而言,跟內核功能與操做系統特性緊密相關的服務,由系統調用提供;

具備共通特性的功能通常須要較好的平臺移植性,故而由庫函數提供。

 

庫函數與系統調用在功能上相互補充,如進程間通訊資源的管理,進程控制等功能與平臺特性和內核息息相關,必須由系統調用來實現。

 

文件 I/O操做等各平臺都具備的共通功能通常採用庫函數,也便於跨平臺移植。

某些狀況下,庫函數與系統調用也有交集,

庫函數中的I/O操做的內部實現依然須要調用系統的I/O方能實現。

相關文章
相關標籤/搜索