操作系统LiteOS基础了解

来源:互联网 发布:免费通达信看盘软件 编辑:程序博客网 时间:2024/06/08 16:54
Huawei_LiteOS是一款开源的轻量级操作系统,其内核源码下载地址:https://github.com/LITEOS/LiteOS_Kernel或者https://github.com/Huawei/Huawei_LiteOS_Kernel

主要功能
首先回顾一个问题,什么是操作系统?操作系统是管理系统硬件和软件资源的系统软件,以方便用户使用,需要操作系统的资源包括处理器、存储器、外设、甚至包括文件系统等等。对于LiteOS的实现功能以及用户接口,在下载的文件HuaweiLiteOSKernelDevGuide.chm中有所介绍,不过文档貌似不是及时根据代码修改及时更新的,而且接口说明部分不是很完整,截取基本框图如下。

按照自己的方式来理解下,任务task作为调度运行资源的管理方式,类似于进程、线程的含义,存在优先级等等属性,对于任务间的同步和交互需要相应的同步(信号量、互斥锁)、通信(消息、时间)机制;内存管理模块即为存储资源的管理模块;而硬件中断保证了和外围部件交互的基本功能。另外文档中提到LiteOS提供了硬件、软件定时机制以及基本的问题定位检查功能(内存越界、问题现场memory及寄存器保存),下面是对各个模块功能做的一个简单了解。
关于任务
任务可以理解为线程,是调度运行的最小单元。LiteOS中的任务基于抢占式调度,亦即高优先级任务可以抢占低优先级任务,同时支持时间片轮转的调度方式,优先级可以设置为32个(0-31),0为最高优先级。任务的信息、状态等通过任务控制块TCB记录控制。任务的状态有:运行、就绪、阻塞(等待事件、正在读写队列等)、退出等。任务堆栈用来实现任务执行需要保存的信息及任务打断时相应上下文(即寄存器等信息存储)。任务可以进行创建、删除、挂起、恢复、延时、yield(显示退出?不同于协程...)等操作。
任务间的交互可以使用消息队列或事件event的方式;任务的同步及资源保护提供了互斥锁及信号量的机制。
中断处理
中断的处理包括中断开关、中断的使能和屏蔽、中断处理函数、中断优先级、向量表等等。中断类型分为GIC general interrupt controller/VIC vector interrupt controller,理解上两者的区别区别在于前者需要查询中断标志寄存器,而后者直接指向中断向量表处理函数。
LiteOS支持中断共享,即一个中断有多个中断处理函数,通过链表来实现,liteOS中断支持中断底半部。关于中断底半部和顶半部?理解类似上LISR和HISR,低级中断与高级中断差别,LISR只处理极少部分必须内容,其它功能部分通过HISR来实现。
内存管理
内存的管理保护初始化、申请、释放等操作。LiteOS中内存管理有固定大小的BOX和动态DLINK算法,又将其称为静态内存和动态内存。理解上还是使用之前接触的字节池、字节块的概念来解释更好理解。其实两种方式对于用户都可以是动态内存,只是BOX算法是固定大小的内存块,而DLINK则是可变大小的内存。或者说静态/动态的概念在liteOS内存管理上只是指存储空间大小的概念。

时间管理
时间管理模块可用来实现定时、延时等操作。liteOS有系统时间和Tick时间,系统时间即为硬件计数器得到的时间,而Tick时间用来作为操作系统的基本调度时间,其真实时间大小可以配置。定时器也分为硬件定时器,软件定时器,理解上硬件定时器以来硬件计数器及其中断,而软件定时器是以Tick时间为基本单位的。
双向链表
文档中特别提及了双向链表,在LiteOS的实现代码中使用了不少双向链表,而且链表也是比较常用的软件资源。对链表的操作有初始化、节点的插入、删除、状态判断等等,对于元素的获取,代码中使用宏定义方式,文档暂时没有体现。
异常排查
目前看到的是有内存统计、内存越界、以及系统异常后现场内存、寄存器等信息保存,没有接触到具体的实现、使用方式,需要到代码里去查找了。
目前只是对LiteOS做一个初步了解,后续再具体看看代码的具体实现,觉得LiteOS作为学习操作系统基础还是不错的,因为相对于其他开源操作系统,没有太多外围接口部分,而且文件按功能划分得比较细致。

原创粉丝点击