鴻蒙開(kāi)始于 2012 年,雖一開(kāi)始定位于物聯(lián)網(wǎng)方向,但到如今,已經(jīng)發(fā)展為一款可兼容 Android 應(yīng)用的跨平臺(tái)操作系統(tǒng). 最新的 2.0 的官方描述是: HarmonyOS 是新一代的智能終端操作系統(tǒng),為不同設(shè)備的智能化、互聯(lián)與協(xié)同提供了統(tǒng)一的語(yǔ)言。帶來(lái)簡(jiǎn)潔,流暢,連續(xù),安全可靠的全場(chǎng)景交互體驗(yàn)。
Unix 版權(quán)之爭(zhēng)
要徹底了解微內(nèi)核,還得先說(shuō)到Minix(上篇有提到)和Darwin(macOS,IOS 的內(nèi)核),都是UnixLike(類 Unix)操作系統(tǒng).
上文我們了解到, 1969年AT&T公司(貝爾實(shí)驗(yàn)室)開(kāi)發(fā)Unics, 1973年用 C語(yǔ)言重寫(xiě)后正式命名為 Unix, 后來(lái)AT&T意識(shí)到了Unix的商業(yè)價(jià)值, 在1979 年發(fā)布 Unix Version 7之后, 不再將Unix源碼授權(quán)給學(xué)術(shù)機(jī)構(gòu),并對(duì)之前的Unix及其變種聲明了著作權(quán)權(quán)利. 而這期間, BSD 其實(shí)已經(jīng)有了很大發(fā)展了.
BSD 全稱 Berkeley Software Distribution, 也被稱為伯克利Unix或Berkeley Unix, 1970年代由伯克利加州大學(xué)的學(xué)生Bill Joy(比爾·喬伊)開(kāi)創(chuàng), BSD許可證非常地寬松,因此BSD常被當(dāng)作工作站級(jí)別的Unix系統(tǒng),也被用來(lái)代表其派生出的各種包. 許多1980年代成立的計(jì)算機(jī)公司都從BSD中獲益.
1974 年第一個(gè)Berkeley的 Unix 系統(tǒng)被安裝在迷你電腦(PDP-11)上,計(jì)算機(jī)科學(xué)系便開(kāi)始將其作為擴(kuò)展研究.而后發(fā)展為 1BSD,2BSD,3BSD 直到4.4BSD,這其中 4.3BSD 及之前版本都混合了專屬的AT&T UNIX代碼,也就需要當(dāng)時(shí)非常昂貴的AT&T 的許可證.
一些其他組織對(duì)單獨(dú)的網(wǎng)絡(luò)版感興趣,完全獨(dú)立于AT&T,不受許可證的支配. 1989年6月,相應(yīng)的Net/1 誕生,沒(méi)有 AT&T 許可證,但是發(fā)展到 Net/2 就被 AT&T 在 1992 正式提起訴訟了,這樁訴訟直到 1994 年 1 月了結(jié),到 6 月,4.4BSD以兩種形式發(fā)布:可自由再發(fā)布的4.4BSD-Lite,不包含AT&T源碼;另有4.4BSD-Encumbered,遵照AT&T的許可證。1995 年開(kāi)發(fā)團(tuán)隊(duì)解散; 之后幾種基于4.4BSD的包,如FreeBSD、OpenBSD和NetBSD都基于4.4BSD-Lite 繼續(xù)維護(hù).
微內(nèi)核架構(gòu)項(xiàng)目的發(fā)展
上篇中已經(jīng)了解到,Unix 版權(quán)之爭(zhēng),也導(dǎo)致 Minix 和 linux 得以開(kāi)發(fā)和發(fā)展起來(lái),而這期間其實(shí)還有一個(gè)叫 Mach 的項(xiàng)目也得到了發(fā)展,由卡內(nèi)基梅隆大學(xué)從 1985 年開(kāi)發(fā)并運(yùn)行到 1994 年, 到 Mach3.0 版本結(jié)束, 也就是 Unix 版權(quán)之爭(zhēng)愈演愈烈的那幾年. Mach的開(kāi)發(fā)就是為了取代BSD的傳統(tǒng)UNIX內(nèi)核出現(xiàn)的, 所以就成了之后的許多新操作系統(tǒng)的設(shè)計(jì)基礎(chǔ)。Mach之所以突出,是因?yàn)槠涫壮奈⒑诵慕Y(jié)構(gòu). Linux 的參考者M(jìn)inix 在 3.x 也被采用微內(nèi)核架構(gòu)進(jìn)行了重寫(xiě).與微內(nèi)核對(duì)應(yīng)的就是宏內(nèi)核,大名鼎鼎的 Linux 就是使用的宏內(nèi)核架構(gòu),上篇對(duì) Linux 有所介紹,這里就不多說(shuō)了, 對(duì)微內(nèi)核繼承最好的便是喬布斯的蘋(píng)果電腦的 MacOS和蘋(píng)果手機(jī)的 iOS 了.
現(xiàn)在我大致了解一下 MacOS 的發(fā)展歷程.
1985 年喬布斯離開(kāi)蘋(píng)果電腦后創(chuàng)立的公司叫 NeXT, NeXT 公司開(kāi)發(fā)的操作系統(tǒng)叫NeXTStep,這套系統(tǒng)是以Mach和BSD為基礎(chǔ),以O(shè)bjective-C作為原生語(yǔ)言,具有很先進(jìn)的GUI(Graphical User Interface, 圖形用戶界面).
1989 年 9 月 NeXTStep1.0 推出,直到 3.3 版本, 除了主要用于自家的電腦,以及后面也可以運(yùn)行在 IBM,Sun 等部分平臺(tái)上.
1997 年 2月蘋(píng)果公司將 NeXT 買下,也就是喬布斯又回歸之后,NeXTStep 就成為了 MacOSX 的基礎(chǔ). 這里還可順便提一下, 世界上第一臺(tái) WWW Server(即萬(wàn)維網(wǎng)服務(wù)器)是姆·伯納斯-李在一臺(tái) NeXT個(gè)人電腦上架出來(lái)的,第一個(gè)網(wǎng)絡(luò)瀏覽器(直接叫 WorldWideWeb)也是以 NeXTStep 為操作系統(tǒng)所開(kāi)發(fā)出來(lái)的.
macOS 在 2011 年之前稱 MacOS X,2012 年至 2015 年稱 OS X, 到 2016 年 6 月更名為 macOS, 以便與蘋(píng)果其他操作系統(tǒng) iOS、watchOS 和 tvOS 保持統(tǒng)一的命名風(fēng)格。最新版本 macOS Big Sur 已于 2020 年 6 月 23 日發(fā)布.
macOS 包含兩個(gè)主要的部分:核心名為 Darwin,是以 BSD 源代碼和 Mach 微核心為基礎(chǔ),由蘋(píng)果公司于 2002 年 4 月開(kāi)源,以和獨(dú)立開(kāi)發(fā)者社區(qū)合作開(kāi)發(fā);及一個(gè)由蘋(píng)果公司開(kāi)發(fā),名為 Aqua 的專利的圖形用戶界面.
所以,本質(zhì)上來(lái)看, macOS(iOS,watchOS,tvOS)是由開(kāi)源的 Darwin +自家閉源的相關(guān) GUI 服務(wù)組成, 這和各家的安卓系統(tǒng)是由開(kāi)源的 AOSP+各自相應(yīng)的 UI(GMS,MIUI 等) 服務(wù)組成是一樣的模式,到這里,也就更能理解 HarmonyOS 也被處理成 OpenHarmony +相應(yīng)的 HMS 服務(wù)的模式了吧.
操作系統(tǒng)和內(nèi)核
操作系統(tǒng)(Operation System, 縮寫(xiě):OS) 是管理計(jì)算機(jī)硬件與軟件資源的系統(tǒng)軟件,位于底層硬件與用戶之間,是兩者溝通的橋梁。負(fù)責(zé)管理與配置內(nèi)存、決定系統(tǒng)資源供需的優(yōu)先次序、控制輸入與輸出設(shè)備、操作網(wǎng)絡(luò)與管理文件系統(tǒng)等基本事務(wù)。操作系統(tǒng)也提供一個(gè)讓用戶與系統(tǒng)交互的操作界面, 有命令行界面和圖形界面兩種, 用戶可以通過(guò)此界面, 輸入命令, 操作系統(tǒng)則對(duì)命令進(jìn)行解釋, 驅(qū)動(dòng)硬件設(shè)備, 實(shí)現(xiàn)用戶要求。以現(xiàn)代標(biāo)準(zhǔn)而言, 一個(gè)標(biāo)準(zhǔn)PC的操作系統(tǒng)應(yīng)該提供以下的功能:
- 進(jìn)程管理(Processing management)和 線程管理(Thread management)
- 內(nèi)存管理(Memory management)
- 驅(qū)動(dòng)程序(Device drivers)
- 文件系統(tǒng)(File system)
- 網(wǎng)絡(luò)通信(Networking)
- 安全機(jī)制(Security)
- 用戶界面(User interface)
對(duì)于完全的普通用而言, 最直觀的是界面(桌面)系統(tǒng),以及上層的應(yīng)用程序, 其他的資源處理等等則都是被系統(tǒng)封裝的黑盒. 就讀者閱讀這篇文章而言, 是在今日頭條 App 或者瀏覽器上進(jìn)行的,這些都是應(yīng)用程序,而你所用的手機(jī)后電腦則是硬件集合, 此三者的關(guān)系如圖:

應(yīng)用系統(tǒng)硬件關(guān)系
再來(lái)看看內(nèi)核的定義: “內(nèi)核”指的是一個(gè)提供硬件抽象層、磁盤及文件系統(tǒng)控制、多任務(wù)等功能的系統(tǒng)軟件。內(nèi)核是操作系統(tǒng)最基本的部分。它是為眾多應(yīng)用程序提供對(duì)計(jì)算機(jī)硬件的安全訪問(wèn)的一部分軟件,這種訪問(wèn)是有限的,并且內(nèi)核決定一個(gè)程序在什么時(shí)候?qū)δ巢糠钟布僮鞫嚅L(zhǎng)時(shí)間。直接對(duì)硬件操作是非常復(fù)雜的,所以內(nèi)核通常提供一種硬件抽象的方法來(lái)完成這些操作。硬件抽象隱藏了復(fù)雜性,為應(yīng)用軟件和硬件提供了一套簡(jiǎn)潔,統(tǒng)一的接口,使程序設(shè)計(jì)更為簡(jiǎn)單。
簡(jiǎn)單來(lái)說(shuō),內(nèi)核是一個(gè)操作系統(tǒng)的核心。它負(fù)責(zé)管理系統(tǒng)的進(jìn)程、內(nèi)存、設(shè)備驅(qū)動(dòng)程序、文件和網(wǎng)絡(luò)系統(tǒng)等等,決定著系統(tǒng)的性能和穩(wěn)定性。是連接應(yīng)用程序和硬件的橋梁。

內(nèi)核示意圖
我們?cè)賮?lái)看看內(nèi)核的分類, 其實(shí)主要是有宏內(nèi)核(也叫單內(nèi)核)和微內(nèi)核, 在此基礎(chǔ)上,還有混合內(nèi)核,外內(nèi)核等分類, 混合內(nèi)核可以理解是為了追求性能,對(duì)宏內(nèi)核和微內(nèi)核做了一些折中,如MacOSX,windowsNT,但都宣稱采用微核心架構(gòu); 外內(nèi)核是一種比較極端的設(shè)計(jì)方法,其理念是讓用戶程序的設(shè)計(jì)者來(lái)決定硬件接口的設(shè)計(jì),這個(gè)也就不多聊了.
我們就重點(diǎn)來(lái)了解一下宏內(nèi)核和微內(nèi)核是什么?
宏內(nèi)核
宏內(nèi)核(Monolithic kernel)架構(gòu)的特性是整個(gè)內(nèi)核程序是一個(gè)單一二進(jìn)制可執(zhí)行文件,在內(nèi)核態(tài)以監(jiān)管者模式(Supervisor Mode)來(lái)運(yùn)行。是這樣, 就像我們上面提到的內(nèi)存,文件,驅(qū)動(dòng),IO 等等,每個(gè)功能被當(dāng)做一個(gè)模塊,全部集合在一起運(yùn)行在內(nèi)核進(jìn)程中, 這些模塊直接的交互是直接通過(guò)方法(函數(shù))調(diào)用. 如下圖:

宏內(nèi)核示意圖
微內(nèi)核
微內(nèi)核(Microkernel)架構(gòu)的特性就是盡可能精簡(jiǎn)的精簡(jiǎn)程序,以實(shí)現(xiàn)一個(gè)操作系統(tǒng)所必要的最基本功能,包括線程調(diào)度,進(jìn)程管理,中斷處理. 其他的模塊都移出內(nèi)核,這就使得內(nèi)核中最核心的功能,設(shè)計(jì)上變的更簡(jiǎn)單。讓服務(wù)各自獨(dú)立,可以減少耦合度,易于實(shí)現(xiàn)與調(diào)試,增加可移植性。這樣某單一組件失效,既不影響內(nèi)核也不會(huì)影響其他模塊, 內(nèi)核只需要重啟這個(gè)這個(gè)模塊。同時(shí),也可以視需要抽換或新增某些服務(wù)進(jìn)程,這樣整個(gè)系統(tǒng)更加穩(wěn)定和富有彈性.如圖:

微內(nèi)核示意圖
在微內(nèi)核架構(gòu)下,還創(chuàng)建了一套進(jìn)程間通信,通過(guò)消息列隊(duì)傳遞的這種機(jī)制來(lái)讓各模塊進(jìn)程間互換消息,調(diào)用服務(wù),以及完成同步。采用主從式架構(gòu),使得它在分布式系統(tǒng)中有特別的優(yōu)勢(shì),因?yàn)檫h(yuǎn)程系統(tǒng)與本地進(jìn)程間,可以采用同一套進(jìn)程間通信機(jī)制。
微內(nèi)核的優(yōu)勢(shì)
總結(jié)一下,宏內(nèi)核是模塊集成在一起,而微內(nèi)核是模塊間分離。對(duì)比如下:
|
宏內(nèi)核 |
微內(nèi)核 |
通信效率 |
搞(函數(shù)調(diào)用) |
低(進(jìn)程通信) |
穩(wěn)定性 |
低(模塊集成一損俱損) |
高(模塊獨(dú)立互不影響) |
擴(kuò)展性 |
低(模塊集成一損俱損) |
高(模塊獨(dú)立互不影響) |
代碼量 |
多(需實(shí)現(xiàn)所有模塊) |
少(只實(shí)現(xiàn)核心機(jī)能) |
從前面描述中我們也知道, 微內(nèi)核出現(xiàn)的較晚(1985年 Mach 首倡),實(shí)際上在后續(xù)的發(fā)展中宏內(nèi)核和微內(nèi)核相互間都有借鑒, 也就是為什么會(huì)有混合內(nèi)核,超微內(nèi)核等等, 細(xì)究的話,也同樣有著業(yè)界的互噴現(xiàn)象.這里我們不深究,懂得即可; 我們繼續(xù)來(lái)看微內(nèi)核, 其天生在分布式系統(tǒng)中有優(yōu)勢(shì); 分布式系統(tǒng)是指一組電腦,透過(guò)網(wǎng)絡(luò)相互連接傳遞消息通信后并協(xié)調(diào)它們的行為而形成的系統(tǒng)。所以到此刻我也知道華為 HarmonyOS 采用微內(nèi)核架構(gòu)也是一種必然了. 我們還知道它的內(nèi)核層還有一個(gè) LiteOS, 就是一個(gè)輕量級(jí)的物聯(lián)網(wǎng)操作系統(tǒng),最小內(nèi)核尺寸甚至僅為6KB,具備快速啟動(dòng)、低功耗等優(yōu)勢(shì). 下面這個(gè)是鴻蒙的系統(tǒng)架構(gòu)圖:

總結(jié)
至此,我們也就基本明白了, 鴻蒙操作系統(tǒng)的內(nèi)核層是怎么回事了. 加上上一篇,我們也就基本明白了, 關(guān)于鴻蒙里的 Linux內(nèi)核, 微內(nèi)核,分布式,LiteOS 以及如何兼容安卓等核心問(wèn)題.
其實(shí)本來(lái)上對(duì)于任何一件事物, 我們既要了解它的發(fā)展歷程,從而也去思考它的未來(lái)期許, 對(duì)于那些無(wú)腦噴,我是真有點(diǎn)不能理解的,只能說(shuō)明要么腦瓜確實(shí)有問(wèn)題要么動(dòng)機(jī)有問(wèn)題.
比如, 說(shuō)是有的程序員也來(lái)噴, 我特別好奇, 打開(kāi)鴻蒙的開(kāi)發(fā)者網(wǎng)站, 比安卓那邊明顯的多了一個(gè)設(shè)備開(kāi)發(fā)的入口, 只要多想一下, 其實(shí)不難想到這個(gè)系統(tǒng)的思路完全有了不同的變化, 否則安卓為什么不這樣做呢?甚至我們?cè)缇椭懒斯雀柽€把精力分到了 ChromeOS 和 FuchsiaOS 這其他的操作系統(tǒng)上呢?還去秀你的什么命令,去向外行證明什么套殼之類的噴罵?難道是真的不明白就算是一個(gè)上層 App 也有架構(gòu)演進(jìn)的過(guò)程嗎?真的不明白安卓作為開(kāi)源項(xiàng)目的 AOSP 代表著什么嗎? 如果僅僅是套個(gè)殼,工信部那幫人真的是啥都不懂嗎?如果僅僅是復(fù)制修改,谷歌想要追責(zé)就沒(méi)辦法了嗎?谷歌是怎么封殺的阿里云OS?還是說(shuō)華為的那幫工程師全是沒(méi)臉沒(méi)皮,開(kāi)源出來(lái)等著這種人來(lái)噴嗎?還是說(shuō)...
上面這一堆疑問(wèn)其實(shí)也引出了另外一個(gè)話題, 就是鴻蒙的多設(shè)備鏈接的物聯(lián)網(wǎng),1+8+N 的生態(tài). 從這兩篇系統(tǒng)內(nèi)核的介紹中, 我們也了解了操作系統(tǒng)的發(fā)展本身也是一個(gè)場(chǎng)景需求變化的演進(jìn)發(fā)展的過(guò)程.從早期大型工業(yè)電腦系統(tǒng),到個(gè)人桌面系統(tǒng),再到手機(jī)便攜系統(tǒng),如今的萬(wàn)物互聯(lián)HarmonyOS. 事實(shí)上鴻蒙不是第一個(gè)物聯(lián)網(wǎng)操作系統(tǒng),就想剛剛提到了阿里云OS, 除了谷歌封殺, 也同樣有人認(rèn)為是它出生太早了,所以對(duì)于這樣的一個(gè)新系統(tǒng)而已,其實(shí)最要關(guān)注的應(yīng)該是它的生態(tài)問(wèn)題,這才是決定性的.