Question: CODE in C. Please look at the instructions before pasting your OLD answer. In this assignment, you will create 4 processes . Each of these

CODE in C. Please look at the instructions before pasting your OLD answer.

In this assignment, you will create 4 processes. Each of these processes will share a variable called "total". Each will increment the variable total by one to 100,000, 200,000, 300,000 and 500,000 respectively. Make sure that only the newly created child calls the function process#()

After all the children have finished, the parent process should release the shared memory and terminate. Use the "wait" function so that the parent knows precisely when each of the children finishes. The parent should print the process id of each child as the child finishes execution. Then it should release shared memory and print "End of Program".

You need to run the program several times and analyze your observations (write report).

Sample output

From Process 1: counter = 270547.

From Process 2: counter = 347860.

From Process 3: counter = 400001.

From Process 4: counter = 500000.

Child with ID: 2412 has just exited.

Child with ID: 2411 has just exited.

Child with ID: 2413 has just exited.

Child with ID: 2415 has just exited.

End of Simulation.

Instructions:

Use this as header:

#include

#include

#include

#include

#include

#include

#include

/* key number */

#define SHMKEY ((key_t) 1497)

Create this typedef for your variable:

typedef struct{

int value;

} shared_mem;

shared_mem *total;

Have these Variables:

int shmid, pid1,pid2, pid3,pid4, ID,status;

char *shmadd;

shmadd = (char *) 0;

Use this code to create and connect shared memory segment:

if ((shmid = shmget (SHMKEY, sizeof(int), IPC_CREAT | 0666)) < 0){

perror ("shmget");

exit (1);

}

if ((total = (shared_mem *) shmat (shmid, shmadd, 0)) == (shared_mem *) -1){

perror ("shmat");

exit (0);

}

Initialize shared memory to 0 using:

total->value = 0;

Create processes

if ((pid1 = fork()) == 0) process1();

And then create addition processes.

Parent wait for child processes to finish and print ID of each child. As shown in the sample output.

To detach a shared memory, use shmdt(total):

total is the pointer returned by shmat()

if (shmdt(total) == -1) { perror ("shmdt"); exit (-1); }

To remove a shared memory, use shmctl(shmid,IPC_RMID, NULL); where

shmid is the shared memory ID returned by shmget()

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!