虛擬化機(jī)制的幾大挑戰(zhàn):1.性能。在實(shí)現(xiàn)虛擬化的同時(shí)不增加系統(tǒng)過(guò)多開銷。2.控制。高效運(yùn)行程序的同時(shí)對(duì)CPU保持控制(對(duì)資源的管理)。
Limited direct execution:直接在CPU中運(yùn)行程序。因此,OS啟動(dòng)程序是首先在進(jìn)程列表中創(chuàng)建一個(gè)process entry,為其分配內(nèi)存,從磁盤中將代碼加載到內(nèi)存,找到main()入口開始執(zhí)行,完畢后執(zhí)行return,OS釋放內(nèi)存,將進(jìn)程從列表中刪除。
這個(gè)方法會(huì)帶來(lái)兩個(gè)問(wèn)題:1.OS如何保證一個(gè)程序在它有效運(yùn)行時(shí)不做我們不允許它做的事情?2.OS如何將它停止,并切換到其他進(jìn)程。
Peoblem #1限制操作
OS如何辨別類似open()或read()的系統(tǒng)調(diào)用?當(dāng)你調(diào)用open()時(shí),你是在執(zhí)行C庫(kù)中的一個(gè)procedure call。其中,無(wú)論是open()還是其他系統(tǒng)調(diào)用,庫(kù)都會(huì)使用與內(nèi)核達(dá)成一致的調(diào)用來(lái)將參數(shù)放入彼此都了解的位置(堆棧,特定寄存器),將系統(tǒng)調(diào)用號(hào)也放入公共位置,然后執(zhí)行上述trap instruction。trap unpacks并返回值后,庫(kù)中代碼返回control給發(fā)出系統(tǒng)調(diào)用的程序。因此,進(jìn)行系統(tǒng)調(diào)用的C庫(kù)部分是在匯編中hand-coded,它們必須遵循約定處理參數(shù)并返回正確值,以及執(zhí)行hardware-specific trap instruction。
當(dāng)運(yùn)行在CPU上的程序想執(zhí)行一些限制操作(向磁盤發(fā)I/O,獲取更多類似CPU或內(nèi)存的系統(tǒng)資源)時(shí)?
有一種方式是對(duì)程序訪問(wèn)不加限制。這樣影響構(gòu)建不同的操作系統(tǒng),如果構(gòu)建一個(gè)檢查訪問(wèn)文件權(quán)限的文件系統(tǒng)時(shí),不能簡(jiǎn)單地讓任何程序都向磁盤發(fā)出I/O。這里引入新的Processor mode——user mode,如果運(yùn)行在user mode中,一進(jìn)程無(wú)法發(fā)出I/O,如果堅(jiān)持發(fā)出請(qǐng)求則導(dǎo)致處理器引發(fā)異常,OS可能殺死進(jìn)程。另一個(gè)是kernel mode,OS運(yùn)行的模式能使用特權(quán)指令。
如果user 進(jìn)程想執(zhí)行特權(quán)操作怎么辦?線代硬件為用戶程序提供執(zhí)行系統(tǒng)調(diào)用(允許內(nèi)核向user process開放功能:訪問(wèn)文件系統(tǒng),創(chuàng)建銷毀進(jìn)程,進(jìn)程間通信,分配內(nèi)存)的能力。
要執(zhí)行系統(tǒng)調(diào)用,程序必須執(zhí)行特殊的陷阱指令。該指令同時(shí)跳轉(zhuǎn)到內(nèi)核并將權(quán)限級(jí)別提升到內(nèi)核模式;一旦進(jìn)入內(nèi)核,系統(tǒng)現(xiàn)在可以執(zhí)行所需的任何特權(quán)操作(如果允許),從而為調(diào)用進(jìn)程執(zhí)行所需的工作(處理器將程序計(jì)數(shù)器,flags,registers放入每個(gè)程序內(nèi)核棧)。完成后,操作系統(tǒng)會(huì)調(diào)用一個(gè)特殊的從陷阱返回指令(return-from-trap將值從堆棧中pop出并繼續(xù)執(zhí)行程序),正如您所料,該指令將返回到調(diào)用用戶程序,同時(shí)將權(quán)限級(jí)別降低回用戶模式。
浙公網(wǎng)安備 33010602011771號(hào)