庫函數是語言本身的一部分,而系統函數是核心提供給應用程式的接口,屬于系統的一部分
函數調用是語言或者應用程式的一部分,而系統調用是作業系統的一部分
使用者應用程式通路并使用核心所提供的各種服務的tuji途徑即是系統調用,在核心和使用者應用程式相交的地方,核心提供了一組系統調用的接口,通過這組接口,應用程式可以通路系統硬體和作業系統資源
- 系統調用是為了友善應用使用作業系統的接口,而庫函數是為了友善人們編寫應用程式而引出的,比如你自己編寫一個函數其實也可以說是一個kuha庫函數
- 系統調用可以了解為核心提供給我們在使用者态的接口函數,可以認為是mo某種核心的庫函數
- read就是庫函數,fread就是C标準庫函數
函數庫調用 | 系統調用 |
---|---|
在所用的ANSI C編譯器版本中,C庫函數是相同的 | 各個作業系統的系統調用是不同的 |
他調用庫函數中一段程式(或者函數) | 他調用系統核心的服務 |
與應用程式相連接配接 | 是作業系統的一個入口點 |
在使用者位址空間執行 | 在核心位址空間執行 |
他的運作時間屬于使用者時間 | 他的運作時間屬于核心時間 |
屬于過程調用,開銷較小 | 需要在使用者空間和核心上下文環境切換,開銷較大 |
典型的C庫函數調用:system,malloc | 典型的系統調用:fork,write |
庫函數調用通常比行内代碼慢,因為他需要付出函數調用的開銷。但系統調用比庫函數調用還要慢的多,因為他需要把上下文環境切換到核心模式