Ajaja

Páginas: 6 (1302 palabras) Publicado: 26 de noviembre de 2012
MÓDULO II: PROGRAMACIÓN CONCURRENTE

COLAS DE MENSAJES.

1.- Conceptos generales de colas de mensajes.

Una cola de mensajes es una estructura de datos gestionada por el kernel, en la cual van a poder escribir y leer los procesos que se ejecuten en el sistema. Los mecanismos de sincronismo para que no se produzca colisión son responsabilidad del kernel.

Los datos que se escribenen la cola deben tener formato de mensaje y son tratados como un todo indivisible. La estructura de datos que forma la cola de mensajes tiene una forma definida: un identificador, un campo que marca el tipo de mensaje, y un área de datos. A una cola de mensajes puede acceder cualquier proceso que conozca su identificador y tenga los permisos necesarios, pudiendo leer y escribir en ella.

Elkernel gestiona las colas de mensajes como un mecanismo FIFO (first input, first output), es decir, el primer mensaje escrito en la cola será el primero en salir de ella al realizar una lectura. Sin embargo, para dotar de más flexibilidad, se pueden hacer peticiones de lectura que extraigan mensajes de un tipo determinado, con lo que se rompe la gestión de tipo FIFO, aunque ésta se siguemanteniendo para todos aquellos mensajes que son de un mismo tipo. Esta clasificación de los mensajes por tipos permite distinguir cuáles son los mensajes que van destinados a cada uno de los procesos lectores.

2.- Creación de una cola de mensajes.

La función msgget permite crear una cola de mensajes o habilitar el acceso a una ya existente. Su declaración es la siguiente:


#include#include
#include

int msgget (clave, opción);

key_t clave; /* clave de la cola de mensajes */
int opción; /* opción para la creación */

Si la llamada funciona correctamente, devolverá el identificador de la cola de mensajes creada o habilitada; en caso contrario, devolverá el valor –1.

El primer parámetro, clave, es una llave de acceso, que tiene el mismo significado que elvisto para los semáforos y los segmentos de memoria compartida.

El parámetro opción es una máscara de bits con la que se define los permisos de acceso a la cola de mensajes y el modo de adquirir el identificador de la misma. Es decir, posee el mismo significado que el visto para la máscara opción de los dos IPC estudiados anteriormente.

El identificador de la cola de mensajes que devuelveesta función es heredado por todos los procesos descendientes del que llama a dicha función.

El siguiente trozo de código muestra cómo se crea una cola de mensajes, donde sólo el propietario va a tener permiso de lectura y escritura:

#define LLAVE (key_t)234 /* clave de acceso */

int msqid; /* identificador de la nueva o habilitada cola de mensajes */

if((msqid=msgget(LLAVE,IPC_CREAT | 0600)) == -1)
{
/* Error al crear o habilitar la cola de mensajes.
Tratamiento del error. */
}

3.- Control de las colas de mensajes.

La función msgctl proporciona información administrativa y de control sobre la cola de mensajes que se especifique. Su declaración es la siguiente:

#include
#include
#include

int msgctl (msqid, op, p_buf);int msqid; /* identificador de la cola de mensajes */
int op; /* operación a efectuar */
struct msqid_ds *p_buf; /* argumento de la operación */


Esta función actúa sobre la cola de mensajes cuyo identificador es msquid (identificador que devolvió la llamada a la función msgget). El segundo parámetro op indica el tipo de operación de control que se desea realizar. Sus posiblesvalores son:



|Operación |Efecto |
|IPC_STAT |Lee la información administrativa y la almacena en la zona de memoria apuntada por p_buf. |
|IPC_SET |Modifica la información administrativa, para lo cual dicha información debe estar...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Ajaja
  • Ajaja
  • ajaja
  • Ajaj
  • Ajaj
  • Ajaja
  • ajaj nose
  • Ajaj

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS