c庫函式和系統呼叫的區別 很模糊

2021-08-26 15:43:38 字數 1498 閱讀 6131

c庫函式和系統呼叫的區別(很模糊)

2023年06月08日

[b]unix作業系統設計上的陳述:[/b]

理解庫函式的區別和系統呼叫,首先要里理解unix的kernel mode和user mode。考慮下面的函式段:

int main()

在執行main函式時,是在user mode下執行,當遇到creat函式時,繼續在user mode下執行。然後系統將兩個引數"filenam"和"0666"壓入棧中或者某個暫存器,接著執行庫函式creat。在庫函式creat執行開始,系統仍然處在user mode下,接著系統將creat系統呼叫的unique number壓入暫存器(比如說r0),然後執行指令trap(operating system trap)使系統進入kernel mode,並且處理系統呼叫。這時,系統意識到要進行系統呼叫的invoke,於是從暫存器r0中取出creat系統呼叫的unique number,從系統呼叫表中查詢得知要invoke的系統呼叫是creat,然後執行。執行完畢後返回庫函式creat的呼叫,庫函式負責檢查系統呼叫的執**況(檢查某些暫存器的值),然後庫函式creat根據檢查的結果返回相應的值。在這裡,trap指令類似於乙個系統中斷,而系統呼叫creat是乙個特殊的中斷處理函式(inerrupt handler)。

[b]apue上的陳述:[/b]

所有作業系統都提供多種服務的入口點,由此程式向系統核請求服務。各種版本的unix都提供經良好定義的有限數目的入口點,經過這些入口點進入系統核,這些入口點被稱之為系統呼叫(system call),系統呼叫是我們不能更改的一種unix特徵。unix版本7提供了約50個系統呼叫,4 3+bsd提供了約110個,而svr4則提供了約120個。系統呼叫介面總是在unix程式設計師手冊的第二部分中說明。其定義也包括在c語言中。這與很多較早期的作業系統是不同的,這些系統按傳統都在機器的組合語言中定義系統核入口點.unix所使用的技術是為每條系統呼叫在標準c庫中設定乙個具有同樣名字的函式。使用者程序用標準c呼叫序列來呼叫這些函式,然後,函式用系統所要求的技術呼叫相應的系統核服務.例如函式可將乙個或幾個c引數送入通用暫存器,然後執行某個產生軟中斷進入系統核的機器指令。

從應用角度考慮,我們可將系統呼叫視作為c函式。unix程式設計師手冊的第三部分定義了程式設計師可以使用的通用函式。雖然這些函式可能會呼叫乙個或幾個系統核的系統呼叫,但是它們並不是系統核的入口點。例如,printf函式會呼叫write系統呼叫以進行輸出操作,但函式strcpy(複製一字串)和atoi(變換ascii為整數)並不使用任何系統呼叫。

其可能,它還是要呼叫sbrk系統呼叫。事實上,有很多軟體包,它們實現自己的儲存器分配演算法,但仍使用sbrk系統呼叫。

從中可見,兩者職責不同,相互分開,要核中的系統呼叫分配另外一塊空間給程序,而庫函式malloc則管理這種空間。

另乙個可說明系統呼叫和庫函式之間的差別的例子是,unix提供決定當前時間和日期的介面。某些作業系統提供乙個系統呼叫以返回時間,而另乙個則返回日期。任何特殊的處理,例如正常時制和日光節約時制之間的轉換,由系統核處理或要求人的幹予。unix則不同,它只提供一條系統呼叫,該系統呼叫返回國際標準時公元一九七

c庫函式和系統呼叫的區別 很模糊

c庫函式和系統呼叫的區別 很模糊 2011年06月08日 b unix作業系統設計上的陳述 b 理解庫函式的區別和系統呼叫,首先要里理解unix的kernel mode和user mode。考慮下面的函式段 int main 在執行main函式時,是在user mode下執行,當遇到creat函式時...

c庫函式和系統呼叫的區別 很模糊

c庫函式和系統呼叫的區別 很模糊 2011年06月08日 b unix作業系統設計上的陳述 b 理解庫函式的區別和系統呼叫,首先要里理解unix的kernel mode和user mode。考慮下面的函式段 int main 在執行main函式時,是在user mode下執行,當遇到creat函式時...

c庫函式和系統呼叫的區別 很模糊

c庫函式和系統呼叫的區別 很模糊 2011年06月08日 b unix作業系統設計上的陳述 b 理解庫函式的區別和系統呼叫,首先要里理解unix的kernel mode和user mode。考慮下面的函式段 int main 在執行main函式時,是在user mode下執行,當遇到creat函式時...