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.
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)
Características generales También se utilizan las siguientes constantes: IPC_NOWAIT IPC_RMID IPC_SET IPC_GET IPC_PRIVATE IPC_CREAT IPC_EXCL IPC_KERNELD IPC_INFO
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
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 Msgctl 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
Llamadas al sistema Msgsnd Enviará un mensaje a la cola indentificada por msqid Error : retorna -1 y errno tendrá el código Recibirá un mensaje de la cola indentificada por msqid