溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么看待Linux操作系統(tǒng)的用戶空間和內(nèi)核空間

發(fā)布時(shí)間:2021-10-25 15:02:02 來(lái)源:億速云 閱讀:117 作者:小新 欄目:系統(tǒng)運(yùn)維

這篇文章主要為大家展示了“怎么看待Linux操作系統(tǒng)的用戶空間和內(nèi)核空間”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“怎么看待Linux操作系統(tǒng)的用戶空間和內(nèi)核空間”這篇文章吧。

作為中央核心處理單元的CPU,除了生產(chǎn)工藝的不斷革新進(jìn)步外,在處理數(shù)據(jù)和響應(yīng)速度方面也需要有權(quán)衡。稍有微機(jī)原理基礎(chǔ)的人都知道Intel  X86體系的CPU提供了四種特權(quán)模式ring0~ring3,其中ring0特權(quán)***,ring3的特權(quán)***,之所以要做這樣的區(qū)分一個(gè)主要目的是保護(hù)資源,通俗來(lái)講要保護(hù)的資源無(wú)非就是“內(nèi)存、I/O端口以及執(zhí)行特殊機(jī)器指令的能力”。任何一個(gè)時(shí)刻,x86  CPU都是在一定的特權(quán)模式下運(yùn)行。同樣,對(duì)于ARM體系的CPU  一共有七種運(yùn)行模式,分別是:用戶模式(usr)、快速中斷模式(fiq)、中斷模式(irq)、管理模式(svc)、系統(tǒng)模式(sys)、數(shù)據(jù)訪問(wèn)終止模式(abt)和未定義指令終止模式(und)。除了用戶模式外,其他6中工作模式都屬于特權(quán)模式,而特權(quán)模式中除了系統(tǒng)模式外,其他5種模式又稱為異常模式。

那么底層硬件CPU的這種特性,跟我們將要討論的用戶模式和內(nèi)核模式又有什么關(guān)系呢?讓我們正本溯源來(lái)端正一下對(duì)操作系統(tǒng)的認(rèn)識(shí)。每位教操作系統(tǒng)課程的老師都會(huì)告訴大家:所謂的操作系統(tǒng)呢,就是對(duì)硬件資源進(jìn)行統(tǒng)一管理的系統(tǒng),并向用戶提供業(yè)務(wù)接口的軟件系統(tǒng)。通俗來(lái)講,【操作系統(tǒng)就是要能管理你的CPU和內(nèi)存,驅(qū)動(dòng)你的硬盤,管理你的網(wǎng)卡和顯示器,然后當(dāng)你點(diǎn)擊鼠標(biāo)和敲擊鍵盤時(shí)能做出正確的響應(yīng)。】夠通俗了吧。

那么問(wèn)題就來(lái)了,以CPU為例,如果你是一個(gè)操作系統(tǒng)的設(shè)計(jì)者,你會(huì)如何處理不同CPU體系架構(gòu)的差異性(如Intel、ARM,抑或AMD、MIPS等)?當(dāng)然這個(gè)問(wèn)題不是一般人能hold得了的,CU論壇里開(kāi)發(fā)都江堰操作系統(tǒng)那位大牛前輩確實(shí)值得讓吾輩佩服和敬仰。繼續(xù)我們的話題,也就是說(shuō)不同的操作系統(tǒng)在處理CPU體系架構(gòu)的差異化方面是不相同的,有些操作系統(tǒng),就提供了用戶模式和內(nèi)核模式這種機(jī)制  (例如linux),而有些操作系統(tǒng)呢,又沒(méi)有用戶態(tài)和內(nèi)核態(tài)之分(例如vxWorks)。后者不在我們的討論范圍,感興趣的童鞋可以自己去google一下。

以Linux系統(tǒng)和Intel  x86的CPU為例,Linux使用了ring0模式來(lái)運(yùn)行內(nèi)核態(tài)的代碼,ring3來(lái)運(yùn)行用戶態(tài)的代碼,ring1和ring2沒(méi)有使用。32為操作系統(tǒng)可尋址范圍是0~4GB,為此Linux系統(tǒng)將其分為了用戶空間和內(nèi)核空間兩部分:

怎么看待Linux操作系統(tǒng)的用戶空間和內(nèi)核空間

其中用戶空間占低位的3GB空間,范圍從虛擬地址的0x00000000到0xBFFFFFFFF,內(nèi)核空間占用了高位的1GB空間,虛擬地址范圍從0xC0000000到0xFFFFFFFF。

內(nèi)核空間里存放的是整個(gè)內(nèi)核代碼和所有內(nèi)核模塊,以及內(nèi)核所維護(hù)的數(shù)據(jù)。當(dāng)用戶運(yùn)行一個(gè)程序時(shí),該程序所創(chuàng)建的進(jìn)程一開(kāi)始是運(yùn)行在用戶空間的,當(dāng)它要執(zhí)行網(wǎng)絡(luò)發(fā)送數(shù)據(jù)等動(dòng)作時(shí),必須通過(guò)調(diào)用write、send等系統(tǒng)函數(shù)來(lái)完成,這些系統(tǒng)調(diào)用會(huì)去調(diào)用內(nèi)核中的代碼來(lái)完成用戶的請(qǐng)求操作,這時(shí)CPU必須從ring3切換到ring0,然后進(jìn)入內(nèi)核地址空間去執(zhí)行這些代碼完成操作,完成后又切換回ring3,回到用戶態(tài)。

所以,我們可以看到,提供了用戶模式和內(nèi)核模式的操作系統(tǒng),用戶態(tài)的程序就不能隨意操作內(nèi)核地址空間里的數(shù)據(jù),具有一定的安全保護(hù)作用;于此同時(shí),在實(shí)時(shí)性方面稍微有所犧牲。也要就是說(shuō),只要內(nèi)核代碼沒(méi)有問(wèn)題,用戶空間程序的錯(cuò)誤和BUG一般來(lái)說(shuō)不會(huì)導(dǎo)致系統(tǒng)崩潰,提高了系統(tǒng)的健壯性。

這么看來(lái),內(nèi)核確實(shí)比較“拽”,而Linux也提供了一些用戶空間和內(nèi)核空間通訊的機(jī)制,使我們可以開(kāi)發(fā)出更高效的程序。但一定要記住,內(nèi)核中一點(diǎn)小小的錯(cuò)誤都是會(huì)導(dǎo)致整個(gè)系統(tǒng)崩潰,所以開(kāi)發(fā)內(nèi)核程序時(shí)一定要非常小心謹(jǐn)慎。

以上是“怎么看待Linux操作系統(tǒng)的用戶空間和內(nèi)核空間”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI