成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

OpenHarmony Release3.1版本啟動(dòng)子系統(tǒng)功能分析

系統(tǒng) OpenHarmony
本文就3.1版本的init啟動(dòng)子系統(tǒng)模塊,在啟動(dòng)引導(dǎo)系統(tǒng)服務(wù)方面進(jìn)行分析。本文檔是基于碼云上release3.1分支代碼進(jìn)行分析。

??想了解更多內(nèi)容,請(qǐng)?jiān)L問:??

??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??

??https://ost.51cto.com??

1、技術(shù)背景

OpenHarmony release3.1版本在2.0的基礎(chǔ)之上不僅增加了功能,而且各模塊組件的能力也有所增強(qiáng),本文就3.1版本的init啟動(dòng)子系統(tǒng)模塊,在啟動(dòng)引導(dǎo)系統(tǒng)服務(wù)方面進(jìn)行分析。本文檔是基于碼云上release3.1分支代碼進(jìn)行分析。

啟動(dòng)子系統(tǒng)負(fù)責(zé)整個(gè)系統(tǒng)各個(gè)進(jìn)程運(yùn)行時(shí)環(huán)境的構(gòu)建及進(jìn)程引導(dǎo),不同層級(jí)的進(jìn)程有著不同的運(yùn)行環(huán)境,運(yùn)行環(huán)境決定著系統(tǒng)進(jìn)程的設(shè)計(jì)。在增強(qiáng)啟動(dòng)子系統(tǒng)能力方面有以下方面:

  • 基礎(chǔ)能力增強(qiáng):進(jìn)程啟動(dòng)、回收機(jī)制增強(qiáng),維護(hù)命令統(tǒng)一以及插件化管理。
  • 并行啟動(dòng):最大化并行啟動(dòng),為依賴資源提供同步機(jī)制,運(yùn)行時(shí)進(jìn)行資源獲取。
  • 按需啟動(dòng):無訪問不啟動(dòng),減少常駐內(nèi)存。
  • 分組啟動(dòng):可對(duì)服務(wù)進(jìn)行靈活組裝,提供整機(jī)不同的啟動(dòng)級(jí)別能力。

2、Init啟動(dòng)功能概述

(1)基礎(chǔ)能力的增強(qiáng)

進(jìn)程啟動(dòng),支持進(jìn)程的selinux策略配置,擴(kuò)展AccessToken設(shè)置,支持綁核配置;進(jìn)程回收,支持進(jìn)程頻繁退出抑制機(jī)制;維護(hù)命令,統(tǒng)一init的維護(hù)命令,包括系統(tǒng)參數(shù)和進(jìn)程管理;插件化管理,init部件與周邊模塊關(guān)聯(lián)度高,通過插件化機(jī)制供其它模塊擴(kuò)展。

(2)進(jìn)程分組&并行啟動(dòng)

支持服務(wù)分組配置,如支持系統(tǒng)知名group,支持整機(jī)開機(jī)、重啟、關(guān)機(jī)、待機(jī)、充電等模式;支持服務(wù)依賴管理,支持并行啟動(dòng)依賴同步機(jī)制。

(3)按需啟動(dòng)

支持SA類進(jìn)程按需啟動(dòng),HDF類進(jìn)程按需啟動(dòng),socket類進(jìn)程的按需啟動(dòng);支持熱插拔事件驅(qū)動(dòng)進(jìn)程按需啟動(dòng);支持為按需啟動(dòng)定時(shí)啟動(dòng)、進(jìn)程代持fd等輔助功能。

3、系統(tǒng)能力增強(qiáng)點(diǎn)分析

(1)進(jìn)程啟動(dòng)能力增強(qiáng)

進(jìn)程啟動(dòng)時(shí),支持在配置文件中配置服務(wù)進(jìn)程的綁核、優(yōu)先級(jí)、selinux策略加載以及AccessToken信息。

配置服務(wù)進(jìn)程綁核能力

在服務(wù)的cfg配置文件中,配置綁核,例如param_watcher服務(wù)。系統(tǒng)啟動(dòng)之后通過taskset -p pid,查看服務(wù)綁核情況,例如 current affinity mask: 3,即表示param_watcher服務(wù)運(yùn)行在兩個(gè)cpu上切換。

“services” : [{
“name” : “param_watcher”,

“cpucore” : [0,1]
},

通過CJSON解析 cfg 文件,獲取屬性”cpucore”屬性值的數(shù)組,然后通過接口CPU_SET設(shè)置進(jìn)程的CPU。

在init,fork()服務(wù)子進(jìn)程時(shí)設(shè)置CPU綁核。

配置服務(wù)進(jìn)程優(yōu)先級(jí)

在服務(wù)cfg文件中配置進(jìn)程的優(yōu)先級(jí),例如appspawn.cfg中配置"importance" : -20,即設(shè)置appspawn的優(yōu)先級(jí)為-20。

     {
"services" : [{
"name" : "appspawn",
"path" : ["/system/bin/appspawn"],
"importance" : -20,
"uid" : "root",
"gid" : ["root"],
"start-mode" : "boot"
}
]

代碼中通過CJSON解析cfg文件中”importance”屬性,得到服務(wù)的優(yōu)先級(jí),同時(shí)通過SetImportantValue回調(diào)函數(shù)保存優(yōu)先級(jí)屬性。

在ServiceExec執(zhí)行進(jìn)程命令之前通過setpriority。

設(shè)置服務(wù)的優(yōu)先級(jí)。

服務(wù)的selinux策略加載

OpenHarmony正在不斷完善selinux安全策略,后面對(duì)于服務(wù)的管控會(huì)更加嚴(yán)格。Init啟動(dòng)在服務(wù)cfg文件中提供配置進(jìn)程的Selinux接口,例如updater_sa.cfg文件中配置。

“secon” : “u:r:updater_sa:s0”。
{
“services” : [{
“name” : “updater_sa”,
“path” : [/system/bin/sa_main”, /system/profile/updater_sa.xml”],
“uid” : “system”,
“gid” : [“system”, “shell”],
“secon” : “u:r:updater_sa:s0”
}
]
}

通過JSON解析cfg文件中"secon"屬性,獲取服務(wù)的selinux值。

在init初始時(shí),加載selinux LoadPolicy。

在init fork子進(jìn)程時(shí),通過SetSecon 設(shè)置服務(wù)的selinux。

配置服務(wù)進(jìn)程AccessToken屬性

在服務(wù)cfg文件中配置進(jìn)程的AccessToken,即cfg文件中配置。

“apl”: “xxx”,設(shè)置一串令牌。

通過JSON解析cfg文件中"apl"屬性,獲取服務(wù)的apl值。

在init fork 子進(jìn)程的時(shí)候設(shè)置進(jìn)程的AccessToken。

(2)進(jìn)程啟動(dòng)&回收能力增強(qiáng)

進(jìn)程的啟動(dòng)流程

init啟動(dòng)系統(tǒng)服務(wù)進(jìn)程時(shí)都是先fork再execv執(zhí)行目標(biāo)服務(wù)進(jìn)程而完成啟動(dòng)。Fork的流程又細(xì)分為

  • pre-fork:即服務(wù)進(jìn)程不需要真正的啟動(dòng),只是由init做好服務(wù)的準(zhǔn)備工作,服務(wù)被訪問時(shí)拉起服務(wù)。
  • fork:只要fork成功,init就接著啟動(dòng)下一個(gè)進(jìn)程,即使后面execv執(zhí)行失敗也忽略,最大承擔(dān)并行啟動(dòng)服務(wù)。
  • execv:fork完成之后需要execv執(zhí)行成功,才算服務(wù)啟動(dòng)完成。
  • service:在服務(wù)啟動(dòng)完成之后,通過setparameter 設(shè)置服務(wù)啟動(dòng)標(biāo)志"startup.service.ctl.serviceName" 為SERVICE_STARTED。

子進(jìn)程退出資源回收

init監(jiān)聽到任何子進(jìn)程退出都需要waitpid回收該進(jìn)程,避免出現(xiàn)僵尸進(jìn)程。

設(shè)置服務(wù)啟動(dòng)特殊模式

通過在服務(wù)的cfg文件中配置Once、Disabled、Critical屬性值設(shè)置服務(wù)啟動(dòng)的特殊方式。

  • Default:默認(rèn)情況下服務(wù)退出之后,init會(huì)再次拉起服務(wù)。
  • Once:服務(wù)是單次啟動(dòng)模式,退出之后init不再拉起。
  • Disabled:服務(wù)是被禁用的,退出后也不會(huì)拉起。
  • Critical:服務(wù)失敗后需要重新拉起,但是失敗N次之后,系統(tǒng)就會(huì)重啟,默認(rèn)是4次。

常駐服務(wù)進(jìn)程如果一直異常退出,為了避免頻繁嘗試?yán)鹪摲?wù),增加抑制機(jī)制,默認(rèn)3秒內(nèi)連續(xù)退出超過5次則不再自動(dòng)拉起該服務(wù)。

核心服務(wù)進(jìn)程如果一直異常退出,為了避免系統(tǒng)不可用,嘗試系統(tǒng)重啟;默認(rèn)20秒內(nèi)連續(xù)退出超過4次則不再自動(dòng)拉起該服務(wù)。

例如 “critical” : [1, 1, 60], 代表有critical attribute,同時(shí)60秒內(nèi)重啟1次,就系統(tǒng)重啟。通過GetCritical函數(shù)解析critical 屬性,通過CalculateCrashTime函數(shù)判斷是否需要重啟服務(wù),或是reboot系統(tǒng)。

(3)提供整機(jī)狀態(tài)服務(wù)

整機(jī)狀態(tài)

各系統(tǒng)服務(wù)進(jìn)程啟動(dòng)后,還需要相應(yīng)整機(jī)提供的重啟、關(guān)機(jī)等請(qǐng)求(對(duì)應(yīng)整機(jī)狀態(tài)變化能夠?qū)M(jìn)程進(jìn)行相應(yīng)處理stop、suspend、freeze等)。

  • 重啟、shutdown關(guān)機(jī):關(guān)閉服務(wù)進(jìn)程,通過stop命令關(guān)閉服務(wù)。
  • Suspend關(guān)機(jī):STR帶電低功耗關(guān)機(jī),可快速開機(jī),服務(wù)可選擇的退出或清理資源。
  • Freeze關(guān)機(jī):STD系統(tǒng)快照寫到Disk,可完全掉電并快速開機(jī)。

通過reboot命令,設(shè)置 "startup.device.ctl"參數(shù)給外界提供當(dāng)前整機(jī)的狀態(tài),系統(tǒng)服務(wù)進(jìn)程可通過ParameterClient的watch機(jī)制監(jiān)聽整機(jī)的狀態(tài)變化,處理自己的狀態(tài)。

Reboot 命令:

服務(wù)可以通過start/stop來啟動(dòng)停止

通過以下命令可以啟動(dòng)或者停止服務(wù)。

start_service servicename --start service
stop_service servicename --stop service
service_control start servicename --start service
service_control stop servicename --stop service

最終通過SystemSetParameter(“ohos.ctl.start”, nameValue)啟動(dòng)服務(wù),其中nameValue是服務(wù)名+服務(wù)的參數(shù)組合數(shù)組。

(4)按需啟動(dòng)

SA進(jìn)程按需啟動(dòng)

需要按需啟動(dòng)的SA服務(wù),通過在cfg文件配置”dynamic” : true,設(shè)置此SA服務(wù)為按需啟動(dòng),即init在start service的時(shí)候解析到此屬性,不直接拉起服務(wù);而是通過client端觸發(fā)samgr拉起服務(wù)。

動(dòng)態(tài)加載系統(tǒng)服務(wù)進(jìn)程及SystemAbility, 系統(tǒng)進(jìn)程無需開機(jī)啟動(dòng),而是在SystemAbility被訪問的時(shí)候按需拉起,并加載指定SystemAbility。繼承SystemAbilityLoadCallbackStub類,并覆寫OnLoadSystemAbilitySuccess(int32_t systemAbilityId, const sptr& remoteObject)、OnLoadSystemAbilityFail(int32_t systemAbilityId)方法。

調(diào)用samgr提供的動(dòng)態(tài)加載接口LoadSystemAbility(int32_t systemAbilityId, const sptr& callback)。

Samgr通過調(diào)用init提供的ServiceControlWithExtra接口,拉起服務(wù)。

UHDF進(jìn)程按需啟動(dòng)

同上SA服務(wù)的按需啟動(dòng)的分析,只是在HUDF服務(wù)中調(diào)用ServiceControlWithExtra接口,拉起服務(wù)。

socket進(jìn)程按需啟動(dòng)

init在pre-fork階段為socket類進(jìn)程創(chuàng)建好socket,init中監(jiān)聽創(chuàng)建好的socket上的網(wǎng)絡(luò)事件,socket上有報(bào)文事件后,init拉起socket進(jìn)程進(jìn)行報(bào)文處理。

socket進(jìn)程無報(bào)文處理后,可以自動(dòng)退出,退出后init回收該子進(jìn)程并重新監(jiān)聽socket網(wǎng)絡(luò)數(shù)據(jù)。

在服務(wù)cfg文件中添加”ondemand” : true 配置,設(shè)置socket服務(wù)為按需啟動(dòng)。

在fork 子進(jìn)程的時(shí)候,判斷服務(wù)是ondemand的,則創(chuàng)建socket監(jiān)聽。

通過回調(diào)函數(shù)ProcessWatchEvent_處理socket按需啟動(dòng)的事件。

熱插拔服務(wù)進(jìn)程按需啟動(dòng)

配置ueventd.cfg配置文件中設(shè)備節(jié)點(diǎn) 屬性,例如,/dev/binder 屬性配置為 ohos.dev.binder,當(dāng)設(shè)備節(jié)點(diǎn)被創(chuàng)建好,param設(shè)置ohos.dev.binder屬性值為added。

在相應(yīng)服務(wù)的cfg文件中,配置”job”為condition,如下:

“condition” : “ohos.dev.binder=added”

即當(dāng)條件滿足時(shí)觸發(fā)服務(wù)拉起。

定時(shí)拉起&fd代持

定時(shí)拉起:服務(wù)進(jìn)程在退出前可根據(jù)業(yè)務(wù)需要預(yù)約下次啟動(dòng)的時(shí)間。

fd代持:按需啟動(dòng)進(jìn)程可以保持退出前的fd狀態(tài)句柄不丟失。按需啟動(dòng)進(jìn)程退出前可發(fā)fd發(fā)送給init代持,再次啟動(dòng)后再獲取fd。

在服務(wù)的cfg配置"timer_start" : 6 ,設(shè)置服務(wù)6秒后拉起。通過LE_CreateTimer創(chuàng)建定時(shí)器,定時(shí)時(shí)間到達(dá)時(shí),觸發(fā)回調(diào)函數(shù),拉起服務(wù)。

創(chuàng)建fdhold的socket,注冊(cè)event loop回調(diào)函數(shù)ProcessFdHoldEvent監(jiān)聽。

(3)并行啟動(dòng)及依賴管理

begetd啟動(dòng)分三個(gè)階段,pre-init和init階段完成公共依賴部分;后續(xù)所有的服務(wù)都是并行化啟動(dòng)。服務(wù)啟動(dòng)的依賴包括Job和Service。

Job

所有的Job由init特權(quán)進(jìn)程完成,可包括:設(shè)置全局環(huán)境變量,設(shè)置特權(quán)/proc, /sys節(jié)點(diǎn)參數(shù)等。

Service

Service依賴的前置條件可在啟動(dòng)腳本里指定Job完成。例如在service 中配置:

“service”:
“jobs” : {
“on-start” : “services:console”
}
“job”:
{
“name” : “services:console”,
“cmds” : [
“chmod 0773 /data/misc/trace”,
“chmod 0775 /data/misc/wmtrace”
]
}

即在fork子進(jìn)程的時(shí)候執(zhí)行job相關(guān)的命令。

通過cfg文件設(shè)置服務(wù)的”start-mode”來管理正常啟動(dòng)還是并行啟動(dòng)。

“start-mode” : “boot”
“start-mode” : “normal”
“start-mode” : “condition”

其中boot、normal 模式是并行啟動(dòng),service不寫start-mode默認(rèn)也是normal。Condition模式必須通過 start service 來拉起。

Start-mode通過注冊(cè)鉤子函數(shù),通過trigger拉起服務(wù)。

(6)分組管理

系統(tǒng)服務(wù)可以按照分組進(jìn)行管理,設(shè)備級(jí)知名group用于完成整機(jī)的開機(jī)、待機(jī)、充電等功能。默認(rèn)的整機(jī)開機(jī)是放到GROUP_BOOT中,GROUP_CHARING是充電模式。

以charging group舉例說明。

配置device.charing.group.cfg 里面設(shè)置需要的jobs、services以及groups。

解析group 的cfg文件。

通過hash表保存group的配置。

通過cmdline獲取當(dāng)前的group 模式,從而啟動(dòng)進(jìn)入不同的group,系統(tǒng)進(jìn)入不同的模式。

4、總結(jié)

Release3.1 版本在OpenHarmony2.0的基礎(chǔ)上各方面能力都有所提升,性能和穩(wěn)定性方面有所改善。Init組件中加入selinux配置,增強(qiáng)了系統(tǒng)的安全模式,按需啟動(dòng)模式節(jié)約系統(tǒng)的內(nèi)存資源,并行啟動(dòng)增加了系統(tǒng)的啟動(dòng)效率,分組啟動(dòng)模式為后期系統(tǒng)進(jìn)入不同狀態(tài)模式提供有效的接口。總之OpenHarmony在開源社區(qū)中,通過大家的共同努力正在茁長(zhǎng)成長(zhǎng),總有一天會(huì)長(zhǎng)成蒼天大樹,枝繁葉茂,造福人類。

??想了解更多內(nèi)容,請(qǐng)?jiān)L問:??

??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??

??https://ost.51cto.com??

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2022-04-02 20:45:04

Hi3516開發(fā)板操作系統(tǒng)鴻蒙

2022-04-25 09:10:50

RK3568鴻蒙

2015-05-12 10:24:23

OpenStack K新版本特性Horizon

2022-05-24 15:46:51

Wi-FiSTA模式

2015-05-12 10:31:25

openstack開源新特性分析

2015-05-12 10:47:49

openstack k開源分析

2010-02-24 17:38:45

Python 3.1版

2022-01-20 11:04:31

Linux DRMOpenHarmon鴻蒙

2015-05-12 10:38:56

openstack k開源分析

2010-12-22 17:17:54

2011-11-29 10:24:17

OpenStackNova

2022-04-18 10:37:01

鴻蒙操作系統(tǒng)開發(fā)工具

2022-05-17 11:30:34

Stage模型瀏覽器鴻蒙

2011-10-24 22:41:15

Linux KerneFreeBSDDell

2023-06-28 15:00:02

開源鴻蒙輸入系統(tǒng)架構(gòu)

2010-02-05 16:25:10

C++ strtok(

2022-04-14 11:53:38

HarmonyRelease鴻蒙

2010-05-04 16:59:52

DNS負(fù)載均衡
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 欧美一级视频免费看 | 日韩精品一区二区三区视频播放 | 亚洲精品乱码久久久久久久久久 | 国产乱码精品一区二区三区五月婷 | 午夜免费网 | 国产亚洲二区 | 精品福利在线 | 欧美一区二区三区视频 | 西西裸体做爰视频 | 亚洲一区二区三区桃乃木香奈 | 日韩免费一区 | 国产精品色 | 日韩视频二区 | 欧美淫| 日韩中文字幕一区 | 欧美日韩中文字幕在线 | 欧美一区二区成人 | 欧美精品久久久 | 伊人免费在线观看高清 | 精品国产免费人成在线观看 | 欧美国产视频 | 欧美日产国产成人免费图片 | h视频在线免费看 | 91精品麻豆日日躁夜夜躁 | 不卡视频一区二区三区 | 久久综合一区 | 欧美精品在线一区二区三区 | 久久免费视频1 | 欧美精品久久久久久久久老牛影院 | 丁香久久 | 久久精品视频一区二区三区 | 天天爽天天干 | 欧美成人a| 色呦呦在线 | 日韩一区欧美一区 | 日韩一二三| 三级黄片毛片 | 91网视频 | 国产成人99av超碰超爽 | 国产精品美女久久久免费 | 欧美中文字幕一区二区三区亚洲 |