維基百科,自由的百科全書
在
計算機(jī)中,一個系統(tǒng)調(diào)用指程序向
操作系統(tǒng)內(nèi)核請求需要更高權(quán)限運(yùn)行的服務(wù)。 系統(tǒng)調(diào)用提供了用戶程序與
操作系統(tǒng)之間的接口。大多數(shù)系統(tǒng)交互式操作需求在內(nèi)核態(tài)執(zhí)行。如設(shè)備IO操作或者進(jìn)程間通信。
操作系統(tǒng)的進(jìn)程空間可分為
用戶空間和
內(nèi)核空間, 它們需要不同的執(zhí)行權(quán)限。其中系統(tǒng)調(diào)用運(yùn)行在
內(nèi)核空間。[
編輯]用戶空間(用戶態(tài))和內(nèi)核空間(內(nèi)核
態(tài))
[
編輯]庫函數(shù)
系統(tǒng)調(diào)用和普通庫函數(shù)調(diào)用非常相似,只是系統(tǒng)調(diào)用由操作系統(tǒng)
內(nèi)核提供,運(yùn)行于內(nèi)核核心態(tài),而普通的庫函數(shù)調(diào)用由函數(shù)庫或用戶自己提供,運(yùn)行于用戶態(tài)。
[
編輯]典型實(shí)現(xiàn)
Linux的系統(tǒng)調(diào)用通過int 80h實(shí)現(xiàn),用
系統(tǒng)調(diào)用號來區(qū)分入口函數(shù)。 操作系統(tǒng)實(shí)現(xiàn)系統(tǒng)調(diào)用的基本過程是:
應(yīng)用程序調(diào)用庫函數(shù)(API);
API將系統(tǒng)調(diào)用號存入EAX,然后通過中斷調(diào)用使系統(tǒng)進(jìn)入內(nèi)核態(tài);
內(nèi)核中的中斷處理函數(shù)根據(jù)系統(tǒng)調(diào)用號,調(diào)用對應(yīng)的內(nèi)核函數(shù)(系統(tǒng)調(diào)用);
系統(tǒng)調(diào)用完成相應(yīng)功能,將返回值存入EAX,返回到中斷處理函數(shù);
中斷處理函數(shù)返回到API中;
API將EAX返回給應(yīng)用程序。
應(yīng)用程序調(diào)用系統(tǒng)調(diào)用的過程是:
把系統(tǒng)調(diào)用的編號存入EAX
把函數(shù)參數(shù)存入其它通用寄存器
觸發(fā)0x80號中斷(int 0x80)
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報。