上下文切換

上下文切換

上下文切換(Context Switch),性質為環境切換。

上下文切換,有時也稱做進程切換或任務切換,是指CPU 從一個進程或執行緒切換到另一個進程或執行緒。

基本介紹

  • 中文名:上下文切換
  • 外文名:Context Switch
  • 性質:切換
簡介,上下文切換的消耗,性能影響,上下文切換與模式切換,

簡介

上下文切換(Context Switch) 或者環境切換
在作業系統中,CPU切換到另一個進程需要保存當前進程的狀態並恢復另一個進程的狀態:當前運行任務轉為就緒(或者掛起、刪除)狀態,另一個被選定的就緒任務成為當前任務。上下文切換包括保存當前任務的運行環境,恢復將要運行任務的運行環境。
進程上下文用進程的PCB(進程控制塊,也稱為PCB,即任務控制塊)表示,它包括進程狀態,CPU暫存器的值等。
通常通過執行一個狀態保存來保存CPU當前狀態,然後執行一個狀態恢復重新開始運行。
支持多任務處理是CPU設計史上最大的跨越之一。在計算機中,多任務處理是指同時運行兩個或多個程式。從使用者的角度來看,這看起來並不複雜或者難以實現,但是它確實是計算機設計史上一次大的飛躍。在多任務處理系統中,CPU需要處理所有程式的操作,當用戶來回切換它們時,需要記錄這些程式執行到哪裡。上下文切換就是這樣一個過程,他允許CPU記錄並恢復各種正在運行程式的狀態,使它能夠完成切換操作。
在上下文切換過程中,CPU會停止處理當前運行的程式,並保存當前程式運行的具體位置以便之後繼續運行。從這個角度來看,上下文切換有點像我們同時閱讀幾本書,在來回切換書本的同時我們需要記住每本書當前讀到的頁碼。在程式中,上下文切換過程中的“頁碼”信息是保存在進程控制塊(PCB)中的。PCB還經常被稱作“切換幀”(switchframe)。“頁碼”信息會一直保存到CPU的記憶體中,直到他們被再次使用。
在三種情況下可能會發生上下文切換:中斷處理,多任務處理,用戶態切換。在中斷處理中,其他程式”打斷”了當前正在運行的程式。當CPU接收到中斷請求時,會在正在運行的程式和發起中斷請求的程式之間進行一次上下文切換。在多任務處理中,CPU會在不同程式之間來回切換,每個程式都有相應的處理時間片,CPU在兩個時間片的間隔中進行上下文切換。對於一些作業系統,當進行用戶態切換時也會進行一次上下文切換,雖然這不是必須的。
作業系統或者計算機硬體都支持上下文切換。一些現代作業系統通過系統本身來控制上下文切換,整個切換過程中並不依賴於硬體的支持,這樣做可以讓作業系統保存更多的上下文切換信息

上下文切換的消耗

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

性能影響

上下文切換會對性能造成負面影響。一些上下文切換相對其他切換而言更加昂貴;其中一個更昂貴的上下文切換是跨核上下文切換(Cross-Core Context Switch)。一個執行緒可以運行在一個專用處理器上,也可以跨處理器。由單個處理器服務的執行緒都有處理器關聯(Processor Affinity),這樣會更加有效。在另一個處理器核心搶占和調度執行緒會引起快取丟失,作為快取丟失和過度上下文切換的結果要訪問本地記憶體。總之,這稱為“跨核上下文切換”。

上下文切換與模式切換

上下文切換隻能發生在核心態中。核心態是 CPU 的一種有特權的模式,在這種模式下只有核心運行並且可以訪問所有記憶體和其他系統資源。其他的程式,如應用程式,在最開始都是運行在用戶態,但是他們能通過系統調用來運行部分核心的代碼。系統調用在類 Unix 系統中是指活躍的進程(正在運行在 CPU 上的進程)對於核心所提供的服務的請求,例如輸入/輸出(I/O)和進程創建(創建一個新的進程)。I/O 可以被定義為任何信息流入或流出 CPU 與主記憶體(RAM)。也就是說,一台電腦的 CPU和記憶體與該電腦的用戶(通過鍵盤或滑鼠)、存儲設備(硬碟或磁碟驅動)還有其他電腦的任何交流都是 I/O。
這兩種模式(用戶態和核心態)在類 Unix 系統中共存意味著當系統調用發生時 CPU 切換到核心態是必要的。這應該叫做模式切換而不是上下文切換,因為沒有改變當前的進程。
上下文切換在多任務作業系統中是一個必須的特性。多任務作業系統是指多個進程運行在一個 CPU 中互不打擾,看起來像同時運行一樣。這個並行的錯覺是由於上下文在高速的切換(每秒幾十上百次)。當某一進程自願放棄它的 CPU 時間或者系統分配的時間片用完時,就會發生上下文切換。
上下文切換有時也因硬體中斷而觸發。硬體中斷是指硬體設備(如鍵盤、滑鼠、調試解調器、系統時鐘)給核心傳送的一個信號,該信號表示一個事件(如按鍵、滑鼠移動、從網路連線接收到數據)發生了。

相關詞條

熱門詞條

聯絡我們