linux內(nèi)核 linux中的內(nèi)核態(tài)和用戶態(tài)的區(qū)別,該如何解決?
linux中的內(nèi)核態(tài)和用戶態(tài)的區(qū)別,該如何解決?當一個任務(進程)執(zhí)行系統(tǒng)調(diào)用并落入內(nèi)核代碼時,我們在內(nèi)核運行狀態(tài)(或稱為內(nèi)核狀態(tài))下調(diào)用該進程。此時,處理器在具有最高權(quán)限級別(級別0)的內(nèi)核代碼中執(zhí)
linux中的內(nèi)核態(tài)和用戶態(tài)的區(qū)別,該如何解決?
當一個任務(進程)執(zhí)行系統(tǒng)調(diào)用并落入內(nèi)核代碼時,我們在內(nèi)核運行狀態(tài)(或稱為內(nèi)核狀態(tài))下調(diào)用該進程。
此時,處理器在具有最高權(quán)限級別(級別0)的內(nèi)核代碼中執(zhí)行。
當進程處于內(nèi)核狀態(tài)時,執(zhí)行的內(nèi)核代碼將使用當前進程的內(nèi)核堆棧。
每個進程都有自己的內(nèi)核堆棧。
當一個進程正在執(zhí)行用戶自己的代碼時,它被稱為處于用戶運行狀態(tài)(用戶狀態(tài))。
也就是說,處理器在具有最低權(quán)限級別(級別3)的用戶代碼中運行。
當用戶程序正在執(zhí)行并且突然被中斷程序中斷時,用戶程序也可以象征性地說處于進程的內(nèi)核狀態(tài)。
因為中斷處理程序?qū)⑹褂卯斍斑M程的內(nèi)核堆棧。
這類似于處于內(nèi)核狀態(tài)的進程的狀態(tài)。
linux進程為什么有用戶棧和內(nèi)核棧?
Linux中的CPU有兩種狀態(tài):內(nèi)核狀態(tài)和用戶狀態(tài)。CPU在內(nèi)核狀態(tài)下的權(quán)限高于用戶狀態(tài)下的權(quán)限。Linux內(nèi)存分為用戶模式內(nèi)存和內(nèi)核模式內(nèi)存,一般為4g內(nèi)存,3g內(nèi)存為用戶模式,1g內(nèi)存為內(nèi)核模式。Linux進程有時需要調(diào)用內(nèi)核資源,如讀寫文件、IO讀寫等,這時通過系統(tǒng)調(diào)用訪問內(nèi)核資源。在訪問內(nèi)核資源之前,有一個用戶堆棧。當它們通過系統(tǒng)調(diào)用進入內(nèi)核狀態(tài)時,CPU的狀態(tài)從用戶狀態(tài)變?yōu)閮?nèi)核狀態(tài),訪問的內(nèi)存是在內(nèi)核狀態(tài)內(nèi)核堆棧中管理的內(nèi)存,用于訪問內(nèi)核,內(nèi)存返回到用戶堆棧,CPU返回到用戶模式。