将进程p从优先级数组array(优先级数组array的某个元素[array->queue + p->prio]所代表的优先级队列)
中删除;查看[array->queue + p->prio]所代表的优先级队列中是否还有活跃进程,如果没有将要清除优先级位图bitmap[]
static
void
dequeue_task(
struct
task_struct
*
p, prio_array_t
*
array)
{
array->nr_active--;
list_del(&p->run_list);
if (list_empty(array->queue + p->prio))
__clear_bit(p->prio, array->bitmap);
}
array->bitmap 代表优先级位图bitmap[]数组的首地址
判断head索引的双链表是否为空,为空返回true,否则返回false
static
inline
int
list_empty(
const
struct
list_head
*
head)
{
return head->next == head;
}
static
inline
void
__clear_bit(
int
nr,
volatile
unsigned
long
*
addr)
{
__asm__ __volatile__(
"btrl %1,%0"
:"=m" (ADDR)
:"Ir" (nr));
}







array->bitmap 代表优先级位图bitmap[]数组的首地址
判断head索引的双链表是否为空,为空返回true,否则返回false











