執(zhí)行系統(tǒng)調(diào)用函數(shù)時,系統(tǒng)調(diào)用函數(shù)會執(zhí)行int 0x80中斷命令,同時將系統(tǒng)調(diào)用號放入eax寄存器中,并將要傳遞給系統(tǒng)的參數(shù)放入ebx,ecx,edx中。中斷處理程序會執(zhí)行system_call()函數(shù)。
system_call()函數(shù)首先保存原段寄存器,在將調(diào)用參數(shù)壓入棧中。然后將ds、es指向內(nèi)核數(shù)據(jù)段,cs段會在中斷產(chǎn)生時由中斷門的段選擇符賦值為內(nèi)核代碼段,并將原段選擇符保存到棧中。然后調(diào)用對應(yīng)的功能函數(shù)。當(dāng)從功能函數(shù)返回時,內(nèi)核會查看當(dāng)前任務(wù)運行狀態(tài),如果不在就緒態(tài)就去執(zhí)行調(diào)度程序。如果在就緒態(tài),但其時間片用完,則也去執(zhí)行調(diào)度程序。當(dāng)任務(wù)繼續(xù)執(zhí)行時則繼續(xù)對信號進(jìn)行處理,然后退回到系統(tǒng)調(diào)用函數(shù)。
新聞熱點
疑難解答
圖片精選