修改任务状态task_struct->state和入队操作,以及__schedule操作之间,通过就绪队列大自旋锁保证互斥。
LINUX的各类抢占点
ret_to_user是异常触发,系统调用,中断处理完成后都会调用的函数,用户态抢占如下图所示:
内核态抢占
__schedule主题逻辑,整个调度函数被就绪队列大自旋锁保护,保证唤醒方ttwu_do_activate和休眠方被同一个锁保护,这样,唤醒方要么设置STATE 为RUNNING保证任务在就绪队列,要么等待任务休眠后被真正唤醒,保证唤醒操作的“功能”不被MISS掉,保证唤醒操作不被错过哪怕一次。