2012-10-07 40 views

回答

4

系統調用有點像從用戶空間(程序運行的地方)到內核地的界面。當你在做只有內核可以使用的東西時才需要它們,比如與硬件通信(例如從網卡讀取字節,啓動進程,甚至通過malloc分配內存(使用brk)等)。

另一方面,用戶級函數,如strcpy,不縮進來執行系統調用。他們不需要特殊的權限來執行他們所做的事情,他們只是在用戶的土地上對流程進行記憶。由於系統調用引入了一個主要的性能損失(從用戶到內核土地的變化模式和後退成本高昂),但從設計角度來看,像strcpy這些通常稱爲函數的函數是沒有意義的,並且不太可能被看到。

4

由於系統調用意味着上下文切換到內核,因此係統調用在性能方面非常嚴重。因此,對於像strcpy這樣簡單的庫函數(其功能實際上等效於while(*d++ = *s++),但可能針對體系結構進行了優化),系統調用將毫無意義。

請注意,複製期間的頁面錯誤可能導致內核上下文切換和系統調用的出現,但這不會直接調用系統調用的結果strcpy

+0

strcpy需要寫入虛擬內存,因此在操作系統層次結構中,虛擬內存駐留在哪裏?在內核空間還是用戶空間? – Richard

+1

虛擬內存由內核管理;用戶程序只能看到*虛擬內存。 – nneonneo