上下文切換演示文稿_第1頁
上下文切換演示文稿_第2頁
上下文切換演示文稿_第3頁
上下文切換演示文稿_第4頁
上下文切換演示文稿_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、進程上下文進程上下文 process context 用戶程序裝入系統(tǒng)形成一個進程的實質(zhì)是系統(tǒng)為用戶程序提供一個完整的運行環(huán)境。 系統(tǒng)提供給進程的的處于動態(tài)變化的運行環(huán)境總系統(tǒng)提供給進程的的處于動態(tài)變化的運行環(huán)境總和稱為進程上下文。和稱為進程上下文。 運行環(huán)境運行環(huán)境 = = 程序代碼程序代碼+ +數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)+ +硬件環(huán)境。硬件環(huán)境。 進程上下文用進程的進程上下文用進程的PCBPCB表示,它包括表示,它包括CPUCPU的值、的值、進程狀態(tài)和內(nèi)存管理信息等進程狀態(tài)和內(nèi)存管理信息等 進程進程的運行環(huán)境主要包括的運行環(huán)境主要包括: 1.進程空間中的代碼和數(shù)據(jù)、各種數(shù)據(jù)結(jié)構(gòu)、進程堆棧和共享內(nèi)存區(qū)

2、等。 2.環(huán)境變量:提供進程運行所需的環(huán)境信息。 3.系統(tǒng)數(shù)據(jù):進程空間中的對進程進行管理和控制所需的信息,包括進程任務(wù)結(jié)構(gòu)體以及內(nèi)核堆棧等。 4.進程訪問設(shè)備或者文件時的權(quán)限。 5.各種硬件寄存器。 6.地址轉(zhuǎn)換信息。 中斷上下文中斷上下文 中斷處理程序 沒有進程上下文 硬件通過觸發(fā)信號,導致內(nèi)核調(diào)用中斷處理程序,進入內(nèi)核空間。這個過程中,硬件的一些變量和參數(shù)也要傳遞給內(nèi)核,內(nèi)核通過這些參數(shù)進行中斷處理。 所謂的“中斷上下文”,其實也可以看作就是硬件傳遞過來的這些參數(shù)和內(nèi)核需要保存的一些其他環(huán)境(主要是當前被打斷執(zhí)行的進程環(huán)境)。中斷時,內(nèi)核不代表任何進程運行,它一般只訪問系統(tǒng)空間,而不會訪

3、問進程空間,內(nèi)核在中斷上下文中執(zhí)行時一般不會阻塞。 進程切換進程切換 process switch 當前進程(current) 一個正在使用處理器運行的進程. 當前進程因時間片用完或者因等待某個事件而阻塞時,進程調(diào)度需要把處理器的使用權(quán)從當前進程交給另一個進程,這個過程叫做進程切換。此時,被調(diào)用進程成為當前進程。 進程切換進程切換 process switch 實質(zhì)上就是把進程存放在處理器的寄存器中的中間數(shù)據(jù)存入進程的私有堆棧,從而把處理器的寄存器騰出來讓其他進程使用。然后把進程存放在私有堆棧中寄存器的數(shù)據(jù)(前一次本進程被中止時的中間數(shù)據(jù))再恢復到處理器的寄存器中去,并把待運行進程的斷點送入處

4、理器的程序指針PC。 進程切換進程切換 process switch 一個進程經(jīng)過調(diào)度再次使用CPU運行時,系統(tǒng)要恢復該進程保存的上下文。所以,進程的切換也就是上下文切換。上面的敘述可知,調(diào)度器進程切換的代碼應有如下功能:保存處理器PC寄存器的值到被中止進程的私有堆棧; 保存處理器PSW寄存器的值到被中止進程的私有堆棧; 進程切換進程切換 process switch 保存處理器SP寄存器的值到被中止進程的進程控制塊; 保存處理器其他寄存器的值到被中止進程的私有堆棧; 自待運行進程的進程控制塊取SP值并存入處理器的寄存器SP; 自待運行進程的私有堆?;謴吞幚砥鞲骷拇嫫鞯闹担?自待運行進程的私有

5、堆棧中彈出PSW值并送入處理器的PSW; 自待運行進程的私有堆棧中彈出PC值并送入處理器的PC。 上下文上下文切換切換 的實現(xiàn)的實現(xiàn) 進程的切換可以用中斷技術(shù)來實現(xiàn) 1、調(diào)度器獲得了待運行進程的控制塊 2、立即用軟中斷指令來中止當前進程的運行,并保存當前進程的PC值和PSW值。 3、使 用壓棧指令把處理器其他寄存器的值壓入進程私有堆棧。 上下文上下文切換切換 的實現(xiàn)的實現(xiàn) 4、從待運行進程的進程控 制塊中取出私有堆棧指針的值并存入處理器的寄存器SP。至此SP就指向了待運行進程的私 有堆棧。 5、自待運行進程的私有堆棧中彈出上下文進人處理器。 6、利用中斷返回指令來實現(xiàn)自待運行進程的私有堆棧中彈

6、出PSW值和自待運行進程的私有堆棧中彈出PC值的功能。 上下文上下文切換切換 的實現(xiàn)的實現(xiàn) 這是一個完整的軟中斷處理過程,只不過在保護現(xiàn)場和恢復現(xiàn)場工作中,保護的是被中止 運行進程的現(xiàn)場,恢復的是待運行進程的現(xiàn)場,這一切都依賴于堆棧指針的切換。進程切換時,被中止進程保護斷點和待運行進程保護斷點的示意圖如圖所示: 上下文切換的引發(fā)上下文切換的引發(fā) 處理器總處于以下狀態(tài)中的一種: 、內(nèi)核態(tài),運行于進程上下文,內(nèi)核代表進程運行于內(nèi)核空間; 、內(nèi)核態(tài),運行于中斷上下文,內(nèi)核代表硬件運行于內(nèi)核空間; 、用戶態(tài),運行于用戶空間。 上下文切換的引發(fā)上下文切換的引發(fā) 1、中斷處理,其他程序”打斷”了當前正在運

7、行的程序。當CPU接收到中斷請求時,會在正在運行的程序和發(fā)起中斷請求的程序之間進行一次上下文切換。 2、多任務(wù)處理,CPU會在不同程序之間來回切換,每個程序都有相應的處理時間片,CPU在兩個時間片的間隔中進行上下文切換。 3、一個硬件中斷的產(chǎn)生,也可能導致內(nèi)核收到請求后進行上下文切換 上下文切換的引發(fā)上下文切換的引發(fā) 上下文切換上下文切換 只能發(fā)生在內(nèi)核態(tài)(kernel mode) system call會陷入內(nèi)核態(tài),是用戶模式轉(zhuǎn)換為內(nèi)核模式的過程,我們稱之為模式轉(zhuǎn)換,但不表明會發(fā)生上下文切換(其實模式轉(zhuǎn)換同樣也會做很多和上下文切換一樣的流程,例如通過寄存器傳遞用戶模式和 內(nèi)核模式之間的一些參

8、數(shù)) 實例實例 linux中中pthread庫中庫中的的 pthread_cond_wait 和和pthread_cond_signal (雖然是針對線程,但linux內(nèi)核并不區(qū)分進程和線程,線程只是共享了address space和其他資源罷了) pthread_cond_wait負責將當前線程掛起并進入休眠,直到條件成立的那一刻,而pthread_cond_signal則是喚醒守候條件的線程。 大致流程: pthread_cond_wait = sys_futex = do_futex = futex_wait (藍色部分為內(nèi)核調(diào)用流程) pthread_cond_signal = SYS

9、_futex = do_futex = futex_wake = wake_futex = _wake_up = _wake_up_common = try_to_wake_up (藍色部分為內(nèi)核調(diào)用流程) 線程的切換虛擬內(nèi)存空間依然是相同的,但是進程切換是不同的。這兩種上下文切換的處理都是通過操作系統(tǒng)內(nèi)核來完成的。內(nèi)核的這種切換過程伴隨的最顯著的性能損耗是將寄存器中的內(nèi)容切換出。 默默地扼殺著我們的程序性能 1、上下文的切換會擾亂處理器的緩存機制。簡單的說,一旦去切換上下文,處理器中所有已經(jīng)緩存的內(nèi)存地址一瞬間都作廢了。 2、還有一個顯著的區(qū)別是當你改變虛擬內(nèi)存空間的時候,處理的頁表緩沖(processors Translation Lookaside Buffer (TLB))或者相關(guān)環(huán)境會被全部刷新,這將導致內(nèi)存的訪問在一段時間內(nèi)相當?shù)牡托?。但是在線程的切換中,不會出現(xiàn)這個問題。 跨核上下文切換(Cross-Core Context Switch) 相對

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論