1:系統(tǒng)調(diào)用:
系統(tǒng)調(diào)用是值操作系統(tǒng)提供給用戶程序調(diào)用的一組“特殊”編程接口,用戶程序可以通過這組“特殊”接口獲得操作系統(tǒng)內(nèi)核提供的服務(wù),。例如,,用戶可以通過進(jìn)程控制相關(guān)的系統(tǒng)調(diào)用來創(chuàng)建進(jìn)程,實(shí)現(xiàn)進(jìn)程調(diào)度,,進(jìn)程管理等,!
Linux中,為了更好地保護(hù)內(nèi)核空間,,將程序運(yùn)行空間分為內(nèi)核空間和用戶空間(也就是常說的內(nèi)核態(tài)和用戶態(tài)),,它們分別運(yùn)行在不同的級別上,邏輯上相互隔離的,。因此,,用戶進(jìn)程在通常情況下不允許訪問內(nèi)核數(shù)據(jù),他們只能在用戶空間訪問用戶數(shù)據(jù),,調(diào)用用戶空間的函數(shù),。
但是,在有些情況下,,用戶空間的進(jìn)程需要的進(jìn)程需要獲得一定的系統(tǒng)服務(wù)(調(diào)用內(nèi)核空間的程序),,這時(shí)操作系統(tǒng)就必須調(diào)用系統(tǒng)為用戶提供的“特殊接口”-系統(tǒng)調(diào)用規(guī)定用戶進(jìn)程進(jìn)入內(nèi)核空間的具體位置。進(jìn)行系統(tǒng)調(diào)用時(shí),,程序運(yùn)行空間需要從用戶空間進(jìn)入內(nèi)核空間,,處理完后在返回內(nèi)核空間。
系統(tǒng)調(diào)用按照功能邏輯可以分為:進(jìn)程控制,,進(jìn)程間通信,,文件系統(tǒng)控制,系統(tǒng)控制,,存儲管理,,網(wǎng)絡(luò)管理,socket控制,,用戶管理等。
2:用戶編程接口(API)
系統(tǒng)調(diào)用不直接與程序員進(jìn)行交互,,它僅僅是一個(gè)軟中斷機(jī)制向內(nèi)核提交請求以獲得內(nèi)核服務(wù)的接口,。實(shí)際使用中程序員調(diào)用的通常是用戶編程接口-API。
例如,,獲取進(jìn)程號的API函數(shù)getpid()對應(yīng)getpid系統(tǒng)調(diào)用,。但并不是所有的函數(shù)都對應(yīng)一個(gè)系統(tǒng)調(diào)用,有時(shí),,一個(gè)API函數(shù)會需要幾個(gè)系統(tǒng)調(diào)用來共同完成函數(shù)的功能,,甚至有一些API函數(shù)不需要相應(yīng)的系統(tǒng)調(diào)用(因此它所完成的不是內(nèi)核提同的服務(wù))。
在Linux中用戶編程接口(API)遵循了在UNIX中最流行的應(yīng)用編程界面標(biāo)準(zhǔn)-POSIX標(biāo)準(zhǔn)。
這些系統(tǒng)調(diào)用編程接口主要是通過C庫(libc)實(shí)現(xiàn)的,。
3:系統(tǒng)命令
系統(tǒng)命令相對API更高的一層,,它實(shí)際上是一個(gè)可執(zhí)行程序,他的內(nèi)部引用了用戶編程接口(API)來實(shí)現(xiàn)相應(yīng)的功能,。