3.2.1 抢占式调度示例
创建 3 个任务 Task1,Task2 和 Task3,优先级依次为1、2、3,即Task3的优先级最高。
起初任务 Task1处于运行态(占用CPU),运行过程中由于 Task2 就绪,在抢占式调度器的作用下任务 Task2 抢占Task1 的执行。
所以:Task2 由就绪态进入到运行态,Task1 由运行态进入到就绪态。
任务 Task2 在运行中,由于 Task3 又处于了就绪态,在抢占式调度器的作用下任务 Task3 又抢占 Task2的执行。
所以:Task3 由就绪态进入到运行态,Task2 由运行态进入到就绪态。
任务 Task3 运行过程中调用了阻塞式 API 函数,比如 vTaskDelay,任务 Task3 被挂起,进入挂起态,在抢占式调度器的作用下查找到下一个要执行的最高优先级任务是 Task2,所以:任务 Task2 由就绪态又回到了运行态。
任务 Task2 在运行中,由于 Task3 的阻塞时间结束, Task3 再次就绪,在抢占式调度器的作用下任务 Task3 再次抢占Task2 的执行。Task3 进入到运行态,Task2 由运行态进入到就绪态。
3.2.2 时间片调度示例创建 4 个同优先级任务 Task1,Task2,Task3 和 Task4。
每个任务分配的时间片大小是 5 个系统时钟节拍。
先运行任务 Task1,运行够 5 个系统时钟节拍后,通过时间片调度切换到任务 Task2。
任务 Task2 运行够 5 个系统时钟节拍后,通过时间片调度切换到任务 Task3。
任务 Task3 在运行期间调用了阻塞式 API 函数,调用函数时,虽然 5 个系统时钟节拍的时间片大小还没有用完,此时依然会通过时间片调度切换到下一个任务 Task4。
任务 Task4 运行够 5 个系统时钟节拍后,通过时间片调度切换到任务 Task1。
注:以上以5个Tick的时间片举例,而FreeRTOS的时间片只能是1个Tick。
4RTOS与TSOS
英文为Real Time Operating System,即实时操作系统,实时是指当外界事件或数据产生时,能够接收并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的操作系统。
RTOS一般用于相对低速的MCU,比如运动控制类、按键输入等动作要求实时处理的系统,一般要求ms级,甚至us级响应。
TSOS英文为Time Sharing Operating System,即分时操作系统,分时是指将系统处理机时间和内存空间按照一定的时间间隔(也就是我们所说的时间片)轮流地切换给各线程的程序使用。
TSOS一般用于相对高速的CPU,如多用户的桌面系统、服务器等系统(Windows、Linux)。
主要区别RTOS具有高优先级任务抢占功能,以及同优先级间的时间片轮转调度,因而可以对事件进行及时响应(即具有较好的实时性),而TSOS是固定的时间片轮转调度,当有事件发送时,也只能等当前时间片执行完后,才能执行下一个时间片,因此可能不能及时响应某些紧急事件。