CC-14 : Simulate a Page Cache.
Description:
Simulate a Page cache of size 3 pages using a Queue and count number of page faults with array of 13 non-unique pages.
Test cases and expected outputs:
| Input Parameters | Expected outputs |
|---|---|
| QueuePageFaultReplacement queue= new QueuePageFaultReplacement(); int[] arr= { 1,0,1,3,4,7,4,4,5,9,0,3,1}; retVal=queue.queuePageFaultReplacement(arr, 3); System.out.println("Final Faults count: "+retVal); |
Original Array: : 1,0,1,3,4,7,4,4,5,9,0,3,1 New Page: 1 Pages Queue nodes: 1 <- Faults count: 1 New Page: 0 Pages Queue nodes: 1 <- 0 <- Faults count: 2 New Page: 1 Pages Queue nodes: 1 <- 0 <- Faults count: 2 New Page: 3 Pages Queue nodes: 1 <- 0 <- 3 <- Faults count: 3 New Page: 4 Pages Queue nodes: 0 <- 3 <- 4 <- Faults count: 4 New Page: 7 Pages Queue nodes: 3 <- 4 <- 7 <- Faults count: 5 New Page: 4 Pages Queue nodes: 3 <- 4 <- 7 <- Faults count: 5 New Page: 4 Pages Queue nodes: 3 <- 4 <- 7 <- Faults count: 5 New Page: 5 Pages Queue nodes: 4 <- 7 <- 5 <- Faults count: 6 New Page: 9 Pages Queue nodes: 7 <- 5 <- 9 <- Faults count: 7 New Page: 0 Pages Queue nodes: 5 <- 9 <- 0 <- Faults count: 8 New Page: 3 Pages Queue nodes: 9 <- 0 <- 3 <- Faults count: 9 New Page: 1 Pages Queue nodes: 0 <- 3 <- 1 <- Faults count: 10 Final Faults count: 10 |
Pseudocode:
| Declare and initialize a HashSet to hold unique pages from input pages array. |
| Declare and initialize a Queue to hold page cache of size 3. |
| Initialize an integer variable to 0 to be used as page fault counter. |
| Using a for loop iterate through all elements of input page array:
If unique pages HashSet size is less than page cache Queue size:
If unique pages HashSet does not contain current page from array, add it to unique pages HashSet and page cache Queue.
Increment the page fault counter.
Else:
If unique pages HashSet does not contain current page from array.
Remove the first page from page fault cache.
Add the current page to unique pages HashSet and page cache Queue.
Increment the page fault counter.
|
Code:
public int queuePageFaultReplacement(int[] pages, int pgCacheSize) throws Exception {
HashSet< Integer > unqPages=new HashSet< Integer >();
Queue< Integer > pgQueue=new LinkedList< Integer >();
int faults=0; int removedPg;
for (int idx=0; idx< pages.length; idx++) {
if (unqPages.size() < pgCacheSize) {
if (unqPages.contains(pages[idx])==false) {
unqPages.add(pages[idx]);
pgQueue.add(pages[idx]);
faults++;
}
}else {
if (unqPages.contains(pages[idx])==false) {
removedPg=pgQueue.remove();
unqPages.remove(removedPg);
pgQueue.add(pages[idx]);
unqPages.add(pages[idx]);
faults++;
}
}
System.out.println("New Page: "+pages[idx]);
System.out.println("Pages Queue: ");
printQueue(pgQueue);
System.out.println("Faults count: "+faults);
}
return faults;
}
Click here to download and run code and test cases !
| About Us | Privacy Policy | Contact us |