本篇內(nèi)容介紹了“Linux用戶態(tài)和內(nèi)核態(tài)怎么理解”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
淮北ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
我們先來看一張Linux
整體架構(gòu)圖。
系統(tǒng)調(diào)用時操作系統(tǒng)的最小功能單位。根據(jù)不同的應(yīng)用場景,不同的Linux
發(fā)行版本提供的系統(tǒng)調(diào)用數(shù)量也不盡相同,大致在240-350之間。這些系統(tǒng)調(diào)用組成了用戶態(tài)跟內(nèi)核態(tài)交互的基本接口,例如:用戶態(tài)想要申請一塊20K大小的動態(tài)內(nèi)存,就需要brk系統(tǒng)調(diào)用,將數(shù)據(jù)段指針向下偏移,如果用戶態(tài)多處申請20K動態(tài)內(nèi)存,同時又釋放呢?這個內(nèi)存的管理就變得非常的復(fù)雜。
庫函數(shù)就是屏蔽這些復(fù)雜的底層實(shí)現(xiàn)細(xì)節(jié),減輕程序員的負(fù)擔(dān),從而更加關(guān)注上層的邏輯實(shí)現(xiàn)。它對系統(tǒng)調(diào)用進(jìn)行封裝,提供簡單的基本接口給用戶,這樣增強(qiáng)了程序的靈活性,當(dāng)然對于簡單的接口,也可以直接使用系統(tǒng)調(diào)用訪問資源,例如:open()
,write()
,read()
等等。庫函數(shù)根據(jù)不同的標(biāo)準(zhǔn)也有不同的版本,例如:glibc
庫,posix
庫等。
Shell
顧名思義,就是外殼的意思。就好像把內(nèi)核包裹起來的外殼。它是一種特殊的應(yīng)用程序,俗稱命令行。為了方便用戶和系統(tǒng)交互,一般一個Shell
對應(yīng)一個終端,呈現(xiàn)給用戶交互窗口。當(dāng)然Shell
也是編程的,它有標(biāo)準(zhǔn)的shell
語法,符合其語法的文本叫Shell
腳本。很多人都會用Shell
腳本實(shí)現(xiàn)一些常用的功能,可以提高工作效率。
在CPU
的所有指令中,有一些指令是非常危險(xiǎn)的,如果錯用,將導(dǎo)致整個系統(tǒng)崩潰。比如:清內(nèi)存、設(shè)置時鐘等。如果所有的程序都能使用這些指令,那么你的系統(tǒng)一天死機(jī)N回就不足為奇了。所以,CPU
將指令分為特權(quán)指令和非特權(quán)指令,對于那些危險(xiǎn)的指令,只允許操作系統(tǒng)及其相關(guān)模塊使用,普通的應(yīng)用程序只能使用那些不會造成災(zāi)難的指令。Intel
的CPU
將特權(quán)級別分為4個級別:RING0
、RING1
、RING2
、RING3
。
當(dāng)一個任務(wù)(進(jìn)程)執(zhí)行系統(tǒng)調(diào)用而陷入內(nèi)核代碼中執(zhí)行時,我們就稱進(jìn)程處于內(nèi)核運(yùn)行態(tài)(或簡稱為內(nèi)核態(tài))。此時處理器處于特權(quán)級最高的(0級)內(nèi)核代碼中執(zhí)行。
當(dāng)進(jìn)程處于內(nèi)核態(tài)時,執(zhí)行的內(nèi)核代碼會使用當(dāng)前進(jìn)程的內(nèi)核棧。每個進(jìn)程都有自己的內(nèi)核棧。
當(dāng)進(jìn)程在執(zhí)行用戶自己的代碼時,則稱其處于用戶運(yùn)行態(tài)(用戶態(tài))。即此時處理器在特權(quán)級最低的(3級)用戶代碼中運(yùn)行。
當(dāng)正在執(zhí)行用戶程序而突然被中斷程序中斷時,此時用戶程序也可以象征性地稱為處于進(jìn)程的內(nèi)核態(tài)。Linux
使用了Ring3
級別運(yùn)行用戶態(tài),Ring0
作為 內(nèi)核態(tài),沒有使用Ring1
和Ring2
。Ring3
狀態(tài)不能訪問Ring0
的地址空間,包括代碼和數(shù)據(jù)。Linux
進(jìn)程的4GB
地址空間,3G-4G部分大家是共享的,是內(nèi)核態(tài)的地址空間,這里存放在整個內(nèi)核的代碼和所有的內(nèi)核模塊,以及內(nèi)核所維護(hù)的數(shù)據(jù)。用戶運(yùn)行一個程序,該程序所創(chuàng)建的進(jìn)程開始是運(yùn) 行在用戶態(tài)的,如果要執(zhí)行文件操作,網(wǎng)絡(luò)數(shù)據(jù)發(fā)送等操作,必須通過write
,send
等系統(tǒng)調(diào)用,這些系統(tǒng)調(diào)用會調(diào)用內(nèi)核中的代碼來完成操作,這時,必 須切換到Ring0
,然后進(jìn)入3GB-4GB
中的內(nèi)核地址空間去執(zhí)行這些代碼完成操作,完成后,切換回Ring3
,回到用戶態(tài)。
這樣,用戶態(tài)的程序就不能 隨意操作內(nèi)核地址空間,具有一定的安全保護(hù)作用。
處理器總處于以下狀態(tài)中的一種:
1、內(nèi)核態(tài),運(yùn)行于進(jìn)程上下文,內(nèi)核代表進(jìn)程運(yùn)行于內(nèi)核空間;
2、內(nèi)核態(tài),運(yùn)行于中斷上下文,內(nèi)核代表硬件運(yùn)行于內(nèi)核空間;
3、用戶態(tài),運(yùn)行于用戶空間。
從用戶態(tài)到內(nèi)核態(tài)切換可以通過三種方式:
**系統(tǒng)調(diào)用:**這是用戶態(tài)進(jìn)程主動要求切換到內(nèi)核態(tài)的一種方式,用戶態(tài)進(jìn)程通過系統(tǒng)調(diào)用申請使用操作系統(tǒng)提供的服務(wù)程序完成工作,比如前例中fork()實(shí)際上就是執(zhí)行了一個創(chuàng)建新進(jìn)程的系統(tǒng)調(diào)用。而系統(tǒng)調(diào)用的機(jī)制其核心還是使用了操作系統(tǒng)為用戶特別開放的一個中斷來實(shí)現(xiàn),例如Linux的int 80h中斷。
**異常:**當(dāng)CPU在執(zhí)行運(yùn)行在用戶態(tài)下的程序時,發(fā)生了某些事先不可知的異常,這時會觸發(fā)由當(dāng)前運(yùn)行進(jìn)程切換到處理此異常的內(nèi)核相關(guān)程序中,也就轉(zhuǎn)到了內(nèi)核態(tài),比如缺頁異常。
**外設(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)在運(yùn)行時由用戶態(tài)轉(zhuǎn)到內(nèi)核態(tài)的最主要方式,其中系統(tǒng)調(diào)用可以認(rèn)為是用戶進(jìn)程主動發(fā)起的,異常和外圍設(shè)備中斷則是被動的。
“Linux用戶態(tài)和內(nèi)核態(tài)怎么理解”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
網(wǎng)頁題目:Linux用戶態(tài)和內(nèi)核態(tài)怎么理解
分享網(wǎng)址:http://www.rwnh.cn/article28/jdggcp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、外貿(mào)建站、企業(yè)建站、建站公司、網(wǎng)站制作、網(wǎng)站設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)