為什麼需要系統調用?主要有以下兩方面原因。
(1)系統調用可以為用戶空間提供訪問硬件資源的統一接口,以至於應用程序不必去關注具體的硬件訪問操作。比如,讀寫文件時,應用程序不用去管磁盤類型,甚至於不用關心是哪種文件系統。
(2)系統調用可以對系統進行保護,保證系統的穩定和安全。系統調用的存在規定了用戶進程進入內核的具體方式,換句話說,用戶訪問內核的路徑是事先規定好的,只能從規定位置進入內核,而不准許肆意跳入內核。有了這樣的進入內核的統一訪問路徑限制才能保證內核的安全。
(3)系統調用具有更強的功能。
系統調用和庫函數的區別:
1.系統調用是為了方便應用使用操作系統的接口,而庫函數是為了方便人們編寫應用程序而引出的,比如你自己編寫一個函數其實也可以說就是一個庫函數。
2.系統調用可以理解為內核提供給我們在用戶態用的接口函數,可以認為是某種內核的庫函數。
3.操作系統API的主要作用是把操作系統的功能完全展示出來,提供給應用程序,基於該操作系統,與文件、內存、時鐘、網絡、圖形、各種外設等互操作的能力。此外,操作系統API通常還提供許多工具類的功能,比如操縱字符串、各種數據類型、時間日期等。API函數和系統調用之間有著直接的關系,一個API函數可以由一個系統調用實現,也可以通過調用多個系統調用來實現,還可以完全不使用任何系統調用。
4.系統調用效率不一定比庫函數高