偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

作者 | 崔皓

審校 | 孫淑娟

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

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

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

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

圖片

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

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

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

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

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

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

在描述微內(nèi)核之前,要了解什么是內(nèi)核。大家都知道計算機是由諸多硬件組成的,包括:CPU、內(nèi)存、磁盤、網(wǎng)卡、顯示器、鍵盤、鼠標等等。為了能夠管理和組織這些硬件資源,我們創(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ù)都“伸手即得”。也就是將控制計算機的各個模塊,都聚合在內(nèi)核中方便管理。如下圖2所示,CPU調(diào)度、文件系統(tǒng)、內(nèi)存管理、應(yīng)用管理調(diào)度、中斷處理、設(shè)備驅(qū)動都放在內(nèi)核中。如果應(yīng)用程序需要申請內(nèi)存,內(nèi)核直接使用“內(nèi)存管理”給應(yīng)用分配內(nèi)存,使用“應(yīng)用管理進程調(diào)度”給應(yīng)用分配進程,沒有額外的消耗。

圖片

圖2 宏內(nèi)核

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

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

圖片

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

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

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

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

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

圖片

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

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

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

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

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

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

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

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

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

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

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

任務(wù)管理

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

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

內(nèi)存管理

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

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

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

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

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

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

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

中斷管理

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

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

信號量管理

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

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

圖片

圖 5 信號量運作示意圖

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

  • 任務(wù)互斥:當(dāng)多個任務(wù)同時對一個臨界資源進行訪問時,會對這個資源維護一個信號量,初始值為1,當(dāng)有任務(wù)線程訪問時就將這個值減1,此時如果其他任務(wù)線程也訪問該資源會先檢查信號量,如果小于等于0就等待。當(dāng)之前的任務(wù)線程訪問完畢,釋放資源時會將信號量加1,此時其他任務(wù)線程就可以訪問該資源了。
  • 資源計數(shù):用于生產(chǎn)者與消費者的場景可以通過信號量的遞增或者遞減來表示資源的狀態(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)核為了提升靈活性、可擴展性,可靠性和可移植性,將一些非核心的服務(wù)從內(nèi)核中剝離,只留一些核心服務(wù)在內(nèi)核中減少了內(nèi)核的容量,降低了出錯的風(fēng)險。最后,又回到開始時介紹的LiteOS ,并介紹了它的四大核心模塊,包括:任務(wù)管理、內(nèi)存管理、中斷管理以及信號管理。

作者介紹

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

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

2016-07-22 17:55:07

云計算

2019-12-25 14:20:01

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

2022-09-19 18:32:22

函數(shù)編程語言

2022-05-05 12:02:45

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

2020-12-14 07:51:16

JS 技巧虛值

2018-09-02 15:43:56

Python代碼編程語言

2022-07-17 06:53:24

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

2017-03-17 15:10:52

微信消息撤回功能

2019-12-24 09:49:02

微軟英語瀏覽器

2010-03-12 09:15:28

Firefox新功能

2022-04-15 07:51:12

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

2021-10-22 09:41:26

橋接模式設(shè)計

2023-01-02 10:08:42

StampedLocAQS框架

2018-07-10 11:33:58

計算器iPhone刪除

2021-02-03 08:24:32

JavaScript技巧經(jīng)驗

2014-12-01 09:41:25

2015-07-13 08:49:54

2021-03-18 14:02:56

iOS蘋果細節(jié)

2020-10-28 08:06:09

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

2024-03-07 07:58:26

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

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