7月5日,華為創(chuàng)始人任正非接受法國著名新聞周刊《觀點》專訪。在長達(dá)15頁的專訪報道中,任正非談到了許多問題,比如5G技術(shù)發(fā)展、中美關(guān)系、中歐關(guān)系和地緣政治等,其中還包括大家非常關(guān)注的鴻蒙系統(tǒng)。《觀點》以“這個人將改變歷史”為標(biāo)題刊登了任正非的肖像照,并以長達(dá)15頁的篇幅,對任正非本人以及華為進(jìn)行了詳細(xì)的專題報道,內(nèi)容涉及了5G技術(shù)發(fā)展、中美關(guān)系、中歐關(guān)系以及地緣政治等問題。任正非在專訪中介紹了自己的個人經(jīng)歷以及華為的發(fā)展歷程和方向。同時,他就西方國家在華為與國家安全方面的擔(dān)憂和質(zhì)疑,做出了回應(yīng)。
在專訪中,任正非透露,華為自主研發(fā)的操作系統(tǒng)“鴻蒙”旨在應(yīng)用于多種設(shè)備,這也證實了此前的傳言。任正非表示:“我們正在研發(fā)的操作系統(tǒng)能夠與印刷電路板、交換機(jī)、路由器、智能手機(jī)以及數(shù)據(jù)中心等兼容。”
對于鴻蒙系統(tǒng),任正非表示,“該系統(tǒng)的處理延遲小于5毫秒。它將完美地適應(yīng)物聯(lián)網(wǎng),還能夠應(yīng)用于自動駕駛。”任正非指出:“我們構(gòu)建這個系統(tǒng),為的是能夠同步連接所有對象。這就是我們走向智能社會的方式。”
華為的鴻蒙操作系統(tǒng)為什么比安卓速度快60%?現(xiàn)在從程序角度去看:
-
就緒(Ready):
該任務(wù)在就緒列表中,只等待CPU。
-
運行(Running):
該任務(wù)正在執(zhí)行。
-
阻塞(Blocked):
該任務(wù)不在就緒列表中。
包含任務(wù)被掛起、任務(wù)被延時、任務(wù)正在等待信號量、讀寫隊列或者等待讀寫事件等。
{
UINTPTR uvIntSave;
LOS_TASK_CB *pstTaskCB;
UINT16 usTempStatus;
UINT32 uwErrRet = OS_ERROR;
if (uwTaskID > LOSCFG_BASE_CORE_TSK_LIMIT)
{
return LOS_ERRNO_TSK_ID_INVALID;
}
pstTaskCB = OS_TCB_FROM_TID(uwTaskID);
uvIntSave = LOS_IntLock();
usTempStatus = pstTaskCB->usTaskStatus;
if (OS_TASK_STATUS_UNUSED & usTempStatus)
{
uwErrRet = LOS_ERRNO_TSK_NOT_CREATED;
OS_GOTO_ERREND();
}
else if (!(OS_TASK_STATUS_SUSPEND & usTempStatus))
{
uwErrRet = LOS_ERRNO_TSK_NOT_SUSPENDED;
OS_GOTO_ERREND();
}
//以上為任務(wù)狀態(tài)檢查
pstTaskCB->usTaskStatus &= (~OS_TASK_STATUS_SUSPEND);//清除任務(wù)的suspend標(biāo)志位置
if (!(OS_CHECK_TASK_BLOCK & pstTaskCB->usTaskStatus) )//若任務(wù)的還自在阻塞狀態(tài)則變?yōu)榫途w狀態(tài) ,并調(diào)用 LOS_Schedule()進(jìn)行調(diào)度
{
pstTaskCB->usTaskStatus |= OS_TASK_STATUS_READY;
LOS_PriqueueEnqueue(&pstTaskCB->stPendList, pstTaskCB->usPriority);
if (g_bTaskScheduled)
{
(VOID)LOS_IntRestore(uvIntSave);
LOS_Schedule();
return LOS_OK;
}
g_stLosTask.pstNewTask = LOS_DL_LIST_ENTRY(LOS_PriqueueTop(), LOS_TASK_CB, stPendList); /*lint !e413*/
}
(VOID)LOS_IntRestore(uvIntSave);
return LOS_OK;
LOS_ERREND:
(VOID)LOS_IntRestore(uvIntSave);
return uwErrRet;
}
-
任務(wù)合法性(TaskId)及任務(wù)狀態(tài)校驗:判斷任務(wù)序號以及任務(wù)當(dāng)前狀態(tài)是否確實為掛起。
-
改變?nèi)蝿?wù)狀態(tài):將任務(wù)的suspend狀態(tài)位清掉
-
起用任務(wù)調(diào)度:如果任務(wù)被阻塞,則調(diào)起LOS_Schedule進(jìn)行調(diào)度。
-
初始化任務(wù)隊列
-
加入任務(wù)
-
循環(huán)處理任務(wù)
-
銷毀任務(wù)隊列
SSchedMsg msg;
SSchedQueue *pSched = (SSchedQueue *)param;
while (1) {
if (sem_wait(&pSched->fullSem) != 0) {
pError("wait %s fullSem failed, errno:%d, reason:%s", pSched->label, errno, strerror(errno));
if (errno == EINTR) {
/* sem_wait is interrupted by interrupt, ignore and continue */
continue;
}
}
if (pthread_mutex_lock(&pSched->queueMutex) != 0)
pError("lock %s queueMutex failed, reason:%s", pSched->label, strerror(errno));
msg = pSched->queue[pSched->fullSlot];
memset(pSched->queue + pSched->fullSlot, 0, sizeof(SSchedMsg));
pSched->fullSlot = (pSched->fullSlot + 1) % pSched->queueSize;//從隊尾取出消息不斷處理
if (pthread_mutex_unlock(&pSched->queueMutex) != 0)
pError("unlock %s queueMutex failed, reason:%s\n", pSched->label, strerror(errno));
if (sem_post(&pSched->emptySem) != 0)
pError("post %s emptySem failed, reason:%s\n", pSched->label, strerror(errno));
if (msg.fp)
(*(msg.fp))(&msg);
else if (msg.tfp)
(*(msg.tfp))(msg.ahandle, msg.thandle);
}
}
int taosScheduleTask(void *qhandle, SSchedMsg *pMsg) {
SSchedQueue *pSched = (SSchedQueue *)qhandle;
if (pSched == NULL) {
pError("sched is not ready, msg:%p is dropped", pMsg);
return 0;
}
if (sem_wait(&pSched->emptySem) != 0) pError("wait %s emptySem failed, reason:%s", pSched->label, strerror(errno));
if (pthread_mutex_lock(&pSched->queueMutex) != 0)
pError("lock %s queueMutex failed, reason:%s", pSched->label, strerror(errno));
pSched->queue[pSched->emptySlot] = *pMsg;
pSched->emptySlot = (pSched->emptySlot + 1) % pSched->queueSize;
if (pthread_mutex_unlock(&pSched->queueMutex) != 0)
pError("unlock %s queueMutex failed, reason:%s", pSched->label, strerror(errno));
if (sem_post(&pSched->fullSem) != 0) pError("post %s fullSem failed, reason:%s", pSched->label, strerror(errno));
return 0;
}
-
軟件定時器是系統(tǒng)資源,在模塊初始化的時候已經(jīng)分配了一塊連續(xù)的內(nèi)存,系統(tǒng)支持的最大定時器個數(shù)可以在los_config.h文件中配置。
-
軟件定時器使用了系統(tǒng)的一個隊列和任務(wù)資源,軟件定時器的觸發(fā)遵循隊列規(guī)則,先進(jìn)先出。
定時時間短的定時器總是比定時時間長的靠近隊列頭,滿足優(yōu)先被觸發(fā)的準(zhǔn)則。
-
軟件定時器以Tick為基本計時單位,當(dāng)用戶創(chuàng)建并啟動一個軟件定時器時,Huawei LiteOS會根據(jù)當(dāng)前系統(tǒng)Tick時間及用戶設(shè)置的定時間隔確定該定時器的到期Tick時間,并將該定時器控制結(jié)構(gòu)掛入計時全局鏈表。
-
當(dāng)Tick中斷到來時,在Tick中斷處理函數(shù)中掃描軟件定時器的計時全局鏈表,看是否有定時器超時,若有則將超時的定時器記錄下來。
-
Tick處理結(jié)束后,軟件定時器任務(wù)(優(yōu)先級為最高)被喚醒,在該任務(wù)中調(diào)用之前記錄下來的超時定時器的處理函數(shù)。
-
首先明確鴻蒙的定時器是為了節(jié)省硬件定時器資源而設(shè)計的。
由于硬件定時器往往數(shù)量有限而系統(tǒng)實際運行中,對于定時器的需求往往高于硬件定時器的數(shù)量,所以操作系統(tǒng)都會實現(xiàn)軟件定時器以滿足用戶需求。
-
先啟動硬件定時器,注冊硬件定時器的tick事件,也就是硬件定時器到時發(fā)生tick時會調(diào)用軟件定時器的處理函數(shù)。
-
將在同一時刻到期的timer放在同一鏈表中。
-
在硬件產(chǎn)生tick事件時,取出當(dāng)時到期的定時器列表,并順序調(diào)起鏈表內(nèi)所有到時定時器的處理函數(shù)。
{
SWTMR_HANDLER_ITEM_P pstSwtmrHandle = (SWTMR_HANDLER_ITEM_P)NULL;
SWTMR_HANDLER_ITEM_S stSwtmrHandle;
UINT32 uwRet;
for ( ; ; )
{
uwRet = LOS_QueueRead(m_uwSwTmrHandlerQueue, &pstSwtmrHandle, sizeof(SWTMR_HANDLER_ITEM_P), LOS_WAIT_FOREVER);
if (uwRet == LOS_OK)
{
if (pstSwtmrHandle != NULL)
{
stSwtmrHandle.pfnHandler = pstSwtmrHandle->pfnHandler;
stSwtmrHandle.uwArg = pstSwtmrHandle->uwArg;
(VOID)LOS_MemboxFree(m_aucSwTmrHandlerPool, pstSwtmrHandle);
if (stSwtmrHandle.pfnHandler != NULL)
{
stSwtmrHandle.pfnHandler(stSwtmrHandle.uwArg);
}
}
}
}//end of for
}
以上函數(shù)的運行原理動畫解析如下:
(本文由中國計算網(wǎng)總編欒玲編輯錄入《超算AI數(shù)據(jù)庫》 轉(zhuǎn)載請注明出處)
相關(guān)新聞焦點
計算頭條:華為物聯(lián)網(wǎng)芯片專家劉石創(chuàng)業(yè)史
計算頭條:騰訊在5G大數(shù)據(jù)時代如何影響生活
計算頭條:創(chuàng)投人士為什么關(guān)注醫(yī)療人工智能
計算頭條:藍(lán)海創(chuàng)意與國家超算協(xié)同發(fā)展的生態(tài)模式很贊
計算頭條:工業(yè)專家杜玉河指出硬件需要應(yīng)用創(chuàng)新
計算頭條:e-works黃培李培根參加2019工業(yè)APP創(chuàng)新應(yīng)用大賽
計算頭條:孫家廣院士指出工業(yè)APP大賽要做到“五促”
計算頭條:星環(huán)科技謝皓用實例指出邊緣計算的核心問題
計算頭條:專家張云泉教授參加2019聯(lián)想全球超算峰會
計算頭條:聯(lián)發(fā)科與晨星半導(dǎo)體Mstar為什么合并
計算頭條:華為、中興與中國電信在上海世界移動大會的5G細(xì)節(jié)
計算頭條:中美貿(mào)易戰(zhàn)蘋果企業(yè)怎么辦
計算頭條:星環(huán)科技登頂數(shù)據(jù)庫領(lǐng)域的“珠穆朗瑪”
計算頭條:中國智庫網(wǎng)為什么強(qiáng)調(diào)中國風(fēng)
計算頭條:阿里云率先進(jìn)入“LoRa2.0時代”連接一切
計算頭條:海淀將建40個智慧社區(qū)18個應(yīng)用場景
計算頭條:物聯(lián)網(wǎng)中IBM解決中小城市智慧城市建設(shè)問題
計算頭條:華為+智能進(jìn)化智能服務(wù)器新品發(fā)布會
計算頭條:IBM幫助中糧集團(tuán)數(shù)字化采購加速數(shù)字化轉(zhuǎn)型
計算頭條:房地產(chǎn)用“朋友圈”進(jìn)行數(shù)據(jù)營銷
計算頭條:CB Insights發(fā)布全球人工智能100強(qiáng)企業(yè)名單與25大趨勢
計算頭條:國家超算張云泉教授認(rèn)為中國計算網(wǎng)看點不錯
計算頭條:阿里巴巴人工智能算法開始應(yīng)用于奧運運動項目
計算頭條:張云泉出任中國大數(shù)據(jù)與智能計算產(chǎn)業(yè)聯(lián)盟執(zhí)行理事長
計算頭條:人工智能領(lǐng)域中國正在奠定領(lǐng)導(dǎo)力
計算頭條:中國三臺E級超級計算機(jī)原型機(jī)系統(tǒng)完成交付
計算頭條:蘋果公司開始競爭音樂算法平臺Festicket公司
計算頭條:中望軟件獲達(dá)晨領(lǐng)投8000萬融資
計算頭條:計算生態(tài)為什么不用MATLAB而用Python
微信關(guān)注公眾號“cncompute_com ”,為您奉上最新最熱的計算頭條資訊,干貨滿滿。