不同進(jìn)程間線程的切換與進(jìn)程間的直接切換有什么區(qū)別?
進(jìn)程間切換的步驟:
1,保存程序計(jì)數(shù)其以及其他寄存器。
2,更新當(dāng)前處于“運(yùn)行態(tài)”的進(jìn)程的進(jìn)程控制塊,把進(jìn)程狀態(tài)改為相應(yīng)狀態(tài),更新其他相關(guān)域3,把被切換進(jìn)程的進(jìn)程控制塊移到相關(guān)狀態(tài)的隊(duì)列4,選擇另外一個進(jìn)程開始執(zhí)行,把該進(jìn)程進(jìn)程控制塊的狀態(tài)改為“運(yùn)行態(tài)”5,恢復(fù)被選擇進(jìn)程的處理器在最近一次被切換出運(yùn)行態(tài)時(shí)的上下文,比如載入程序計(jì)數(shù)器以及其他處理器的值進(jìn)程間切換伴隨著兩次模式切換(用戶--內(nèi)核,內(nèi)核--用戶)。(同一進(jìn)程內(nèi))線程間切換的步驟:線程分兩種,用戶級線程和內(nèi)核級線程在用戶級線程中,有關(guān)線程管理的所有工作都由應(yīng)用程序完成,內(nèi)核沒有意識到線程的存在。(同一進(jìn)程內(nèi))用戶級線程間切換時(shí),只需要保存用戶寄存器的內(nèi)容,程序計(jì)數(shù)器,棧指針,不需要模式切換。缺點(diǎn):1,在進(jìn)程的某個線程執(zhí)行系統(tǒng)調(diào)用時(shí),不僅該線程被阻塞,該線程所在進(jìn)程的所有線程都被阻塞2,無法利用多處理器在內(nèi)核級線程中,有關(guān)線程的管理工作都是由內(nèi)核完成的,應(yīng)用程序部分沒有線程管理的權(quán)限,只有一個接口(API)(同一進(jìn)程內(nèi))內(nèi)核級線程間切換時(shí),除了保存上下文,還要進(jìn)行模式切換。優(yōu)點(diǎn):1,可以利用多處理器2,線程阻塞不會導(dǎo)致進(jìn)程阻塞