庫函式呼叫和系統呼叫的區別

2022-07-29 18:15:10 字數 1631 閱讀 8088

庫函式是語言本身的一部分,而系統函式是核心提供給應用程式的介面,屬於系統的一部分。

函式庫呼叫是語言或應用程式的一部分,而系統呼叫是作業系統的一部分。

函式庫呼叫

系統呼叫

在所有的ansi c編譯器版本中,c庫函式是相同的

各個作業系統的系統呼叫是不同的

它呼叫函式庫中的一段程式(或函式)

它呼叫系統核心的服務

與使用者程式相聯絡

是作業系統的乙個入口點

在使用者位址空間執行

在核心位址空間執行

它的執行時間屬於「使用者時間」

它的執行時間屬於「系統」時間

屬於過程呼叫,呼叫開銷較小

需要在使用者空間和核心上下文環境間切換,開銷較大

在c函式庫libc中有大約300個函式

在unix中大約有90個系統呼叫

典型的c函式庫呼叫:system fprintf malloc

典型的系統呼叫:chdir fork write brk;

使用者應用程式訪問並使用核心所提供的各種服務的途徑即是

系統呼叫

。在核心和使用者應用程式相交界的地方,核心提供了一組系統呼叫介面,通過這組介面,應用程式可以訪問系統硬體和各種作業系統資源。

1.系統呼叫

是為了方便應用使用作業系統的介面,而

庫函式是為了方便人們編寫應用程式而引出的,比如你自己編寫乙個函式其實也可以說就是乙個庫函式。

2.系統呼叫

可以理解為核心提供給我們在使用者態用的介面函式,可以認為是某種核心的庫函式。

3.read就是系統呼叫,而fread就是c標準庫函式.

庫函式呼叫通常比行內展開的**慢,因為它需要付出函式呼叫的開銷。但系統呼叫比庫函式呼叫還要慢很多,因為它需要把上下文環境切換到核心模式。

1.系統呼叫和函式庫的關係

系統呼叫通過軟中斷

int 0x80

從使用者態進入核心態。

函式庫中的某些函式呼叫了系統呼叫。

函式庫中的函式可以沒有呼叫系統呼叫,也可以呼叫多個系統呼叫。

程式設計人員可以通過函式庫呼叫系統呼叫。

高階程式設計也可以直接採用

int 0x80

進入系統呼叫,而不必通過函式庫作為中介。

如果是在核心程式設計,也可以通過

int 0x80

進入系統呼叫,此時不能使用函式庫。因為函式庫中的函式是核心訪問不到的。 2.

從使用者呼叫庫函式到系統呼叫執行的流程。

1)假設使用者呼叫

ssize_t write (int fields, cont void *buff, size_t nbytes);

2)庫函式會執行

int 0x80

中斷。因為中斷使得程序從使用者態進入核心態,所以引數通過暫存器傳送。

3)0x80

中斷對應的中斷例程被稱為

system call handler

。其工作是:

i.儲存大多數暫存器到核心堆疊中。這是彙編**寫的。

ii.執行真正的系統呼叫函式――

system call service routine

。這是c

**。iii.

通過ret_from_sys_call ()

返回,回到使用者態的庫函式。這是彙編**。

總結系統呼叫和庫函式呼叫區別

系統呼叫和庫函式呼叫的區別 系統呼叫概念 所有作業系統都提供了多鐘服務的入口點,通過這些入口點,由程式向核心請求服務,這些入口點稱作系統呼叫。1.從程式完成的功能看 系統呼叫 要求作業系統為使用者提供程序,提供某種服務,通常是涉及系統的硬體資源和一些敏感的軟體資源等。函式庫提供的函式通常是不需要作業...

linux系統呼叫和庫函式呼叫的區別

linux下對檔案操作有兩種方式 系統呼叫 system call 和庫函式呼叫 library functions 可以參考 linux程式設計 英文原版為 beginning linux programming 作者是neil matthew和richard stones 第三章 working...

linux 系統呼叫和庫函式呼叫的區別

linux下對檔案操作有兩種方式 系統呼叫 system call 和庫函式呼叫 library functions 系統呼叫實際上就是指最底層的乙個呼叫,在linux程式設計裡面就是底層呼叫的意思。面向的是硬體。而庫函式呼叫則面向的是應用開發的,相當於應用程式的api,採用這樣的方式有很多種原因,...