Question: 1.- In this assignment you will implement a simulation of the interaction of user programs with the OS to execute an I/O operation on two
1.- In this assignment you will implement a simulation of the interaction of user programs
with the OS to execute an I/O operation on two different devices.
User programs:
User
programs will communicate with
DOIO
(OS) to request an I/O operation. (This will
simulate a system call)
User programs will give to
DOIO
three parameters: User id, device number (
dev
is a
random number in the
range
1 and 2 that represents device one or device two) and an
address (
addr
is a random number in the range 1 and 20.) (
addr
is an integer that
represents a track number in the hard drive).
User programs will pass the parameters to DOIO through three buffers of size one each
(
bufid
,
bufdev
, and
bufaddr
).
Once the parameters are stored in the buffers, user programs executes a p(request_served)
operation to wait for the completion of the I/O operation. You will need a semaphore array
request_served
[5].
There will be five users running concurrently and each will execute 5 I/O operations.
DOIO:
DOIO
will collect and
id
, device(
dev
), and address(
addr
) from
bufid
,
bufdev
, and
bufaddr
to assemble the
IORB
.
DOIO
will check on device number to decide which one of the two devices will get the
IORB.
Once the device has been selected,
DOIO
will store the IORB (
id
and
addr
) into the two
buffers that represent the IORQ (
iorqid
and
iorqaddr
) of the selected device. Notice that
you need separate buffers (one pair of buffes for each device).
Device drivers (1 and 2):
Device
drivers will collect an IORB (made up of
id
and
addr
) from
iorqid
and
iorqaddr
and then initiate the physical I/O operation on the hard drive it controls and wait for the I/O
operation to be completed: p(
operation_complete
).
The device driver initiates the physical I/O operation by storing
addr
into a buffer of length
one. The buffer name is
pio
(physical I/O).
When the I/O operation completes a signal is received, the
Device
driver will identify the
User
that issued the I/O request using the
id
, and will signal the semaphore
request_served
associated to the
User
.
Disk (1 and 2):
The
Disk
processes simulates the access to a track in the hard drive.
The
Disk
process gets the
addr
from
pio
and stores it in a variable called
seek
and
iterates in a dummy loop from 1 to
seek
.
Once out of the loop, disk will execute a v on the semaphore
operation_complete
a) Define all semaphores that you need according to the number of buffers used.
b) Each user will make 5 system calls to initiate I/O operations
c)
DOIO
will create 25 IORB
d) The sum of the I/O operations executed by drivers must add up 25. You will need a
shared variable to control the total number of I/O operations because it is not known
before hand the numbers of I/O operations initiated by each
Device
driver.
As a note, this needs to be in C-- and it has to contain 2 drivers and 2 disks. Other responses were in C and not C--, or did not have 2 drivers/disks.
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
