




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
5.1.1LiteOS-A內核簡介通過本節(jié)學習,您可以:了解LiteOS-A內核簡介LiteOS-A內核簡介LiteOS-A適配的系統(tǒng)及設備類型:小型系統(tǒng)(smallsystem)面向應用處理器例如ArmCortex-A的設備,支持的設備最小內存為1MB,可以提供更高的安全能力、標準的圖形框架、視頻編解碼的多媒體能力。可支撐的產品如智能家居領域的IPCamera、電子貓眼、路由器以及智慧出行域的行車記錄儀等。LiteOS-A要求設備具備一定的處理能力,對比LiteOS-M,LiteOS-A支持以下特性:(1)MMU支持:通過MMU支持內核態(tài)和用戶態(tài)分離,支持虛擬單元;(2)支持獨立進程:調度對象分別為進程、線程;(3)支持文件系統(tǒng):包括虛擬文件和塊設備等;(4)支持更復雜的IPC:包括LiteIPC等;(5)支持多核調度:支持雙核MCU,支持雙核調度;(6)支持POSIX3接口:為APP開發(fā)提供更多幫助。LiteOS-A內核簡介LiteOS-A的源碼目錄:關鍵目錄:arch:存放了arm架構相關的代碼,以及中斷管理相關代碼compat:POSIX標準目的是為了提供源碼級的軟件可移植性。一個系統(tǒng)提供了POSIX接口,則任何其它的系統(tǒng)可以通過POSIX調用該系統(tǒng)drivers:內核驅動代碼,分別對應塊設備驅動、字符設備驅動、內存設備驅動LiteOS-A內核簡介關鍵目錄:kernel:base:基礎內核,進程管理、內存管理、內核通信機制、時間管理、軟件定時器等模塊。include:內核相關模塊頭文件。LiteOS-A的源碼目錄:謝謝5.1.2LiteOS-A內核架構通過本節(jié)學習,您可以:了解LiteOS-A內核架構LiteOS-A內核架構LiteOS-A內核分為內核空間和用戶空間,如圖所示。LiteOS-A內核架構(1)基礎內核:進程管理:支持進程和線程,采用了高優(yōu)先級優(yōu)先加同優(yōu)先級時間片輪轉的搶占式調度機制。內存管理:對物理內存和虛擬內存分別進行管理。中斷異常:對中斷的異常處理。時間管理:對操作系統(tǒng)時間進行管理,提供給應用程序所有和時間有關的服務。通信機制:包括事件、信號量、互斥鎖、消息隊列、信號等。1.
內核空間LiteOS-A內核架構(2)擴展組件:主要包括文件系統(tǒng)、網絡協(xié)議、權限管理、動態(tài)加載、調測工具等。文件系統(tǒng):輕量級內核支持FAT,JFFS2,NFS,ramfs,procfs等眾多文件系統(tǒng),并對外提供完整的POSIX標準的操作接口;內部使用VFS(VirtualFileSystems,虛擬文件系統(tǒng))層作為統(tǒng)一的適配層框架,方便移植新的文件系統(tǒng),各個文件系統(tǒng)也能自動利用VFS層提供的豐富的功能。LiteOS-A內核架構網絡協(xié)議:網絡協(xié)議基于開源LWIP(LightWeightIP協(xié)議)構建。支持多種協(xié)議:IP、ICMP、ND、MLD、UDP、TCP、IGMP、ARP、PPP支持的API:socketAPI網絡協(xié)議的擴展特性:多網絡接口IP轉發(fā)、TCP擁塞控制、RTT估計和快速恢復、快速重傳。支持多種應用程序LiteOS-A內核架構支持的協(xié)議:IP協(xié)議:包括IPV4和IPV6,支持IP分片于重裝,支持多網絡接口下數據包轉發(fā)。ICMP協(xié)議:用于網絡調試維護。ND(NeighborDiscovery)協(xié)議:IP6鄰居發(fā)現(xiàn)協(xié)議。MLD協(xié)議:組播偵聽發(fā)現(xiàn)協(xié)議,于IPv6組播中組成員管理。UDP協(xié)議:用戶數據包協(xié)議。TCP:支持TCP擁塞控制,RTT估計,快恢復和重傳等。IGMP:用于網絡組管理,可以實現(xiàn)多播數據的接收。ARP協(xié)議:地址解析協(xié)議。PPP協(xié)議:包括PPPoS(串口點對點協(xié)議)、PPPoE(以太網上的點對點協(xié)議)。LiteOS-A內核架構適用的應用程序:HTTP(S)服務SNTP客戶端SMTP(S)客戶端ping工具NetBIOS名稱服務mDNS響應程序MQTT客戶端TFTP服務DHCP客戶端DNS客戶端AutoIP/APIPA(零配置)SNMP代理LiteOS-A內核架構(3)HDF框架HDF框架是外設驅動統(tǒng)一標準框架,提供了GPIO、SDIO、I2C、USB、WLAN等各種外設接口方式。HDF框架特性:支持多內核平臺。支持用戶態(tài)驅動。可配置組件化驅動模型。基于消息的驅動接口模型。基于對象的驅動、設備管理。HDI(HardwareDriverInterface)統(tǒng)一硬件接口。支持電源管理、PnP(Plug-and-Play,即插即用)。LiteOS-A內核架構LiteOS-A內核架構的頂部是用戶空間,用戶空間主要是用戶進程和POSIX接口組成。OpenHarmony內核使用musllibc庫,支持標準POSIX接口,開發(fā)者可基于POSIX標準接口開發(fā)內核之上的組件及應用。2.用戶空間謝謝5.1.3LiteOS-A內核態(tài)啟動流程通過本節(jié)學習,您可以:了解LiteOS-A內核態(tài)啟動流程LiteOS-A內核態(tài)啟動流程內核啟動流程如圖所示。LiteOS-A內核態(tài)啟動流程內核啟動流程包含匯編啟動階段和C語言啟動階段兩部分。匯編啟動階段完成CPU初始設置,關閉dcache/icache與MMU,使能FPU及neon,設置MMU建立虛實地址映射,設置系統(tǒng)棧,清理bss段,調用C語言main函數等。C語言啟動階段包含OsMain函數及開始調度等。LiteOS-A內核態(tài)啟動流程OsMain函數用于內核基礎初始化和架構、板級初始化等,其整體由內核啟動框架主導初始化流程,如圖所示。LiteOS-A內核態(tài)啟動流程①LOS_INIT_LEVEL_EARLIEST:最早期初始化。不依賴架構,單板以及后續(xù)模塊會對其有依賴的純軟件模塊初始,例如:內核Trace模塊初始化。②LOS_INIT_LEVEL_ARCH_EARLY:架構早期初始化。與架構相關,后續(xù)模塊會對其有依賴的模塊初始化,如啟動過程中非必需的功能,建議放到⑥LOS_INIT_LEVEL_ARCH層。LiteOS-A內核態(tài)啟動流程③LOS_INIT_LEVEL_PLATFORM_EARLY:平臺早期初始化。與單板平臺、驅動相關,后續(xù)模塊會對其有依賴的模塊初始化,如啟動過程中必需的功能,建議放到⑦LOS_INIT_LEVEL_PLATFORM層。④LOS_INIT_LEVEL_KMOD_PREVM:內存初始化前的內核模塊初始化。在內存初始化之前需要使能的模塊初始化。LiteOS-A內核態(tài)啟動流程⑤LOS_INIT_LEVEL_VM_COMPLETE:基礎內存就緒后的初始化。此時內存初始化完畢,需要進行使能且不依賴進程間通訊機制與系統(tǒng)進程的模塊初始化。⑥LOS_INIT_LEVEL_ARCH:架構后期初始化。與架構拓展功能相關,后續(xù)模塊會對其有依賴的模塊初始化。LiteOS-A內核態(tài)啟動流程⑦LOS_INIT_LEVEL_PLATFORM:平臺后期初始化。單板平臺、驅動相關,后續(xù)模塊會對其有依賴的模塊初始化,例如:驅動內核抽象層初始化(mmc、mtd)。⑧LOS_INIT_LEVEL_KMOD_BASIC:內核基礎模塊初始化。內核可拆卸的基礎模塊初始化。例如:VFS初始化。LiteOS-A內核態(tài)啟動流程⑨LOS_INIT_LEVEL_KMOD_EXTENDED:內核擴展模塊初始化。內核可拆卸的擴展模塊初始化。例如:系統(tǒng)調用初始化、ProcFS初始化、Futex初始化、HiLog初始化、LiteIPC初始化。⑩LOS_INIT_LEVEL_KMOD_TASK:內核任務創(chuàng)建。進行內核任務的創(chuàng)建(內核任務,軟件定時器任務)。例如:資源回收系統(tǒng)常駐任務的創(chuàng)建、SystemInit任務創(chuàng)建、CPU占用率統(tǒng)計任務創(chuàng)建等。謝謝5.1.4LiteOS-A用戶態(tài)啟動流程通過本節(jié)學習,您可以:了解LiteOS-A用戶態(tài)啟動流程LiteOS-A用戶態(tài)啟動流程用戶態(tài)啟動是從根進程開始的。根進程是系統(tǒng)的第一個用戶態(tài)進程,進程ID為1。用戶態(tài)啟動進程樹如圖所示。1號進程接下來會創(chuàng)建和啟動其他的用戶態(tài)進程例如/bin/shell。LiteOS-A用戶態(tài)啟動流程鴻蒙中的init進程作用類似于Linux中的init進程,主要作用是完成系統(tǒng)啟動后,用戶可以操作前的一些初始化操作,例如孵化一些用戶的服務,創(chuàng)建一些必要的文件目錄結構等。Init進程是由SysemInit()函數來啟動的,SystemInit()函數代碼如下所示:
SystemInit()
ProcFsInit();
mem_dev_register();
imx6ull_driver_init();
imx6ull_mount_rootfs();
DeviceManagerStart();//HDF,加載驅動,使外設可以正常工作。
uart_dev_init();
......
OsUserInitProcess();LiteOS-A用戶態(tài)啟動流程在SystemInit()函數中,通過OsUserInitProcess()啟動init進程,具體是通過OsUserInitProcessStart()函數來實現(xiàn)的。OsUserInitProcessStart()函數的代碼如下:
STATICUINT32OsUserInitProcessStart(UINT32processID,TSK_INIT_PARAM_S*param)
{
UINT32intSave;
INT32taskID;
INT32ret;
taskID=OsCreateUserTask(processID,param);
if(taskID<0){
returnLOS_NOK;
}
ret=LOS_SetTaskScheduler(taskID,LOS_SCHED_RR,OS_TASK_PRIORITY_LOWEST);
if(ret<0){
PRINT_ERR("Userinitprocesssetschedulerfailed!ERROR:%d\n",ret);
SCHEDULER_LOCK(intSave);
(VOID)OsTaskDeleteUnsafe(OS_TCB_FROM_TID(taskID),OS_PRO_EXIT_OK,intSave);
return-ret;
}
returnLOS_OK;
}謝謝5.2.1中斷與異常處理的概念和機制通過本節(jié)學習,您可以:了解中斷與異常處理的概念和機制中斷與異常處理的概念中斷異常處理是操作系統(tǒng)對運行期間發(fā)生的異常情況(芯片硬件異常)進行處理的一系列動作,例如虛擬內存缺頁異常、打印異常發(fā)生時函數的調用棧信息、CPU現(xiàn)場信息、任務的堆棧情況等。異常指可以打斷CPU正常運行流程的一些事情,如未定義指令異常、試圖修改只讀的數據異常、不對齊的地址訪問異常等。中斷與異常處理機制LiteOS-A的中斷異常處理流程:外設可以在沒有CPU介入的情況下完成一定的工作,但某些情況下也需要CPU為其執(zhí)行一定的工作。當外設需要CPU時,將產生一個中斷信號,該信號連接至中斷控制器。中斷控制器是一方面接收其它外設中斷引腳的輸入,另一方面它會發(fā)出中斷信號給CPU。可以通過對中斷控制器編程來打開和關閉中斷源、設置中斷源的優(yōu)先級和觸發(fā)方式。CPU收到中斷控制器發(fā)送的中斷信號后,中斷當前任務來響應中斷請求。當異常發(fā)生時,CPU暫停當前的程序,先處理異常事件,然后再繼續(xù)執(zhí)行被異常打斷的程序。中斷與異常處理機制常用的中斷控制器有VIC(VectorInterruptController,向量中斷控制器)和GIC(GeneralInterruptController,通用中斷控制器)。LiteOS-A內核支持的是ARM公司的Cortex-A/R系列的芯片,GIC是ARM公司給Cortex-A/R系列芯片提供的一個中斷控制器,類似Cortex-M中的NVIC。GIC控制器有4個版本V1-V4,V2版本是給ARMv7-A架構使用的,比如Cortex-A5,Cortex-A7、Cortex-A9、Cortex-A15等。中斷與異常處理機制當GIC控制器接收到外部中斷信號以后匯報給ARM內核,ARM內核提供了四個信號給GIC來匯報中斷情況:VFIQ、VIRQ、FIQ和IRQ,如圖所示。中斷與異常處理機制4個信號含義如下:VFIQ:虛擬快速FIQVIRQ:虛擬外部IRQFIQ:快速中斷IRQIRQ:外部中斷IRQGIC控制器接收眾多的外部中斷,并對其進行處理,最終通過四個信號報給ARM內核。中斷與異常處理的概念和機制LiteOS-A當前支持ARMv7-a指令集架構,以ARMv7-a架構為例,中斷和異常處理的入口為中斷向量表,中斷向量表包含各個中斷和異常處理的中斷向量,如表所示。中斷向量異常中斷名稱_exception_handlersresetvector復位osExceptUndeflnstrHd未定義的指令osExceptSwiHdl軟件中斷osExceptPrefetchAbortHdl預取指令中止osExceptDataAbortHdl數據訪問中止osExceptAddrAbortHd地址異常中止OslrqHandler外部中斷請求osExceptFiqHd快速中斷請求謝謝5.2.2中斷與異常處理接口與應用通過本節(jié)學習,您可以:了解中斷與異常處理接口說明與應用中斷與異常處理接口與應用OpenHarmonyLiteOS-A內核的中斷模塊提供的接口跟LiteOS-M基本相同,包括創(chuàng)建中斷、刪除中斷、打開和關閉中斷等接口,如表所示。1.
中斷與異常處理管理接口功能分類接口名描述創(chuàng)建中斷LOS_HwiCreate中斷創(chuàng)建,注冊中斷號、中斷觸發(fā)模式、中斷優(yōu)先級、中斷處理程序。中斷被觸發(fā)時,會調用該中斷處理程序刪除中斷LOS_HwiDelete根據指定的中斷號,刪除中斷打開中斷LOS_IntUnLock打開當前處理器所有中斷響應關閉中斷LOS_IntLock關閉當前處理器所有中斷響應恢復中斷LOS_IntRestore與LOS_IntLock配套使用,恢復到使用LOS_IntLock關閉所有中斷之前的狀態(tài)中斷與異常處理接口與應用中斷管理的一般開發(fā)流程如下:(1)調用中斷創(chuàng)建接口LOS_HwiCreate創(chuàng)建中斷。(2)調用LOS_HwiDelete接口刪除指定中斷,此接口根據實際情況使用,判斷是否需要刪除中斷。2.中斷管理應用謝謝5.3.1進程管理通過本節(jié)學習,您可以:了解進程管理進程管理進程是系統(tǒng)資源管理的基本單元。OpenHarmonyLiteOS-A內核提供的進程模塊主要用于實現(xiàn)用戶態(tài)進程的隔離,不涉及內核態(tài)進程。進程模塊主要為用戶提供多個進程,實現(xiàn)了進程之間的切換和通信,幫助用戶管理業(yè)務程序流程。進程采用搶占式調度機制,采用高優(yōu)先級優(yōu)先加同優(yōu)先級時間片輪轉的調度算法。進程一共有32個優(yōu)先級(0-31),用戶進程可配置的優(yōu)先級有22個(10-31),最高優(yōu)先級為10,最低優(yōu)先級為31。高優(yōu)先級的進程可搶占低優(yōu)先級進程,低優(yōu)先級進程必須在高優(yōu)先級進程阻塞或結束后才能得到調度。每一個用戶態(tài)進程均擁有自己獨立的進程空間,相互之間不可見,實現(xiàn)進程間隔離。用戶態(tài)根進程init由內核態(tài)創(chuàng)建,其它用戶態(tài)子進程均由init進程創(chuàng)建而來。1.
進程的概念進程管理進程有多種狀態(tài),各狀態(tài)之間的關系如圖所示:2.進程狀態(tài)初始化(Init):進程正在被創(chuàng)建。就緒態(tài)(Ready):進程在就緒列表中,等待CPU調度。運行態(tài)(Running):進程正在運行。阻塞態(tài)(Pending):進程被阻塞掛起。本進程內所有的線程均被阻塞時,進程被阻塞掛起。僵尸態(tài)(Zombies):進程運行結束,等待父進程回收其控制塊資源。進程管理初始化→就緒態(tài):進程創(chuàng)建或fork時,拿到對應進程控制塊后進入Init狀態(tài),即進程初始化階段,當該階段完成后進程將被插入調度隊列,此時進程進入就緒狀態(tài)。就緒態(tài)→運行態(tài):發(fā)生進程切換時,就緒列表中優(yōu)先級最高且獲得時間片的進程被執(zhí)行,從而進入運行態(tài)。若此時該進程中已無其它線程處于就緒態(tài),則進程從就緒列表刪除,只處于運行態(tài);若此時該進程中還有其它線程處于就緒態(tài),則該進程依舊在就緒隊列,此時進程的就緒態(tài)和運行態(tài)共存,但對外呈現(xiàn)的進程狀態(tài)為運行態(tài)。
初始化就緒態(tài)阻塞態(tài)運行態(tài)僵尸態(tài)進程管理運行態(tài)→阻塞態(tài):進程在最后一個線程轉為阻塞態(tài)時,進程內所有的線程均處于阻塞態(tài),此時進程同步進入阻塞態(tài),然后發(fā)生進程切換。阻塞態(tài)→就緒態(tài):阻塞進程內的任意線程恢復就緒態(tài)時,進程被加入到就緒隊列,同步轉為就緒態(tài)。就緒態(tài)→阻塞態(tài):進程內的最后一個就緒態(tài)線程轉為阻塞態(tài)時,進程從就緒列表中刪除,進程由就緒態(tài)轉為阻塞態(tài)。
初始化就緒態(tài)阻塞態(tài)運行態(tài)僵尸態(tài)進程管理運行態(tài)→就緒態(tài):有更高優(yōu)先級的進程創(chuàng)建或者恢復后,會發(fā)生進程調度,此刻就緒列表中最高優(yōu)先級進程變?yōu)檫\行態(tài),那么原先運行的進程由運行態(tài)變?yōu)榫途w態(tài)。若進程的調度策略為LOS_SCHED_RR(時間片輪轉),且存在同一優(yōu)先級的另一個進程處于就緒態(tài),則該進程的時間片消耗光之后,該進程由運行態(tài)轉為就緒態(tài),另一個同優(yōu)先級的進程由就緒態(tài)轉為運行態(tài)。
初始化就緒態(tài)阻塞態(tài)運行態(tài)僵尸態(tài)進程管理運行態(tài)→僵尸態(tài):當進程的主線程或所有線程運行結束后,進程由運行態(tài)轉為僵尸態(tài),等待父進程回收資源。
初始化就緒態(tài)阻塞態(tài)運行態(tài)僵尸態(tài)進程管理進程管理主要是合理的分配各個進程使用CPU的時間。用戶態(tài)進程由Init進程分解而來,如圖所示。fork進程時會將父進程的進程虛擬內存空間克隆到子進程,子進程實際運行時通過寫時復制機制將父進程的內容按需復制到子進程的虛擬內存空間。3.進程運行機制用戶態(tài)進程
多線程用戶態(tài)進程
多線程Init進程
多線程進程管理OpenHarmonyLiteOS-A內核的進程管理模塊提供了進程組、用戶組、進程創(chuàng)建等接口。4.進程接口功能分類接口名接口描述獲取進程IDLOS_GetCurrProcessID獲取當前進程的進程ID進程組LOS_GetProcessGroupID獲取指定進程的進程組IDLOS_GetCurrProcessGroupID獲取當前進程的進程組ID用戶及用戶組LOS_GetUserID獲取當前進程的用戶IDLOS_GetGroupID獲取當前進程的用戶組IDLOS_CheckInGroups檢查指定用戶組ID是否在當前進程的用戶組內進程管理功能分類接口名接口描述進度調度參數控制LOS_GetProcessScheduler獲取指定進程的調度策略LOS_SetProcessScheduler設置指定進程的調度參數,包括優(yōu)先級和調度策略LOS_SetProcessPriority設置進程優(yōu)先級LOS_GetProcessPriority獲取進程優(yōu)先級系統(tǒng)支持的最大進程數LOS_GetSystemProcessMaximum獲取系統(tǒng)支持的最大進程數目LOS_GetUsedPIDList獲得已使用的進程ID列表進程管理功能分類接口名接口描述創(chuàng)建進程LOS_Fork創(chuàng)建子進程等待進程LOS_Wait等待子進程結束并回收子進程LOS_Waitid等待相應ID的進程結束退出進程LOS_Exit退出進程謝謝5.3.2任務管理通過本節(jié)學習,您可以:了解任務管理任務管理從系統(tǒng)的角度看,任務Task是競爭系統(tǒng)資源的最小運行單元。任務可以使用或等待CPU、使用內存空間等系統(tǒng)資源,并獨立于其它任務運行。OpenHarmony內核中使用一個任務表示一個線程。OpenHarmony內核中同優(yōu)先級進程內的任務統(tǒng)一調度、運行。OpenHarmony內核中的任務采用搶占式調度機制,同時支持時間片輪轉調度和FIFO調度方式。內核的任務一共有32個優(yōu)先級(0-31),最高優(yōu)先級為0,最低優(yōu)先級為31。當前進程內,高優(yōu)先級的任務可搶占低優(yōu)先級任務,低優(yōu)先級任務必須在高優(yōu)先級任務阻塞或結束后才能得到調度。1.
任務管理概念任務管理任務的各狀態(tài)如圖所示:
初始化就緒態(tài)阻塞態(tài)運行態(tài)退出初始化(Init):任務正在被創(chuàng)建。就緒態(tài)(Ready):任務在就緒隊列中,等待CPU調度。運行態(tài)(Running):任務正在運行。阻塞態(tài)(Blocked):任務被阻塞掛起。Blocked狀態(tài)包括:pending(因為鎖、事件、信號量等阻塞)、suspended(主動pend)、delay(延時阻塞)、pendtime(因為鎖、事件、信號量時間等超時等待)。退出態(tài)(Exit):任務運行結束,等待父任務回收其控制塊資源。任務管理初始化→就緒態(tài):任務創(chuàng)建拿到控制塊后為初始化階段(Init狀態(tài)),當任務初始化完成將任務插入調度隊列,此時任務進入就緒狀態(tài)。就緒態(tài)→運行態(tài):任務創(chuàng)建后進入就緒態(tài),發(fā)生任務切換時,就緒隊列中最高優(yōu)先級的任務被執(zhí)行,從而進入運行態(tài),此刻該任務從就緒隊列中刪除。
初始化就緒態(tài)阻塞態(tài)運行態(tài)退出任務管理運行態(tài)→阻塞態(tài):正在運行的任務發(fā)生阻塞(掛起、延時、讀信號量等)時,任務狀態(tài)由運行態(tài)變成阻塞態(tài),然后發(fā)生任務切換,運行就緒隊列中剩余最高優(yōu)先級任務。阻塞態(tài)→就緒態(tài):阻塞的任務被恢復后(任務恢復、延時時間超時、讀信號量超時或讀到信號量等),此時被恢復的任務會被加入就緒隊列,從而由阻塞態(tài)變成就緒態(tài)。
初始化就緒態(tài)阻塞態(tài)運行態(tài)退出任務管理就緒態(tài)→阻塞態(tài):任務也有可能在就緒態(tài)時被阻塞(掛起),此時任務狀態(tài)會由就緒態(tài)轉變?yōu)樽枞麘B(tài),該任務從就緒隊列中刪除,不會參與任務調度,直到該任務被恢復。運行態(tài)→就緒態(tài):有更高優(yōu)先級任務創(chuàng)建或者恢復后,會發(fā)生任務調度,此刻就緒隊列中最高優(yōu)先級任務變?yōu)檫\行態(tài),那么原先運行的任務由運行態(tài)變?yōu)榫途w態(tài),并加入就緒隊列中。
初始化就緒態(tài)阻塞態(tài)運行態(tài)退出任務管理運行態(tài)→退出態(tài):運行中的任務運行結束,任務狀態(tài)由運行態(tài)變?yōu)橥顺鰬B(tài)。
初始化就緒態(tài)阻塞態(tài)運行態(tài)退出任務管理OpenHarmonyLiteOS-A內核的任務管理模塊提供了創(chuàng)建任務、刪除任務、控制任務狀態(tài)、獲取任務信息等幾種功能,具體如表所示。2.任務管理接口功能分類接口名接口描述任務的創(chuàng)建和刪除
LOS_TaskCreate創(chuàng)建任務,若所創(chuàng)建任務的優(yōu)先級比當前的運行的任務優(yōu)先級高且任務調度沒有鎖定,則該任務將被調度進入運行態(tài)LOS_TaskCreateOnly創(chuàng)建任務并阻塞,任務恢復前不會將其加入就緒隊列中LOS_TaskDelete刪除指定的任務,回收其任務控制塊和任務棧所消耗的資源任務的狀態(tài)控制
LOS_TaskResume恢復掛起的任務LOS_TaskSuspend掛起指定的任務,該任務將從就緒任務隊列中移除LOS_TaskJoin阻塞當前任務,等待指定任務運行結束并回收其資源LOS_TaskDetach修改任務的joinable屬性為detach屬性,detach屬性的任務運行結束會自動回收任務控制塊資源LOS_TaskDelay延遲當前任務的執(zhí)行,在延后指定的時間(tick數)后可以被調度LOS_TaskYield將當前任務從具有相同優(yōu)先級的任務隊列,移動到就緒任務隊列的末尾任務管理功能分類接口名接口描述任務調度
LOS_TaskLock鎖定任務調度,阻止任務切換LOS_TaskUnlock解鎖任務調度。通過該接口可以使任務鎖數量減1,若任務多次加鎖,那么任務調度在鎖數量減為0時才會完全解鎖LOS_GetTaskScheduler獲取指定任務的調度策略LOS_SetTaskScheduler設置指定任務的調度參數,包括優(yōu)先級和調度策略LOS_Schedule觸發(fā)主動的任務調度任務信息獲取
LOS_CurTaskIDGet獲取當前任務的IDLOS_TaskInfoGet獲取指定任務的信息LOS_GetSystemTaskMaximum獲取系統(tǒng)支持的最大任務數任務優(yōu)先級
LOS_CurTaskPriSet設置當前正在運行的任務的優(yōu)先級LOS_TaskPriSet設置指定任務的優(yōu)先級LOS_TaskPriGet獲取指定任務的優(yōu)先級任務綁核操作
LOS_TaskCpuAffiSet綁定指定任務到指定CPU上運行,僅在多核下使用LOS_TaskCpuAffiGet獲取指定任務的綁核信息,僅在多核下使用任務管理任務管理的一般開發(fā)流程如下:(1)通過LOS_TaskCreate創(chuàng)建一個任務。指定任務的執(zhí)行入口函數指定任務名指定任務的棧大小指定任務的優(yōu)先級(2)任務參與調度運行,執(zhí)行用戶指定的業(yè)務代碼。(3)任務執(zhí)行結束。3.任務管理應用謝謝5.3.3調度器通過本節(jié)學習,您可以:了解調度器調度器調度器(scheduler)是一個操作系統(tǒng)的核心部分,是CPU時間的管理員,負責選擇最適合的就緒進程來執(zhí)行。1.
調度器概念周期性調度器CPU上下文切換主調度器選擇進程調度器類進程調度器主要完成兩件事:選擇某些就緒進程來執(zhí)行。打斷某些執(zhí)行的進程讓他們變?yōu)榫途w態(tài)調度器主調度器:通過調用schedule()函數來完成進程的選擇和切換。周期性調度器:根據頻率自動調用scheduler_tick函數,根據進程運行時間觸發(fā)調度。上下文切換:主要做兩個事情,切換地址空間、切換寄存器和棧空間。調度器類:每個調度器都有一個優(yōu)先級,它會按照優(yōu)先級順序遍歷調度類,擁有一個可執(zhí)行進程的最高優(yōu)先級的調度器類勝出,去選擇下面要執(zhí)行的那一個程序。周期性調度器CPU上下文切換主調度器選擇進程調度器類進程調度器2.調度器運行機制OpenHarmony在系統(tǒng)啟動內核初始化之后開始調度。系統(tǒng)根據進程和線程的優(yōu)先級及線程的時間片消耗情況選擇最優(yōu)的線程進行調度運行。線程一旦調度到就會從調度隊列上刪除,線程在運行過程中發(fā)生阻塞,會被加入到對應的阻塞隊列中并觸發(fā)一次調度,調度其它線程運行。如果調度隊列上沒有可以調度的線程,則系統(tǒng)就會選擇KIdle進程的線程進行調度運行。調度器OpenHarmonyLiteOS-A內核的調度器模塊提供了調度相關的接口。3.調度器
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 民警打分具體管理辦法
- 供水公司主業(yè)管理辦法
- 法蘭西國族認同研究:從“國族傳奇”看歷史演變
- 民國茶葉消費量與產量動態(tài)關系研究
- 內部濕度差異對硬化水泥漿體特性的影響研究
- 公共物品維護管理辦法
- 變頻器效率優(yōu)化-洞察及研究
- 跨界共生:“雙師型”教師企業(yè)實踐激勵機制創(chuàng)新探討
- 鞭毛狀微生物阪崎腸桿菌的乳粉檢測技術研究
- AI大模型在金融領域反欺詐中的應用研究與優(yōu)化策略
- 北京市大興區(qū)2025年初中學業(yè)水平考試地理真題(含答案)
- 第三代社保卡培訓
- 辦公室應聘題庫及答案
- 2025年河北中考地理真題含答案
- 鐵礦尾礦清運方案(3篇)
- 國開機考答案 管理學基礎2025-06-27
- 國家開放大學《思想道德與法治》社會實踐報告范文一
- 【9語安徽中考卷】2025年安徽省中考招生考試真題語文試卷(真題+答案)
- 2025年空氣過濾器行業(yè)分析報告
- 同等學力人員申請碩士學位電子科學與技術學科綜合水平全國統(tǒng)一考試大綱(第二版)
- (高清版)DG∕TJ 08-507-2018 高強混凝土抗壓強度無損檢測技術標準
評論
0/150
提交評論