RTOS |
您所在的位置:网站首页 › 任务调度过程 › RTOS |
RTOS——任务调度—抢占式,时间片轮转式
抢占式调度器的实现运行条件运行过程描述如下:
时间片调度器基本概念
抢占式调度器的实现
如果用户在 FreeRTOS 的配置文件 FreeRTOSConfig.h 中禁止使用时间片调度, 那么每个任务必须配 置不同的优先级。当 FreeRTOS 多任务启动执行后,基本会按照如下的方式去执行: 首先执行的最高优先级的任务 Task1, Task1 会一直运行直到遇到系统阻塞式的 API 函数,比如延迟, 事件标志等待,信号量等待,Task1 任务会被挂起,也就是释放 CPU 的执行权,让低优先级的任务 得到执行。 FreeRTOS 操作系统继续执行任务就绪列表中下一个最高优先级的任务 Task2,Task2 执行过程中有 两种情况: Task1由于延迟时间到, 接收到信号量消息等方面的原因, 使得 Task1从挂起状态恢复到就绪态, 在抢占式调度器的作用下,Task2 的执行会被 Task1 抢占。 Task2 会一直运行直到遇到系统阻塞式的 API 函数,比如延迟,事件标志等待,信号量等待, Task2 任务会被挂起,继而执行就绪列表中下一个最高优先级的任务。 如果用户创建了多个任务并且采用抢占式调度器的话,基本都是按照上面两条来执行。 根据抢占式调 度器,当前的任务要么被高优先级任务抢占,要么通过调用阻塞式 API 来释放 CPU 使用权让低优先 级任务执行,没有用户任务执行时就执行空闲任务。 这里仅对抢占式调度进行说明。 创建 3 个任务 Task1,Task2 和 Task3。 Task1 的优先级为 1,Task2 的优先级为 2,Task3 的优先级为 3。 FreeRTOS 操作系统是设置的数值 越小任务优先级越低,故 Task3 的优先级最高,Task1 的优先级最低。 此框图是 FreeRTOS 操作系统运行过程中的一部分。 运行过程描述如下: 此时任务 Task1 在运行中,运行过程中由于 Task2 就绪,在抢占式调度器的作用下任务 Task2 抢占 Task1 的执行。 Task2 进入到运行态,Task1 由运行态进入到就绪态。 任务 Task2 在运行中,运行过程中由于 Task3 就绪,在抢占式调度器的作用下任务 Task3 抢占 Task2 的执行。 Task3 进入到运行态,Task2 由运行态进入到就绪态。 任务 Task3 运行过程中调用了阻塞式 API 函数,比如 vTaskDelay,任务 Task3 被挂起,在抢占式调 度器的作用下查找到下一个要执行的最高优先级任务是 Task2,任务 Task2 由就绪态进入到运行态。 任务 Task2 在运行中,运行过程中由于 Task3 再次就绪,在抢占式调度器的作用下任务 Task3 抢占 Task2 的执行。 Task3 进入到运行态,Task2 由运行态进入到就绪态。 上面就是一个简单的不同优先级任务通过抢占式调度进行任务调度和任务切换的过程。 时间片调度器基本概念在小型的嵌入式 RTOS 中,最常用的的时间片调度算法就是 Round-robin 调度算法。这种调度算法 可以用于抢占式或者合作式的多任务中。另外,时间片调度适合用于不要求任务实时响应的情况。 实现 Round-robin 调度算法需要给同优先级的任务分配一个专门的列表,用于记录当前就绪的任务, 并为每个任务分配一个时间片(也就是需要运行的时间长度,时间片用完了就进行任务切换)。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |