【摘要】 Huawei LiteOS是華爲面向IoT領域,構建的「統一物聯網操做系統和中間件軟件平臺」,以輕量級(內核小於10k)、低功耗(1節5號電池最多能夠工做5年),快速啓動,互聯互通,安全等關鍵能力,爲開發者提供「一站式」完整軟件平臺,有效下降開發門檻、縮短開發週期。下面對LiteOS基礎內核的 任務管理、內存管理、中斷管理、信號量、互斥鎖 五大模塊進行簡單介紹。
LiteOS內核的任務管理
基本概念和功能
任務是競爭系統資源的最小運行單元。任務可使用或等待CPU、使用內存空間等系統資源,並獨立於其它任務運行。
Huawei LiteOS是一個支持多任務的操做系統,一個任務就表示一個線程,任務之間能夠進行切換和通訊。LiteOS的任務管理模塊提供任務建立、刪除、延時、掛起和恢復、更改任務優先級、鎖定任務調度和解鎖任務調度、根據任務控制塊查詢任務 ID、根據 ID 查詢任務控制塊信息等功能。
由於LiteOS內核是搶佔式調度內核,因此高優先級的任務能夠打斷低優先級任務,低優先級任務必須在高優先級任務阻塞或結束後才能獲得調度,同優先級任務會進行時間片輪轉調度。優先級表示任務執行的優先順序,決定了在發生任務切換時即將要執行的任務。LiteOS中的任務一共有32個優先級 (0-31),最高優先級爲 0,最低優先級爲31。
任務控制塊TCB
每個任務都含有一個任務控制塊(TCB)。TCB 包含了任務上下文棧指針(stack pointer)、任務狀態(包括就緒、運行、阻塞、退出4種狀態)、任務棧大小(任務棧裏保存着局部變量、寄存器、函數參數、函數返回地址等)、任務優先級、任務ID、任務名等信息。
TCB至關於每一個任務在內核中的身份證,能夠反映出每一個任務運行狀況
。
運做機制
在任務模塊初始化時,系統會先申請TCB須要的內存空間。若是任務初始化成功,則系統對TCB內容進行初始化。用戶建立任務時,系統會將任務棧進行初始化,預置上下文。此外,系統還會將「任務入口函數」地址放在相應位置。這樣在任務第一次啓動進入運行態時,將會執行「任務入口函數」。
LiteOS內核的內存管理
主要功能
Huawei LiteOS的內存管理模塊管理系統的內存資源,主要包括內存的初始化、分配及釋放,是操做系統的核心模塊之一。
在系統運行過程當中,內存管理模塊經過對內存的申請/釋放操做,來管理用戶和OS對內存的使用,
使內存的利用率和使用效率達到最優,同時最大限度地解決系統的內存碎片問題
。
Huawei LiteOS的內存管理分爲動態內存管理和靜態內存管理。
動態內存管理
在動態內存池中分配用戶指定大小的內存塊。
-
優勢: 按需分配 。
-
缺點:內存池中可能出現碎片。
靜態內存管理
在靜態內存池中
分配用戶初始化時預設(固定)大小的內存塊,初始化後塊大小不可變動
。
-
優勢:分配和釋放效率高,靜態內存池中無碎片。
-
缺點:只能申請到初始化預設大小的內存塊,不能按需申請。
LiteOS內核的中斷管理
中斷的介紹
中斷是指出現須要時,CPU暫停執行當前程序,轉而執行新程序的過程。即在程序運行過程當中,系統出現了一個必須由CPU當即處理的事務。此時,CPU暫時停止當前程序的執行轉而處理這個事務,這個過程就叫作中斷。
爲何須要中斷
衆多周知,CPU的處理速度比外設的運行速度快不少,外設能夠在沒有CPU介入的狀況下完成必定的工做,但某些狀況下須要CPU爲其作必定的工做。經過中斷機制,在外設不須要CPU介入時,CPU能夠執行其它任務,而當外設須要CPU時經過產生中斷信號使CPU當即中斷當前任務來響應中斷請求。
用戶經過中斷申請,註冊中斷處理程序,能夠指定CPU響應中斷請求時所執行的具體操做
。這樣可使CPU避免把大量時間耗費在等待、查詢外設狀態的操做上,所以將大大提升系統實時性以及執行效率。
相關的硬件
與中斷相關的硬件能夠劃分爲三類:設備、中斷控制器、CPU自己。
-
設備:發起中斷的源,當設備須要請求CPU時,產生一箇中斷信號,該信號鏈接至中斷控制器。
-
中斷控制器:中斷控制器是 CPU 衆多外設中的一個,它一方面接收其它外設中斷引腳的輸入,另外一方面,它會發出中斷信號給CPU。能夠經過對中斷控制器編程實現對中斷源的優先級、觸發方式、打開和關閉源等設置操做。經常使用的中斷控制器有VIC(Vector Interrupt Controller)和GIC(General Interrupt Controller),在 ARM Cortex-M 系列中使用的中斷控制器是NVIC(Nested Vector Interrupt Controller)。
-
CPU:CPU會響應中斷源的請求,中斷當前正在執行的任務,轉而執行中斷處理程序。
主要功能
Huawei LiteOS支持:
-
中斷初始化
-
中斷建立
-
開/關中斷
-
恢復中斷
-
中斷使能
-
中斷屏蔽
LiteOS內核的信號量
基本概念和功能
信號量(Semaphore)是一種實現任務間通訊的機制,能夠用於任務之間同步或臨界資源的互斥訪問。
信號量能夠被任務獲取或者申請,不一樣的信號量經過信號量索引號來惟一肯定,每一個信號量都有一個計數值和任務隊列。
一般信號量的計數值表示有效的資源數,即剩下的可被佔用的互斥資源數。
當任務申請(Pend)信號量時,若是申請成功,則信號量的計數值遞減,如申請失敗,則掛起在該信號量的等待任務隊列上,一旦有任務釋放該信號量,則等待任務隊列中的任務被喚醒開始執行。
信號量運做示意圖
使用場景
信號量是一種很是靈活的同步方式,能夠運用在多種場合中,實現鎖、同步、資源計數等功能,也能方便的用於任務與任務,中斷與任務的同步中。
-
任務間互斥
用做互斥時,信號量建立後記數是滿的,在須要使用臨界資源時,先申請信號量,使其變空,這樣其餘任務須要使用臨界資源時就會由於沒法申請到信號量而阻塞,從而保證了臨界資源的安全。
-
任務間同步
用做同步時,信號量在建立後被置爲空,任務1申請信號量而阻塞,任務2在某種條件發生後,釋放信號量,因而任務1得以進入READY或RUNNING態,從而達到了兩個任務間的同步。
-
資源計數
用做資源計數時,信號量的做用是一個特殊的計數器,能夠遞增或者遞減,可是值永遠不能爲負值,典型的應用場景是生產者與消費者的場景。
-
中斷與任務的同步
用做中斷與任務的同步時,能夠在中斷未觸發時將信號量的值置爲0,從而堵塞中斷服務處理任務,一旦中斷被觸發,則喚醒堵塞的中斷服務處理任務進行中斷處理。
LiteOS內核的互斥鎖
基本概念和功能
互斥鎖(mutex)又稱互斥型信號量,是一種
特殊的二值信號量
,用於實現對共享資源的獨佔式處理。互斥鎖主要使用在多任務環境下,此時每每存在多個任務競爭同一共享資源的應用場景。另外,Huawei LiteOS經過優先級繼承算法,解決了信號量存在的優先級翻轉問題。
運做機制
任意時刻互斥鎖只有兩種狀態:開鎖或閉鎖。
當有任務持有時,互斥鎖處於閉鎖狀態
,這個任務得到該互斥鎖的全部權。
當該任務釋放它時,該互斥鎖被開鎖
,任務失去該互斥鎖的全部權。當一個任務持有互斥鎖時,其餘任務將不能再對該互斥鎖進行開鎖或持有,因此其餘任務此時訪問這個公共資源將會被阻塞,直到互斥鎖被持有該鎖的任務釋放後,其餘任務才能從新訪問該公共資源。