150 likes | 309 Views
Comunicación y sincronización de procesos. IPC SYSTEM V: Colas de mensajes. Características generales. Las colas de mensajes se comparan con un sistema de buzones. Un proceso deposita uno o más mensajes en un “buzón”. Otro proceso (o varios) puede leer cada uno de los mensajes.
E N D
Comunicacióny sincronización de procesos IPCSYSTEM V: Colas de mensajes
Características generales • Las colas de mensajes se comparan con un sistema de buzones. • Un proceso deposita uno o más mensajes en un “buzón”. • Otro proceso (o varios) puede leer cada uno de los mensajes.
Características generales • La manipulación de los IPC se efectúa mediante las llamadas de sistema. • Las tres llamadas fundamentales de las colas de mensajes son: • msgget Creación • msgctl Control • msgsnd, msgrcv Comunicación
Características generales • Estructuras de datos • Estructuras básicas del sistema. Sólo accesibles a través de las llamadas al sistema: • struct msgid_ds • struct ipc_perm • Estructura específica. Argumento de las llamadas al sistema msgsnd y msgrcv: • Estructura del mensaje utilizado (void *p)
IPC_PRIVATE IPC_CREAT IPC_EXCL IPC_KERNELD IPC_INFO IPC_NOWAIT IPC_RMID IPC_SET IPC_GET Características generales • También se utilizan las siguientes constantes:
Estructuras de datos asociadas • Estructura msgid_ds • Asociada a cada colas • Se crea al hacer la llamada msgget • Su estructura interna es:
Estructuras de datos asociadas struct msqid_ds { struct ipc_perm msg_perm; struct msg *msg_first; /* first message on queue */ struct msg *msg_last; /* last message in queue */ __kernel_time_t msg_stime; /* last msgsnd time */ __kernel_time_t msg_rtime; /* last msgrcv time */ __kernel_time_t msg_ctime; /* last change time */ struct wait_queue *wwait; struct wait_queue *rwait; unsigned short msg_cbytes;/*current number of bytes on queue*/ unsigned short msg_qnum; /* number of messages in queue */ unsigned short msg_qbytes; /* max number of bytes on queue */ __kernel_ipc_pid_t msg_lspid; /* pid of last msgsnd */ __kernel_ipc_pid_t msg_lrpid; /* last receive pid */};
Estructuras de datos asociadas • Estructura ipc_perm • Asociada a cada colas • Registra los permisos de operación • Su estructura interna es:
Estructuras de datos asociadas struct ipc_perm { __kernel_key_t key; __kernel_uid_t uid; __kernel_gid_t gid; __kernel_uid_t cuid; __kernel_gid_t cgid; __kernel_mode_t mode; unsigned short seq; };
Estructuras de datos asociadas • Estructura msginfo
Estructuras de datos asociadas • Estructura msg /*one msg structure for each message */ struct msg { struct msg *msg_next; /*next message on queue*/ long msg_type; char *msg_spot; /*message text address*/ time_t msg_stime; /* msgsnd time */ short msg_ts; /* message text size */ };
Estructuras de datos asociadas • Estructura msgbuf
Llamadas al sistema • Msgget • Retorna un descriptor de cola de mensajes • IPC_CREAT: Si no existe descriptor • Error : retorna -1 y errno tendrá el código • Msgctl • Se accede a los campos de control de la estructura msgid_ds • Error : retorna -1 y errno tendrá el código
Llamadas al sistema • Msgsnd • Enviará un mensaje a la cola indentificada por msqid • Error : retorna -1 y errno tendrá el código • Msgsnd • Recibirá un mensaje de la cola indentificada por msqid • Error : retorna -1 y errno tendrá el código