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