写点什么

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

评论

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

【DevOps系列】升级你的制品:探讨制品晋级的战略

嘉为蓝鲸

制品管理 制品仓库 制品仓库 Packages

淘宝电商API全解析:赋能商家,驱动电商新生态

代码忍者

API 接口 pinduoduo API

法国 mixtral一种具有开放权重的高质量稀疏专家混合模型

测吧(北京)科技有限公司

测试

35 位委员参会,龙蜥社区 11 月技术委员会会议圆满结束

OpenAnolis小助手

操作系统 龙蜥社区 龙蜥技术委员会

渠道伙伴业务系统上线!嘉为蓝鲸WeOps渠道战略重要里程碑

嘉为蓝鲸

#WeOps

牛市来啦?交易量大涨!金融机构如何强化应急体系,筑牢运维安全防线?

嘉为蓝鲸

运维 可观测 应急响应 IT运维管理

智能运维树标杆!嘉为蓝鲸通过信通院首批AI Cloud Stability评估

嘉为蓝鲸

运维 AIOPS 大模型 中国信通院

webGL开发框架及特点

北京木奇移动技术有限公司

软件外包公司 数字孪生开发 webgl开发

开源进校园,开放原子校源行 Meetup(中南大学站)圆满结束

OpenAnolis小助手

操作系统 龙蜥高校行

京东电商搜索:大模型生成式检索优化实践

京东零售技术

大模型

【DevOps系列】DevOps全过程质量管控

嘉为蓝鲸

DevOps 研发 质量管控

DevOps系列之从前线到后勤:制品管理的演变历史

嘉为蓝鲸

DevOps 制品库 制品管理

边缘计算+人工智能:让设备更聪明的秘密

天津汇柏科技有限公司

边缘计算 AI 人工智能

硬核、高能,龙蜥社区走进中科方德 MeetUp 圆满结束(附技术PPT下载)

OpenAnolis小助手

操作系统 龙蜥社区 龙蜥meetup

稳!Zilliz助力XTransfer基于RAG打造B2B外贸金融加速器

Zilliz

Milvus zilliz cloud 大模型应用 企业知识库

【DevOps系列】制品库在行动:本地管理与多地同步的实战应用

嘉为蓝鲸

制品库 制品管理

嘉为蓝鲸受邀参加信通院2024数字化转型发展大会,携手客户斩获多项荣誉!

嘉为蓝鲸

数字化 中国信通院 研运一体化

如何设置AD域用户仅登录到指定的计算机?AD域管理软件

运维有小邓

AD域 IT自动化运维 AD域管理

【DevOps系列】效能洞察的准备工作指南

嘉为蓝鲸

DevOps 研发 效能平台 效能洞察

【DevOps系列】效能洞察4步走:金融企业效能度量转型实践

嘉为蓝鲸

DevOps 效能平台 效能洞察

从虚拟到现实:数字孪生与数字样机的进化之路

DevOps和数字孪生

「百度集团」资深副总裁、原IDG负责人李震宇加入“华为系”具身智能赛道初创公司!

机器人头条

自动驾驶 华为 人形机器人 具身智能

产品经理如何进行竞品分析

易成研发中心

产品经理 竞品分析

OASA走进三未信安、奇安信和360,共建龙蜥安全生态

OpenAnolis小助手

操作系统 龙蜥安全联盟

【DevOps系列】保护你的制品:制品的安全策略与实践

嘉为蓝鲸

DevOps 制品库 制品管理

《Django 5 By Example》阅读笔记:p493-p520

codists

Python django

【DevOps系列】赋能开发:理解仓库代理的力量

嘉为蓝鲸

制品库管理 制品库 制品仓库 Packages

DocFlow票据AI自动化处理工具:出色的文档解析+抽取能力,提升企业文档数字化管理效能

合合技术团队

人工智能 数字化 文档解析 票据

QT软件外包开发流程

北京木奇移动技术有限公司

软件外包公司 QT外包开发 QT开发公司

倒计时1天!龙蜥社区可信计算SIG MeetUp即将在北京召开

OpenAnolis小助手

操作系统 可信计算 龙蜥meetup

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