用户态和内核态的简单理解「建议收藏」
linux基礎(chǔ)
linux的kernel內(nèi)核外是系統(tǒng)調(diào)用,系統(tǒng)調(diào)用外是shell、庫函數(shù),而應(yīng)用程序則在最外層
系統(tǒng)調(diào)用和庫函數(shù)的區(qū)別
- 內(nèi)核:屏蔽了調(diào)用各硬件資源的細節(jié)
- 系統(tǒng)調(diào)用:內(nèi)核提供給用戶調(diào)用的接口,但系統(tǒng)調(diào)用的可移植性差
移植性差的原因:windows、linux內(nèi)核的系統(tǒng)調(diào)用是不同的,比如:同一個功能提供給用戶的函數(shù)名、參數(shù)都不相同,會出現(xiàn)從一個系統(tǒng)移植到另一個系統(tǒng)無法正常運行。 - 庫函數(shù):為了解決系統(tǒng)調(diào)用移植新差的問題,同時封裝windows和linux系統(tǒng)調(diào)用,對用戶提供一個的函數(shù)(接口)。
- 系統(tǒng)調(diào)用在內(nèi)核地址空間執(zhí)行,而庫函數(shù)是在用戶地址空間調(diào)用。
為什么要區(qū)分用戶態(tài)和內(nèi)核態(tài)?
在CPU指令中,有些指令是非常危險的,如果錯用將導(dǎo)致系統(tǒng)崩潰,比如清內(nèi)存、設(shè)置時鐘等,所以CPU將指令分為特權(quán)指令和非特權(quán)指令。對于危險指令,只允許操作系統(tǒng)及其相關(guān)模塊使用,普通應(yīng)用程序只能使用不危險的指令。
- Intel的CPU將特權(quán)等級分為4個級別:Ring0~Ring3,而Linux使用Ring3級別運行用戶態(tài),Ring0作為內(nèi)核態(tài)。
- 操作系統(tǒng)啟動時對內(nèi)存進行了劃分,操作系統(tǒng)的數(shù)據(jù)都是存放于內(nèi)核空間的,用戶進程的數(shù)據(jù)是存放于用戶空間的。處于用戶態(tài)級別的程序只能訪問用戶空間,而處于內(nèi)核態(tài)級別的程序可以訪問用戶空間和內(nèi)核空間。
- 當(dāng)一個進程執(zhí)行系統(tǒng)調(diào)用而陷入內(nèi)核代碼中執(zhí)行時,我們就稱進程處于內(nèi)核態(tài)
用戶態(tài)和內(nèi)核態(tài)的切換耗費時間的原因
內(nèi)核為上層應(yīng)用使用CPU、存儲、IO等硬件資源提供了接口,即系統(tǒng)調(diào)用,如果一個應(yīng)用程序需要用到內(nèi)核資源,就需執(zhí)行系統(tǒng)調(diào)用的相關(guān)語句。
(1)當(dāng)執(zhí)行系統(tǒng)調(diào)用時,首先會保存現(xiàn)場,然后通過系統(tǒng)調(diào)用到內(nèi)核態(tài)執(zhí)行,最后內(nèi)核態(tài)變?yōu)橛脩魬B(tài)執(zhí)行用戶程序時,需要恢復(fù)用戶態(tài)的現(xiàn)場。
在進入內(nèi)核的時候需要保存用戶態(tài)的寄存器,在內(nèi)核態(tài)返回用戶態(tài)的時候會恢復(fù)這些寄存器的內(nèi)容。
(2)每個線程都有兩個棧:用戶棧和內(nèi)核棧,當(dāng)執(zhí)行系統(tǒng)調(diào)用時,線程就會由用戶棧切換到內(nèi)核棧,而內(nèi)核代碼對用戶不信任,需要進行額外的檢查。
Linux | 為什么用戶態(tài)和內(nèi)核態(tài)的切換耗費時間?
哪些情況會出出現(xiàn)用戶態(tài)和內(nèi)核態(tài)的切換
- 線程間的切換(上下文):線程上下文切換時,前一個線程的線程線程(切換前最后時刻的數(shù)據(jù)和指令)會被保存到內(nèi)核中,而切換回來時需要從內(nèi)核空間中讀取數(shù)據(jù)恢復(fù)現(xiàn)場。
- Syncronized鎖的獲取和釋放:使用內(nèi)核中monitor對象
用戶態(tài)切換到內(nèi)核態(tài)的三種方式
- 當(dāng)程序在用戶態(tài)需要申請外部資源(如聲卡、網(wǎng)卡、U盤、磁盤)時,需要從用戶態(tài)切換到內(nèi)核態(tài),主要有3種情況需要申請外部資源:
(1)系統(tǒng)調(diào)用
舉例: 創(chuàng)建線程時,需要通過pthread函數(shù)庫調(diào)用內(nèi)核來創(chuàng)建
(2)中斷
舉例: 當(dāng)外圍設(shè)備完成用戶請求的操作后,會想CPU發(fā)送中斷信號。這時CPU會暫停執(zhí)行下一條指令(用戶態(tài))轉(zhuǎn)而執(zhí)行與該中斷信號對應(yīng)的中斷處理程序
(3)異常:某些異常如缺頁異常只能由內(nèi)核進行處理
總結(jié)
以上是生活随笔為你收集整理的用户态和内核态的简单理解「建议收藏」的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: npm 更新node 版本「建议收藏」(
- 下一篇: 一维卷积神经网络案例_matlab 卷积