2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

漫谈 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:281528

评论

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

暑期参加百度网盘AI大赛,夺万元现金、获大厂内推!

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

AI算力爆发,新职业出现,你发现了吗?

小魏写代码

人工智能 AI算力

如何开发一对一视频源码

山东布谷网络科技

App 源代码

【落下帷幕】2023 中国大学生计算机设计大赛大数据应用大类国赛评审

ModelWhale

云计算 数据分析 在线编程 数据科学竞赛 中国大学生计算机设计大赛

防范地质灾害,北斗用芯监测

江湖老铁

UPS设备在物流机房中的应用浅析 | 京东物流技术团队

京东科技开发者

机房管理 企业号 7 月 PK 榜 UPS

并发编程-CompletableFuture解析 | 京东物流技术团队

京东科技开发者

并发编程 CompletableFuture JDK1.8 企业号 7 月 PK 榜

ChatGPT下程序员应该何去何从?

小魏写代码

ChatGPT 新手用ChatGPT

和鲸 ModelWhale 与海光适配认证,“国产 CPU +开发平台” 双轮驱动信创生态建设及 AI 产业应用

ModelWhale

cpu 数字化转型 信创 数据科学 信创产业

2023 数字生态发展大会,和鲸 ModelWhale 入选中国信通院“铸基计划”《高质量数字化转型产品及服务全景图》

ModelWhale

数字化转型 中国信通院 铸基计划

【实践篇】推荐算法PaaS化探索与实践 | 京东云技术团队

京东科技开发者

PaaS 推荐算法 PaaS平台化能力 企业号 7 月 PK 榜

如何基于 Apache Doris 构建新一代日志分析平台

SelectDB

数据库 大数据 数据分析 Doris

Java 命令行参数解析方式探索(四):Spark & Flink

冰心的小屋

Java spark 命令行 command Parameter

聊聊测试当下的求职困境

老张

软件测试 求职面试

[硬核技术] 时序数据预测算法研究:Prophet

乘云数字DataBuff

HDC.Together2023 HarmonyOS学生公开课议程抢先看!

HarmonyOS开发者

HarmonyOS

信创产业未来发展如何

小魏写代码

信创 信创产业

DWS轻量化更新黑科技:宽表加工优化

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 7 月 PK 榜

软件测试/测试开发丨Python 内置库 sys 学习笔记分享

测试人

Python 程序员 软件测试

【好文推荐】敏捷绩效考核如何做?

ShineScrum

河北幸福消费金融基于 Apache Doris 构建实时数仓,查询提速 400 倍!

SelectDB

数据库 大数据 数据分析 后端 Doris

【7.21-7.28】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动 优质创作周报

PoseiSwap 即将开启质押,利好刺激下 POSE通证短时涨超 30%

BlockChain先知

瀚元科技:利用A-OPS 智能运维助力边缘服务器运维效率提升30%

openEuler

Linux 运维 操作系统 openEuler 边缘

数据库优化器设计穿越探索之旅

阿里技术

数据库 架构

PoseiSwap 即将开启质押,利好刺激下 POSE通证短时涨超 30%

西柚子

浅析 TiSpark v3.x 新变化

TiDB 社区干货传送门

版本测评 新版本/特性解读 7.x 实践

区块链服务网络的顶层设计与应用实践

BSN研习社

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