雜談系統調用

應用層的API接口函數中一部分需要調用系統函數,有一對一調用的,也有一堆多調用的,剩下的大部分都是直接調用庫函數來完成功能。

1.系統調用的可移植性較差,因爲它直接對硬件進行操作,與具體的操作系統及硬件有關。而一般函數調用運行於應用層,一般都爲C庫,所以一般函數的可移植性較強。

2.每次系統調用時都要由用戶層切換到內核層,因此需要耗費一定的開銷。過多的進行系統調用會影響到系統的性能。

3.庫函數對文件的操作最終會映射到系統調用的相應操作,打開文件獲得FILE結構指針,在內核中會有一個相應的文件描述符fd打開。

4.讀寫文件時即使使用函數調用,最用還是會調用系統調用去進行具體的操作,但是使用函數調用可以減少系統調用的次數,這要得益於用戶空間和內核空間的緩衝區技術。只有當緩衝區寫滿後纔會寫到目的地。

 

系統調用時將調用號(實際是系統調用表中的偏移),保存在eax寄存器中,通過此寄存器的值在include/unistd.h中對應的宏,內核可以得到相應的調用函數。再到include/system_call.s中執行此函數。

發佈了18 篇原創文章 · 獲贊 22 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章