Question: In this assignment you will simulate a Three-State process model (ready, running and blocked) and a simple process control block structure. Your program will read

In this assignment you will simulate a Three-State process model (ready, running and blocked) and a simple process control block structure. Your program will read input and directives from a file. The input describes a time sequence of events that occur. These are the full set of events you will simulate:

CPU: The processor executes for 1 time step the currently running process new:

A new process is created and put at tail of the ready queue done: The currently running process has finished

wait X: The currently running process has done an I/O operation and is waiting on event X

event : X Event X has occurred, the process waiting on that event should be made ready

Text File:

new

cpu

cpu

cpu

new

cpu

cpu

cpu

cpu

wait 1

cpu

cpu

event 1

cpu

cpu

done

cpu

cpu

cpu

cpu

exit

Your task is to read in the events, and simulate the creation and execution of processes in the system as they move through the various three-states of their process life cycle. You need to: Define a simple process control block (PCB) to hold information about all processes currently running in your system. The PCB can be a simple C struct or a C++ class. At a minimum you need to have a field for the process identifier and the process state (Ready, Running or Blocked). You need to also keep track of the time step that the process entered the system, and the number of steps the process has been running. Minimal credit will be given to programs that at least handle new events and create a process in a simulated PCB. You probably need a list or an array to hold the current processes that have been created and are being managed by your simulated system.

You will need a ready queue of some kind. You should use a C++ Standard Template Library (STL) container to manage your ready queue.

You will need to implement a simple dispatcher function. Whenever a cpu event occurs, and no process is currently running, you should select the next Ready process from the head of your ready queue and start it running on the processor.

You need to also implement a simple time slicing mechanism. The time slice value to use will be passed into your program when it is started. At the end of a cpu cycle, you should check if the currently running process has executed for its full time quantum. In that case, the currently running process should timeout, and be returned to the end of the Ready queue.

new events should cause a new process to be created (including creating its PCB and filling it in). New processes should be placed on the tail of the ready queue after being created. You should assign each new process a process identifier. The process identifier should be a simple integer value, and you should start numbering processes from 1.

For a done event, if a process is currently running it should then be released. It should be removed from the CPU, and not placed back on the ready or blocked queue. If a done occurs when the CPU is idle, then nothing will happen as a result of this event.

A wait event simulates the currently running process performing some I/O operation. If a wait occurs, the currently running process should become blocked and put on the blocked queue. You also need an entry in the PCB so you know what event the process is waiting for. The wait event is followed by an integer number, which is an indication of the type of event the process has requested.

Likewise the event directive simulates the finishing of some I/O operation. When an event occurs, you should scan your blocked processes and make any process ready that was waiting on that event. The integer value following an event indicates the type of event that just occurred. The output of your program should be sent to standard output. The correct output for the simulation-01.sim simulation is:

Time: 1

CPU (currently running): pid=1, state=RUNNING, start=1, slice=1,

Ready Queue: EMPTY

Blocked Queue: EMPTY

Time: 2

CPU (currently running): pid=1, state=RUNNING, start=1, slice=2,

Ready Queue: EMPTY

Blocked Queue: EMPTY

Time: 3

CPU (currently running): pid=1, state=RUNNING, start=1, slice=3,

Ready Queue: EMPTY

Blocked Queue: EMPTY

Time: 4

CPU (currently running): 4 pid=1, state=RUNNING, start=1, slice=4,

Ready Queue: pid=2, state=READY, start=4, slice=0,

Blocked Queue: EMPTY

Time: 5

CPU (currently running): pid=1, state=RUNNING, start=1, slice=5,

Ready Queue: pid=2, state=READY, start=4, slice=0,

Blocked Queue: EMPTY

Time: 6

CPU (currently running): pid=2, state=RUNNING, start=4, slice=1,

Ready Queue: pid=1, state=READY, start=1, slice=5,

Blocked Queue: EMPTY

Time: 7

CPU (currently running): pid=2, state=RUNNING, start=4, slice=2,

Ready Queue: pid=1, state=READY, start=1, slice=5,

Blocked Queue: EMPTY

Time: 8

CPU (currently running): pid=1, state=RUNNING, start=1, slice=1,

Ready Queue: EMPTY Blocked Queue: pid=2, state=

BLOCKED, start=4, slice=2, event=1

Time: 9

CPU (currently running): 5 pid=1, state=RUNNING, start=1, slice=2,

Ready Queue: EMPTY Blocked Queue: pid=2, state=

BLOCKED, start=4, slice=2, event=1

Time: 10

CPU (currently running): pid=1, state=RUNNING, start=1, slice=3,

Ready Queue: pid=2, state=READY, start=4, slice=2,

Blocked Queue: EMPTY

Time: 11

CPU (currently running): pid=1, state=RUNNING, start=1, slice=4,

Ready Queue: pid=2, state=READY, start=4, slice=2,

Blocked Queue: EMPTY

Time: 12

CPU (currently running): pid=2, state=RUNNING, start=4, slice=1,

Ready Queue: EMPTY

Blocked Queue: EMPTY

Time: 13

CPU (currently running): pid=2, state=RUNNING, start=4, slice=2,

Ready Queue: EMPTY

Blocked Queue: EMPTY

Time: 14

CPU (currently running): 6 pid=2, state=RUNNING, start=4, slice=3,

Ready Queue: EMPTY

Blocked Queue: EMPTY

Time: 15

CPU (currently running): pid=2, state=RUNNING, start=4, slice=4,

Ready Queue: EMPTY

Blocked Queue: EMPTY

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!