阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

漫谈 Huawei LiteOS 五大内核模块

  • 2020-06-12
  • 本文字数:2789 字

    阅读完需:约 9 分钟

漫谈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 通过优先级继承算法,解决了信号量存在的优先级翻转问题。


运作机制


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


互斥锁运作示意图



2020-06-12 20:28982

评论

发布
暂无评论
发现更多内容

深入理解数组的slice方法

好程序员IT教育

JavaScript 数组 slice

Apache ShenYu 集成 RocketMQ 实时采集海量日志的实践

Apache RocketMQ

RocketMQ 消息队列 Apache ShenYu

几分钟实现对恶意IP地址进行拦截,腾讯云Web防火墙实在太香了!

wljslmz

腾讯云 Web应用防火墙 黑名单 11月月更

RocketMQ 在物流行业的应用与运维

Apache RocketMQ

RocketMQ 消息队列 Apache RocketMQ

【C语言】else 语句

謓泽

11月月更

SpringCloudAlibaba 微服务组件 Nacos 之配置中心源码深度解析

程序员小毕

微服务 后端 nacos 架构师 java面试

大数据培训后就业前景和方向

小谷哥

北京前端培训怎么去学习

小谷哥

KUMU×微帧科技,为菲律宾独角兽提供编码API服务

微帧Visionular

Apache Doris 1.1.4 版本正式发布!

SelectDB

数据库 大数据 数据仓库 Doris LTS

【spring-kafka】@KafkaListener详解与使用

石臻臻的杂货铺

kafka 11月月更

用python写一个时钟模型

乔乔

11月月更

开源的YAPI外还有哪些免费的接口工具?

Liam

开源 YAPI 接口工具 免费

CAP/BASE

苏格拉格拉

分布式 CAP Base

大数据培训怎么选择,就业还大不大

小谷哥

大数据培训学习前景如何

小谷哥

计算机网络:随机访问介质访问控制之CSMA/CA协议

timerring

计算机网络 11月月更 CSMA CSMA/CA

区块链基础知识介绍及dapp简单介绍

W13902449729

区块链 dapp

模块五-作业

Weldon

架构实战营

【11.04-11.11】写作社区优秀技术博文回顾

InfoQ写作社区官方

热门活动

面试还不懂JVM调优,看这篇文章就够了!

Java全栈架构师

程序员 性能优化 JVM java面试 jvm调优

性能测试岗位能力模型

老张

性能测试 胜任力模型

昇腾AI异构计算架构CANN 6.0全新开放升级,全面释放AI生产力

Geek_2d6073

科普|什么是元宇宙

NFT Research

区块链 NFT 元宇宙

AI音乐创作,让每一个人都成为音乐家

叶落便知秋

什么是区块链Dapp智能合约系统开发?

W13902449729

区块链 dapp开发

Java Web(四)JS

浅辄

javaWeb JavaScrip 11月月更

React-Native 开发实用指南

环信

前端 开发 React Native Android;

分布式数据库九大发展趋势|文末附完整报告下载

OceanBase 数据库

前端培训学习后就业前景怎么样

小谷哥

Sentinel

苏格拉格拉

分布式 微服务 sentinel 熔断 限流

漫谈Huawei LiteOS五大内核模块_5G/IoT_华为云开发者联盟_InfoQ精选文章