我想知道是否有任何不調用任何系統調用()的libc函數?例如,對於libc函數「strcpy()」,是否有任何系統調用(讓我們考慮所有可能的linux系統)。做libc函數「strcpy()」調用任何系統調用?
4
A
回答
4
系統調用有點像從用戶空間(程序運行的地方)到內核地的界面。當你在做只有內核可以使用的東西時才需要它們,比如與硬件通信(例如從網卡讀取字節,啓動進程,甚至通過malloc分配內存(使用brk
)等)。
另一方面,用戶級函數,如strcpy
,不縮進來執行系統調用。他們不需要特殊的權限來執行他們所做的事情,他們只是在用戶的土地上對流程進行記憶。由於系統調用引入了一個主要的性能損失(從用戶到內核土地的變化模式和後退成本高昂),但從設計角度來看,像strcpy
這些通常稱爲函數的函數是沒有意義的,並且不太可能被看到。
4
由於系統調用意味着上下文切換到內核,因此係統調用在性能方面非常嚴重。因此,對於像strcpy
這樣簡單的庫函數(其功能實際上等效於while(*d++ = *s++)
,但可能針對體系結構進行了優化),系統調用將毫無意義。
請注意,複製期間的頁面錯誤可能導致內核上下文切換和系統調用的出現,但這不會直接調用系統調用的結果strcpy
。
相關問題
- 1. 爲strcpy或strcat C++函數調用哪個系統調用?
- 2. 從JNA調用libc函數
- 3. 系統調用vs函數調用
- 4. 將Minix 3.3系統調用實現爲libc庫調用
- 5. Android NDK JNI調用libc函數
- 6. 在C庫函數中調用系統
- 7. 系統()函數不從LD_PRELOAD'ed庫調用
- 8. 系統函數調用異步?
- 9. 調用系統()函數,Vim腳本
- 10. pause()系統調用的系統調用處理函數在哪裏?
- 11. 系統(「」)調用
- 12. sys_vm86old系統調用是做什麼的?
- 13. XV6加計數系統的系統調用調用
- 14. 每次調用stdio函數都會導致系統調用嗎?
- 15. 在系統調用之前將被調用的註冊函數
- 16. linux在linux下編寫系統調用和libc
- 17. 計數系統調用
- 18. NtAllocateVirtualMemory系統調用參數
- 19. 系統調用的參數
- 20. MIPS:系統調用
- 21. 調用C「系統」 ++
- 22. Ptracing系統調用
- 23. 調用android系統
- 24. Pipe()系統調用
- 25. sys_execve系統調用
- 26. 管系統調用
- 27. python系統調用
- 28. indir系統調用
- 29. 系統調用庫
- 30. sigaction系統調用
strcpy需要寫入虛擬內存,因此在操作系統層次結構中,虛擬內存駐留在哪裏?在內核空間還是用戶空間? – Richard
虛擬內存由內核管理;用戶程序只能看到*虛擬內存。 – nneonneo