天天看點

庫函數和系統調用的差別

庫函數是語言本身的一部分,而系統函數是核心提供給應用程式的接口,屬于系統的一部分

函數調用是語言或者應用程式的一部分,而系統調用是作業系統的一部分

使用者應用程式通路并使用核心所提供的各種服務的tuji途徑即是系統調用,在核心和使用者應用程式相交的地方,核心提供了一組系統調用的接口,通過這組接口,應用程式可以通路系統硬體和作業系統資源

  1. 系統調用是為了友善應用使用作業系統的接口,而庫函數是為了友善人們編寫應用程式而引出的,比如你自己編寫一個函數其實也可以說是一個kuha庫函數
  2. 系統調用可以了解為核心提供給我們在使用者态的接口函數,可以認為是mo某種核心的庫函數
  3. read就是庫函數,fread就是C标準庫函數

函數庫調用VS系統調用

函數庫調用 系統調用
在所用的ANSI   C編譯器版本中,C庫函數是相同的 各個作業系統的系統調用是不同的
他調用庫函數中一段程式(或者函數) 他調用系統核心的服務
與應用程式相連接配接 是作業系統的一個入口點
在使用者位址空間執行 在核心位址空間執行
他的運作時間屬于使用者時間 他的運作時間屬于核心時間
屬于過程調用,開銷較小 需要在使用者空間和核心上下文環境切換,開銷較大
典型的C庫函數調用:system,malloc 典型的系統調用:fork,write

庫函數調用通常比行内代碼慢,因為他需要付出函數調用的開銷。但系統調用比庫函數調用還要慢的多,因為他需要把上下文環境切換到核心模式