把握行业变革关键节点,12 月 19 日 - 20 日,AICon北京站即将重磅启幕! 了解详情
写点什么

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

评论

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

大数据-31 ZooKeeper 内部原理 Leader选举 ZAB协议

武子康

Java 大数据 zookeeper 分布式 注册中心

第五款 HarmonyOS 上架作品 奇趣故事匣 来了

万少

HarmonyOS

Datax安装及基本使用

刘大猫

人工智能 数据挖掘 算法 数据分析 DataX

CrossOver和虚拟机哪个好用?苹果电脑怎么运行Windows软件?

阿拉灯神丁

pd虚拟机 CrossOver Mac下载 如何在Mac运行win

0day漏洞的崛起:网络安全领域的隐形威胁

qife122

网络安全 0day攻击

在AI时代挖掘新需求:从安全黑名单项目中洞察用户真实诉求

qife122

网络安全 需求分析

http流量镜像

八苦-瞿昙

AI时代深度思考-Remote Agent新一代软件开发协同范式

AI agent cursor

Parallels Desktop对Mac的损害大吗 PD虚拟机怎么设置内存和CPU 运行Parallels玩游戏发热怎么办

阿拉灯神丁

Mac 软件 pd虚拟机 Parallels Desktop Parallels 永久密钥 虚拟机安装

2025年需重点关注的高危CVE:关键漏洞追踪指南

qife122

网络安全 CVE

在AI时代挖掘真实需求:从某知名代理工具的用户反馈看功能演进

qife122

需求分析 代理工具

7年前被骗的钱回来了!虽然被骗4.1w只回来不到2千,但我又一次相信公平正义了!

程序员晚枫

大数据-32 ZooKeeper 分布式锁 Java 附带案例 代码

武子康

Java 大数据 hadoop zookeeper 分布式

基于 ETL 工具实现人大金仓数据库的数据迁移与整合实操指南

谷云科技RestCloud

数据库 数据迁移 ETL 人大金仓 数据集成工具

北京中烟创新科技有限公司:资质与荣誉的双重里程碑(深度解析)

中烟创新

n8n完全指南:从入门到精通的工作流自动化实践

知识浅谈

n8n 自动化、

Macs Fan Control Pro|解锁隐藏风扇设置!

柠檬与橘子

商场广告:LED显示屏如何成为吸睛利器?

Dylan

广告 LED显示屏 全彩LED显示屏 led显示屏厂家 户内led显示屏

全球百万用户的选择:咕泡科技,推动每一次人才升级!

咕泡科技

人工智能 AI 咕泡科技

1688商品详情API全字段解析:从基础参数到SKU深度挖掘

tbapi

1688商品详情接口 1688API 1688数据采集

使用 Flink 读写 Iceberg 表

Joseph295

Bigasoft Total Video Converter for Mac(视频转换器)

晨光熹微

漏洞赏金猎人如何最大化利用VPS:从自动化脚本到高级安全测试

qife122

网络安全 漏洞挖掘

StarRocks × Tableau 连接器完整使用指南 | 高效数据分析从连接开始

镜舟科技

数据分析 StarRocks Tableau 可视化数据 交互式分析

从零构建分布式索引系统OriginDB:原型篇

shihlei

MySQL 数据库 lucene redisearch 内存索引数据库

使用Freeway工具进行WiFi渗透测试的实用指南

qife122

网络安全 WiFi安全

1688商品列表API全参数指南:从基础搜索到高级筛选

tbapi

1688商品列表接口 1688API 1688商品数据采集

WebGL开发数字孪生项目的流程

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

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

车用虚拟化技术:域控融合的必经之路

财见

Redis 实现一个高性能轻量级消息队列

Geek_e3e86e

Java 编程

Fork for Mac(Git客户端)

晨光熹微

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