天天看點

上下文切換詳解

稍微較長的描述一下,上下文切換可以認為是核心(作業系統的核心)在 cpu 上對于程序(包括線程)進行以下的活動:(1)挂起一個程序,将這個程序在 cpu 中的狀态(上下文)存儲于記憶體中的某處,(2)在記憶體中檢索下一個程序的上下文并将其在 cpu 的寄存器中恢複,(3)跳轉到程式計數器所指向的位置(即跳轉到程序被中斷時的代碼行),以恢複該程序。

上下文切換與模式切換

這兩種模式(使用者态和核心态)在類 unix 系統中共存意味着當系統調用發生時 cpu 切換到核心态是必要的。這應該叫做模式切換而不是上下文切換,因為沒有改變目前的程序。

上下文切換在多任務作業系統中是一個必須的特性。多任務作業系統是指多個程序運作在一個 cpu 中互不打擾,看起來像同時運作一樣。這個并行的錯覺是由于上下文在高速的切換(每秒幾十上百次)。當某一程序自願放棄它的 cpu 時間或者系統配置設定的時間片用完時,就會發生上下文切換。

上下文切換有時也因硬體中斷而觸發。硬體中斷是指硬體裝置(如鍵盤、滑鼠、調試解調器、系統時鐘)給核心發送的一個信号,該信号表示一個事件(如按鍵、滑鼠移動、從網絡連接配接接收到資料)發生了。

英特爾的 80386 和更進階的 cpu 都支援硬體上下文切換。然而,大多數現代的作業系統通過軟體實作上下文切換,而非使用硬體上下文切換,這樣能夠運作在任何 cpu 上。同時,使用軟體上下文切換可以嘗試獲得更好的性能。軟體的上下文切換最先在 linux 2.4 中實作。

軟體上下文切換号稱的一個主要優點是,硬體的機制儲存了幾乎所有 cpu 的狀态,軟體能夠有選擇性的儲存需要被儲存的部分并重新加載。然而這個行為對于提升上下文切換的性能到底有多重要,還有一點疑問。其擁護者還宣稱,軟體上下文切換有提高切換代碼的可能性,它有助于提高正在加載的資料的有效性,進而進一步提高性能。

上下文切換的消耗

上下文切換通常是計算密集型的。也就是說,它需要相當可觀的處理器時間,在每秒幾十上百次的切換中,每次切換都需要納秒量級的時間。是以,上下文切換對系統來說意味着消耗大量的 cpu 時間,事實上,可能是作業系統中時間消耗最大的操作。

linux相比與其他作業系統(包括其他類 unix 系統)有很多的優點,其中有一項就是,其上下文切換和模式切換的時間消耗非常少。 

繼續閱讀