什麼是作業系統中的上下文切換?
上下文切換涉及儲存程序的上下文或狀態,以便在需要時可以重新載入它,並且可以從與之前相同的點恢復執行。這是多工作業系統的功能,並允許單個CPU被多個程序共享。
演示上下文切換的圖表如下所示:
在上圖中,最初程序 1 正在執行。由於中斷或系統呼叫,程序 1 被切換出去,程序 2 被切換進來。上下文切換涉及將程序 1 的狀態儲存到 PCB1 中,並從 PCB2 中載入程序 2 的狀態。一段時間後,再次發生上下文切換,程序 2 被切換出去,程序 1 再次被切換進來。這涉及將程序 2 的狀態儲存到 PCB2 中,並從 PCB1 中載入程序 1 的狀態。
上下文切換觸發器
上下文切換有三個主要觸發器。如下所示:
多工處理:在多工環境中,程序從 CPU 中切換出去,以便可以執行另一個程序。舊程序的狀態被儲存,新程序的狀態被載入。在搶佔式系統中,程序可能會被排程程式切換出去。
中斷處理:當發生中斷時,硬體會切換一部分上下文。這是自動發生的。僅更改部分上下文以最大程度地減少處理中斷所需的時間。
使用者和核心模式切換:當作業系統需要在使用者模式和核心模式之間進行轉換時,可能會發生上下文切換。
上下文切換步驟
上下文切換涉及的步驟如下:
- 儲存當前在 CPU 上執行的程序的上下文。更新程序控制塊和其他重要欄位。
- 將上述程序的程序控制塊移動到相關的佇列中,例如就緒佇列、I/O 佇列等。
- 選擇一個新的程序執行。
- 更新所選程序的程序控制塊。這包括將程序狀態更新為正在執行。
- 根據需要更新記憶體管理資料結構。
- 恢復先前在處理器上載入時執行的程序的上下文。這是透過載入程序控制塊和暫存器的先前值來完成的。
上下文切換成本
上下文切換會導致開銷成本,因為 TLB 重新整理、在多個任務之間共享快取、執行任務排程程式等。在同一程序的兩個執行緒之間進行上下文切換比在兩個不同程序之間進行上下文切換更快,因為執行緒具有相同的虛擬記憶體對映。因此,不需要 TLB 重新整理。
廣告