//void //int prio; //float ratio; void upgrade_process_prio(int prio,float ratio) { int count; int n; Ele *proc; List *src_queue, *dest_queue; if (prio >= MAXPRIO) { return; } src_queue = prio_queue[prio]; dest_queue = prio_queue[prio+1]; count = src_queue->mem_count; if (count > 0) { n = (int) (count*ratio + 1); proc = find_nth(src_queue, n); if (proc) { src_queue = del_ele(src_queue, proc); /* append to appropriate prio queue */ proc->priority = prio; dest_queue = append_ele(dest_queue, proc); } } }
//void void block_process() { schedule(); if (cur_proc) { block_queue = append_ele(block_queue, cur_proc); } }
void quantum_expire() { int prio; schedule(); if (cur_proc) { prio = cur_proc->priority; prio_queue[prio] = append_ele(prio_queue[prio], cur_proc); } }
void init_prio_queue(int prio, int num_proc) { List *queue; Ele *proc; int i; queue = new_list(); for (i=0; i<num_proc; i++) { proc = new_process(prio); queue = append_ele(queue, proc); } prio_queue[prio] = queue; }
void unblock_process(float ratio) { int count; int n; Ele *proc; int prio; if (block_queue) { count = block_queue->mem_count; n = (int) (count*ratio + 1); proc = find_nth(block_queue, n); if (proc) { block_queue = del_ele(block_queue, proc); prio = proc->priority; prio_queue[prio] = append_ele(prio_queue[prio], proc); } } }
//int prio; void add_process(int prio) { Ele *proc; proc = new_process(prio); prio_queue[prio] = append_ele(prio_queue[prio], proc); }