用户态和核心态的转换
用戶態(tài)和內(nèi)核態(tài)的轉(zhuǎn)換
?1)用戶態(tài)切換到內(nèi)核態(tài)的3種方式
a. 系統(tǒng)調(diào)用 這是用戶態(tài)進(jìn)程主動要求切換到內(nèi)核態(tài)的一種方式,用戶態(tài)進(jìn)程通過系統(tǒng)調(diào)用申請使用操作系統(tǒng)提供的服務(wù)程序完成工作,比如前例中fork()實際上就是執(zhí)行了一個創(chuàng)建新進(jìn)程的系統(tǒng)調(diào)用。而系統(tǒng)調(diào)用的機制其核心還是使用了操作系統(tǒng)為用戶特別開放的一個中斷來實現(xiàn),例如Linux的int 80h中斷。系統(tǒng)調(diào)用實質(zhì)上是一個中斷,而匯編指令int 就可以實現(xiàn)用戶態(tài)向內(nèi)核態(tài)切換,iret實現(xiàn)內(nèi)核態(tài)向用戶態(tài)切換 b. 異常 當(dāng)CPU在執(zhí)行運行在用戶態(tài)下的程序時,發(fā)生了某些事先不可知的異常,這時會觸發(fā)由當(dāng)前運行進(jìn)程切換到處理此異常的內(nèi)核相關(guān)程序中,也就轉(zhuǎn)到了內(nèi)核態(tài),比如缺頁異常。
c. 外圍設(shè)備的中斷 當(dāng)外圍設(shè)備完成用戶請求的操作后,會向CPU發(fā)出相應(yīng)的中斷信號,這時CPU會暫停執(zhí)行下一條即將要執(zhí)行的指令轉(zhuǎn)而去執(zhí)行與中斷信號對應(yīng)的處理程序,如果先前執(zhí)行的指令是用戶態(tài)下的程序,那么這個轉(zhuǎn)換的過程自然也就發(fā)生了由用戶態(tài)到內(nèi)核態(tài)的切換。比如硬盤讀寫操作完成,系統(tǒng)會切換到硬盤讀寫的中斷處理程序中執(zhí)行后續(xù)操作等。 這3種方式是系統(tǒng)在運行時由用戶態(tài)轉(zhuǎn)到內(nèi)核態(tài)的最主要方式,其中系統(tǒng)調(diào)用可以認(rèn)為是用戶進(jìn)程主動發(fā)起的,異常和外圍設(shè)備中斷則是被動的。
?2)具體的切換操作 從觸發(fā)方式上看,可以認(rèn)為存在前述3種不同的類型,但是從最終實際完成由用戶態(tài)到內(nèi)核態(tài)的切換操作上來說,涉及的關(guān)鍵步驟是完全一致的,沒有任何區(qū)別,都相當(dāng)于執(zhí)行了一個中斷響應(yīng)的過程,因為系統(tǒng)調(diào)用實際上最終是中斷機制實現(xiàn)的,而異常和中斷的處理機制基本上也是一致的,關(guān)于它們的具體區(qū)別這里不再贅述。關(guān)于中斷處理機制的細(xì)節(jié)和步驟這里也不做過多分析,涉及到由用戶態(tài)切換到內(nèi)核態(tài)的步驟主要包括:
總結(jié)
以上是生活随笔為你收集整理的用户态和核心态的转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 使用acme.sh签发Let's Enc
- 下一篇: 记录重要的NLP学习资源链接
