上下文切換
什麼是上下文切換
程序上下文切換
上下文切換(有時也稱做程序切換或任務切換)是指 cpu 從乙個程序或執行緒切換到另乙個程序或執行緒。
上下文切換可以認為是核心(作業系統的核心)在 cpu 上對於程序(包括執行緒)進行以下的活動:(1)掛起乙個程序,將這個程序在 cpu 中的狀態(上下文)儲存於記憶體中的某處,(2)在記憶體中檢索下乙個程序的上下文並將其在 cpu 的暫存器中恢復,(3)跳轉到程式計數器所指向的位置(即跳轉到程序被中斷時的**行),以恢復該程序。
程序的上下文:
不但包括虛擬記憶體、棧、全域性變數等使用者空間資源,還包括核心堆疊、暫存器等核心空間狀態。
**切換過程:**程序的上下文切換比系統呼叫多乙個步驟:儲存當前程序的核心狀態和 cpu 暫存器之前,先把該程序的虛擬記憶體、棧等儲存起來;載入下乙個程序的核心態後,還需要重新整理程序的虛擬記憶體和使用者棧。儲存上下文和恢復上下文需要核心在 cpu 上執行才能完成。
程序是由核心管理和排程的,程序的切換只能發生在核心態什麼情況發生上下文切換:
時間片耗盡;
io阻塞、
多個任務搶占鎖資源, 當前任務沒有搶到
發生硬中斷,cpu 上的程序會被掛起,然後去執行核心中的中斷服務程序。
程序通過睡眠函式 sleep 或者wait等阻塞函式,把自己掛起來;
當有優先順序更高的程序執行時,為了去執行高優先順序程序,當前程序會被掛起;
注意:當系統呼叫(如發個訊號singal)發生時 cpu 上下文切換到核心態是必要的。這應該叫做模式切換而不是上下文切換,因為沒有改變當前的程序。
i/o 可以被定義為任何資訊流入或流出 cpu 與主記憶體(ram)。也就是說,一台電腦的為了快速響應硬體的事件,中斷處理會打斷程序的正常排程和執行,然後呼叫中斷處理程式,響應裝置事件。在打斷其他程序時,需要先將程序當前的狀態儲存下來,等中斷結束後,程序仍然可以恢復回來。cpu和記憶體與該電腦的使用者(通過鍵盤或滑鼠)、儲存裝置(硬碟或磁碟驅動)還有其他電腦的任何交流都是 i/o。
跟程序上下文不同,中斷上下文切換不涉及程序的使用者態。所以,即便中斷過程打斷了乙個正處在使用者態的程序,也不需要儲存和恢復這個程序的虛擬記憶體、全域性變數等使用者態資源。中斷上下文,只包括核心態中斷服務程式執行所必需的狀態,也就是 cpu 暫存器、核心堆疊、硬體中斷引數等。
對同乙個 cpu 來說,中斷處理比程序擁有更高的優先順序,所以中斷上下文切換不會與程序上下文切換同時發生。
總之:中斷和系統呼叫,由於不涉及兩個程序的切換,都不會涉及程序使用者態狀態資訊,只會儲存程序在核心態的那些狀態資訊
上下文頻繁切換為什麼會影響效能?
程序上下⽂切換次數較多的情況下,很容易導致⼤量時間耗費在cpu暫存器、作業系統核心棧以及記憶體等資源的儲存和恢復上。
執行緒是排程的基本單位,而程序則是資源擁有的基本單位。
核心中的任務排程實際是在排程執行緒,程序只是給執行緒提供虛擬記憶體、全域性變數等資源。執行緒上下文切換時,共享相同的虛擬記憶體和全域性變數等資源不需要修改。而執行緒自己的私有資料,如棧和暫存器等,上下文切換時需要儲存。
執行緒切換分兩種情況:
前後兩個執行緒屬於不同程序;
前後兩個執行緒屬於同乙個程序(速度更快,消耗更少資源)。
1、執行緒上下文切換和程序上下問切換乙個最主要的區別是執行緒的切換虛擬記憶體空間依然是相同的,但是程序切換是不同的。這兩種上下文切換的處理都是通過作業系統核心來完成的。核心的這種切換過程伴隨的最顯著的效能損耗是將暫存器中的內容切換出。
程序上下文切換開銷都有哪些
1、切換頁表全域性目錄
2、切換核心態堆疊
3、切換硬體上下文(程序恢復前,必須裝入暫存器的資料統稱為硬體上下文)
ip(instruction pointer):指向當前執行指令的下一條指令
bp(base pointer): 用於存放執行中的函式對應的棧幀的棧底位址
sp(stack poinger): 用於存放執行中的函式對應的棧幀的棧頂位址
cr3:頁目錄基址暫存器,儲存頁目錄表的實體地址
…4、重新整理tlb
5、系統排程器的**執行
程序上下文切換與處理器上下文切換
3 處理器模式切換 4系統任務與使用者程序 1 程序上下文與中斷上下文程序上下文 所謂的 程序上下文 就是乙個程序在執行的時候,cpu的所有暫存器中的值 程序的狀態以及堆疊上的內容 暫存器位於cpu上,速度快,堆疊位於記憶體上,速度慢 當核心需要切換到另乙個程序時,它需要儲存當前程序的所有狀態,即儲...
上下文切換
1 系統呼叫 一次系統呼叫其實是發生了兩次cpu上下文的切換 首先將使用者態的cpu暫存器中的指令儲存在系統核心中。為了執行核心態 需要將暫存器更新為核心態指令的位置,然後跳轉到核心空間去執行任務。當核心態的指令執行完成的時候,cpu暫存器將恢復儲存在系統核心中的上一次執行的使用者態,然後切換到使用...
上下文切換
上下文切換 有時也稱做程序切換或任務切換 是指 cpu 從乙個程序或執行緒切換到另乙個程序或執行緒。上下文切換與模式切換 上下文切換只能發生在核心態中。核心態是 cpu 的一種有特權的模式,在這種模式下只有核心執行並且可以訪問所有記憶體和其他系統資源。其他的程式,如應用程式,在最開始都是執行在使用者...