漫谈Huawei LiteOS五大内核模块

【摘要】 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经过优先级继承算法,解决了信号量存在的优先级翻转问题。

运做机制

任意时刻互斥锁只有两种状态:开锁或闭锁。 当有任务持有时,互斥锁处于闭锁状态 ,这个任务得到该互斥锁的全部权。 当该任务释放它时,该互斥锁被开锁 ,任务失去该互斥锁的全部权。当一个任务持有互斥锁时,其余任务将不能再对该互斥锁进行开锁或持有,因此其余任务此时访问这个公共资源将会被阻塞,直到互斥锁被持有该锁的任务释放后,其余任务才能从新访问该公共资源。

互斥锁运做示意图

相关文章
相关标签/搜索