Advertisement
Guest User

Untitled

a guest
Mar 24th, 2019
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.33 KB | None | 0 0
  1. int pageReplacement(int *numFrames, int *numReferences, int **references){
  2.     int curReference, pageFaults = 0, curFrameSize = 0;
  3.     List list = NULL, tmp;
  4.  
  5.     // second-page algorithm
  6.     for(int i=0; i<*numReferences; i++){
  7.         curReference = (*references)[i];
  8.  
  9.         printf("%d\t\t", curReference); // DEBUG
  10.    
  11.         if( isNotInMemory(list, curReference) ){
  12.             printf("Y\t\t"); // DEBUG
  13.             pageFaults++;
  14.  
  15.             // queue is full
  16.             if( curFrameSize == (*numFrames) ){
  17.                
  18.                 while(list->referenceBit != 0){
  19.                     // set reference bit to 0
  20.                     list->referenceBit = 0;
  21.  
  22.                     // move to end of queue
  23.                     tmp = list;
  24.                     while(tmp->next != NULL){
  25.                         tmp = tmp->next;
  26.                     }
  27.                     tmp->next = list;
  28.                     list = list->next;    
  29.                 }
  30.  
  31.                 printf("[%d]  ", list->val);
  32.                 // take the head out
  33.                 tmp = list;
  34.                 list = list->next;
  35.                 // free(tmp);
  36.            
  37.                 curFrameSize--;
  38.             }
  39.  
  40.             // allocate memory for new element
  41.             List newElem = malloc(sizeof(struct ListNode));
  42.             assert( newElem != NULL);
  43.             newElem->val = curReference;
  44.             newElem->referenceBit = 0;
  45.             newElem->next = NULL;
  46.  
  47.             // insert new element at the end
  48.             tmp = list;
  49.             if(i>0){
  50.                 while(tmp->next != NULL){
  51.                     tmp = tmp->next;
  52.                 }
  53.                 tmp->next = newElem;
  54.             } else {
  55.                 list = newElem;
  56.             }
  57.          
  58.             curFrameSize++;
  59.         } else {
  60.             printf("N\t\t"); // DEBUG
  61.  
  62.             // page is in memory
  63.  
  64.             // set reference bit to 1
  65.             List referenceToPage = list;
  66.             while(referenceToPage->val != curReference){
  67.                 assert(referenceToPage != NULL);
  68.                 referenceToPage = referenceToPage->next;
  69.             }
  70.             referenceToPage->referenceBit = 1;
  71.  
  72.         }
  73.        
  74.         printList(list); // DEBUG
  75.         printf("\n");
  76.     }
  77.    
  78.     freeList(list);
  79.     return pageFaults;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement