仔细看了看任哲的书。对于提问的认知有些写调整。
1.uC/OS-II里的任务优先级是唯一的,即:不能存在优先级相等的任务
2.运行中的任务根本就不在就绪列表中。
对于1,这是正确的。uC/OS-II不支持时间片轮番调度法。应用程序中的个任务的优先级必须互不相等。
对于2,则是错误的。正在运行的任务可以是就绪状态也可以不是就绪状态。即运行状态的任务可能在就绪列表有标记,也可能没有。
观察任哲书对OSTimeDly()函数的注释可以得到启示。
注释中有这么一句话“取消当前任务的就绪状态”,可以揣摩出:正在运行的任务“可以是/也可以不是”就绪表中标记的任务。
例如:在发送事件时(事件的等待队列中含有等待的任务的情况下),系统将执行等待队列中优先级最高的任务,此时当前运行的任务就不是就绪状态。
PS:在不断的学习过程中,也越发的觉得正在运行的任务可能就在就绪列表中有标记。当认定“正在运行的任务“可以是/也可以不是”就绪表中标记的任务”是正确的后,思考各种情况下的任务调度也是合理的。
目前,认知就到这里。不知道理解的对不对。希望大牛指正。
仔细看了看任哲的书。对于提问的认知有些写调整。
1.uC/OS-II里的任务优先级是唯一的,即:不能存在优先级相等的任务
2.运行中的任务根本就不在就绪列表中。
对于1,这是正确的。uC/OS-II不支持时间片轮番调度法。应用程序中的个任务的优先级必须互不相等。
对于2,则是错误的。正在运行的任务可以是就绪状态也可以不是就绪状态。即运行状态的任务可能在就绪列表有标记,也可能没有。
观察任哲书对OSTimeDly()函数的注释可以得到启示。
注释中有这么一句话“取消当前任务的就绪状态”,可以揣摩出:正在运行的任务“可以是/也可以不是”就绪表中标记的任务。
例如:在发送事件时(事件的等待队列中含有等待的任务的情况下),系统将执行等待队列中优先级最高的任务,此时当前运行的任务就不是就绪状态。
PS:在不断的学习过程中,也越发的觉得正在运行的任务可能就在就绪列表中有标记。当认定“正在运行的任务“可以是/也可以不是”就绪表中标记的任务”是正确的后,思考各种情况下的任务调度也是合理的。
目前,认知就到这里。不知道理解的对不对。希望大牛指正。
举报