lab 10 message queue and shared memory l.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Lab 10 Message Queue and Shared Memory PowerPoint Presentation
Download Presentation
Lab 10 Message Queue and Shared Memory

Loading in 2 Seconds...

play fullscreen
1 / 24

Lab 10 Message Queue and Shared Memory - PowerPoint PPT Presentation


  • 211 Views
  • Uploaded on

Lab 10 Message Queue and Shared Memory. Message Queue. Message Queue. provide a reasonably easy and efficient way of passing data between two unrelated processes. Message queue 1. message. Process 1. process2. 0. 0. 0. r. w. x. r. w. x. r. w. x. owner permission.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Lab 10 Message Queue and Shared Memory' - esmerelda


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
message queue3
Message Queue
  • provide a reasonably easy and efficient way of passing data between two unrelated processes

Message queue 1

message

Process 1

process2

NCHU System & Network Lab

create and access a message queue

0

0

0

r

w

x

r

w

x

r

w

x

owner permission

group permission

others permission

Create and Access a Message Queue

#include <sys/msg.h>

int msgget(key_t key, int msgflg);

key : names a particular message queue.

msgflg: IPC_PRIVATE only used by process itself

IPC_CREAT create new message queue, if exist, ignore this flag

permission flags

Return queue identifier on success, -1 on failure

NCHU System & Network Lab

send a message to a message queue
Send a Message to a message queue

int msgsnd(int msqid, const void *msg_ptr, size_t msg_sz, int msgflg);

msqid : message queue identifier

msg_ptr : a pointer to the message to be sent.

msg_sz: size of the message pointed to by msg_ptr. This size must not include the long int message type

msgflg: controls what happens if either the current message queue is full or the systemwide limit on queued messages has been reached

IPC_NOWAIT return -1 without sending message

If no IPC_NOWAIT, it will be suspended and waiting for space to become availablein the queue.

Return 0 on success, -1 on error.

NCHU System & Network Lab

message
Message
  • The structure of the message must follow the following two rules.

struct my_message {

long int message_type;

/* The data you wish to transfer */

}

  • smaller than the system limit.
  • start with a long int.

NCHU System & Network Lab

retrieves messages from a message queue
retrieves messages from a message queue

int msgrcv(int msqid, void *msg_ptr, size_t msg_sz, long int msgtype, int msgflg);

msqid : message queue identifier.

msg_ptr: point to the message to be received.

msg_sz: size of the message pointed to by msg_ptr.

msgtype: a simple form of reception priority.

0 retrieves first available message.

>0 retrieves first with the same type message.

<0 retrieves the same type or less than it message.

msgflg: controls what happens when no message of the appropriate type is waiting

to be received

IPC_NOWAIT return -1 without sending message

If no IPC_NOWAIT, it will be suspended and waiting for an appropriate type of message arrived in queue.

return number of bytes placed in the receive buffer, -1 on error.

NCHU System & Network Lab

control function
Control function

int msgctl(int msqid, int command, struct msqid_ds *buf);

msqid: message queue identifier.

command:

IPC_STAT Sets the data in the msqid_ds structure to reflect the values associated with the message queue.

IPC_SET If the process has permission to do so, this sets the values associated with the message queue to those provided in the msqid_ds data structure.

IPC_RMID Deletes the message queue.

buf: save the information of msqid.

return 0 on success, -1 on error.

NCHU System & Network Lab

msqid ds
msqid_ds

struct msqid_ds {

uid_t msg_perm.uid;

uid_t msg_perm.gid;

mode_t msg_perm.mode;

}

NCHU System & Network Lab

example retrieve and show
Example: retrieve and show

NCHU System & Network Lab

example input and send
Example : input and send

NCHU System & Network Lab

lab i
Lab I
  • Use message queue write a program that
    • Show the used message queue information
      • creator id and permission mode number
    • Two processes can chat with each other
    • Just like…

uid:1 Pmode:0666

P1:hello!!

P2:Hi~!

P2:how are you ?

P1:so so.

Input: _

uid:1 Pmode:0666

P1:hello!!

P2:Hi~!

P2:how are you ?

P1:so so.

Input: _

Process 1

Process 2

NCHU System & Network Lab

shared memory14

Process 1

Process 2

Shared memory

Two processes share the same memory region

Shared Memory
  • Two or multiple processes share the same memory region.
  • The fastest form of IPC

NCHU System & Network Lab

obtain a shared memory id

0

0

0

r

w

x

r

w

x

r

w

x

owner permission

group permission

others permission

Obtain a shared memory id.

#include <sys/shm.h>

int shmget(key_t key, size_t size, int flag);

size : the size of the shared memory segment in bytes.

flag :

IPC_PRIVATE only used by process itself

IPC_CREAT create new message queue, if exist, ignore this flag

permission flags

return shared memory on success, -1 on error.

NCHU System & Network Lab

attachment
attachment

# include <sys/types.h>

# include <sys/ipc.h>

# include <sys/shm.h>

char *shmat ( int shmid, char *shmaddr, int shmflg )

shmid: shared memory identifier

shmaddr: the address at which the shared memory is to be attached to the current process. This should almost always be a null pointer

shmflg :

SHM_RND indicates that the address specified for the second parameter should be rounded down to a multiple of the page size.

SHM_RDONLY indicates that the segment will be only read, not written.

return -1 on error, the address of the attached shared memory segment for success

NCHU System & Network Lab

detachment
detachment

# include <sys/types.h>

# include <sys/ipc.h>

# include <sys/shm.h>

int shmdt ( char *shmaddr)

return 0 on success, -1 on error.

NCHU System & Network Lab

controlling and deallocating shared memory
Controlling and Deallocating Shared Memory

#include <sys/ipc.h>

#include <sys/shm.h>

int shmctl(int shm_id, int command, struct shmid_ds *buf);

shm_id : shared memory identifier

command:

IPC_STAT copy the information about the shared memory segment into the buffer buf

IPC_SET apply the changes the user has made to the uid, gid, or mode members of the shm_perms field.

IPC_RMID mark the segment as destroyed.

buf : save the information of shmid.

Return 0 on success, -1 on error

NCHU System & Network Lab

shmid ds structure
shmid_ds structure

struct shmid_ds {

struct ipc_perm shm_perm; /* operation perms */

int shm_segsz; /* size of segment(bytes) */

time_t shm_atime; /* last attach time */

time_t shm_dtime; /* last detach time */

time_t shm_ctime; /* last change time */

unsigned short shm_cpid; /* pid of creator */

unsigned short shm_lpid; /* pid of last operator */

short shm_nattch; /* no. of current attaches */

/* the following are private */

unsigned short shm_npages; /* size of segment (pages) */

unsigned long *shm_pages;

struct shm_desc *attaches; /* descriptors for attaches */

};

NCHU System & Network Lab

ipc perm structure
ipc_perm structure

struct ipc_perm {

key_t key;

ushort uid; /* owner euid and egid */

ushort gid;

ushort cuid; /* creator euid and egid */

ushort cgid;

ushort mode; /* lower 9-bits of access modes */

ushort seq; /* sequence number */

};

NCHU System & Network Lab

example input c
Example input.c

NCHU System & Network Lab

example output c
Example output.c

NCHU System & Network Lab

lab i23
Lab I
  • Use shared memory write a program that
    • Show the information of shared memory
      • pid of creator and last attach time.
    • Two processes can chat with each other

pid:2 last: xxxx

P1:hello!!

P2:Hi~!

P2:how are you ?

P1:so so.

Input: _

pid:2 last: xxxx

P1:hello!!

P2:Hi~!

P2:how are you ?

P1:so so.

Input: _

Process 1

Process 2

NCHU System & Network Lab

reference
Reference
  • Advanced Programming in the UNIX Environment 2nd Author : Richard Stevens, Stephen A.Rago, Publisher : Addison-Wesley
  • Beginning Linux ProgrammingAuthor : Richard Stones, Neil Matthew Publisher : Wrox
  • Operating System Concepts 6th edition
  • Author : Abraham Silberschatz, Peter Baer Galvin, Greg Gagne
  • Publisher : John Wiley & Sons, inc.
  • Google
  • LINUX MAN PAGES ONLINE

NCHU System & Network Lab