Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <conio.h>
- void pline(int numberOfPage){
- printf("\t");
- for(int i=0; i<numberOfPage; i++){
- printf("----");
- }
- printf("-\n");
- }
- void ppercent(int pageHF, int numberOfPage){
- float percent;
- printf("\t");
- for(int i=0; i<pageHF; i++){
- printf("||||");
- }
- percent = ((float)pageHF / (float)numberOfPage) * 100;
- printf(" %.2f %%", percent);
- printf("\n");
- }
- int getLoc(int time[], int n){
- int minimum = time[0], loc = 0;
- for(int i=1; i < n; i++){
- if(time[i] < minimum){
- minimum = time[i];
- loc = i;
- }
- }
- return loc;
- }
- void lru(char referenceString[], int numOfFrames, int numberOfPage){
- int pos, pageFault = 0, pageHit = 0;
- int count = 0, loc;
- char lru[numOfFrames];
- char timeSnapshot[numberOfPage];
- char result[numOfFrames][numberOfPage];
- int time[numOfFrames];
- for(int i=0; i<numOfFrames; i++){
- lru[i] = '-';
- }
- for(int i=0; i<numberOfPage; i++){
- int notEmpty = 1, isFull = 1;
- for(int j=0; j<numOfFrames; j++){
- if(lru[j] == referenceString[i]){
- count++;
- time[j] = count;
- pageHit++;
- notEmpty = isFull = 0;
- timeSnapshot[i] = '-';
- break;
- }
- }
- if(notEmpty){
- for(int j=0; j<numOfFrames; j++){
- if(lru[j] == '-'){
- count++;
- pageFault++;
- lru[j] = referenceString[i];
- time[j] = count;
- timeSnapshot[i] = '*';
- isFull = 0;
- break;
- }
- }
- }
- if(isFull){
- loc = getLoc(time, numOfFrames);
- count++;
- pageFault++;
- lru[loc] = referenceString[i];
- time[loc] = count;
- timeSnapshot[i] = '*';
- }
- for(int j=0; j<numOfFrames; j++){
- result[j][i] = lru[j];
- }
- }
- printf("\n\n");
- pline(numberOfPage);
- printf("\t");
- printf("|");
- for(int i=0; i<numberOfPage; i++){
- printf(" %c |", referenceString[i]);
- }
- printf("\n");
- pline(numberOfPage);
- for(int j=0; j<numOfFrames; j++){
- printf("\t|");
- for(int i=0; i<numberOfPage; i++){
- printf(" %c |", result[j][i]);
- }
- printf("\n");
- }
- pline(numberOfPage);
- printf("\t");
- printf("|");
- for(int i=0; i<numberOfPage; i++){
- printf(" %c |", timeSnapshot[i]);
- }
- printf("\n");
- pline(numberOfPage);
- printf("\n\t[ * ] Page Faults:\t%d / %d\n", pageFault, numberOfPage);
- pline(numberOfPage);
- ppercent(pageFault, numberOfPage);
- pline(numberOfPage);
- printf("\n\n\t[ - ] Page Hits:\t%d / %d\n", pageHit, numberOfPage);
- pline(numberOfPage);
- ppercent(pageHit, numberOfPage);
- pline(numberOfPage);
- }
- void fifo(char referenceString[], int numOfFrames, int numberOfPage){
- int pageFault = 0, pageHit = 0, localLoop = 0;
- char fifo[numOfFrames];
- char timeSnapshot[numberOfPage];
- char result[numOfFrames][numberOfPage];
- for(int i=0; i<numOfFrames; i++){
- fifo[i] = '-';
- }
- for(int i=0; i<numberOfPage; i++){
- int isHit = 0;
- for(int j=0; j<numOfFrames; j++){
- if(fifo[j] == referenceString[i]){
- pageHit++;
- isHit = 1;
- timeSnapshot[i] = '-';
- }
- }
- if(!isHit){
- pageFault++;
- fifo[localLoop] = referenceString[i];
- localLoop = (localLoop+1) % numOfFrames;
- timeSnapshot[i] = '*';
- }
- for(int j=0; j<numOfFrames; j++){
- result[j][i] = fifo[j];
- }
- }
- printf("\n\n");
- pline(numberOfPage);
- printf("\t");
- printf("|");
- for(int i=0; i<numberOfPage; i++){
- printf(" %c |", referenceString[i]);
- }
- printf("\n");
- pline(numberOfPage);
- for(int j=0; j<numOfFrames; j++){
- printf("\t|");
- for(int i=0; i<numberOfPage; i++){
- printf(" %c |", result[j][i]);
- }
- printf("\n");
- }
- pline(numberOfPage);
- printf("\t");
- printf("|");
- for(int i=0; i<numberOfPage; i++){
- printf(" %c |", timeSnapshot[i]);
- }
- printf("\n");
- pline(numberOfPage);
- printf("\n\t[ * ] Page Faults:\t%d / %d\n", pageFault, numberOfPage);
- pline(numberOfPage);
- ppercent(pageFault, numberOfPage);
- pline(numberOfPage);
- printf("\n\n\t[ - ] Page Hits:\t%d / %d\n", pageHit, numberOfPage);
- pline(numberOfPage);
- ppercent(pageHit, numberOfPage);
- pline(numberOfPage);
- }
- void mainMenu(){
- char referenceString[30];
- int numOfFrames, numberOfPage, commandChoice;
- do{
- printf("\n\t\t\t=============================================================\n");
- printf("\t\t\t| MAIN MENU |\n");
- printf("\t\t\t-------------------------------------------------------------\n");
- printf("\t\t\t| [1]. FIRST IN, FIRST OUT (FIFO) |\n");
- printf("\t\t\t| [2]. LEAST RECENTLY USED ALGORITHM (LRU) |\n");
- printf("\t\t\t| [3]. BOTH FIFO & LRU |\n");
- printf("\t\t\t| [4]. EXIT |\n");
- printf("\t\t\t-------------------------------------------------------------\n\n\n");
- printf("\t\t\tSELECT NUMBER: ");
- scanf("%d", &commandChoice);
- switch(commandChoice){
- case 1:
- system("cls");
- printf("\n\n\t=============================================================\n");
- printf("\t| FIRST IN, FIRST OUT (FIFO) |\n");
- printf("\t-------------------------------------------------------------\n");
- printf("\tReference String: ");
- scanf("%s", &referenceString);
- printf("\tNumber of frames: ");
- scanf("%d", &numOfFrames);
- numberOfPage = strlen(referenceString);
- fifo(referenceString, numOfFrames, numberOfPage);
- printf("\n\tPlease enter any key to continue...");
- getch();
- system("cls");
- break;
- case 2:
- system("cls");
- printf("\n\n\t=============================================================\n");
- printf("\t| LEAST RECENTLY USED ALGORITHM (LRU) |\n");
- printf("\t-------------------------------------------------------------\n");
- printf("\tReference String: ");
- scanf("%s", &referenceString);
- printf("\tNumber of frames: ");
- scanf("%d", &numOfFrames);
- numberOfPage = strlen(referenceString);
- lru(referenceString, numOfFrames, numberOfPage);
- printf("\n\tPlease enter any key to continue...");
- getch();
- system("cls");
- break;
- case 3:
- system("cls");
- printf("\n\t=============================================================\n");
- printf("\t| BOTH FIFO & LRU |\n");
- printf("\t-------------------------------------------------------------\n");
- printf("\tReference String: ");
- scanf("%s", &referenceString);
- printf("\tNumber of frames: ");
- scanf("%d", &numOfFrames);
- numberOfPage = strlen(referenceString);
- printf("\n\n\t=============================================================\n");
- printf("\t| FIRST IN, FIRST OUT (FIFO) |\n");
- printf("\t-------------------------------------------------------------\n");
- fifo(referenceString, numOfFrames, numberOfPage);
- printf("\n\n\n\n");
- printf("\t=============================================================\n");
- printf("\t| LEAST RECENTLY USED ALGORITHM (LRU) |\n");
- printf("\t-------------------------------------------------------------\n");
- lru(referenceString, numOfFrames, numberOfPage);
- printf("\n\tPlease enter any key to continue...");
- getch();
- system("cls");
- break;
- case 4:
- exit(1);
- break;
- default:
- printf("\n\t\t\tInvalid command, please select numbers from 1-4 only.");
- printf("\n\t\t\tPlease enter any key to continue...");
- getch();
- system("cls");
- }
- }while(commandChoice != 4);
- }
- int main(){
- printf("\n\t\t\t=============================================================\n");
- printf("\t\t\t| DERMAND PAGING ALGORITHM SIMULATION |\n");
- printf("\t\t\t| COMSCI 2101: OPERATING SYSTEMS |\n");
- printf("\t\t\t-------------------------------------------------------------\n");
- printf("\t\t\t| CREATED BY: |\n");
- printf("\t\t\t| Jhomar L. Candelario |\n");
- printf("\t\t\t| Jamaica C. Sambrano |\n");
- printf("\t\t\t| Jericho DC. Sotto |\n");
- printf("\t\t\t-------------------------------------------------------------\n\n\n");
- printf("\t\t\tPlease enter any key to continue...");
- getchar();
- system("cls");
- mainMenu();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement