前言
誰(shuí)再和我提內(nèi)核/用戶態(tài), 我跟誰(shuí)……
記不清哪天了,
咸魚剛?cè)肼殘?chǎng),
依稀記得某天的下午時(shí)光,
公司內(nèi)的一群大牛, 聚在一起盡討論一些高大上的技術(shù)話題, 或底層原理, 或架構(gòu)……
時(shí)不時(shí)傳來(lái)一些專業(yè)術(shù)語(yǔ)“用戶態(tài)”,“內(nèi)核態(tài)”…………
咸魚在邊上默默聽(tīng)著, 也不敢插嘴,只能仰望大佬, 同時(shí)暗下決心, 今天一定要把這兩個(gè)概念搞懂!
那么, 用戶態(tài)和內(nèi)核態(tài)代表究竟是個(gè)啥贷腕?
用戶態(tài)和內(nèi)核態(tài)
簡(jiǎn)而言之, 內(nèi)核態(tài)和用戶態(tài)就是linux的權(quán)限劃分.
- 內(nèi)核態(tài)(Kernel Mode)
運(yùn)行操作系統(tǒng)程序, 操作硬件
- 用戶態(tài)(User Mode)
運(yùn)行用戶程序
為什么要進(jìn)行這樣的劃分呢?
其實(shí)本質(zhì)是為了保證系統(tǒng)不會(huì)崩潰!
你總不希望系統(tǒng)跑你的程序時(shí),
因?yàn)槟愕某绦蛴衎ug, 導(dǎo)致操作系統(tǒng)崩潰吧!
特權(quán)級(jí)別及指令劃分
這兩種運(yùn)行級(jí)別有不同的特權(quán), 可以運(yùn)行不同的指令集
特權(quán)級(jí)別一般分為四種
R0
R1
R2
R3
從R0到R3特權(quán)能力依次降低
- R3相當(dāng)于用戶態(tài)
當(dāng)程序運(yùn)行在R3級(jí)特權(quán)上時(shí), 就可以稱之為運(yùn)行在用戶態(tài).
- R0相當(dāng)于內(nèi)核態(tài)
當(dāng)程序運(yùn)行在0級(jí)特權(quán)級(jí)上時(shí),就可以稱之為運(yùn)行在內(nèi)核態(tài).
不同級(jí)別能夠運(yùn)行不同的指令集合
- 特權(quán)指令
只能由操作系統(tǒng)使用雹熬、用戶程序不能使用的指令.
- 非特權(quán)指令
用戶程序可以使用的指令.
狀態(tài)的切換
用戶態(tài)和內(nèi)核態(tài)可以互相切換.
運(yùn)行在用戶態(tài)下的程序不能直接訪問(wèn)操作系統(tǒng)內(nèi)核數(shù)據(jù)結(jié)構(gòu)和程序.
當(dāng)我們?cè)谙到y(tǒng)中執(zhí)行一個(gè)程序時(shí), 大部分時(shí)間是運(yùn)行在用戶態(tài)下的,
在其需要操作系統(tǒng)幫助完成某些它沒(méi)有權(quán)力和能力完成的工作時(shí),
就會(huì)切換到內(nèi)核態(tài).
用戶態(tài)--->內(nèi)核態(tài)
可以通過(guò)三種途徑
- 系統(tǒng)調(diào)用(訪管指令)(用戶進(jìn)程主動(dòng)發(fā)起)
為了安全, 應(yīng)用程序無(wú)法直接調(diào)用硬件的功能,
- 異常(被動(dòng))
當(dāng)CPU在執(zhí)行運(yùn)行在用戶態(tài)下的程序時(shí),
- 外圍設(shè)備的中斷(被動(dòng))
當(dāng)外圍設(shè)備完成用戶請(qǐng)求的操作后,會(huì)向CPU發(fā)出相應(yīng)的中斷信號(hào),
內(nèi)核態(tài)--->用戶態(tài)
- 設(shè)置程序狀態(tài)字PSW
兩種狀態(tài)的區(qū)別
這兩種狀態(tài)的主要差別是
處于用戶態(tài)執(zhí)行時(shí),進(jìn)程所能訪問(wèn)的內(nèi)存空間和對(duì)象受到限制,其所處于占有的處理機(jī)是可被搶占的
處于核心態(tài)執(zhí)行中的進(jìn)程,則能訪問(wèn)所有的內(nèi)存空間和對(duì)象,且所占有的處理機(jī)是不允許被搶占的.
誰(shuí)再和你提內(nèi)核/用戶態(tài), 請(qǐng)把懟飛他!