Open LeeReindeer opened 2 years ago
对于第一个问题,比方说一个优先级为1(0为优先级最高)的任务 t1 正在运行,也就说明当前就绪队列中没有优先级比1更高的任务,优先级更高的任务不存在或者在阻塞队列中。t1 运行一段时间后,新增一个优先级为0的任务 t0,下次调度时new_tcb = ros_tcb_dequeue(current_tcb->priority);
会返回 t0 任务,并进行上下文切换,所以优先级更高的 t0 任务会抢占 t1 任务运行。
ROS 算是 preemptive multitasking,可以通过适当的编码方式实现 cooperative multitasking:
对于第二个问题,已经忘了当初写这段代码的本意是什么,如上所述,会进入该段逻辑,但是不存在需要删除TASK_TERMINATED的情况。反而造成 ROS是 preemptive multitasking,可能是当初没搞清概念。
https://github.com/LeeReindeer/ROS/blob/048799ccc07725fdb7cad54064135a60fd5fa04e/ros.c?_pjax=%23js-repo-pjax-container%2C%20div%5Bitemtype%3D%22http%3A%2F%2Fschema.org%2FSoftwareSourceCode%22%5D%20main%2C%20%5Bdata-pjax-container%5D#L139