请注意该过程不涉及核心调度器....请注意该过程不涉及核心调度器.
3.1 wake_up_process
我们可以使用wake_up_process将刚才那个进入睡眠的进程唤醒, 该函数定义在kernel/sched/core.c, line...(八)
使用fork创建进程的时候, 内核会调用_do_fork(早期内核对应do_fork)函数完成内核的创建, 其中在进程的信息创建完毕后, 就可以使用wake_up_new_task将进程唤醒并添加到就绪队列中等待调度...设想有两个进程A 和B, A 进程正在处理一个链表, 它需要检查这个链表是否为空, 如果不空就对链表里面的数据进行一些操作, 同时B进程也在往这个链表添加节点....TASK_RUNNING,所以wake_up_process将A进程状态从睡眠状态转变为运行状态的努力没有起到预期的作用.
4.3 避免无效抢占
要解决这个问题, 必须使用一种保障机制使得判断链表为空和设置进程状态为睡眠状态成为一个不可分割的步骤才行