Operating Systems Assignment 1 Solution

$29.99 $18.99

Objectives: PID 1 (init), process creation via fork-exec, process control blocks (PCBs), inter-process communication (IPC), basic FIFO scheduling. Task: CPU Scheduling Simulation, Part I: For this assignment, we will simulate the execution of processes on a single CPU core. To do this, we will use two processes: one that acts as a CPU emulator, and…

You’ll get a: . zip file solution

 

 

Description

Rate this product

Objectives:

PID 1 (init), process creation via fork-exec, process control blocks (PCBs), inter-process communication (IPC), basic FIFO scheduling.

Task: CPU Scheduling Simulation, Part I:

For this assignment, we will simulate the execution of processes on a single CPU core.

To do this, we will use two processes: one that acts as a CPU emulator, and one that acts as a scheduler. The scheduler will maintain a queue of processes that are ready to run. It will pop a process off the front of the queue, and send it to the CPU emulator. The CPU emulator will run the process for a fixed period of time, then stop and return the updated PCB information to the scheduler (this is round-robin scheduling). The scheduler will then append the process to the back of the queue (if it is not finished), pop the next process from the front of the queue, and send to the CPU. This will repeat until all processes have completed.

We will start up these processes by using an init program – much like the init process that starts up all of the OS’s services during boot, but much simpler. This init program will simply start both of the two child programs, then wait for them to finish, and close.

We will then need two -way communication between these two processes in order to send the PCB information back and forth.

Later in the semester, we will re-use the software we built for this assignment to experiment with different CPU scheduling algorithms (these can be seen in Chapter 6).

For now, we will just build the infrastructure to fork two processes, and pass messages back and forth between them.

What you need to do:

Write the init program in C, which will fork off the two child processes.

Decide how to implement the two -way IPC. You can use a TCP socket, a two-way pipe (mkfifo), shared memory*, or two one-way pipes*. Think about why you chose one way over the other, and include a comment about it in your summary write-up. (*you would probably need to use the init program as the CPU emulator for these methods to work).

Implement the CPU emulator, which simply receives PCB information, decrements the number of remaining CPU cycles of the PCB by a fixed amount, and sends it back to the scheduler.

Implement the scheduler, which reads process data from a file, adds the processes to a queue, then pops the front, sends it to the CPU, receives process data back from the CPU, and appends the process to the back of the queue (if it has not completed yet).

Notes:

You can write the CPU emulator and the scheduler in any language you want. But the init process must be written in C, and must use fork() and exec().

For now, we will use blocking IPC – which means your program will stop when waiting for an incoming message. Later, we’ll look at non-blocking IPC, which is a little more complicated.

What to turn in:

1. A (breif) summary PDF, explaining your approach and the choices you made

for language and IPC method and why you chose them over other alternatives.

This should be approximately one page max – just summarize your choices.

  1. The output of your CPU emulator – included as an Appendix in your pdf.

  2. The source code of three files: init.c, your CPU emulator, and scheduler.

This should be four (4) files total:

summary.pdf

init.c

cpu_emulator.{x}

scheduler.{x}

(where {x} is the programming language you chose to use).

Zip files and other compressed folders will receive zero credit. Just attach your four files to the email.