交流方式 過程調用和系統(tǒng)調用的區(qū)別?
過程調用和系統(tǒng)調用的區(qū)別?所謂的系統(tǒng)調用是由內核提供的一系列功能強大的函數(shù)。這些系統(tǒng)調用是在內核中實現(xiàn)的,然后以某種方式將系統(tǒng)調用給用戶,一般通過gate(TRAP)實現(xiàn)。系統(tǒng)調用是用戶程序與內核之間
過程調用和系統(tǒng)調用的區(qū)別?
所謂的系統(tǒng)調用是由內核提供的一系列功能強大的函數(shù)。這些系統(tǒng)調用是在內核中實現(xiàn)的,然后以某種方式將系統(tǒng)調用給用戶,一般通過gate(TRAP)實現(xiàn)。系統(tǒng)調用是用戶程序與內核之間的接口。系統(tǒng)調用的整個過程可以概括如下:
1。執(zhí)行用戶程序(如fork)
2。根據(jù)glibc中的函數(shù)實現(xiàn),獲取系統(tǒng)調用號,執(zhí)行int$0x80生成中斷。
3. 轉換地址空間并切換堆棧,然后執(zhí)行save ALL.(內核模式)
4。中斷處理,并根據(jù)系統(tǒng)調用表調用內核函數(shù)。
5. 執(zhí)行內核函數(shù)。
6. 在長期的編程中,人們發(fā)現(xiàn)使用系統(tǒng)調用有一個很大的缺點,即程序的可移植性。例如,Linux系統(tǒng)提供的系統(tǒng)調用函數(shù)與windows系統(tǒng)提供的不同。它們不僅實現(xiàn)方式不同,而且提供給用戶的函數(shù)名和參數(shù)也不同。因此,一個很好的實現(xiàn)程序,使用Linux系統(tǒng)調用wait4等函數(shù),那么他在windows上編譯是不會通過的。于是人們想到了一種方法,就是封裝windows和Linux系統(tǒng)調用,給你一個統(tǒng)一的函數(shù)(我以前叫它接口),這樣程序的可移植性問題就解決了。因此我們可以認為庫函數(shù)是系統(tǒng)調用的封裝(并非所有庫函數(shù)都是),以解決一些公共問題,提供統(tǒng)一的系統(tǒng)調用接口。庫函數(shù)和系統(tǒng)調用的優(yōu)缺點是:系統(tǒng)調用的速度明顯快于庫函數(shù)(不是全部,但大部分都是),但系統(tǒng)調用缺乏可移植性。庫函數(shù)比較慢,但是解決了移植的問題。在開發(fā)過程中,我們應該根據(jù)自己的實際情況來決定使用哪個
系統(tǒng)調用,它是內核直接提供給用戶層的接口。比如讀寫。仔細觀察這些系統(tǒng)調用可以發(fā)現(xiàn),當內核實現(xiàn)它們時,它有一個同名的do函數(shù)。換句話說,系統(tǒng)調用中仍然有一些底層函數(shù)。庫函數(shù)是用戶自己編寫的接口或api。比如libc。比如FREAD、fwrite等,看一下庫函數(shù)的實現(xiàn),它們一般都是對系統(tǒng)調用的重新封裝。在freead中調用read。