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; } } }
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); } } } }
public void AddtoA1in(Job job) { A1in.EnqueueJob(0, job); }
public void AddtoA1out(Job job) { A1out.EnqueueJob(0, job); }
public void AddtoAm(Job job) { Am.EnqueueJob(0, job); }