红联Linux门户
Linux帮助

Linux选择下一个进程

发布时间:2015-02-05 10:26:25来源:linux网站作者:brucexu1978

在Linux的schedule中,首先调用sched_find_first_bit(array->bitmap)发现优先级queue,通常运行队列array->bitmap的相应位在enqueue_task时被设置,在dequeue_task时被清除,然后选择该运行队列的优先级queue的next(即该queue的第一个)。当next被选择以后,除非是FIFO类型的实时进程,否则该next都会被重新放到运行队列的队尾。


对于同一优先级实时进程和普通进程,在同一个运行队列中(同一个cpu中),先创建的进程先运行。如果不在同一个cpu中(运行队列中),不能保证先创建的进程先运行。

在同一运行队列中的优先级高的进程先运行,但不同cpu上的两个进程,不论优先级如何,谁先执行是不能保证的。也就是说:如果进程创建多个即使是FIFO属性的子进程或者线程, 但不能保证他们在同一个运行队列上,则不能保证先创建的子进程或者线程先运行。


注意对于线程, call pthread_cancel(), 则只有当线程已经运行了,才能被cancel。

至于新创建的进程插在运行队列的什么位置,看Linux kernel 的page122.