在Linux技術(shù)大佬口中,我們經(jīng)常會時不時聽到內(nèi)核態(tài)、用戶態(tài)等,內(nèi)核主要是和硬件打交道,管理最核心的內(nèi)容,如硬盤、內(nèi)存、CPU等,那你知道在Linux系統(tǒng)中,內(nèi)核態(tài)具體是什么嗎?請看下文: Linux系統(tǒng)中的內(nèi)核態(tài)本質(zhì)是內(nèi)核,一種特殊的軟件程序,用于控制計算機的硬件資源,例如協(xié)調(diào)CPU資源,分配內(nèi)存資源,并且提供穩(wěn)定的環(huán)境供應(yīng)用程序運行。0-4G范圍的虛擬空間地址都可以操作,尤其是對3-4G范圍的高位虛擬空間地址必須由內(nèi)核態(tài)去操作。 用戶態(tài)提供應(yīng)用程序運行的空間,為了使應(yīng)用程序訪問到內(nèi)核管理的資源,例如CPU,內(nèi)存,I/O等。用戶態(tài)只能受限的訪問內(nèi)存,且不允許訪問外設(shè) (硬盤、網(wǎng)卡等);內(nèi)核態(tài)CPU可以訪問內(nèi)存所有數(shù)據(jù),包括外設(shè),且可以將自己從一個程序切換到另一個程序。 從用戶態(tài)切換到內(nèi)核態(tài)有以下三種方式: 系統(tǒng)調(diào)用:是用戶態(tài)進程主動要求切換到內(nèi)核態(tài)的一種方式,用戶態(tài)進程通過系統(tǒng)調(diào)用申請使用操作系統(tǒng)提供的服務(wù)程序完成工作。例如上面的例子、還比如fork()實際上就是執(zhí)行了一個創(chuàng)建新進程的系統(tǒng)調(diào)用。(其實系統(tǒng)調(diào)用本身就是中斷,是軟件中斷) 異常:如果當前進程運行在用戶態(tài),如果這個時候發(fā)生了異常事件,就會觸發(fā)切換。例如:缺頁異常。 外設(shè)中端:當外設(shè)完成用戶的請求時,會向 CPU 發(fā)送中斷信號,此時 CPU 會暫停執(zhí)行下一條即將要執(zhí)行的指令轉(zhuǎn)而去執(zhí)行與中斷信號對應(yīng)的處理程序,如果先前執(zhí)行的指令是用戶態(tài)下的程序,那么這個轉(zhuǎn)換的過程自然也就發(fā)生了由用戶態(tài)到內(nèi)核態(tài)的切換。例:如硬盤讀寫操作完成后,系統(tǒng)會切換到硬盤讀寫的中斷處理程序中執(zhí)行后續(xù)操作。 |
|
來自: 老男孩IT教育 > 《Linux培訓(xùn)》