複製鏈接
請複製以下鏈接發送給好友

進程切換

鎖定
進程切換是當今多任務多用户操作系統所應具有的基本功能。
操作系統為了控制進程的執行,必須有能力掛起正在CPU上運行的進程,並恢復以前掛起的某個進程的執行,這種行為被稱為進程切換,任務切換或上下文切換。
或者説,進行進程切換就是從正在運行的進程中收回處理器,然後再使待運行進程來佔用處理器。 這裏所説的從某個進程收回處理器,實質上就是把進程存放在處理器的寄存器中的中間數據找個地方存起來,從而把處理器的寄存器騰出來讓其他進程使用。那麼被中止運行進程的中間數據存在何處好呢?當然這個地方應該是進程的私有堆棧
中文名
進程切換
外文名
Process Switch
別    稱
任務切換、上下文切換
類    別
計算機
屬    於
操作系統

進程切換簡介

讓進程來佔用處理器,實質上是把某個進程存放在私有堆棧中寄存器的數據(前一次本進程被中止時的中間數據)再恢復到處理器的寄存器中去,並把待運行進程的斷點送入處理器的程序指針PC,於是待運行進程就開始被處理器運行了,也就是這個進程已經佔有處理器的使用權了。
這就像多個同學要分時使用同一張課桌一樣,説是要收回正在使用課桌同學的課桌使用權,實質上就是讓他把屬於他的東西拿走;而賦予某個同學課桌使用權,只不過就是讓他把他的東西放到課桌上罷了。
在切換時,一個進程存儲在處理器各寄存器中的中間數據叫做進程的上下文,所以進程的 切換實質上就是被中止運行進程與待運行進程上下文的切換。在進程未佔用處理器時,進程 的上下文是存儲在進程的私有堆棧中的。
顯然,進程的切換可以用中斷技術來實現,即當調度器獲得了待運行進程的控制塊之後,應立即用軟中斷指令來中止當前進程的運行,並保存當前進程的PC值和PSW值。其後,使 用壓棧指令把處理器其他寄存器的值壓入進程私有堆棧。接下來,就從待運行進程的進程控 制塊中取出私有堆棧指針的值並存入處理器的寄存器SP,至此SP就指向了待運行進程的私 有堆棧,於是下面就自待運行進程的私有堆棧中彈出上下文進人處理器。最後,利用中斷返回指令來實現自待運行進程的私有堆棧中彈出PSW值和自待運行進程的私有堆棧中彈出PC值的功能。
這是一個完整的軟中斷處理過程,只不過在保護現場和恢復現場工作中,保護的是被中止 運行進程的現場,恢復的是待運行進程的現場,這一切都依賴於堆棧指針的切換。
進程切換時,被中止進程保護斷點和待運行進程保護斷點的示意圖如圖所示。

進程切換進程切換步驟

進程上下文切換由以下4個步驟組成:
1)決定是否作上下文切換以及是否允許作上下文切換。包括對進程調度原因的檢查分析,以及當前執行進程的資格和CPU執行方式的檢查等。在操作系統中,上下文切換程序並不是每時每刻都在檢查和分析是否可作上下文切換,它們設置有適當的時機。
(2)保存當前執行進程的上下文。這裏所説的當前執行進程,實際上是指調用上下文切換程序之前的執行進程。如果上下文切換不是被那個當前執行進程所調用,且不屬於該進程,則所保存的上下文應是先前執行進程的上下文,或稱為“老”進程上下文。顯然,上下文切換程序不能破壞“老”進程的上下文結構。
(3)使用進程調度算法,選擇一處於就緒狀態的進程。
(4)恢復或裝配所選進程的上下文,將CPU控制權交到所選進程手中。

進程切換進程切換注意事項

保存處理器PC寄存器的值到被中止進程的私有堆棧; [1] 
保存處理器PSW寄存器的值到被中止進程的私有堆棧;
保存處理器SP寄存器的值到被中止進程的進程控制塊;
保存處理器其他寄存器的值到被中止進程的私有堆棧;
自待運行進程的進程控制塊取SP值並存入處理器的寄存器SP;
自待運行進程的私有堆棧恢復處理器各寄存器的值;
自待運行進程的私有堆棧中彈出PSW值並送入處理器的PSW;
自待運行進程的私有堆棧中彈出PC值並送入處理器的PC。
參考資料
  • 1.    譚耀銘.操作系統概論.北京市崇文區珠市口東大街5號:光明日報出版社,2008年06月:101-110