Ejemplo n.º 1
0
  public Job Reclaim(int id) {
    Job newjob = new Job(id, 1);
    int id_out;

    if (FreeSlots > 0) {
      // put X into a free page slot
      return newjob;
    } else {
      if (A1in.getLength() > Kin) {
        Job A1inTail = A1in.DequeueFront();
        id_out = A1inTail.JobID();
        // delete A1inTail; ??? paged out of A1in buffer (but may still need to keep the job)

        Job headerJob = new Job(id_out, 1);
        A1out.EnqueueJob(0, headerJob);

        if (A1out.getLength() > Kout) {
          Job removedHeader = A1out.DequeueFront();
          removedHeader = null;
        }
        // put X into the reclaimed page slot
        return newjob;
      } else {
        Job AmTail = Am.DequeueFront();
        AmTail = null;
        // put X into the reclaimed page slot
        return newjob;
      }
    }
  }
Ejemplo n.º 2
0
  public void Request(int id) {
    Job reclaimed = null;

    if (Am.getJob(id) != null) {
      Am.EnqueueJob(0, Am.DequeueJob(id));
    } else {
      if (A1out.getJob(id) != null) {
        reclaimed = Reclaim(id);
        Am.EnqueueJob(0, reclaimed);
      } else {
        if (A1in.getJob(id) != null) {
          // do nothing
        } else {
          reclaimed = Reclaim(id);
          A1in.EnqueueJob(0, reclaimed);
        }
      }
    }
  }
Ejemplo n.º 3
0
 public void AddtoA1in(Job job) {
   A1in.EnqueueJob(0, job);
 }
Ejemplo n.º 4
0
 public void AddtoA1out(Job job) {
   A1out.EnqueueJob(0, job);
 }
Ejemplo n.º 5
0
 public void AddtoAm(Job job) {
   Am.EnqueueJob(0, job);
 }