自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

還不知道鴻蒙OS底層實(shí)現(xiàn)?老司機(jī)帶你走進(jìn)微內(nèi)核

原創(chuàng) 精選
系統(tǒng) 其他OS
由于HarmonyOS需要對(duì)不同的硬件資源進(jìn)行適配,因此需要內(nèi)核具備靈活性、可擴(kuò)展性,可靠性和可移植性,同時(shí)還需要對(duì)分布式系統(tǒng)的支持,因此微內(nèi)核的應(yīng)用就成了HarmonyOS的首選。今天就帶大家了解微內(nèi)核,以及它在HarmonyOS中的應(yīng)用。

作者 | 崔皓

審校 | 孫淑娟

眾所周知,HarmonyOS具備分布式軟總線、分布式數(shù)據(jù)管理和分布式安全三大核心能力。多種設(shè)備之間能夠?qū)崿F(xiàn)硬件互助、資源共享,依賴的關(guān)鍵技術(shù)。同時(shí)還實(shí)現(xiàn)了包括分布式軟總線、分布式設(shè)備虛擬化、分布式數(shù)據(jù)管理、分布式任務(wù)調(diào)度等功能。在被這些眼花繚亂的功能的環(huán)繞之下,我們往往忽視了鴻蒙的內(nèi)核技術(shù),HarmonyOS采用多內(nèi)核設(shè)計(jì),支持針對(duì)不同資源受限設(shè)備選用適合的OS內(nèi)核。

由于HarmonyOS需要對(duì)不同的硬件資源進(jìn)行適配,因此需要內(nèi)核具備靈活性、可擴(kuò)展性,可靠性和可移植性,同時(shí)還需要對(duì)分布式系統(tǒng)的支持,因此微內(nèi)核的應(yīng)用就成了HarmonyOS的首選。今天就帶大家了解微內(nèi)核,以及它在HarmonyOS中的應(yīng)用。

1.鴻蒙OS技術(shù)架構(gòu) 

和其他操作系統(tǒng)類似,鴻蒙OS整體遵從分層設(shè)計(jì),如圖1所示,從下往上依次為內(nèi)核層、系統(tǒng)服務(wù)層、框架層和應(yīng)用層。系統(tǒng)功能按照“系統(tǒng)>子系統(tǒng)>功能/模塊”逐級(jí)展開。在多設(shè)備部署場(chǎng)景下,支持根據(jù)實(shí)際需求裁剪某些非必要的子系統(tǒng)或功能/模塊。

圖片

圖1 鴻蒙OS技術(shù)架構(gòu)

如圖1所示,我們可以看到鴻蒙OS的整體架構(gòu),而本文我們需要聚焦內(nèi)核層的架構(gòu)體系。內(nèi)核層由內(nèi)核子系統(tǒng)和驅(qū)動(dòng)子系統(tǒng)組成。

內(nèi)核子系統(tǒng):鴻蒙OS采用多內(nèi)核設(shè)計(jì),支持針對(duì)不同資源受限設(shè)備選用適合的OS內(nèi)核。內(nèi)核抽象層(Kernel AbstractLayer,KAL)通過屏蔽多內(nèi)核差異,對(duì)上層提供基礎(chǔ)的內(nèi)核能力,包括進(jìn)程/線程管理、內(nèi)存管理、文件系統(tǒng)、網(wǎng)絡(luò)管理和外設(shè)管理等。

驅(qū)動(dòng)子系統(tǒng):硬件驅(qū)動(dòng)框架(HDF)是鴻蒙OS硬件生態(tài)開放的基礎(chǔ),提供統(tǒng)一的外設(shè)訪問能力、驅(qū)動(dòng)開發(fā)及管理框架。

而在內(nèi)核子系統(tǒng)中包含了LiteOS的內(nèi)核就是今天的主角,也就是我們要提到的微內(nèi)核,為什么鴻蒙OS在具備Linux Kernel的情況下還要引入LiteOS的微內(nèi)核技術(shù)作為補(bǔ)充呢?接下來就讓我們一起走進(jìn)微內(nèi)核的世界。

2.宏內(nèi)核與微內(nèi)核 

在描述微內(nèi)核之前,要了解什么是內(nèi)核。大家都知道計(jì)算機(jī)是由諸多硬件組成的,包括:CPU、內(nèi)存、磁盤、網(wǎng)卡、顯示器、鍵盤、鼠標(biāo)等等。為了能夠管理和組織這些硬件資源,我們創(chuàng)造操作系統(tǒng),而內(nèi)核就是操作系統(tǒng)中的核心部分。

就好像我們常用的Windows操作系統(tǒng),Unix以及Linux操作系統(tǒng),它們都存在內(nèi)核。

而目前市面上、絕大多數(shù)操作系統(tǒng)都是宏內(nèi)核,其典型代表就是Linux。

宏內(nèi)核中的“宏”字表現(xiàn)為,將內(nèi)核服務(wù)作為整體,所有服務(wù)都“伸手即得”。也就是將控制計(jì)算機(jī)的各個(gè)模塊,都聚合在內(nèi)核中方便管理。如下圖2所示,CPU調(diào)度、文件系統(tǒng)、內(nèi)存管理、應(yīng)用管理調(diào)度、中斷處理、設(shè)備驅(qū)動(dòng)都放在內(nèi)核中。如果應(yīng)用程序需要申請(qǐng)內(nèi)存,內(nèi)核直接使用“內(nèi)存管理”給應(yīng)用分配內(nèi)存,使用“應(yīng)用管理進(jìn)程調(diào)度”給應(yīng)用分配進(jìn)程,沒有額外的消耗。

圖片

圖2 宏內(nèi)核

宏內(nèi)核的這種處事方式就好像一個(gè)公司將所有的職能部門都拉到一個(gè)辦公室辦公,這個(gè)辦公室有好多張桌子每個(gè)桌子上面都有各個(gè)職能部門的辦事員,操作系統(tǒng)要處理什么事情都通過宏內(nèi)核這個(gè)大辦公室來解決,因此解決問題是很高效的。但是問題也很明顯,隨著系統(tǒng)的不斷發(fā)展,內(nèi)核中會(huì)加入各種不同的模塊,就好像大辦公室需要更多的桌子,從而坐下更多的人。內(nèi)核中模塊不斷增大,就需要更高的硬件資源來支持,同時(shí)模塊的增多也帶來了系統(tǒng)復(fù)雜性的增加,提高了系統(tǒng)崩潰的風(fēng)險(xiǎn),例如內(nèi)核中有一個(gè)模塊掛了會(huì)導(dǎo)致整個(gè)內(nèi)核的崩潰。

為了解決宏內(nèi)核所面臨的問題,就推出了微內(nèi)核的概念, 微內(nèi)核是內(nèi)核的一種精簡形式。它將與宏內(nèi)核集成在一起的系統(tǒng)服務(wù)分離出去,讓這些服務(wù)模塊變成按需加載,也就是把這些服務(wù)變成可選項(xiàng)而非必選項(xiàng),如果需要這些服務(wù)就作為內(nèi)核的一種擴(kuò)展。如果需要對(duì)系統(tǒng)內(nèi)核進(jìn)行升級(jí),只要用新模塊替換舊模塊,或者在原有服務(wù)的基礎(chǔ)擴(kuò)展新的服務(wù)。這樣就不需要改變整個(gè)操作系統(tǒng)的內(nèi)核。

圖片

圖3 宏內(nèi)核與微內(nèi)核的比較

如圖3所示,微內(nèi)核與宏內(nèi)核的區(qū)別在藍(lán)色的部分,微內(nèi)核將宏內(nèi)核藍(lán)色部分的系統(tǒng)服務(wù)進(jìn)行拆解,將一些重要的服務(wù)依舊留在內(nèi)核中,例如:進(jìn)程間通信、虛擬內(nèi)存、進(jìn)程調(diào)度等。而將其他服務(wù)放到了內(nèi)核之外,這些服務(wù)直接在用戶態(tài)運(yùn)行,內(nèi)核態(tài)的一些核心服務(wù)會(huì)和這些被剝離的服務(wù)進(jìn)行交互,保證進(jìn)程間的通信。同時(shí),這些用戶態(tài)的服務(wù)會(huì)直接服務(wù)于應(yīng)用程序。

如果將圖3進(jìn)行化簡就得到了圖4, 如圖4所示,在宏內(nèi)核的時(shí)代所有的服務(wù)都在內(nèi)核中,內(nèi)核中的服務(wù)為應(yīng)用提供服務(wù),而到了微內(nèi)核時(shí)代,將一些服務(wù)從內(nèi)核移到了外邊,這些被移出去的服務(wù)依舊與內(nèi)核中的核心服務(wù)保持聯(lián)系,同時(shí)為應(yīng)用服務(wù)。

微內(nèi)核結(jié)構(gòu)使用一個(gè)水平分層代替?zhèn)鹘y(tǒng)的縱向分層,所有微內(nèi)核之外的操作系統(tǒng)構(gòu)件都被當(dāng)作服務(wù)進(jìn)程來實(shí)現(xiàn),它們可以通過微內(nèi)核傳遞消息來實(shí)現(xiàn)相互之間的交互。因此,微內(nèi)核還可以驗(yàn)證消息并授權(quán)訪問硬件,而且微內(nèi)核還執(zhí)行保護(hù)功能,阻止非法的信息等。

例如,應(yīng)用程序如果要打開一個(gè)文件,則它發(fā)送消息給文件系統(tǒng)服務(wù),如果他想創(chuàng)建一個(gè)進(jìn)程或線程,則它發(fā)送消息給進(jìn)程服務(wù)進(jìn)程。每個(gè)服務(wù)進(jìn)程之間可以相互通信,并可以調(diào)用微內(nèi)核中的功能。

圖片

圖4 宏內(nèi)核與微內(nèi)核簡圖

按照?qǐng)D4的操作,微內(nèi)核包含的服務(wù)數(shù)會(huì)減少,實(shí)現(xiàn)服務(wù)的代碼量也會(huì)有明顯的下降。微內(nèi)核盡可能簡化內(nèi)核,將更多的用戶服務(wù)程序放置在內(nèi)核之外完成。內(nèi)核僅僅放置最核心以及經(jīng)常性需要使用到的程序代碼。

如果還是用辦公室來打比方,微內(nèi)核將大辦公室縮小了,將其中一些辦公桌移到了辦公室外邊,在大辦公室之外設(shè)置了多個(gè)小辦公室安置這些辦公桌。在大辦公室內(nèi)只安放重要的核心的服務(wù),用來管理和協(xié)調(diào)小辦公室的工作。

鴻蒙OS在發(fā)布會(huì)上強(qiáng)調(diào)了多個(gè)特性用來強(qiáng)調(diào)鴻蒙OS作為一個(gè)操作系統(tǒng)而言本身的突破和優(yōu)勢(shì)在哪里,實(shí)際上在使用微內(nèi)核以后鴻蒙OS具備下面四點(diǎn)能力的提升:

  • 采用分布式架構(gòu),可以實(shí)現(xiàn)跨終端的能力互助共享。
  • 低時(shí)延和高性能IPC帶來高流暢的使用體驗(yàn)。
  • 基于微內(nèi)核技術(shù)的可信執(zhí)行環(huán)境,通過形式化方法提升了內(nèi)核安全,全面提升全場(chǎng)景終端設(shè)備的安全能力。
  • 鴻蒙OS可支撐開發(fā)者實(shí)現(xiàn)一次開發(fā)、多端部署,最終實(shí)現(xiàn)跨終端生態(tài)共享。

3.微內(nèi)核的優(yōu)點(diǎn) 

上面我們介紹了什么是微內(nèi)核,以及宏內(nèi)核與微內(nèi)核的區(qū)別,下面來看看微內(nèi)核具備哪些優(yōu)點(diǎn)。

  • 提供一致的接口:進(jìn)程不用區(qū)分內(nèi)核服務(wù)還是用戶服務(wù),并且都是通過消息傳遞;
  • 可擴(kuò)展性:當(dāng)需要增加新的服務(wù)時(shí),只需要增加新的服務(wù)進(jìn)程,而不需要修改內(nèi)核;
  • 靈活性:可以定制服務(wù)進(jìn)程,例如分布式系統(tǒng)需要增加安全性相關(guān)的服務(wù)進(jìn)程;
  • 可移植性:大部分處理器專用代碼在微內(nèi)核中,如果需要移植到另一個(gè)處理器上時(shí),只需要修改少量的代碼;
  • 可靠性:足夠小的微內(nèi)核能夠進(jìn)行充分的測(cè)試,從而提供更穩(wěn)定的代碼。只提供少量的API和交互方式,減少組件之間的相互影響;
  • 分布式系統(tǒng)的支持:如果一個(gè)客戶往一個(gè)服務(wù)進(jìn)程發(fā)送消息時(shí),該消息包含請(qǐng)求服務(wù)的標(biāo)識(shí)符。在分布式系統(tǒng)被配置為所有進(jìn)程和服務(wù)都具有唯一的標(biāo)識(shí)符,微內(nèi)核會(huì)為這類標(biāo)識(shí)符提供單獨(dú)的系統(tǒng)映像,讓進(jìn)程消息發(fā)送透明化;
  • 適用于面向?qū)ο笤O(shè)計(jì):微內(nèi)核設(shè)計(jì)和操作系統(tǒng)模塊化的開發(fā)都可以借助面向?qū)ο蟮脑?。例如,一種方式是構(gòu)造組件,組件間通過組建接口交互,它們可以通過搭積木的方式構(gòu)件軟件。

4.LiteOS 的內(nèi)核模塊 

前面提到了鴻蒙OS使用了微內(nèi)核提升操作系統(tǒng)的靈活性、可擴(kuò)展性,可靠性和可移植性,為分布式系統(tǒng)的設(shè)計(jì)提供支撐。接下來就來看看LiteOS 的內(nèi)核是如何實(shí)現(xiàn)微內(nèi)核的。在文章的第一個(gè)部分就提到了在鴻蒙OS的內(nèi)核子系統(tǒng)中就實(shí)現(xiàn)了LiteOS,LiteOS是華為面向物聯(lián)網(wǎng)領(lǐng)域開發(fā)的一個(gè)基于實(shí)時(shí)內(nèi)核的輕量級(jí)操作系統(tǒng)。它支持任務(wù)管理、內(nèi)存管理、時(shí)間管理、通信機(jī)制、中斷管理、隊(duì)列管理、事件管理、定時(shí)器等操作系統(tǒng)基礎(chǔ)組件,更好地支持低功耗場(chǎng)景,支持tickless機(jī)制,支持定時(shí)器對(duì)齊。

這里就展開說一下LiteOS四大核心模塊。

任務(wù)管理

任務(wù)是競(jìng)爭系統(tǒng)資源的最小運(yùn)行單元。LiteOS支持多任務(wù)運(yùn)行,一個(gè)任務(wù)就表示一個(gè)線程,任務(wù)之間可以進(jìn)行切換和通信。LiteOS的任務(wù)管理模塊提供任務(wù)創(chuàng)建、刪除、延時(shí)、掛起和恢復(fù)、更改任務(wù)優(yōu)先級(jí)、鎖定任務(wù)調(diào)度和解鎖任務(wù)調(diào)度、根據(jù)任務(wù)控制塊查詢?nèi)蝿?wù)ID、根據(jù)ID查詢?nèi)蝿?wù)控制塊信息等功能。LiteOS使用搶占式調(diào)度內(nèi)核,高優(yōu)先級(jí)的任務(wù)可以打斷低優(yōu)先級(jí)任務(wù),同優(yōu)先級(jí)任務(wù)會(huì)進(jìn)行時(shí)間片輪轉(zhuǎn)調(diào)度。同時(shí),每一個(gè)任務(wù)都含有一個(gè)任務(wù)控制塊(TCB),它包含了任務(wù)的所有狀態(tài)和運(yùn)行信息。T具體包括:上下文棧指針(stack pointer)、任務(wù)狀態(tài)(包括就緒、運(yùn)行、阻塞、退出4種狀態(tài))、任務(wù)棧大小(任務(wù)棧里保存著局部變量、寄存器、函數(shù)參數(shù)、函數(shù)返回地址等)、任務(wù)優(yōu)先級(jí)、任務(wù)ID、任務(wù)名等信息。

在任務(wù)服務(wù)初始化時(shí),會(huì)先申請(qǐng)TCB需要的內(nèi)存空間。任務(wù)初始化完成,則系統(tǒng)對(duì)TCB內(nèi)容進(jìn)行初始化。用戶創(chuàng)建任務(wù)時(shí),系統(tǒng)會(huì)將任務(wù)棧進(jìn)行初始化,預(yù)置上下文。此外,系統(tǒng)還會(huì)將“任務(wù)入口函數(shù)”地址放在相應(yīng)位置。

內(nèi)存管理

LiteOS的內(nèi)存管理模塊管理系統(tǒng)的內(nèi)存資源,主要包括內(nèi)存的初始化、分配及釋放。

其目的是管理用戶和OS對(duì)內(nèi)存的使用,使內(nèi)存的利用率和使用效率達(dá)到最優(yōu),同時(shí)最大限度地解決系統(tǒng)的內(nèi)存碎片問題。LiteOS的內(nèi)存管理分為動(dòng)態(tài)內(nèi)存管理和靜態(tài)內(nèi)存管理。

動(dòng)態(tài)內(nèi)存管理

在動(dòng)態(tài)內(nèi)存池中分配用戶指定大小的內(nèi)存塊。

優(yōu)點(diǎn):按需分配。缺點(diǎn):可能出現(xiàn)碎片。

靜態(tài)內(nèi)存管理

在靜態(tài)內(nèi)存池中分配用戶固定(預(yù)設(shè)配置)大小的內(nèi)存塊。優(yōu)點(diǎn):分配和釋放效率高,無碎片。缺點(diǎn):不能按需申請(qǐng)。

中斷管理

在LiteOS中,用戶可以通過中斷申請(qǐng),注冊(cè)中斷處理程序,并且指定CPU響應(yīng)中斷請(qǐng)求時(shí)所執(zhí)行的具體操作。避免CPU把大量時(shí)間耗費(fèi)在等待、查詢外設(shè)狀態(tài)的操作上,因此將大大提高系統(tǒng)實(shí)時(shí)性以及執(zhí)行效率。按照硬件可以對(duì)中斷劃分為三類:設(shè)備、中斷控制器、CPU本身。

  • 設(shè)備:發(fā)起中斷的源,當(dāng)設(shè)備需要請(qǐng)求CPU時(shí),產(chǎn)生一個(gè)中斷信號(hào),該信號(hào)連接至中斷控制器。
  • 中斷控制器:中斷控制器是CPU眾多外設(shè)中的一個(gè),它一方面接收其它外設(shè)中斷引腳的輸入,另一方面,它會(huì)發(fā)出中斷信號(hào)給CPU??梢酝ㄟ^對(duì)中斷控制器編程實(shí)現(xiàn)對(duì)中斷源的優(yōu)先級(jí)、觸發(fā)方式、打開和關(guān)閉源等設(shè)置操作。
  • CPU:CPU會(huì)響應(yīng)中斷源的請(qǐng)求,中斷當(dāng)前正在執(zhí)行的任務(wù),轉(zhuǎn)而執(zhí)行中斷處理程序。

信號(hào)量管理

信號(hào)量(Semaphore)是一種實(shí)現(xiàn)任務(wù)間通信的機(jī)制,可以用于任務(wù)之間同步或臨界資源的互斥訪問。

如圖5所示,信號(hào)量可以被任務(wù)線程獲取,不同的信號(hào)量通過信號(hào)量索引號(hào)來唯一確定,每個(gè)信號(hào)量都有一個(gè)計(jì)數(shù)值和任務(wù)隊(duì)列。通常信號(hào)量的計(jì)數(shù)值表示有效的資源數(shù),即剩下的可被占用的互斥資源數(shù)。當(dāng)任務(wù)申請(qǐng)(Pend)信號(hào)量時(shí),如果申請(qǐng)成功,則信號(hào)量的計(jì)數(shù)值遞減,如申請(qǐng)失敗,則掛起在該信號(hào)量的等待任務(wù)隊(duì)列上,一旦有任務(wù)釋放該信號(hào)量,則等待任務(wù)隊(duì)列中的任務(wù)被喚醒開始執(zhí)行。

圖片

圖 5 信號(hào)量運(yùn)作示意圖

上面提到了信號(hào)量的使用方式,由于它是對(duì)資源使用量的計(jì)數(shù)器,因此以下兩個(gè)場(chǎng)景經(jīng)常會(huì)出現(xiàn)信號(hào)量的身影。

  • 任務(wù)互斥:當(dāng)多個(gè)任務(wù)同時(shí)對(duì)一個(gè)臨界資源進(jìn)行訪問時(shí),會(huì)對(duì)這個(gè)資源維護(hù)一個(gè)信號(hào)量,初始值為1,當(dāng)有任務(wù)線程訪問時(shí)就將這個(gè)值減1,此時(shí)如果其他任務(wù)線程也訪問該資源會(huì)先檢查信號(hào)量,如果小于等于0就等待。當(dāng)之前的任務(wù)線程訪問完畢,釋放資源時(shí)會(huì)將信號(hào)量加1,此時(shí)其他任務(wù)線程就可以訪問該資源了。
  • 資源計(jì)數(shù):用于生產(chǎn)者與消費(fèi)者的場(chǎng)景可以通過信號(hào)量的遞增或者遞減來表示資源的狀態(tài)。

5.總結(jié) 

本文從鴻蒙OS的架構(gòu)特性入手,發(fā)現(xiàn)在內(nèi)核子系統(tǒng)中使用了LiteOS的微內(nèi)核架構(gòu),從而引出了微內(nèi)核在鴻蒙架構(gòu)中扮演的特殊角色。為了解釋什么是微內(nèi)核,先從操作系統(tǒng)內(nèi)核說起,接著介紹了常見的宏內(nèi)核將所有服務(wù)都集于一身,微內(nèi)核為了提升靈活性、可擴(kuò)展性,可靠性和可移植性,將一些非核心的服務(wù)從內(nèi)核中剝離,只留一些核心服務(wù)在內(nèi)核中減少了內(nèi)核的容量,降低了出錯(cuò)的風(fēng)險(xiǎn)。最后,又回到開始時(shí)介紹的LiteOS ,并介紹了它的四大核心模塊,包括:任務(wù)管理、內(nèi)存管理、中斷管理以及信號(hào)管理。

作者介紹

崔皓,51CTO社區(qū)編輯,資深架構(gòu)師,擁有18年的軟件開發(fā)和架構(gòu)經(jīng)驗(yàn),10年分布式架構(gòu)經(jīng)驗(yàn)。曾任惠普技術(shù)專家。樂于分享,撰寫了很多熱門技術(shù)文章,閱讀量超過60萬。《分布式架構(gòu)原理與實(shí)踐》作者。

責(zé)任編輯:武曉燕 來源: 51CTO技術(shù)棧
相關(guān)推薦

2016-07-22 17:55:07

云計(jì)算

2019-12-25 14:20:01

Zookeeper框架大數(shù)據(jù)

2022-09-19 18:32:22

函數(shù)編程語言

2018-09-02 15:43:56

Python代碼編程語言

2020-12-14 07:51:16

JS 技巧虛值

2022-07-17 06:53:24

微服務(wù)架構(gòu)

2017-03-17 15:10:52

微信消息撤回功能

2022-05-05 12:02:45

SCSS函數(shù)開發(fā)

2021-10-22 09:41:26

橋接模式設(shè)計(jì)

2010-03-12 09:15:28

Firefox新功能

2019-12-24 09:49:02

微軟英語瀏覽器

2022-04-15 07:51:12

off-heap堆外內(nèi)存JVM

2014-12-01 09:41:25

2021-02-03 08:24:32

JavaScript技巧經(jīng)驗(yàn)

2015-07-13 08:49:54

2020-10-28 08:06:09

Vue3框架數(shù)據(jù)

2021-03-18 14:02:56

iOS蘋果細(xì)節(jié)

2024-03-07 07:58:26

Web開發(fā)響應(yīng)媒體查詢工具

2018-07-10 11:33:58

計(jì)算器iPhone刪除
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)