1.調用聲明在<asm/mmu_context.h>中的switch_mm(),該函數負責把虛擬內存從上一個進程映射切換到新的進程中去,其實就是切換到另一個進程的地址空間中,請看下圖示例:
2.調用聲明在<asm/system.h>中的switch_to(),該函數負責從上一個處理器狀態切換到新進程的處理器狀態。這包括保存,恢復棧信息和寄存器信息,還有其他和體系結構有關的狀態信息,都必須以每個進程爲對象進行管理和保存。請看如下示例:
下面我們看下進程搶佔的時機。
1.用戶搶佔
從系統調用返回用戶空間時
從中斷處理程序返回用戶空間時
2.內核搶佔
中斷處理程序正在執行,且返回內核空間之前
內核代碼再一次具有可搶佔性的時候
如果內核中的任務顯示的調用schedule()
如果內核中的任務阻塞(這同樣會導致調用schedule())