翻譯《系統(tǒng)調用和庫函數(shù)的區(qū)別》

今天無意查資料的時候琉历,看到一篇文章What is Linux System Calls and Library Functions?硼端,在將系統(tǒng)調用和庫函數(shù)的區(qū)別亚兄,雖然這個問題是耳熟能詳?shù)拿嬖囶}低滩,但是其實大部分人還是不能很好的區(qū)分,所以就花點時間翻譯一下欺抗,方便大家學習售碳。

1.庫函數(shù) VS 系統(tǒng)調用

標準C庫的函數(shù)稱為庫函數(shù),比如一些字符串處理函數(shù)(strcmp绞呈,strlen)贸人。

系統(tǒng)調用會讓程序的運行模式從用戶態(tài)切換到內核態(tài)。在某些情況下佃声,程序需要一些只能靠內核提供的功能就需要調用艺智,比如,我們需要修改系統(tǒng)時間或者創(chuàng)建socket圾亏。

2.為什么需要系統(tǒng)調用十拣?

系統(tǒng)調用就像是一個系統(tǒng)內核的入口封拧。有一些任務需要進程跑在內核態(tài)才能執(zhí)行,比如和硬件打交道夭问。所以進程調用系統(tǒng)調用就能讓自己運行在內核態(tài)從而執(zhí)行這些類似的任務泽西。

3.庫函數(shù)類型

可分為兩類:沒有調用系統(tǒng)調用,以及調用了系統(tǒng)調用缰趋。

有一些庫函數(shù)沒有調用系統(tǒng)調用捧杉,比如strlen。有一些則會調用秘血,比如庫函數(shù)fopen內部調用了open系統(tǒng)調用味抖。

4.各組件的交互

上圖顯示了程序可以同時和庫函數(shù)或者系統(tǒng)調用交互。同樣的灰粮,一個庫函數(shù)內部也可以再調用系統(tǒng)調用仔涩。但是,只有系統(tǒng)調用有權限訪問硬件谋竖。

5.fopen VS open

有些人疑惑為什么同個操作有兩個函數(shù)红柱,比如打開文件承匣?

因為fopen提供了I/O緩存功能而open只是一個沒有緩存功能的系統(tǒng)調用蓖乘。程序應該避免直接使用open,雖然也能打開文件韧骗。

一般而言嘉抒,如果有個庫函數(shù)對應一個系統(tǒng)調用,我們需要優(yōu)先使用庫函數(shù)袍暴,因為:

a.庫函數(shù)具備可移植性些侍,可以運行在大多數(shù)不同系統(tǒng)。但是系統(tǒng)調用只是針對某個系統(tǒng)上的政模。

b.有時對應的庫函數(shù)會減少系統(tǒng)調用的負載岗宣。比如有個程序需要頻繁讀取文件,這時使用fopen就能避免每次調用都會

執(zhí)行系統(tǒng)調用淋样,因為fopen提供了緩存功能耗式。fopen可能一次性讀了比用戶需要的更多的數(shù)據(jù),因此接下來就可以不用再調用系統(tǒng)調用了趁猴。

6.malloc是系統(tǒng)調用嗎刊咳?

有個普遍的誤解認為malloc是系統(tǒng)系統(tǒng),這是錯的儡司。因為malloc只是個庫函數(shù)娱挨,內部是使用brk或者sbrk系統(tǒng)調用來實現(xiàn)內部分配。

7.系統(tǒng)調用:切換運行態(tài)

傳統(tǒng)的方式是引發(fā)“int $0x8o”中斷捕犬。內核捕獲中斷后跷坝,會把運行態(tài)從用戶態(tài)切換到內核態(tài)酵镜。

8.一些其他的不同

a.一個庫函數(shù)鏈接到用戶程序,執(zhí)行在用戶態(tài)探孝;而系統(tǒng)調用沒有鏈接到用戶程序笋婿,運行在內核態(tài);

b.一個庫函數(shù)執(zhí)行時間是計算用戶層次時間(user level time)顿颅;但是系統(tǒng)調用的運行時間是作為系統(tǒng)時間來計算的缸濒;

c.庫函數(shù)可以很方便的調試;而系統(tǒng)調用很麻煩因為運行在內核

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末粱腻,一起剝皮案震驚了整個濱河市庇配,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绍些,老刑警劉巖捞慌,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異柬批,居然都是意外死亡啸澡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門氮帐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嗅虏,“玉大人,你說我怎么就攤上這事上沐∑し” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵参咙,是天一觀的道長龄广。 經常有香客問我,道長蕴侧,這世上最難降的妖魔是什么择同? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮净宵,結果婚禮上敲才,老公的妹妹穿的比我還像新娘。我一直安慰自己塘娶,他們只是感情好归斤,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刁岸,像睡著了一般脏里。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上虹曙,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天迫横,我揣著相機與錄音番舆,去河邊找鬼。 笑死矾踱,一個胖子當著我的面吹牛恨狈,可吹牛的內容都是我干的。 我是一名探鬼主播呛讲,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼禾怠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了贝搁?” 一聲冷哼從身側響起吗氏,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雷逆,沒想到半個月后弦讽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡膀哲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年往产,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片某宪。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡仿村,死狀恐怖,靈堂內的尸體忽然破棺而出缩抡,到底是詐尸還是另有隱情奠宜,我是刑警寧澤包颁,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布瞻想,位于F島的核電站,受9級特大地震影響娩嚼,放射性物質發(fā)生泄漏蘑险。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一岳悟、第九天 我趴在偏房一處隱蔽的房頂上張望佃迄。 院中可真熱鬧,春花似錦贵少、人聲如沸呵俏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽普碎。三九已至,卻和暖如春录平,著一層夾襖步出監(jiān)牢的瞬間麻车,已是汗流浹背缀皱。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留动猬,地道東北人啤斗。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像赁咙,于是被迫代替她去往敵國和親钮莲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內容