我们设计了进程队列,用于优化进程唤醒、休眠以及调度的效率.
对于等待队列和就绪队列,插入是一样的.都是从头部进行插入.
struct proc *prev = duilie;
struct proc *next = duilie;
prev->next = next->prev = p;
p->next = next;
p->prev = prev;
从头部取下一个元素.
static struct proc* delete_from_ready_queue(){
struct proc *del = ready_queue->next;
delete_a_proc(del);
// print_queue_data();
return del;
}
遍历一遍整个队列,如果chan一样就从等待队列移出.
static void delete_from_waiting_queue(void* chan){
struct proc* del = waiting_queue->next;
while(del != waiting_queue){
if(del->chan == chan){
delete_a_proc(del);
insert_into_ready_queue(del);
break;
}
else{
del = del->next;
}
}
}
按照双向链表的做法来执行操作.
static void delete_a_proc(struct proc* p){
// printf("delete a proc from queue");
struct proc *prev = p->prev;
struct proc *next = p->next;
p->next = NULL;
p->prev = NULL;
if(prev == NULL || next == NULL)
{
return ;
}
prev->next = next;
next->prev = prev;
}