The objective of this lab is to simulate and evaluate a virtual memory system, a
ID: 3569083 • Letter: T
Question
The objective of this lab is to simulate and evaluate a virtual memory system, and experiment with different page replacement algorithms. You will need a threads package, e.g., pThreads thread package.
Assume that you have a 16-bit address space, 16 KB of main memory, and 2 KB page size. Virtual memory simulation consists of three components: a virtual address generation component, address translation component, and a statistics reporting component. Implement each component by a separate thread.
The virtual address generation component generates a sequence of 16-bit virtual addresses and writes them in an integer buffer inBuffer of size 10. Write a function getNextVirtualAddress( ) for generating virtual addresses. This function may generate virtual addresses at random or based on a trace obtained from some source.
The address translation component implements virtual address to physical address translation using a page replacement algorithm (select a page replacement algorithm). This component reads the next virtual address from inBuffer and translates that address to a physical address. It prints the virtual address and corresponding physical address in a file. It also increments an integer variable (numberOfPageFaults) on every page fault. Use appropriate bit operations (<<, >>, ~, |, &, etc.) to implement this address translation. Feel free to implement a separate version of this component for every page replacement algorithm you want to experiment with.
The statistics reporting component prints the total number of page faults (numberOfPageFaults) at the end.
Here is the code:
Explanation / Answer
#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_PAGES MAIN_MEMORY_SIZE / PAGE_SIZE int inBuffer[IN_BUFFER_SIZE]; // buffer to write/read virtual addresses int inBufferCount; // Number of virtual addresses in the shared buffer pthread_mutex_t inBufferMutex; // Mutex used to synchronize access to the inBuffer int numberOfPageFaults; // Counter for the number of page faults bool addressGenerationDone; // Flag used to indicate the address generation is done // TODO: You'll probably need some structures and variables to store information // needed for page replacement and address translation int getNextVirtualAddress(int addr) { // TODO: Replace below with your own method of generating virtual addresses. // You can just generate a random address if you want, which is probably the // easiest thing to do. return 0; } void* doAddressGeneration(void* pArg) { int addr = -1; int addressCount = NUM_ADDRESSES_TO_GENERATE; while (addressCount != 0) { if (inBufferCountRelated Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.