系統(tǒng)調(diào)用:用戶在編程時(shí)可以調(diào)用的操作系統(tǒng)功能
系統(tǒng)調(diào)用是操作系統(tǒng)提供給編程人員的唯一接口,使CPU狀態(tài)從用戶態(tài)陷入內(nèi)核態(tài)
每個(gè)操作系統(tǒng)都提供幾百種系統(tǒng)調(diào)用(進(jìn)程控制,進(jìn)程通信,文件使用,目錄操作,設(shè)備管理,信息維護(hù)等)
應(yīng)用程序->系統(tǒng)調(diào)用;應(yīng)用程序->C函數(shù)庫/API接口->系統(tǒng)調(diào)用;
內(nèi)核函數(shù)處理系統(tǒng)調(diào)用
系統(tǒng)調(diào)用機(jī)制的設(shè)計(jì)
1.中斷/異常機(jī)制支持系統(tǒng)調(diào)用服務(wù)的實(shí)現(xiàn);2.選擇一條特殊指令:陷入指令(訪管指令),引發(fā)異常,完成用戶態(tài)到內(nèi)核態(tài)的切換;3.系統(tǒng)調(diào)用號(hào)和參數(shù):每個(gè)系統(tǒng)調(diào)用都事先給定一個(gè)編號(hào)(功能號(hào))4. 系統(tǒng)調(diào)用表:存放系統(tǒng)調(diào)用服務(wù)例程的入口地址
參數(shù)傳遞過程問題
怎樣實(shí)現(xiàn)用戶程序的參數(shù)傳遞給內(nèi)核?
3種常用實(shí)現(xiàn)方法
1.由陷入指令自帶參數(shù):陷入指令的長(zhǎng)度有限,且還要攜帶系統(tǒng)調(diào)用功能號(hào),只能自帶有限的參數(shù);2. 通過通用寄存器傳遞參數(shù),這些寄存器是操作系統(tǒng)和用戶程序都能訪問的,但寄存器的個(gè)數(shù)會(huì)限制傳遞參數(shù)的數(shù)量 3. 在內(nèi)存中開辟專用堆棧區(qū)來傳遞參數(shù)。
系統(tǒng)調(diào)用執(zhí)行過程
當(dāng)CPU執(zhí)行到特殊的陷入指令時(shí):
中斷/異常機(jī)制:硬件保護(hù)現(xiàn)場(chǎng);通過查中斷向量表把控制權(quán)轉(zhuǎn)給系統(tǒng)調(diào)用總?cè)肟诔绦?/p>
系統(tǒng)調(diào)用總?cè)肟诔绦颍罕4娆F(xiàn)場(chǎng);將參數(shù)保存在內(nèi)核堆棧里;通過查系統(tǒng)調(diào)用表把控制權(quán)轉(zhuǎn)給相應(yīng)的系統(tǒng)調(diào)用處理例程或內(nèi)核函數(shù)
執(zhí)行系統(tǒng)調(diào)用例程
恢復(fù)現(xiàn)場(chǎng),返回用戶程序