【軟件】微內(nèi)核與宏內(nèi)核

歡迎關(guān)注我的專(zhuān)欄( つ??ω??)つ【人工智能通識(shí)】


核心模式與用戶(hù)模式(Kernel Mode & User Mode)

我們都知道一臺(tái)計(jì)算機(jī)或者手機(jī)都要有個(gè)操作系統(tǒng)(Operating System簡(jiǎn)稱(chēng)OS),最常用的操作系統(tǒng)就是手機(jī)上的安卓(Android)和電腦上的Windows,其次還有蘋(píng)果手機(jī)上的iOS和蘋(píng)果筆記本上的macOS旗唁,也許你還聽(tīng)說(shuō)過(guò)另外的操作系統(tǒng)比如Unix戴卜、Linux、Ubuntu等等充蓝。總之,這些都是操作系統(tǒng)横腿。

買(mǎi)一個(gè)硬件設(shè)備(電腦、筆記本或者手機(jī))斤寂,首先上面一般都已經(jīng)安裝了操作系統(tǒng)耿焊,然后我們可以在操作系統(tǒng)的基礎(chǔ)上再安裝各種各樣的軟件程序或APP。硬件\to操作系統(tǒng)\to軟件程序遍搞,這就像磚頭一層一層累加起來(lái)罗侯。

操作系統(tǒng)本身也是代碼編寫(xiě)出來(lái)的,所以也是軟件溪猿。從這里我們就可以看出來(lái)钩杰,同樣都是軟件纫塌,操作系統(tǒng)可以直接控制硬件,而應(yīng)用程序不能直接控制硬件讲弄,必須要通過(guò)操作系統(tǒng)來(lái)間接使用硬件資源措左。

內(nèi)核(kernel)就是操作系統(tǒng)的最主要代碼,我們也可以簡(jiǎn)單的認(rèn)為Kernel(內(nèi)核)就是指操作系統(tǒng)避除。

所有的軟件代碼怎披,無(wú)論操作系統(tǒng)還是應(yīng)用程序,本質(zhì)是都是由中央處理器芯片(CPU)來(lái)運(yùn)行的瓶摆,但如果你安裝的APP代碼里面有病毒怎么辦钳枕?CPU運(yùn)行這些有問(wèn)題的代碼就會(huì)遇到困難,甚至?xí)罊C(jī)赏壹。

幾乎每個(gè)程序員都能開(kāi)發(fā)應(yīng)用程序APP鱼炒,全世界的APP數(shù)不勝數(shù),也就沒(méi)辦法嚴(yán)格控制以確保APP代碼不會(huì)導(dǎo)致死機(jī)蝌借。

但是操作系統(tǒng)就少很多昔瞧,而且都是比較大型公司編寫(xiě)的,也經(jīng)過(guò)了很多的嚴(yán)格測(cè)試菩佑,相對(duì)而言就比較可控买雾。

所以匹舞,計(jì)算機(jī)的CPU規(guī)定扔枫,“我只信賴(lài)操作系統(tǒng)的代碼蛹磺,不信賴(lài)應(yīng)用程序的代碼。如果應(yīng)用程序代碼云小時(shí)候遇到問(wèn)題瞧哟,操作系統(tǒng)你可以停止它混巧。”

于是勤揩,遵照CPU的規(guī)則咧党,Kernel核心代碼就運(yùn)行在最高權(quán)限的核心模式下(Kernel mode),而應(yīng)用程序代碼就只能運(yùn)行在權(quán)限比較低的用戶(hù)模式下(User mode)陨亡。

Kernel mode是具有最高權(quán)限的模式傍衡,也叫做管理員模式(Supervisor mode)。

內(nèi)核的作用

內(nèi)核有什么作用负蠕?或者我們說(shuō)操作系統(tǒng)提供什么功能蛙埂,起什么作用?

首先遮糖,要直接控制CPU和內(nèi)存绣的,我們暫且稱(chēng)為關(guān)鍵功能。

我們都知道計(jì)算機(jī)可以同時(shí)運(yùn)行很多軟件做很多事,這叫做多進(jìn)程(Multi-process)或者多任務(wù)(Multi-tasking)被辑,那么操作系統(tǒng)就要能夠?qū)崿F(xiàn)多個(gè)任務(wù)的管理和安排,還要負(fù)責(zé)多個(gè)任務(wù)之間的協(xié)作通信敬惦。一般的盼理,主要包含:

  • Virtual memory,將內(nèi)存虛擬化以供應(yīng)用程序使用俄删。
  • Task Schedules宏怔,任務(wù)排程。
  • IPC畴椰,Inter-process communication臊诊,進(jìn)程間通信。

其次斜脂,要實(shí)現(xiàn)基本的功能服務(wù)抓艳,我們暫且稱(chēng)為服務(wù)功能。

應(yīng)用程序可以調(diào)用這些服務(wù)來(lái)實(shí)現(xiàn)各種功能帚戳,比較基礎(chǔ)的操作系統(tǒng)服務(wù)有:

  • File System玷或,文件系統(tǒng),保存和讀取文件片任。
  • Network偏友,網(wǎng)絡(luò)服務(wù),讓?xiě)?yīng)用程序可以聯(lián)網(wǎng)对供。
  • Graphic位他,圖形服務(wù),提供屏幕上顯示圖形的能力产场。
  • GUI鹅髓,界面服務(wù),提供界面工具按鈕顯示京景。

當(dāng)然還有很多其他的迈勋,這里就不一一列舉了。

另外醋粟,要能夠支援更多硬件設(shè)備靡菇,我們暫且稱(chēng)為設(shè)備驅(qū)動(dòng)。

比如增加了一個(gè)攝像頭米愿,一個(gè)光線(xiàn)傳感器厦凤,操作系統(tǒng)要確保這些設(shè)備能夠被應(yīng)用程序使用起來(lái)才行。其實(shí)就是要對(duì)各種硬件的驅(qū)動(dòng)進(jìn)行管理育苟,就是Device driver設(shè)備啟動(dòng)服務(wù)较鼓。

微內(nèi)核與宏內(nèi)核 Microkernel & Monolithic Kernel

宏內(nèi)核也叫大內(nèi)核。宏內(nèi)核與微內(nèi)核的區(qū)別其實(shí)就是大內(nèi)核與小內(nèi)核的區(qū)別。

怎么劃分博烂?

Microkernel微內(nèi)核只包含關(guān)鍵功能Virtual memory香椎、Task Schedules和IPC,遵循“能多小就要多小”的設(shè)計(jì)原則禽篱。

Monolithic kernel則包含上面介紹的操作系統(tǒng)需要的全部功能畜伐。

其實(shí),無(wú)論微內(nèi)核系統(tǒng)或者宏內(nèi)核系統(tǒng)躺率,它們差不多都要提供那么多的功能玛界,誰(shuí)也少不了太多。所以?xún)烧呖此剖谴笮〉膮^(qū)別或者是kernel代碼的區(qū)別悼吱,但本質(zhì)上卻是把哪些功能放在了kernel mode慎框,把哪些功能放在user mode的區(qū)別。

從維基百科給出的這張圖上明顯可以看出兩者的區(qū)別后添。

優(yōu)劣對(duì)比

如果從歷史發(fā)展和現(xiàn)狀來(lái)對(duì)比笨枯,幾十年操作系統(tǒng)的發(fā)展結(jié)果早已清晰表明:宏內(nèi)核獲得了絕對(duì)性的勝利。

因?yàn)楫?dāng)前我們使用的主流操作系統(tǒng)遇西,包括Windows猎醇、Android、iOS努溃、macOS硫嘶、Linux等等,都是宏內(nèi)核操作系統(tǒng)或者說(shuō)都是基于宏內(nèi)核架構(gòu)創(chuàng)建起來(lái)的梧税。

但是我們也應(yīng)該注意到以下幾點(diǎn):

  • 微內(nèi)核也起源非常之早沦疾,可以追溯到1970年前后,一直以來(lái)是和宏內(nèi)核同步發(fā)展的第队。
  • 目前的主流操作系統(tǒng)早已經(jīng)不是當(dāng)年純粹的宏內(nèi)核架構(gòu)了哮塞,而是廣泛吸取微內(nèi)核架構(gòu)的優(yōu)點(diǎn)而后揉合而成的混合內(nèi)核Hybrid kernel。
  • 當(dāng)今宏內(nèi)核架構(gòu)遇到了越來(lái)越多的困難和挑戰(zhàn)凳谦,而微內(nèi)核的優(yōu)勢(shì)似乎越來(lái)越明顯忆畅,尤其是谷歌下一代操作系統(tǒng)Fuchsia['fju??] 還是華為未來(lái)的鴻蒙OS,都瞄準(zhǔn)了微內(nèi)核架構(gòu)尸执。

微內(nèi)核為什么半個(gè)世紀(jì)沒(méi)有獲得成功家凯?
這里有很多原因,這里只是其中可能的幾條:

  • 性能問(wèn)題如失。Kernel mode和User mode之間的切換更加耗時(shí)绊诲,比起把各種功能都打包在一起的宏內(nèi)核,微內(nèi)核需要太多的切換褪贵,這直接導(dǎo)致性能底下掂之。當(dāng)然現(xiàn)在無(wú)論是算法改進(jìn)還是CPU支持都有了很大的進(jìn)步抗俄,基本上可以說(shuō)現(xiàn)在已經(jīng)不是大問(wèn)題了。
  • 極致原則世舰。微內(nèi)核一直努力遵循“內(nèi)核應(yīng)該極小化”的原則(minimality)动雹,這讓很多微內(nèi)核研究者和開(kāi)發(fā)者收到了束縛,在時(shí)代允許的硬件環(huán)境下難以對(duì)性能進(jìn)行有效優(yōu)化跟压。
  • 缺乏大企業(yè)支持胰蝠。當(dāng)然這也和微內(nèi)核當(dāng)初性能不佳有關(guān)。

那么微內(nèi)核的優(yōu)勢(shì)在哪里裆馒?

  • 易于維護(hù)和升級(jí)。把眾多的服務(wù)功能和設(shè)備驅(qū)動(dòng)從內(nèi)核代碼中分離出來(lái)丐怯,如果只需要對(duì)某些功能進(jìn)行改進(jìn)喷好,這樣無(wú)論是改代碼還是增加新功能,都不用去變動(dòng)原來(lái)的核心代碼读跷,當(dāng)然效率高梗搅。
  • 系統(tǒng)更加穩(wěn)定。只要微內(nèi)核的關(guān)鍵功能代碼不出問(wèn)題效览,系統(tǒng)就不會(huì)崩潰无切。比如說(shuō)如果文件服務(wù)代碼運(yùn)行時(shí)候出了問(wèn)題,宏內(nèi)核因?yàn)槲募?wù)代碼是放在kernel mode的丐枉,直接就系統(tǒng)崩潰藍(lán)屏了哆键。而微內(nèi)核的文件服務(wù)代碼是放在user mode的,只要運(yùn)行在kernel mode的代碼直接把文件服務(wù)功能強(qiáng)行停止然后重啟就可以繼續(xù)使用了瘦锹,系統(tǒng)不會(huì)藍(lán)屏籍嘹。
  • 系統(tǒng)更加安全。微內(nèi)核除了把額外的功能劃出kernel mode之外弯院,還改變了任務(wù)之間的權(quán)限管理模式辱士,它并不能像宏內(nèi)核那樣直接給用戶(hù)安裝的APP授權(quán)訪(fǎng)問(wèn)關(guān)鍵功能和各種服務(wù)、驅(qū)動(dòng)听绳,而是依賴(lài)于不斷的傳遞帶有授權(quán)信息的handle對(duì)象來(lái)實(shí)現(xiàn)授權(quán)颂碘,這雖然很繁瑣,但安全性無(wú)疑要比宏內(nèi)核高很多椅挣。
  • 系統(tǒng)更加可定制头岔。宏內(nèi)核把所有驅(qū)動(dòng)和服務(wù)都打包在內(nèi)核里難以拆分,如果需要開(kāi)發(fā)一個(gè)不需要網(wǎng)絡(luò)功能服務(wù)的操作系統(tǒng)就比較麻煩了鼠证。而微內(nèi)核中各種服務(wù)都是單獨(dú)的切油,直接去掉很容易。這對(duì)當(dāng)前越來(lái)越多樣化的小型智能硬件操作系統(tǒng)的開(kāi)發(fā)非常有用名惩。
  • 分布式計(jì)算澎胡。因?yàn)槲?nèi)核把各種服務(wù)和驅(qū)動(dòng)都單獨(dú)開(kāi)來(lái),這就允許讓各種系統(tǒng)服務(wù)運(yùn)行在不同的芯片、不同電腦上面攻谁,讓很多臺(tái)計(jì)算機(jī)一起來(lái)運(yùn)行同一個(gè)操作系統(tǒng)稚伍,這對(duì)分布式計(jì)算和云計(jì)算提供了更多可能。

在windows2000之前戚宦,比如windows98或者windowsMe个曙,文件服務(wù)、網(wǎng)絡(luò)服務(wù)等等這些功能都是打包放在kernel mode中運(yùn)行的受楼,只要其中一個(gè)服務(wù)出問(wèn)題就直接藍(lán)屏垦搬。后來(lái)Window把很多服務(wù)功能都從核心中移出來(lái),所以Windows7之后藍(lán)屏就明顯少了很多艳汽。

更多內(nèi)容

蘋(píng)果的操作系統(tǒng)是不是微內(nèi)核猴贰?

不是。Mac OS X是基于NeXT公司1985年至1999年開(kāi)發(fā)的NeXTSTEP系統(tǒng)開(kāi)發(fā)的河狐,NeXTSTEP是基于Mach的米绕,雖然Mach一般認(rèn)為是微內(nèi)核架構(gòu),但NeXTSTEP的核心是基于自研XNU的Darwin系統(tǒng)馋艺,這是一種Hybrid kernel混合內(nèi)核架構(gòu)栅干,它揉合了Mach和自研的設(shè)備驅(qū)動(dòng)、輸入輸出等模塊捐祠,即使只說(shuō)這個(gè)Mach碱鳞,也是卡內(nèi)基梅隆大學(xué)基于BSD研發(fā)的包含了文件系統(tǒng)的宏內(nèi)核版本。
所以說(shuō)踱蛀,當(dāng)今蘋(píng)果的iOS劫笙、macOS等操作系統(tǒng)都是起源于混合內(nèi)核架構(gòu),不是微內(nèi)核星岗,也不是純粹的宏內(nèi)核填大。

Exokernel外核

外核更小,比微內(nèi)核還要小俏橘。外核的目標(biāo)是讓?xiě)?yīng)用程序獲得最多的控制硬件的自由允华,就是讓開(kāi)發(fā)者對(duì)硬件控制更深,以便于開(kāi)發(fā)出性能更好的應(yīng)用程序寥掐。

在外內(nèi)核的基礎(chǔ)之上靴寂,應(yīng)用程序Program和庫(kù)文件Lib一起直接實(shí)現(xiàn)應(yīng)用程序+操作系統(tǒng)的功能,稱(chēng)之為庫(kù)LibOS召耘,它直接以最高權(quán)限運(yùn)行百炬,不存在kernel mode和user mode的區(qū)別,也去除了所有的冗余污它,體積小剖踊,性能強(qiáng)庶弃。

如果我們把應(yīng)用程序program和庫(kù)lib再深一步聯(lián)合打包成操作系統(tǒng),那么它甚至可以脫離外核而直接運(yùn)行在物理硬件設(shè)備上德澈,或者通過(guò)hypervisor超級(jí)管理員程序來(lái)激活運(yùn)行歇攻,那么這樣的系統(tǒng)我們叫做Unikernel。

可載入核心模塊Loadable kernel module

為了減輕kernel內(nèi)容梆造,很多宏內(nèi)核操作系統(tǒng)(windows缴守、安卓等)直接把某些功能服務(wù)移到核心外面,只在需要使用的時(shí)候再加載進(jìn)來(lái)镇辉,這些模塊就稱(chēng)作可載入核心模塊屡穗。
當(dāng)前大部分類(lèi)Unix操作系統(tǒng)(Unix-like)和微軟操作系統(tǒng)都支持可載入核心模塊。

保護(hù)環(huán)Protection ring

這里是指計(jì)算機(jī)CPU芯片在運(yùn)行代碼時(shí)候的權(quán)限控制機(jī)制忽肛。kernel核心代碼運(yùn)行在最高權(quán)限村砂,Applications應(yīng)用程序代碼運(yùn)行在最低權(quán)限。

BSD操作系統(tǒng) Berkeley Software Distribution

由伯克利大學(xué)研發(fā)和管理的一個(gè)基于Unix的系統(tǒng)麻裁,開(kāi)始于大約1970年代箍镜。蘋(píng)果操作系統(tǒng)都起源于BSD系統(tǒng)源祈,微軟也借用了BSD部分代碼煎源。

Unix操作系統(tǒng)

1970年代,AT&T公司的貝爾實(shí)驗(yàn)室Bell lib研發(fā)的一款多任務(wù)香缺、多用戶(hù)操作系統(tǒng)手销。可以說(shuō)是鼻祖級(jí)別的操作系統(tǒng)图张,數(shù)十年派生出了數(shù)十種操作系統(tǒng)锋拖,包含Linux、Android等祸轮。
雖然蘋(píng)果操作系統(tǒng)也是派生自Unix兽埃,但是也源于喬布斯1985年離開(kāi)蘋(píng)果創(chuàng)辦的NeXT公司的操作系統(tǒng),而NeXT操作系統(tǒng)Darwin的最核心部分是基于BSD改進(jìn)的XNU适袜,有趣的是XNU的意思是X is Not Unix柄错。

Hypervisor超級(jí)管理員

這是運(yùn)行在CPU上權(quán)限最高程序,相對(duì)于操作系統(tǒng)上最高權(quán)限的管理員Supervisor來(lái)說(shuō)苦酱,Hypervisor更加厲害售貌,它比操作系統(tǒng)級(jí)別還高,甚至用來(lái)啟動(dòng)操作系統(tǒng)疫萤。

比較雜亂颂跨,有待整理


歡迎關(guān)注我的專(zhuān)欄( つ??ω??)つ【人工智能通識(shí)】


每個(gè)人的智能新時(shí)代

如果您發(fā)現(xiàn)文章錯(cuò)誤,請(qǐng)不吝留言指正扯饶;
如果您覺(jué)得有用恒削,請(qǐng)點(diǎn)喜歡池颈;
如果您覺(jué)得很有用,歡迎轉(zhuǎn)載~


END

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蔓同,一起剝皮案震驚了整個(gè)濱河市饶辙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌斑粱,老刑警劉巖弃揽,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異则北,居然都是意外死亡矿微,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)尚揣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)涌矢,“玉大人,你說(shuō)我怎么就攤上這事快骗∧缺樱” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵方篮,是天一觀(guān)的道長(zhǎng)名秀。 經(jīng)常有香客問(wèn)我,道長(zhǎng)藕溅,這世上最難降的妖魔是什么匕得? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮巾表,結(jié)果婚禮上汁掠,老公的妹妹穿的比我還像新娘。我一直安慰自己集币,他們只是感情好考阱,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著鞠苟,像睡著了一般乞榨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上偶妖,一...
    開(kāi)封第一講書(shū)人閱讀 49,764評(píng)論 1 290
  • 那天姜凄,我揣著相機(jī)與錄音,去河邊找鬼趾访。 笑死态秧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扼鞋。 我是一名探鬼主播申鱼,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼愤诱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了捐友?” 一聲冷哼從身側(cè)響起淫半,我...
    開(kāi)封第一講書(shū)人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎匣砖,沒(méi)想到半個(gè)月后科吭,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡猴鲫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年对人,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拂共。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡牺弄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宜狐,到底是詐尸還是另有隱情势告,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布抚恒,位于F島的核電站咱台,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏柑爸。R本人自食惡果不足惜吵护,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一盒音、第九天 我趴在偏房一處隱蔽的房頂上張望表鳍。 院中可真熱鬧,春花似錦祥诽、人聲如沸譬圣。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)厘熟。三九已至,卻和暖如春维哈,著一層夾襖步出監(jiān)牢的瞬間绳姨,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工阔挠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留飘庄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓购撼,卻偏偏與公主長(zhǎng)得像跪削,于是被迫代替她去往敵國(guó)和親谴仙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容