




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、進(jìn)程上下文進(jìn)程上下文 process context 用戶程序裝入系統(tǒng)形成一個進(jìn)程的實質(zhì)是系統(tǒng)為用戶程序提供一個完整的運行環(huán)境。 系統(tǒng)提供給進(jìn)程的的處于動態(tài)變化的運行環(huán)境總系統(tǒng)提供給進(jìn)程的的處于動態(tài)變化的運行環(huán)境總和稱為進(jìn)程上下文。和稱為進(jìn)程上下文。 運行環(huán)境運行環(huán)境 = = 程序代碼程序代碼+ +數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)+ +硬件環(huán)境。硬件環(huán)境。 進(jìn)程上下文用進(jìn)程的進(jìn)程上下文用進(jìn)程的PCBPCB表示,它包括表示,它包括CPUCPU的值、的值、進(jìn)程狀態(tài)和內(nèi)存管理信息等進(jìn)程狀態(tài)和內(nèi)存管理信息等 進(jìn)程進(jìn)程的運行環(huán)境主要包括的運行環(huán)境主要包括: 1.進(jìn)程空間中的代碼和數(shù)據(jù)、各種數(shù)據(jù)結(jié)構(gòu)、進(jìn)程堆棧和共享內(nèi)存區(qū)
2、等。 2.環(huán)境變量:提供進(jìn)程運行所需的環(huán)境信息。 3.系統(tǒng)數(shù)據(jù):進(jìn)程空間中的對進(jìn)程進(jìn)行管理和控制所需的信息,包括進(jìn)程任務(wù)結(jié)構(gòu)體以及內(nèi)核堆棧等。 4.進(jìn)程訪問設(shè)備或者文件時的權(quán)限。 5.各種硬件寄存器。 6.地址轉(zhuǎn)換信息。 中斷上下文中斷上下文 中斷處理程序 沒有進(jìn)程上下文 硬件通過觸發(fā)信號,導(dǎo)致內(nèi)核調(diào)用中斷處理程序,進(jìn)入內(nèi)核空間。這個過程中,硬件的一些變量和參數(shù)也要傳遞給內(nèi)核,內(nèi)核通過這些參數(shù)進(jìn)行中斷處理。 所謂的“中斷上下文”,其實也可以看作就是硬件傳遞過來的這些參數(shù)和內(nèi)核需要保存的一些其他環(huán)境(主要是當(dāng)前被打斷執(zhí)行的進(jìn)程環(huán)境)。中斷時,內(nèi)核不代表任何進(jìn)程運行,它一般只訪問系統(tǒng)空間,而不會訪
3、問進(jìn)程空間,內(nèi)核在中斷上下文中執(zhí)行時一般不會阻塞。 進(jìn)程切換進(jìn)程切換 process switch 當(dāng)前進(jìn)程(current) 一個正在使用處理器運行的進(jìn)程. 當(dāng)前進(jìn)程因時間片用完或者因等待某個事件而阻塞時,進(jìn)程調(diào)度需要把處理器的使用權(quán)從當(dāng)前進(jìn)程交給另一個進(jìn)程,這個過程叫做進(jìn)程切換。此時,被調(diào)用進(jìn)程成為當(dāng)前進(jìn)程。 進(jìn)程切換進(jìn)程切換 process switch 實質(zhì)上就是把進(jìn)程存放在處理器的寄存器中的中間數(shù)據(jù)存入進(jìn)程的私有堆棧,從而把處理器的寄存器騰出來讓其他進(jìn)程使用。然后把進(jìn)程存放在私有堆棧中寄存器的數(shù)據(jù)(前一次本進(jìn)程被中止時的中間數(shù)據(jù))再恢復(fù)到處理器的寄存器中去,并把待運行進(jìn)程的斷點送入處
4、理器的程序指針PC。 進(jìn)程切換進(jìn)程切換 process switch 一個進(jìn)程經(jīng)過調(diào)度再次使用CPU運行時,系統(tǒng)要恢復(fù)該進(jìn)程保存的上下文。所以,進(jìn)程的切換也就是上下文切換。上面的敘述可知,調(diào)度器進(jìn)程切換的代碼應(yīng)有如下功能:保存處理器PC寄存器的值到被中止進(jìn)程的私有堆棧; 保存處理器PSW寄存器的值到被中止進(jìn)程的私有堆棧; 進(jìn)程切換進(jìn)程切換 process switch 保存處理器SP寄存器的值到被中止進(jìn)程的進(jìn)程控制塊; 保存處理器其他寄存器的值到被中止進(jìn)程的私有堆棧; 自待運行進(jìn)程的進(jìn)程控制塊取SP值并存入處理器的寄存器SP; 自待運行進(jìn)程的私有堆?;謴?fù)處理器各寄存器的值; 自待運行進(jìn)程的私有
5、堆棧中彈出PSW值并送入處理器的PSW; 自待運行進(jìn)程的私有堆棧中彈出PC值并送入處理器的PC。 上下文上下文切換切換 的實現(xiàn)的實現(xiàn) 進(jìn)程的切換可以用中斷技術(shù)來實現(xiàn) 1、調(diào)度器獲得了待運行進(jìn)程的控制塊 2、立即用軟中斷指令來中止當(dāng)前進(jìn)程的運行,并保存當(dāng)前進(jìn)程的PC值和PSW值。 3、使 用壓棧指令把處理器其他寄存器的值壓入進(jìn)程私有堆棧。 上下文上下文切換切換 的實現(xiàn)的實現(xiàn) 4、從待運行進(jìn)程的進(jìn)程控 制塊中取出私有堆棧指針的值并存入處理器的寄存器SP。至此SP就指向了待運行進(jìn)程的私 有堆棧。 5、自待運行進(jìn)程的私有堆棧中彈出上下文進(jìn)人處理器。 6、利用中斷返回指令來實現(xiàn)自待運行進(jìn)程的私有堆棧中彈
6、出PSW值和自待運行進(jìn)程的私有堆棧中彈出PC值的功能。 上下文上下文切換切換 的實現(xiàn)的實現(xiàn) 這是一個完整的軟中斷處理過程,只不過在保護(hù)現(xiàn)場和恢復(fù)現(xiàn)場工作中,保護(hù)的是被中止 運行進(jìn)程的現(xiàn)場,恢復(fù)的是待運行進(jìn)程的現(xiàn)場,這一切都依賴于堆棧指針的切換。進(jìn)程切換時,被中止進(jìn)程保護(hù)斷點和待運行進(jìn)程保護(hù)斷點的示意圖如圖所示: 上下文切換的引發(fā)上下文切換的引發(fā) 處理器總處于以下狀態(tài)中的一種: 、內(nèi)核態(tài),運行于進(jìn)程上下文,內(nèi)核代表進(jìn)程運行于內(nèi)核空間; 、內(nèi)核態(tài),運行于中斷上下文,內(nèi)核代表硬件運行于內(nèi)核空間; 、用戶態(tài),運行于用戶空間。 上下文切換的引發(fā)上下文切換的引發(fā) 1、中斷處理,其他程序”打斷”了當(dāng)前正在運
7、行的程序。當(dāng)CPU接收到中斷請求時,會在正在運行的程序和發(fā)起中斷請求的程序之間進(jìn)行一次上下文切換。 2、多任務(wù)處理,CPU會在不同程序之間來回切換,每個程序都有相應(yīng)的處理時間片,CPU在兩個時間片的間隔中進(jìn)行上下文切換。 3、一個硬件中斷的產(chǎn)生,也可能導(dǎo)致內(nèi)核收到請求后進(jìn)行上下文切換 上下文切換的引發(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ū)分進(jìn)程和線程,線程只是共享了address space和其他資源罷了) pthread_cond_wait負(fù)責(zé)將當(dāng)前線程掛起并進(jìn)入休眠,直到條件成立的那一刻,而pthread_cond_signal則是喚醒守候條件的線程。 大致流程: pthread_cond_wait = sys_futex = do_futex = futex_wait (藍(lán)色部分為內(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 (藍(lán)色部分為內(nèi)核調(diào)用流程) 線程的切換虛擬內(nèi)存空間依然是相同的,但是進(jìn)程切換是不同的。這兩種上下文切換的處理都是通過操作系統(tǒng)內(nèi)核來完成的。內(nèi)核的這種切換過程伴隨的最顯著的性能損耗是將寄存器中的內(nèi)容切換出。 默默地扼殺著我們的程序性能 1、上下文的切換會擾亂處理器的緩存機制。簡單的說,一旦去切換上下文,處理器中所有已經(jīng)緩存的內(nèi)存地址一瞬間都作廢了。 2、還有一個顯著的區(qū)別是當(dāng)你改變虛擬內(nèi)存空間的時候,處理的頁表緩沖(processors Translation Lookaside Buffer (TLB))或者相關(guān)環(huán)境會被全部刷新,這將導(dǎo)致內(nèi)存的訪問在一段時間內(nèi)相當(dāng)?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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DB62T 4133-2020 公路隧道地質(zhì)超前預(yù)報機械能無損探測技術(shù)規(guī)程
- DB62T 4064-2019 玉米品種 金凱3號
- 創(chuàng)傷救治急診流程標(biāo)準(zhǔn)化實施
- 二年級語文心理健康輔導(dǎo)計劃
- 內(nèi)鏡室設(shè)備維護(hù)人員職責(zé)與流程
- 醫(yī)療行業(yè)普通工人年終工作總結(jié)范文
- 2025年藝術(shù)院校學(xué)生創(chuàng)作學(xué)習(xí)計劃范文
- 2024-2025幼兒園家長參與計劃
- 2025年鐵藝護(hù)欄市場調(diào)查報告
- 石油工程資料管理及職責(zé)劃分
- 臨床教學(xué)醫(yī)院發(fā)展規(guī)劃塑造未來醫(yī)療教育的新格局
- 第二單元第2課《律動青春》教學(xué)設(shè)計 -2024-2025學(xué)年人教版(2024)初中美術(shù)七年級下冊
- 杭州市拱墅區(qū)部分校教科版六年級下冊期末考試科學(xué)試卷(解析版)
- 《胸痛中心質(zhì)控指標(biāo)及考核標(biāo)準(zhǔn)》(第三版修訂版)
- 2025年郵政運營面試試題及答案
- 酒店經(jīng)理培訓(xùn)課程
- 人教版初中歷史與社會九年級上冊 4.1.2 土地改革與三大戰(zhàn)役 教學(xué)設(shè)計
- DB37T5031-2015 SMC玻璃鋼檢查井應(yīng)用技術(shù)規(guī)程
- 江蘇?。贤ā⑻┲?、揚州、淮安、宿遷、徐州、連云港)七市2022屆高三下學(xué)期二模試題+生物含答案
- 交際英語視聽說(山東聯(lián)盟)知到智慧樹章節(jié)測試課后答案2024年秋齊魯師范學(xué)院
- 上海2025年上海電機學(xué)院教師招聘100人筆試歷年參考題庫附帶答案詳解
評論
0/150
提交評論