这里是针对2.6内核来说的。
Linux下面调度有以下两种形式的调度方式
主动启动
被动调度
主动启动
当前进程因等待资源而需进入被阻塞状态时,调度程序将进行如下的操作:
首先把当前进程放到适当的等待队列里
把当前进程的状态设为TASK_INTERRUPTIBLE或者TASK_UNINTERRUPTIBLE
调用schedule(),让新的进程运行
被动调度
通过在当前进程的need_resched设为1来请求调度。
设置need_resched的时机:
当前进程用完了它的CPU时间片,update_process_times()重新进行计算
当一个进程被唤醒,而且它的优先级比当前进程高
当sched_setschedler()或sched_yield()系统调用被调用时
每次在进入一个用户态进程之前,都会检查need_resched
阅读(1263) | 评论(0) | 转发(0) |