庫函式是語言本身的一部分,而系統函式是核心提供給應用程式的介面,屬於系統的一部分。
函式庫呼叫是語言或應用程式的一部分,而系統呼叫是作業系統的一部分。
使用者應用程式訪問並使用核心所提供的各種服務的途徑即是
系統呼叫
。在核心和使用者應用程式相交界的地方,核心提供了一組系統呼叫介面,通過這組介面,應用程式可以訪問系統硬體和各種作業系統資源。
1.系統呼叫是為了方便應用使用作業系統的介面,而庫函式是為了方便人們編寫應用程式而引出的,比如你自己編寫乙個函式其實也可以說就是乙個庫函式。
2.系統呼叫可以理解為核心提供給我們在使用者態用的介面函式,可以認為是某種核心的庫函式。
3.read就是系統呼叫,而fread就是c標準庫函式.
※函式庫呼叫 vs 系統呼叫
函式庫呼叫
系統呼叫
在所有的ansi c編譯器版本中,c庫函式是相同的
各個作業系統的系統呼叫是不同的
它呼叫函式庫中的一段程式(或函式)
它呼叫系統核心的服務
與使用者程式相聯絡
是作業系統的乙個入口點
在使用者位址空間執行
在核心位址空間執行
它的執行時間屬於「使用者時間」
它的執行時間屬於「系統」時間
屬於過程呼叫,呼叫開銷較小
需要在使用者空間和核心上下文環境間切換,開銷較大
在c函式庫libc中有大約300個函式
在unix中大約有90個系統呼叫
典型的c函式庫呼叫:system fprintf malloc
典型的系統呼叫:chdir fork write brk;
庫函式呼叫通常比行內展開的**慢,因為它需要付出函式呼叫的開銷。但系統呼叫比庫函式呼叫還要慢很多,因為它需要把上下文環境切換到核心模式。
系統呼叫和函式庫的關係。
系統呼叫通過軟中斷
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 ()
返回,回到使用者態的庫函式。這是彙編**。
庫函式呼叫和系統呼叫的區別
庫函式是語言本身的一部分,而系統函式是核心提供給應用程式的介面,屬於系統的一部分。函式庫呼叫是語言或應用程式的一部分,而系統呼叫是作業系統的一部分。函式庫呼叫 系統呼叫 在所有的ansi c編譯器版本中,c庫函式是相同的 各個作業系統的系統呼叫是不同的 它呼叫函式庫中的一段程式 或函式 它呼叫系統核...
系統呼叫和庫函式的區別
所謂系統呼叫就是作業系統提供給應用程式的一系列介面。在linux下包含以下幾種型別 程序控制 如 fork 檔案系統控制 如 write 系統控制 如 reboot 記憶體管理 如 getpagesize 獲取頁面大小 沒見過。網路管理 getdomainname 取網域名稱 socket控制 如 ...
庫函式和系統呼叫的區別
unix作業系統設計上的陳述 理解庫函式的區別和系統呼叫,首先要里理解unix的kernel mode和user mode。考慮下面的函式段 int main int fd create filename 0666 exit 0 在執行main函式時,是在user mode下執行,當遇到create...