Advertisement
TukoVPN

FIFOLRUv1

Nov 18th, 2022 (edited)
791
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 10.08 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <conio.h>
  5.  
  6. void pline(int numberOfPage){
  7.     printf("\t");
  8.     for(int i=0; i<numberOfPage; i++){
  9.         printf("----");
  10.     }
  11.     printf("-\n");
  12. }
  13.  
  14. void ppercent(int pageHF, int numberOfPage){
  15.     float percent;
  16.     printf("\t");
  17.     for(int i=0; i<pageHF; i++){
  18.         printf("||||");
  19.     }
  20.     percent = ((float)pageHF / (float)numberOfPage) * 100;
  21.     printf(" %.2f %%", percent);
  22.     printf("\n");
  23. }
  24.  
  25. int getLoc(int time[], int n){
  26.     int minimum = time[0], loc = 0;
  27.  
  28.     for(int i=1; i < n; i++){
  29.         if(time[i] < minimum){
  30.             minimum = time[i];
  31.             loc = i;
  32.         }
  33.     }
  34.     return loc;
  35. }
  36. void lru(char referenceString[], int numOfFrames, int numberOfPage){
  37.     int pos, pageFault = 0, pageHit = 0;
  38.     int count = 0, loc;
  39.  
  40.     char lru[numOfFrames];
  41.     char timeSnapshot[numberOfPage];
  42.     char result[numOfFrames][numberOfPage];
  43.     int time[numOfFrames];
  44.  
  45.     for(int i=0; i<numOfFrames; i++){
  46.         lru[i] = '-';
  47.     }
  48.  
  49.     for(int i=0; i<numberOfPage; i++){
  50.         int notEmpty = 1, isFull = 1;
  51.  
  52.         for(int j=0; j<numOfFrames; j++){
  53.             if(lru[j] == referenceString[i]){
  54.                 count++;
  55.                 time[j] = count;
  56.                 pageHit++;
  57.                 notEmpty = isFull = 0;
  58.                 timeSnapshot[i] = '-';
  59.                 break;
  60.             }
  61.         }
  62.  
  63.         if(notEmpty){
  64.             for(int j=0; j<numOfFrames; j++){
  65.                 if(lru[j] == '-'){
  66.                     count++;
  67.                     pageFault++;
  68.                     lru[j] = referenceString[i];
  69.                     time[j] = count;
  70.                     timeSnapshot[i] = '*';
  71.                     isFull = 0;
  72.                     break;
  73.                 }
  74.             }
  75.         }
  76.  
  77.         if(isFull){
  78.             loc = getLoc(time, numOfFrames);
  79.             count++;
  80.             pageFault++;
  81.             lru[loc] = referenceString[i];
  82.             time[loc] = count;
  83.             timeSnapshot[i] = '*';
  84.         }
  85.  
  86.         for(int j=0; j<numOfFrames; j++){
  87.             result[j][i] = lru[j];
  88.         }
  89.     }
  90.     printf("\n\n");
  91.     pline(numberOfPage);
  92.     printf("\t");
  93.     printf("|");
  94.     for(int i=0; i<numberOfPage; i++){
  95.         printf(" %c |", referenceString[i]);
  96.     }
  97.     printf("\n");
  98.     pline(numberOfPage);
  99.     for(int j=0; j<numOfFrames; j++){
  100.         printf("\t|");
  101.         for(int i=0; i<numberOfPage; i++){
  102.             printf(" %c |", result[j][i]);
  103.         }
  104.         printf("\n");
  105.     }
  106.     pline(numberOfPage);
  107.     printf("\t");
  108.     printf("|");
  109.     for(int i=0; i<numberOfPage; i++){
  110.         printf(" %c |", timeSnapshot[i]);
  111.     }
  112.     printf("\n");
  113.     pline(numberOfPage);
  114.  
  115.     printf("\n\t[ * ] Page Faults:\t%d / %d\n", pageFault, numberOfPage);
  116.     pline(numberOfPage);
  117.     ppercent(pageFault, numberOfPage);
  118.     pline(numberOfPage);
  119.     printf("\n\n\t[ - ] Page Hits:\t%d / %d\n", pageHit, numberOfPage);
  120.     pline(numberOfPage);
  121.     ppercent(pageHit, numberOfPage);
  122.     pline(numberOfPage);
  123. }
  124. void fifo(char referenceString[], int numOfFrames, int numberOfPage){
  125.     int pageFault = 0, pageHit = 0, localLoop = 0;
  126.  
  127.     char fifo[numOfFrames];
  128.     char timeSnapshot[numberOfPage];
  129.     char result[numOfFrames][numberOfPage];
  130.  
  131.     for(int i=0; i<numOfFrames; i++){
  132.         fifo[i] = '-';
  133.     }
  134.  
  135.     for(int i=0; i<numberOfPage; i++){
  136.         int isHit = 0;
  137.         for(int j=0; j<numOfFrames; j++){
  138.             if(fifo[j] == referenceString[i]){
  139.                 pageHit++;
  140.                 isHit = 1;
  141.                 timeSnapshot[i] = '-';
  142.             }
  143.         }
  144.         if(!isHit){
  145.             pageFault++;
  146.             fifo[localLoop] = referenceString[i];
  147.             localLoop = (localLoop+1) % numOfFrames;
  148.             timeSnapshot[i] = '*';
  149.         }
  150.         for(int j=0; j<numOfFrames; j++){
  151.             result[j][i] = fifo[j];
  152.         }
  153.     }
  154.  
  155.     printf("\n\n");
  156.     pline(numberOfPage);
  157.     printf("\t");
  158.     printf("|");
  159.     for(int i=0; i<numberOfPage; i++){
  160.         printf(" %c |", referenceString[i]);
  161.     }
  162.     printf("\n");
  163.     pline(numberOfPage);
  164.     for(int j=0; j<numOfFrames; j++){
  165.         printf("\t|");
  166.         for(int i=0; i<numberOfPage; i++){
  167.             printf(" %c |", result[j][i]);
  168.         }
  169.         printf("\n");
  170.     }
  171.     pline(numberOfPage);
  172.     printf("\t");
  173.     printf("|");
  174.     for(int i=0; i<numberOfPage; i++){
  175.         printf(" %c |", timeSnapshot[i]);
  176.     }
  177.     printf("\n");
  178.     pline(numberOfPage);
  179.  
  180.     printf("\n\t[ * ] Page Faults:\t%d / %d\n", pageFault, numberOfPage);
  181.     pline(numberOfPage);
  182.     ppercent(pageFault, numberOfPage);
  183.     pline(numberOfPage);
  184.     printf("\n\n\t[ - ] Page Hits:\t%d / %d\n", pageHit, numberOfPage);
  185.     pline(numberOfPage);
  186.     ppercent(pageHit, numberOfPage);
  187.     pline(numberOfPage);
  188. }
  189.  
  190. void mainMenu(){
  191.     char referenceString[30];
  192.     int numOfFrames, numberOfPage, commandChoice;
  193.    
  194.     do{
  195.         printf("\n\t\t\t=============================================================\n");
  196.         printf("\t\t\t|                         MAIN MENU                         |\n");
  197.         printf("\t\t\t-------------------------------------------------------------\n");
  198.         printf("\t\t\t|          [1]. FIRST IN, FIRST OUT (FIFO)                  |\n");
  199.         printf("\t\t\t|          [2]. LEAST RECENTLY USED ALGORITHM (LRU)         |\n");
  200.         printf("\t\t\t|          [3]. BOTH FIFO & LRU                             |\n");
  201.         printf("\t\t\t|          [4]. EXIT                                        |\n");
  202.         printf("\t\t\t-------------------------------------------------------------\n\n\n");
  203.  
  204.         printf("\t\t\tSELECT NUMBER: ");
  205.         scanf("%d", &commandChoice);
  206.         switch(commandChoice){
  207.             case 1:
  208.                 system("cls");
  209.                 printf("\n\n\t=============================================================\n");
  210.                 printf("\t|                  FIRST IN, FIRST OUT (FIFO)               |\n");
  211.                 printf("\t-------------------------------------------------------------\n");
  212.  
  213.                 printf("\tReference String: ");
  214.                 scanf("%s", &referenceString);
  215.                 printf("\tNumber of frames: ");
  216.                 scanf("%d", &numOfFrames);
  217.  
  218.                 numberOfPage = strlen(referenceString);
  219.                 fifo(referenceString, numOfFrames, numberOfPage);
  220.                 printf("\n\tPlease enter any key to continue...");
  221.                 getch();
  222.                 system("cls");
  223.                 break;
  224.             case 2:
  225.                 system("cls");
  226.                 printf("\n\n\t=============================================================\n");
  227.                 printf("\t|            LEAST RECENTLY USED ALGORITHM (LRU)            |\n");
  228.                 printf("\t-------------------------------------------------------------\n");
  229.  
  230.                 printf("\tReference String: ");
  231.                 scanf("%s", &referenceString);
  232.                 printf("\tNumber of frames: ");
  233.                 scanf("%d", &numOfFrames);
  234.  
  235.                 numberOfPage = strlen(referenceString);
  236.                 lru(referenceString, numOfFrames, numberOfPage);
  237.                 printf("\n\tPlease enter any key to continue...");
  238.                 getch();
  239.                 system("cls");
  240.                 break;
  241.             case 3:
  242.                 system("cls");
  243.                 printf("\n\t=============================================================\n");
  244.                 printf("\t|                    BOTH FIFO & LRU                        |\n");
  245.                 printf("\t-------------------------------------------------------------\n");
  246.  
  247.                 printf("\tReference String: ");
  248.                 scanf("%s", &referenceString);
  249.                 printf("\tNumber of frames: ");
  250.                 scanf("%d", &numOfFrames);
  251.  
  252.                 numberOfPage = strlen(referenceString);
  253.  
  254.                 printf("\n\n\t=============================================================\n");
  255.                 printf("\t|                 FIRST IN, FIRST OUT (FIFO)                |\n");
  256.                 printf("\t-------------------------------------------------------------\n");
  257.                 fifo(referenceString, numOfFrames, numberOfPage);
  258.  
  259.                 printf("\n\n\n\n");
  260.  
  261.                 printf("\t=============================================================\n");
  262.                 printf("\t|            LEAST RECENTLY USED ALGORITHM (LRU)            |\n");
  263.                 printf("\t-------------------------------------------------------------\n");
  264.                 lru(referenceString, numOfFrames, numberOfPage);
  265.                 printf("\n\tPlease enter any key to continue...");
  266.                 getch();
  267.                 system("cls");
  268.                 break;
  269.             case 4:
  270.                 exit(1);
  271.                 break;
  272.             default:
  273.                 printf("\n\t\t\tInvalid command, please select numbers from 1-4 only.");
  274.                 printf("\n\t\t\tPlease enter any key to continue...");
  275.                 getch();
  276.                 system("cls");
  277.         }
  278.     }while(commandChoice != 4);
  279. }
  280.  
  281. int main(){
  282.     printf("\n\t\t\t=============================================================\n");
  283.     printf("\t\t\t|            DERMAND PAGING ALGORITHM SIMULATION            |\n");
  284.     printf("\t\t\t|               COMSCI 2101: OPERATING SYSTEMS              |\n");
  285.     printf("\t\t\t-------------------------------------------------------------\n");
  286.     printf("\t\t\t|                        CREATED BY:                        |\n");
  287.     printf("\t\t\t|                    Jhomar L. Candelario                   |\n");
  288.     printf("\t\t\t|                    Jamaica C. Sambrano                    |\n");
  289.     printf("\t\t\t|                    Jericho DC. Sotto                      |\n");
  290.     printf("\t\t\t-------------------------------------------------------------\n\n\n");
  291.  
  292.     printf("\t\t\tPlease enter any key to continue...");
  293.     getchar();
  294.     system("cls");
  295.     mainMenu();
  296. }
  297.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement