Sunteți pe pagina 1din 24

SERVICIOS POSIX RELACIONADOS CON LA COMUNICACIN Y SINCRONIZACION DE PROCESOS

INTEGRANTES Kevin

Alexander Alvarado Ayala Nathaly Adelina Gutierrez Saravia Sandra Beatriz Morales Martinez Karla Estefany Soto Regalado

Qu

es POSIX?

Tuberas

Una tubera es un mecanismo de comunicacin y sincronizacin. El flujo de datos en la comunicacin empleando tuberas es unidireccional y FIFO. La Figura representa dos procesos que se comunican de forma unidireccional utilizando una tubera. En POSIX existen tuberas sin nombre, o simplemente pipes, y tuberas con nombre, o FIFOS.

Tuberas
Crear una tubera sin nombre Este servicio permite crear una tubera. Su prototipo es el siguiente: Int pipe (int fildes[2]); Crear una tubera con nombre En POSIX las tuberas con nombres se conocen como FIFO. Los FIFOS tienen un nombre local que lo identifican dentro de una misma mquina. El prototipo del servicio que permite crear una tubera con nombre el siguiente. Int mkfifo (char*fifo, mode_t mode);

Tuberas
Abrir una tubera con nombre El servicio que permite abrir una tubera con nombre es open. Este servicio tambin se emplea para abrir archivos. Su prototipo es el siguiente: Int open (char*fifo, int flag); Cerrar una tubera Este servicio open cierra un descriptor de archivo asociado a una tubera con o sin nombre. Tambin se emplea para cerrar cualquier archivo. Su prototipo es: Int close (int fd);

Tuberas
Borrar una tubera Permite borrar un FIFO. Esta llamada tambin se emplea para borrar archivo. Su protocolo es: Int unlink(char*fifo);

Leer de una tubera Para leer datos de un pipe o un FIFO se utiliza el siguiente servicio: Int read(int fd , char * buffer, int n);

Tuberas
Borrar una tubera Permite borrar un FIFO. Esta llamada tambin se emplea para borrar archivo. Su protocolo es: Int unlink(char*fifo);

Escribir en una tubera El servicio para escribir datos en una tubera en POSIX es: Int write (int fd, char *buffer, int n);

Tuberas
Productor-consumidor con tuberas El siguiente programa muestra un fragmento de ejemplo que se puede para resolver problemas de tipo productorconsumidor mediante las tuberas que ofrece POSIX. En este ejemplo se crea un proceso hijo por medio de la llamada fork. A continuacin, el proceso hijo har las veces de productor y el proceso padre de consumidor.

Semforos POSIX

Un semforo es un mecanismo de sincronizacin que se utiliza generalmente en sistemas con memoria compartida, bien sea un monoprocesador o un multiprocesador.
Las operaciones wait y signal son dos operaciones genricas que deben particularizarse en cada sistema operativo.

Semforos POSIX

En POSIX un semforo se identifica mediante una variable del tipo sem_t. El estndar POSIX define dos tipos de semforos: Semforos sin nombre. Semforos con nombre.

Semforos POSIX

Los servicios POSIX para manejar semforos son los siguientes:

Crear un semforo sin nombre Todos los semforos en POSIX deben iniciarse antes de su uso. La funcin sem_init permite iniciar un semforo sin nombre. El prototipo de este servicio es el siguiente: Int sem_init(sem_t *sem, int shared, int val);

Semforos POSIX
Destruir un semforo sin nombre Con este servicio se destruye un semforo sin nombre previamente creado con la llamada sem_init. Su prototipo es el siguiente: Init sem_destroy(sem_t *sem);

Crear y abrir un semforo con nombre El servicio sem_open permite crear o abrir un semforo con nombre. Estas modalidades son las siguientes:

Sem_t *sem_open(char *name, int flag, mode_t mode, int val); Sem_t *sem_open(char *name, int flag);

Semforos POSIX
Cerrar un semforo con nombre Cierra un semforo con nombre, rompiendo la asociacin que tena un proceso con un semforo. El prototipo de la funcin es: Int sem_close(sem_t *sem);

Borrar un semforo con nombre Elimina del sistema un semforo con nombre. Esta llamada pospone la destruccin de semforo hasta que todos los procesos que lo estn utilizando lo hayan cerrado con la funcin sem_close. El prototipo de este servicio es: Int sem_unlink(char *name);

Semforos POSIX
Operacin wait La operacion wait en POSIX se consigue con el siguiente servicio: Int sem_wait(sem_t *sem);

Operacion signal Este servicio se corresponde con la operacin signal sobre un semforo. El prototipo de este servicio es: Int sem_post(sem_t *sem);

Mutex y variables condicionales en POSIX

Para utilizar un mutex un programa debe declarar una variable de tipo pthread_mutex_t (definido en el archivo de cabecera pthread.h) e iniciarla antes de utilizarla.

Iniciar un mutex Esta funcin permite iniciar una variable de tipo mutex. Su prototipo es el siguiente: Int pthread_mutex_init(pthread_mutex_t *mutex, Pthread_mutexattr_t *attr);

Mutex y variables condicionales en POSIX


Destruir un mutex Permite destruir un objeto de tipo mutex. El prototipo de la funcin que permite invocar este servicio es: Int pthread_mutex_destroy(pthread_mutex_t *mutex);

Operacion unlock Este servicio se corresponde con la operacion unlock y permite al proceso ligero que la ejecuta liberar el mutex. El prototipo es: Int pthread_cond_init(pthread_cond_t *cond, Pthread_condattr_t *attr);

Mutex y variables condicionales en POSIX


Destruir una variable condicional Permite destruir una variable de tipo condicional. Si prototipo es: Int pthread_cond_destroy (pthread_cond_t *cond);

Operacin c_Wait sobre una variable condicional Este servicio corresponde con la operacin c_Wait sobre una variable condicional. Su prototipo es: Int pthread_cond_wait(pthread_cond_t *cond, Pthread_mutex_t_*mutex);

Mutex y variables condicionales en POSIX


Operacin c_signal sobre una variable condicional Este servicio se corresponde con la operacin c_signal sobre una variable condicional. Su pronto tipo es: Int pthread_cond_signal(pthread_cond_t *cond); Para desbloquear a todos los procesos ligeros suspendidos en una variable condicional se emplea el servicio: Int pthread_cond_broadcast(pthread_cond_t *cond);

Colas de mensajes POSIX


Las cola de mensajes POSIX son un mecanismo de comunicacin y sincronizacin que pueden utilizar los procesos que ejecutan en la misma mquina, bien sea un multiprocesador o una multicomputadora. Crear y abrir una cola de mensajes Existen dos modalidades con las que se puede invocar a esta funcin segn se quiere crear o simplemente abrir una cola ya existente: Mqd_t mq_open (char *name, int flag, mode_t mode, Struct mq_attr *attr); Mqd_t mq_open(char *name, int flag);

Colas de mensajes POSIX


Cerrar una cola de mensajes Cierra una cola de mensajes. El prototipo de la funcin que permite invocar este servicio es: Int mq_close(mqd_t mqdes); Borrar una cola de mensajes Borra una cola de mensajes. Su prototipo es: Int mq_unlink(char*name); Enviar datos a una cola de mensajes Permite enviar un mensaje a una cola de mensajes. Su prototipo es el siguiente: Int mq_send(mqd_t mqdes, char*msg, size_t len, int prio);

Colas de mensajes POSIX


Recibir datos de una cola de mensajes Permite recibir un mensaje de una cola de mensajes. El prototipo que permite invocar este servicio es: Int mq_receive(mqd_t mqdes, char*msg, size_t len, int *prio);

Asignar atributos a una cola de mensajes Permite cambiar los atributos asociados a una cola de mensajes. Su prototipo es: Int mq_setattr(mqd_t mqdes, struct mq_attr *qstat, Struct mq_attr *oldmqstat);

Colas de mensajes POSIX


Obtener los atributos de una cola de mensajes Devuelve los atributos de una cola de mensajes. Su prototipo es el siguiente: Int mq_getattr(mqd_t mqdes, struct mq_attr *qstat);

S-ar putea să vă placă și