一旦这个主动放弃CPU的进程被重新调度占用CPU, 那么它将从上次停止执行的位置开始执行, 也就是说它将从调用schedule()的下一行代码处开始执行....在这种情况下, 进程则必须从运行队列移出, 加入到一个等待队列中, 这个时候进程就进入了睡眠状态....可是有的时候进程却会在判定条件为真后开始睡眠, 如果这样的话进程就会无限期地休眠下去, 这就是所谓的无效唤醒问题....设想有两个进程A 和B, A 进程正在处理一个链表, 它需要检查这个链表是否为空, 如果不空就对链表里面的数据进行一些操作, 同时B进程也在往这个链表添加节点....然后循环检查条件是否为真: 如果是的话就没有必要睡眠, 如果条件不为真, 就调用schedule
当进程检查的条件满足后, 进程又将自己设置为TASK_RUNNING并调用remove_wait_queue