Exemplo n.º 1
0
//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);
        }
    }
}
Exemplo n.º 2
0
//void
void block_process()
{
    schedule();
    if (cur_proc)
    {
        block_queue = append_ele(block_queue, cur_proc);
    }
}
Exemplo n.º 3
0
void quantum_expire() {
  int prio;
  schedule();
  if (cur_proc) {
    prio = cur_proc->priority;
    prio_queue[prio] = append_ele(prio_queue[prio], cur_proc);
  }	
}
Exemplo n.º 4
0
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;
}
Exemplo n.º 5
0
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);
    }
  }
}
Exemplo n.º 6
0
//int prio;
void add_process(int prio)
{
    Ele *proc;
    proc = new_process(prio);
    prio_queue[prio] = append_ele(prio_queue[prio], proc);
}