linux進程切換 不同進程間線程的切換與進程間的直接切換有什么區(qū)別?
不同進程間線程的切換與進程間的直接切換有什么區(qū)別?在進程之間切換的步驟:1、保存程序、計數(shù)它和其他寄存器。2. 更新處于“運行”狀態(tài)的流程的流程控制塊,將流程狀態(tài)更改為相應的狀態(tài),更新其他相關字段3,
不同進程間線程的切換與進程間的直接切換有什么區(qū)別?
在進程之間切換的步驟:
1、保存程序、計數(shù)它和其他寄存器。
2. 更新處于“運行”狀態(tài)的流程的流程控制塊,將流程狀態(tài)更改為相應的狀態(tài),更新其他相關字段3,將切換流程的流程控制塊移動到處于相關狀態(tài)的隊列4,選擇另一個流程開始執(zhí)行,將進程的進程控制塊狀態(tài)改為“running”狀態(tài)5,并在最后一次操作中還原所選進程的處理器切換出運行狀態(tài)的上下文,如loader counter和其他處理器的值,并伴有兩個模式開關(user kernel、kernel user)。線程之間切換的步驟(在同一進程內(nèi)):有兩種線程:用戶級線程和內(nèi)核級線程。在用戶級線程中,所有與線程管理相關的工作都是由應用程序完成的,內(nèi)核并不知道線程的存在。在用戶級線程之間切換時(在同一進程中),只需要保存用戶寄存器、程序計數(shù)器和堆棧指針的內(nèi)容,不需要進行模式切換。缺點:1。當進程的某個線程執(zhí)行系統(tǒng)調(diào)用時,不僅該線程被阻塞,而且該線程所在進程的所有線程都被阻塞。2不能使用多處理器。在內(nèi)核級線程中,線程的管理是由內(nèi)核來完成的,應用程序部分沒有線程管理權限,內(nèi)核級線程之間只使用一個接口(API)(在同一進程中)進行切換,也就是說,除了保存上下文外,還需要進行模式切換。優(yōu)點:1??梢允褂枚嗵幚砥鳌?線程阻塞不會導致進程阻塞
進程切換比線程切換成本更高,因為在進程切換過程中需要切頁表,而且常常伴隨著頁調(diào)度,因為進程的數(shù)據(jù)段和代碼段需要調(diào)出,以便可以交換要執(zhí)行的進程的內(nèi)容。進程的內(nèi)容是線程的超集。而線程只需要保存線程的上下文(相關寄存器狀態(tài)和堆棧信息),動作非常小