Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Can someone please help me on this. I\'ve got the page replacement algorithm wor

ID: 3569503 • Letter: C

Question

Can someone please help me on this. I've got the page replacement algorithm working but I need to make it to where the output is also able to show the size in each page. The VIRTUAL_MEMORY_SIZE and the MAIN_MEMORY_SIZE need to be divided by the PAGE_SIZE . Something like this:

Page 0: Addresses     0 - 2047
Page 1: Addresses 2048 - 4095
Page 2: Addresses 4096 - 6143
Page 3: Addresses 6144 - 9191
Page 4: Addresses 8192 - 10239
Page 5: Addresses 10240 - 12287
Page 6: Addresses 12288 - 14335
Page 7: Addresses 14336 - 16383

Here's the code:

#include <ctime>
#include <iomanip>
#include <iostream>
#include <fstream>
#include <pthread.h>
#include <sched.h>
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

#define NUM_ADDRESSES_TO_GENERATE 10000
#define IN_BUFFER_SIZE 10
#define PAGE_SIZE 2048
#define MAIN_MEMORY_SIZE 16384
#define VIRTUAL_MEMORY_SIZE 65536
#define NUM_PAGE_FRAMES MAIN_MEMORY_SIZE / PAGE_SIZE

typedef struct {
    int is_present;
    int page_frame_num;
} PageTableEntry;

int page_fifo[NUM_PAGE_FRAMES];
int page_fifo_start = 0;
int page_fifo_end = 0;
int page_fifo_size = 0;

void PushPage (int page_num){
    page_fifo[page_fifo_end] = page_num;
    page_fifo_end = (page_fifo_end +1) % NUM_PAGE_FRAMES;
    ++page_fifo_size;
}

int PopPage(void){
    int page_num = page_fifo[page_fifo_start];
    page_fifo_start = (page_fifo_start + 1) % NUM_PAGE_FRAMES;
    --page_fifo_size;
    return page_num;
    }
struct Buffer;
int inBuffer[IN_BUFFER_SIZE];
int inBufferCount;
pthread_mutex_t inBufferMutex;


bool addressGenerationDone;
int numberOfPageFaults;

struct virtualAddressSpace;
int addressSpace [VIRTUAL_MEMORY_SIZE];
int pageSpace;

struct mainMemorySpace;
int mainMemory [MAIN_MEMORY_SIZE];
int pageFrame;

int getNextVirtualAddress(int addr)
{
      srand(time(NULL));
    return 0;
}

struct node
{
int data;
struct node *next;
}*curr,*new_node,*current,*start=NULL,*temp,*last;

int arr[20],count,fault,fno;
//--------------------------------
void creat()
{
int i;

for(i=0;i< fno;i++)
{
new_node=(struct node *)malloc(sizeof(struct node));
new_node->data = -99; // -99 = NULL or Empty Characcter
new_node->next=NULL;

if(start==NULL)
{
start=new_node;
current=new_node;
}
else
{
current->next=new_node;
current=new_node;
}
}
current->next = start;
}
//--------------------------------
void display()
{
struct node *temp;
temp=start;
do
{
if(temp->data == -99)
printf("-t",temp->data);
else
printf("%dt",temp->data);
temp=temp->next;
}while(temp!=start);
}
//--------------------------------
int search(int number)
{
int flag;
struct node *temp;
temp=start;
do
{
if(temp->data==number)
return(1);
else
flag = 0;
temp=temp->next;
}while(temp!=start);

if(flag ==0)
return(0);
}
//--------------------------------
void fifo()
{
int res,i;
temp = start; //Temp Purpose
last = start; //Repl Purpose
curr = start; //Curr Purpose ->-99

for(i=0;i< count;i++)
{
res = search(arr[i]);

if(res == 0)
{
fault++;
if(curr->data == -99)
{
curr->data = arr[i];
curr = curr->next;
}
else
{
last ->data = arr[i];
last = last->next;
}
}//end outer if

printf(" After Inserting (%d) :: ",arr[i]);
display();
printf(" Fault : %d");
}//end for

printf(" -------------------------------------------- ");
printf("

Explanation / Answer

#include <ctime>
#include <iomanip>
#include <iostream>
#include <fstream>
#include <pthread.h>
#include <sched.h>
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

#define NUM_ADDRESSES_TO_GENERATE 10000
#define IN_BUFFER_SIZE 10
#define PAGE_SIZE 2048
#define MAIN_MEMORY_SIZE 16384
#define VIRTUAL_MEMORY_SIZE 65536
#define NUM_PAGE_FRAMES MAIN_MEMORY_SIZE / PAGE_SIZE

typedef struct {
int is_present;
int page_frame_num;
} PageTableEntry;

int arr[20],fault,fno;

int noOfPages = 0;

int page_fifo[NUM_PAGE_FRAMES];
int page_fifo_start = 0;
int page_fifo_end = 0;
int page_fifo_size = 0;

void PushPage (int page_num){
page_fifo[page_fifo_end] = page_num;
page_fifo_end = (page_fifo_end +1) % NUM_PAGE_FRAMES;
++page_fifo_size;
}

int PopPage(void){
int page_num = page_fifo[page_fifo_start];
page_fifo_start = (page_fifo_start + 1) % NUM_PAGE_FRAMES;
--page_fifo_size;
return page_num;
}
struct Buffer;
int inBuffer[IN_BUFFER_SIZE];
int inBufferCount;
pthread_mutex_t inBufferMutex;


bool addressGenerationDone;
int numberOfPageFaults;

struct virtualAddressSpace;
int addressSpace [VIRTUAL_MEMORY_SIZE];
int pageSpace;

struct mainMemorySpace;
int mainMemory [MAIN_MEMORY_SIZE];
int pageFrame;

int getNextVirtualAddress(int addr)
{
srand(time(NULL));
return 0;
}

struct node
{
int data;
struct node *next;
}*curr,*new_node,*current,*start=NULL,*temp,*last;


//--------------------------------
void creat()
{
int i;

for(i=0;i< fno;i++)
{
new_node=(struct node *)malloc(sizeof(struct node));
new_node->data = -99; // -99 = NULL or Empty Characcter
new_node->next=NULL;

if(start==NULL)
{
start=new_node;
current=new_node;
}
else
{
current->next=new_node;
current=new_node;
}
}
current->next = start;
}
//--------------------------------
void display()
{
struct node *temp;
temp=start;
do
{
if(temp->data == -99)
printf("-t",temp->data);
else
printf("%dt",temp->data);
temp=temp->next;
}while(temp!=start);
}
//--------------------------------
int search(int number)
{
struct node *temp;
temp=start;
do
{
if(temp->data==number)
return(1);

temp=temp->next;
}while(temp!=start);

return(0);
}
//--------------------------------
void fifo()
{
printf(" Pages in memory: ");
for(int i=0; i<noOfPages; i++)
{
printf("Page %2d: Addresses: %6d - %6d ", i, (i*PAGE_SIZE), ((i+1)*PAGE_SIZE) - 1);
}
  
  
  
int res,i;
temp = start; //Temp Purpose
last = start; //Repl Purpose
curr = start; //Curr Purpose ->-99

for(i=0;i< noOfPages;i++)
{
res = search(arr[i]);

if(res == 0)
{
fault++;
if(curr->data == -99)
{
curr->data = arr[i];
curr = curr->next;
}
else
{
last ->data = arr[i];
last = last->next;
}
}//end outer if

printf(" After Inserting (%d) :: ",arr[i]);
display();
printf(" Fault : %d", arr[i]);
}//end for

printf(" -------------------------------------------- ");
printf("