api調(diào)用系統(tǒng)調(diào)用 過程調(diào)用和系統(tǒng)調(diào)用的區(qū)別?
所謂系統(tǒng)調(diào)用就是用戶在程序中調(diào)用操作系統(tǒng)的函數(shù)。它是通過系統(tǒng)調(diào)用命令,在當(dāng)前程序中間執(zhí)行相應(yīng)的子程序,以完成系統(tǒng)的具體功能。完成后,控件返回到發(fā)出系統(tǒng)調(diào)用命令后的指令,中斷的程序?qū)⒗^續(xù)執(zhí)行。系統(tǒng)調(diào)用不
所謂系統(tǒng)調(diào)用就是用戶在程序中調(diào)用操作系統(tǒng)的函數(shù)。它是通過系統(tǒng)調(diào)用命令,在當(dāng)前程序中間執(zhí)行相應(yīng)的子程序,以完成系統(tǒng)的具體功能。完成后,控件返回到發(fā)出系統(tǒng)調(diào)用命令后的指令,中斷的程序?qū)⒗^續(xù)執(zhí)行。系統(tǒng)調(diào)用不同于一般的過程調(diào)用,主要區(qū)別如下:1。程序中的進程通常是用戶程序或系統(tǒng)程序,也就是說,它在相同的系統(tǒng)狀態(tài)(用戶狀態(tài)或系統(tǒng)狀態(tài))下運行。
2. 不同的進入方式。一般過程調(diào)用可以直接從調(diào)用過程轉(zhuǎn)移到被調(diào)用過程。在執(zhí)行系統(tǒng)調(diào)用時,由于調(diào)用進程和被調(diào)用進程處于不同的狀態(tài),不允許直接從調(diào)用進程轉(zhuǎn)到被調(diào)用進程。它通常是通過訪問管理中斷(軟中斷)輸入的,首先進入操作系統(tǒng),然后到相應(yīng)的命令處理程序進行分析。
3. 不同的回報方式。
4. 不同的代碼級別。通常,過程調(diào)用中被調(diào)用的程序是用戶級程序,而系統(tǒng)調(diào)用是操作系統(tǒng)中的代碼程序和系統(tǒng)級程序。
過程調(diào)用和系統(tǒng)調(diào)用的區(qū)別?
通用函數(shù)調(diào)用,即函數(shù)庫調(diào)用,是語言或應(yīng)用程序的一部分,而系統(tǒng)調(diào)用是操作系統(tǒng)的一部分。無論是Java還是Python I/O,都是通過讀寫等系統(tǒng)調(diào)用來完成的。系統(tǒng)調(diào)用是用戶程序與內(nèi)核之間的接口。函數(shù)庫調(diào)用:在所有版本的ANSI C編譯器中,C庫函數(shù)是相同的;它調(diào)用函數(shù)庫中的一個程序;它與用戶程序序列相關(guān)聯(lián);它在用戶地址空間中執(zhí)行important;它的運行時間屬于user time important;它屬于進程調(diào)用,C庫libc中大約有300個程序,開銷較小。系統(tǒng)調(diào)用:每個操作系統(tǒng)的系統(tǒng)調(diào)用不同,調(diào)用系統(tǒng)內(nèi)核的服務(wù),是操作系統(tǒng)的入口點,在內(nèi)核地址空間中執(zhí)行,運行時間屬于系統(tǒng)時間,需要切換到內(nèi)核上下文環(huán)境再切換回來,開銷大;在UNIX中大約有90個系統(tǒng)調(diào)用(MS-DOS),更少。函數(shù)庫調(diào)用通常提供更復(fù)雜的函數(shù),而系統(tǒng)調(diào)用通常提供最小的接口。
操作系統(tǒng)中系統(tǒng)調(diào)用和一般過程的區(qū)別?
所謂的系統(tǒng)調(diào)用是由內(nèi)核提供的一系列功能強大的函數(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ù)(我以前叫它接口),這樣程序的可移植性問題就解決了。因此我們可以認為庫函數(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ā)過程中要根據(jù)自己的實際情況來決定采用哪一種