/** * Pff class */ class Pff { java.util.Vector dMemory; /** * Pff constructor */ public Pff() { super(); dMemory = new java.util.Vector(); } /** * for testing: print the contexts of the memory */ public void printMemoryContext() { Page page; for (int j=0; j increment the inter-fault time interFaultTime++; bInMemory = true; break; } } // page is not in memory if (bInMemory == false) { // IFT < threshold if (interFaultTime < threshold - 1) { // reset the reference bit to 0 for (j = 0; j < dMemory.size(); j++) { page = (Page) dMemory.elementAt(j); if (page.getCount() == 1) { page.setCount(0); dMemory.removeElementAt(j); dMemory.insertElementAt(page, j); } } // allocate a new frame to the process page = new Page(pageReference[i], 0); dMemory.addElement(page); interFaultTime = 0; pageFault++; } else { // IFT >= threshold j = 0; while (j < dMemory.size()) { page = (Page) dMemory.elementAt(j); // deallocate all frames whose reference bit is not set if (page.getCount() == 0) { dMemory.removeElementAt(j); } else { j++; } } for (j = 0; j< dMemory.size(); j++) { page = (Page) dMemory.elementAt(j); // reset all reference bits if (page.getCount() == 1) { page.setCount(0); dMemory.removeElementAt(j); dMemory.insertElementAt(page, j); } } page = new Page(pageReference[i], 0); dMemory.addElement(page); interFaultTime = 0; pageFault++; } } // calculate number of frames used framesUsed += dMemory.size(); i++; //printMemoryContext(); } dMemory.removeAllElements(); //System.out.println("framesUsed: " + framesUsed + " , pageFault: " + pageFault); double[] result = new double[2]; result[0] = pageFault; result[1] = framesUsed; return result; } }