0% found this document useful (0 votes)
35 views

Exp# 5d Shared Memory Aim: CS2257 Operating System Lab

This document describes an experiment demonstrating communication between processes using shared memory. The server process initializes a shared memory segment, writes the letters a-z to it, and waits for the client to read it. The client process accesses the same shared memory segment, reads and prints its contents, then modifies the first character to an asterisk. The result shows the shared memory contents written by the server being read by the client.

Uploaded by

Vasantha Kumari
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
35 views

Exp# 5d Shared Memory Aim: CS2257 Operating System Lab

This document describes an experiment demonstrating communication between processes using shared memory. The server process initializes a shared memory segment, writes the letters a-z to it, and waits for the client to read it. The client process accesses the same shared memory segment, reads and prints its contents, then modifies the first character to an asterisk. The result shows the shared memory contents written by the server being read by the client.

Uploaded by

Vasantha Kumari
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

CS2257 Operating System Lab

Exp# 5d Shared Memory

Aim
To demonstrate communication between process using shared memory.

Algorithm
Server
1. Initialize size of shared memory shmsize to 27.
2. Initialize key to 2013 (some random value).
3. Create a shared memory segment using shmget with key & IPC_CREAT as parameter.
a. If shared memory identifier shmid is -1, then stop.
4. Display shmid.
5. Attach server process to the shared memory using shmmat with shmid as parameter.
a. If pointer to the shared memory is not obtained, then stop.
6. Clear contents of the shared region using memset function.
7. Write a–z onto the shared memory.
8. Wait till client reads the shared memory contents
9. Detatch process from the shared memory using shmdt system call.
10. Remove shared memory from the system using shmctl with IPC_RMID argument
11. Stop

Client
1. Initialize size of shared memory shmsize to 27.
2. Initialize key to 2013 (same value as in server).
3. Obtain access to the same shared memory segment using same key.
a. If obtained then display the shmid else print "Server not started"
4. Attach client process to the shared memory using shmmat with shmid as parameter.
a. If pointer to the shared memory is not obtained, then stop.
5. Read contents of shared memory and print it.
6. After reading, modify the first character of shared memory to '*'
7. Stop

Result
Thus contents written onto shared memory by the server process is read by the client
process.

http://cseannauniv.blogspot.com Vijai Anand


CS2257 Operating System Lab

Program

Server

/* Shared memory server - shms.c */

#include <stdio.h>
#include <stdlib.h>
#include <sys/un.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>

#define shmsize 27

main()
{
char c;
int shmid;
key_t key = 2013;
char *shm, *s;

if ((shmid = shmget(key, shmsize, IPC_CREAT|0666)) < 0)


{
perror("shmget");
exit(1);
}
printf("Shared memory id : %d\n", shmid);

if ((shm = shmat(shmid, NULL, 0)) == (char *) -1)


{
perror("shmat");
exit(1);
}

memset(shm, 0, shmsize);
s = shm;
printf("Writing (a-z) onto shared memory\n");
for (c = 'a'; c <= 'z'; c++)
*s++ = c;
*s = '\0';

while (*shm != '*');


printf("Client finished reading\n");

if(shmdt(shm) != 0)
fprintf(stderr, "Could not close memory segment.\n");

shmctl(shmid, IPC_RMID, 0);


}

http://cseannauniv.blogspot.com Vijai Anand


CS2257 Operating System Lab

Client

/* Shared memory client - shmc.c */

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>

#define shmsize 27

main()
{
int shmid;
key_t key = 2013;
char *shm, *s;

if ((shmid = shmget(key, shmsize, 0666)) < 0)


{
printf("Server not started\n");
exit(1);
}
else
printf("Accessing shared memory id : %d\n",shmid);

if ((shm = shmat(shmid, NULL, 0)) == (char *) -1)


{
perror("shmat");
exit(1);
}

printf("Shared memory contents:\n");


for (s = shm; *s != '\0'; s++)
putchar(*s);
putchar('\n');

*shm = '*';
}

http://cseannauniv.blogspot.com Vijai Anand


CS2257 Operating System Lab

Output

Server

$ gcc shms.c -o shms

$ ./shms
Shared memory id : 196611
Writing (a-z) onto shared memory
Client finished reading

Client

$ gcc shmc.c -o shmc

$ ./shmc
Accessing shared memory id : 196611
Shared memory contents:
abcdefghijklmnopqrstuvwxyz

http://cseannauniv.blogspot.com Vijai Anand

You might also like