alios-things 任务管理一

前言

一直想深入了解下物流网、IOT,跟上时代潮流。去年alios things推出的时候,就自己买了一块alios-things developer开发版,一直放在办公室的抽屉里,没有用起来。现在alios-things都已经更新到3.0版,最近决定把alios-things捡起来,又把这块板找出来了,因为开发版是基于2.0版的,因此还是基于alios-things 2.0版学习。 在工作中项目开发用ucos比较多,alios-things的rhino内核代码风格和架构有点类似,代码阅读起来有点熟悉的感觉。本篇先总结内核的任务管理相关的内容。 对于一个内核来说,进程管理是其一个关键功能。对于一个实时操作系统来说,进程调度策略以及其使用的数据结构对系统实时性影响很大,因此首先从进程管理开始学习。

1.rhino进程的生命周期

所有的内核的生命周期都相似,下图是rhino的的一个进程生命周期。

在这里插入图片描述

2. rhino进程数据结构

2.1 rhino进程结构体

/* task control information */
typedef struct {
进程名称
const name_t *task_name;

cpu_stack_t *task_stack_base;
uint32_t stack_size;
进程链表节点
klist_t task_list;

#if (RHINO_CONFIG_TASK_SUSPEND > 0)
suspend_nested_t suspend_count;
#endif

struct mutex_s  *mutex_list;

进程休眠计数链表节点
klist_t tick_list;

tick_t tick_match;
tick_t tick_remain;
klist_t *tick_head;

void            *msg;
task_stat_t      task_state;
blk_state_t      blk_state;

/* Task block on mutex, queue, semphore, event */
blk_obj_t       *blk_obj;

进程优先级
uint8_t prio;

/* base prio */
uint8_t b_prio;
uint8_t mm_alloc_flag;
} ktask_t;

3. rhino进程就绪链表

3.1 rhino结构体

runqueue_t g_ready_queue;

typedef struct {
klist_t *cur_list_item[RHINO_CONFIG_PRI_MAX];
uint32_t task_bit_map[NUM_WORDS];
uint8_t highest_pri;
} runqueue_t;


alios-things内核为每个进程优先级都维护一个任务链表,并使用全局变量g_ready_queue保存链表头

3.2 rhino就绪进程链表

在这里插入图片描述

4. rhino进程的调度策略

alios-things的提供两种进程调度策略: KSCHED_RR和KSCHED_FIFO。
KSCHED_RR:给每个任务分配置一个时间片,然后依次轮转运行,当进程的时间到时,无论这个任务的优先级多高,都会进入就绪状态,然后等待下一个时间片到来。
KSCHED_FIFO:让任务按照先后顺序执行,先执行完一个任务,在按顺序执行下一个任务。

5. rhino进程管理

从前面的任务生命周期我们可知道,任务可以处于不同状态,下面介绍具体的改变进程状态的内核接口。

5.1 rhino任务创建API

alios-things提供多个任务创建api接口,可支持单CPU任务创建,多核CPU任务创建,静态任务创建,动态任务创建

在这里插入图片描述

### 5.1 rhino任务创建流程

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值