云晶Cloud:解說已有的操作系統(tǒng)(二)
接著上期為大家繼續(xù)講解操作系統(tǒng)。
03操作系統(tǒng)分類
按照家族分類
如下為Unic的家族史:

從上圖可以看到,Unix(Unics)實(shí)際上是大部分操作系統(tǒng)的祖先。很多操作系統(tǒng)都是從Unix演變而來。
Unix家族演進(jìn)圖

從上圖可以看出:
目前非常著名的蘋果公司的PC領(lǐng)域的操作系統(tǒng)MAC OS以及移動(dòng)端操作系統(tǒng)IOS均是由Unix系統(tǒng)改寫而來。
谷歌的Android操作系統(tǒng),ChromeOS 均是由Linux系統(tǒng)修改而來。
Ubuntu 更是Linux系統(tǒng)的社區(qū)開源版本。
還有在車載系統(tǒng)中,號(hào)稱是實(shí)現(xiàn)很強(qiáng)的微內(nèi)核系統(tǒng)QNX均來自Unix系統(tǒng)。
按照內(nèi)核類型分類

微內(nèi)核/宏內(nèi)核的概念
操作系統(tǒng)最核心的功能,任務(wù)調(diào)度、內(nèi)存和設(shè)備的抽象和管理。然后,為了我們方便使用,才集成進(jìn)了系統(tǒng)服務(wù)、驅(qū)動(dòng)程序、文件系統(tǒng)之類的東西。
我們平時(shí)運(yùn)行的程序,每個(gè)程序各運(yùn)行幾十毫秒,大家來回輪換,這樣子我們看起來這些程序好像在“同時(shí)”運(yùn)行一樣。
應(yīng)用程序之所以能夠被操作系統(tǒng)通過時(shí)間片的方式調(diào)度,是因?yàn)閷?duì)于CPU而言,普通的應(yīng)用程序和操作系統(tǒng)的內(nèi)核運(yùn)行在不同的特權(quán)級(jí)別上,我們叫作rings。應(yīng)用程序運(yùn)行在Ring 3,而內(nèi)核運(yùn)行在Ring 0。
隨著科技的發(fā)展,操作系統(tǒng)變得越來越復(fù)雜,內(nèi)核里面的東西也越來越多。
人們也就開始考慮是否應(yīng)該改變?cè)械募軜?gòu),從而提高操作系統(tǒng)的性能和穩(wěn)定性,主要是精簡內(nèi)核降低開發(fā)的復(fù)雜度,還有就是把各種程序盡可能隔離,保證一個(gè)程序的崩潰不會(huì)牽連到其他的程序。
上世紀(jì)80年代人們討論得火熱的微內(nèi)核就是這樣一種架構(gòu)。
幾種內(nèi)核架構(gòu)

理論設(shè)計(jì),放到現(xiàn)實(shí)的工程中都是要做折中的。所以有混合內(nèi)核的出現(xiàn),綜合宏內(nèi)核和微內(nèi)核的不同優(yōu)點(diǎn),在兩個(gè)方案中折衷設(shè)計(jì)。OS X和Windows就屬于這類。
微內(nèi)核的優(yōu)勢(shì)
微內(nèi)核考慮在操作系統(tǒng)的內(nèi)核中保留操作系統(tǒng)最基本的功能,也就是任務(wù)調(diào)度、內(nèi)存和設(shè)備的抽象和管理。
其他的功能全部從內(nèi)核移出,放到用戶態(tài)中實(shí)現(xiàn),并以C/S模式對(duì)其他應(yīng)用程序提供服務(wù)。
微內(nèi)核帶來的好處主要是穩(wěn)定性和實(shí)時(shí)性,即內(nèi)核中模塊數(shù)量少了,結(jié)構(gòu)更精簡更優(yōu)化了,能夠影響內(nèi)核的程序和驅(qū)動(dòng)也減少了,穩(wěn)定性隨之提高;另外就是實(shí)時(shí)性,內(nèi)核精簡了以后,響應(yīng)的時(shí)延的減小。
并不是精簡了以后會(huì)使得性能提升,微內(nèi)核使得內(nèi)核中只有最關(guān)鍵的部分,其他模塊和系統(tǒng)功能全部作為獨(dú)立模塊放到用戶態(tài)空間中運(yùn)行,功能分散了以后增加了通信的成本。
不過微內(nèi)核操作系統(tǒng)的特點(diǎn)尤其適合工控系統(tǒng)的控制,而且設(shè)計(jì)簡單,在小型的系統(tǒng)中有不少的應(yīng)用。另外亦有不少實(shí)時(shí)操作系統(tǒng)是使用微內(nèi)核架構(gòu)設(shè)計(jì)。
總結(jié)幾句
Worse is better.
計(jì)算機(jī)領(lǐng)域往往經(jīng)過完善設(shè)計(jì)的產(chǎn)品,最終結(jié)果都是失敗的。
像Unix贏了Multics一樣。
Lisp(通用高級(jí)計(jì)算機(jī)程序語言)并沒有C語言流行。
OSI的愿景最后由TCP/IP協(xié)議完成。
相信,國內(nèi)號(hào)稱真正的云上操作系統(tǒng),最終是由云晶-新一代云上操作系統(tǒng)來完成(開玩笑)。
微軟的WPF,把MVVM設(shè)計(jì)模式運(yùn)用的淋漓盡致,設(shè)計(jì)的如此純粹,并沒有流行起來。
?? ? ?......
宏內(nèi)核就是一座華麗的宮殿。
微內(nèi)核就是一座精致的小別墅。
Linux為什么不采用微內(nèi)核或者混合內(nèi)核模式?
理論上完美的問題在實(shí)踐過程中都會(huì)遇到各種不得不妥協(xié)的折衷。因?yàn)槟阒圃斐龅臇|西是要部署到實(shí)際生活生產(chǎn)環(huán)境中使用。不是要一個(gè)只在實(shí)驗(yàn)室中看起來很完美的作品。
微內(nèi)核的高度模塊化,自然要付出成本的,那就是增加代碼交互的冗余與效率的損耗,而這恰恰是很大的問題。
Linus可以把這些亂七八糟的東西,全都一個(gè)人寫了,一遍寫對(duì)了,還能穩(wěn)定跑起來,無bug,而我們這些渣渣,做不到,只能依靠保護(hù)模式來防止幾百個(gè)工程師寫出來的那一坨垃圾,動(dòng)不動(dòng)藍(lán)屏,自己弱,卻質(zhì)疑天才的做法,和明知自己弱,還要模仿天才的做法,都是認(rèn)不清現(xiàn)實(shí)的表現(xiàn)。
Linux本身在實(shí)現(xiàn)之初僅僅作為Linus一個(gè)業(yè)余項(xiàng)目而存在。而Monolithic Kernel由于不需要處理消息隊(duì)列等等原因從實(shí)現(xiàn)角度來說比Micro Kernel更為方便。
linus 這人對(duì)微內(nèi)核不感興趣,這個(gè)大家都知道,只要有他在一天,kernel就不會(huì)考慮微內(nèi)核化。他是一名實(shí)用主義者,他說過一句名言:Talk is cheap. Show me the code。
Linus: "Gaah.Guys,this whole ARM thing is a fcking pain in the ass.” 推動(dòng)了DeviceTree.(題外話,*霸氣)。這就是Linus這個(gè)人的張揚(yáng)與灑脫的一面。大家可以仔細(xì)體會(huì)。
按照實(shí)時(shí)性分類
按照實(shí)時(shí)性,將操作系統(tǒng)分為硬實(shí)時(shí)和軟實(shí)時(shí)。那么什么優(yōu)勢(shì)硬實(shí)時(shí)和軟實(shí)時(shí),其實(shí)就是通過中斷的響應(yīng)時(shí)間來衡量的。
衡量實(shí)時(shí)性的標(biāo)準(zhǔn):
中斷的相應(yīng)時(shí)間。中斷的相應(yīng)時(shí)間==關(guān)中斷的最長時(shí)間+保護(hù)CPU內(nèi)部寄存器的時(shí)間+進(jìn)入中斷服務(wù)函數(shù)的執(zhí)行時(shí)間+開始執(zhí)行中斷服務(wù)例程(ISR)的第一條指令時(shí)間
任務(wù)的切換時(shí)間,就是從當(dāng)前任務(wù)掛起,到要切換的任務(wù)開始運(yùn)行的時(shí)間。
一個(gè)硬實(shí)時(shí)操作系統(tǒng)面對(duì)變化的負(fù)載(從最小到最壞的情況)時(shí),必須確定性地保證滿足時(shí)間要求。跟CPU強(qiáng)悍無關(guān),必須時(shí)間具有確定性。
實(shí)時(shí)操作系統(tǒng)的代表
以下表中,顯示了實(shí)時(shí)操作系統(tǒng)的實(shí)時(shí)性對(duì)比

Linux為實(shí)時(shí)操作系統(tǒng)的代表
Vxworks(Wind River)為硬實(shí)時(shí)操作系統(tǒng)的代表。