Simulating operating system’s virtual memory management and concurrency control

computer science

Description

What is required

 

 

 

Simulating operating system’s virtual memory management and concurrency control

Processes must be simulated as threads

The simulated system has two CPUs (or CPU cores) 2 processes must be selected instead of 1

Main memory should be simulated as an array (size = number of pages) in your program !

Disk pages should be simulated in an external file

Virtual memory manager should be simulated as a separate thread as well

For the scheduler you can use the one implemented in the last assignment (In case you have not finished assignment #2 you can work with a FIFO scheduler)


Simulating the Processes

 

 

 

For each process you create a thread corresponding to it --> Do not create multiple threads for each process !

Each thread (simulated process) should call the exposed VMM API services (Store, Release and Lookup) accordingly

Each process should continually call a command from the list of commands (commands.txt).

You can simulate the process to wait for a random time (from 1 to 1000 milliseconds for example) between each API call


Simulating the VMM

 

 

 

Should be simulated as a thread as well Implements the basic services :

Store a variable

Release a variable Lookup a variable

Variables can be either in The main memory

The disk

Lookup might involve swapping the variable first before returning it

The VMM is running on its own thread (same as the scheduler in previous assignment)

Simulating the VMM

 

 

 

The VMM class:

 

 

 

Class VMM {

VMM (size);

Store (string variableId, unsigned int value); Release (string variableId) ;

Lookup (string variableId) ; }


Simulating the VMM- VMM Constructor

 

 

 

 

VMM (size):

Initializes a VMM with the given size for the main memory.

 

size = the size specified in the memconfig.txt file


Simulating the VMM – Store, Release, Lookup

 

 

 

Store (string variableId, unsigned int value):

Stores the given variable id and its value into the main memory array, if there is a free space. Otherwise, it stores them into the vm.txt file

 

Release (string variableId):

Removes the variable id and its value from the memory so the page which was holding this variable becomes available for further storage

 

First check if the variable exists in main memory then delete it. Otherwise check if it exists in the vm.txt file then delete it.

 

 

 

Lookup (string variableId):

         If (variableId exists in main memory){ then return value;

}

else if (variableId exists in Disk) {

 

 

if(spot is available in main memory){

then move variable into main memory

and release assigned page in virtual memory }

else{

Check for the variable with the smallest Last time access in main memory

Swap with this variable }

} else{

return -1 (variable doesn’t exist) }


Hints for Implementation in Java

 

 

 

Same way as in the previous assignment

You can use suspend() and resume() methods to start and stop your threads

 

Or use Synchronisation mechanisms in Java: Mutex reentrant lock

Monitor lock accessed using synchronized Binary semaphores…

Wait() and notify() methods


Related Questions in computer science category