1 / 24

Lab 10 Message Queue and Shared Memory

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.

esmerelda
Download Presentation

Lab 10 Message Queue and Shared Memory

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Lab 10Message Queue and Shared Memory

  2. Message Queue

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. msqid_ds struct msqid_ds { uid_t msg_perm.uid; uid_t msg_perm.gid; mode_t msg_perm.mode; } NCHU System & Network Lab

  10. Example: retrieve and show NCHU System & Network Lab

  11. Example : input and send NCHU System & Network Lab

  12. 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

  13. Shared Memory

  14. 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

  15. 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

  16. 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

  17. 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

  18. 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

  19. 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

  20. 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

  21. Example input.c NCHU System & Network Lab

  22. Example output.c NCHU System & Network Lab

  23. 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

  24. 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

More Related