Comunicación entre procesos (System V) CI-2400 Programación Avanzada en Sistemas de Tipo UNIX Prof. Braulio José Solano Rojas ECCI, UCR IPC System V ● IPC System V se compone de tres mecanismos: ● ● ● Semáforos: van a permitir sincronizar procesos. Memoria compartida: va a permitir que los procesos compartan su espacio de direcciones virtuales. Cola de mensajes: intercambio de datos con un formato determinado. IPC System V ● ● ● Cada mecanismo tiene una tabla cuyas entradas describen el uso que se hace del mismo. Cada entrada de la tabla tiene una llave numérica escogida por el usuario. Cada mecanismo dispone de una llamada “get” para crear una entrada nueva o recuperar alguna ya existente. IPC System V ● Para cada mecanismo IPC, el kernel aplica la fórmula siguiente al calcular el índice que da acceso a la tabla: ● ● Índicetabla = númerodescriptor % (número de entradas en la tabla) Cada entrada de la tabla tiene un registro de permisos. IPC System V ● ● Cada entrada contiene información de estado, en la que se incluye el indentificador del último proceso que ha utilizado la entrada. Cada mecanismo IPC tiene una llamada de “control” que permite leer y modificar el estado de una entrada reservada y también permite liberarla. Formación de llaves ● ● Una llave es una variable o constante del tipo key_t que vamos a utilizar para acceder los mecanismos IPC previamente reservados o para reservar otros nuevos. La biblioteca estándar C aporta la función ftok para crear llaves de una manera estándar. ● key_t ftok(char* path, char id) Formación de llaves key_t llave; … if ((llave = ftok(“prueba”,’A’)) == (key_t)-1) { /* Error al crear la llave. Tratamiento del error. */ } Utilidades de línea de comandos ● ipcs ● ● ● ● ● -q información de colas -m información de memorias -s información de los semáforos activos -b información completa ipcrm ● ● ● -q msqid borra la cola msqid -m shmid borra la memoria shmid -s semid borra el semáforo semid Semáforos ● ● ● Sirve para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente un recurso compartido. Dos operaciones P y V. P bloquea y V desbloquea. P y V deben ser atómicas. Semáforos System V ● Se componen de los siguientes elementos: ● ● ● ● El valor del semáforo. El identificador del último proceso que manipuló el semáforo. El número de procesos que hay esperando a que el valor del semáforo se incremente. El número de procesos que hay esperando a que el semáforo tome el valor 0. Semáforos System V ● ● ● semget nos permite acceder o crear un conjunto de semáforos bajo un identificador común. int semget(key_t key, int nsems, int semflg); Bits para semflg: – – – – – – IPC_CREAT se crea si no ha sido creado IPC_EXCL semáforo exclusivo 0400 lectura para el usuario 0200 modificación para el usuario 0060 lectura y modificación para el grupo 0006 lectura y modificación para otros Semáforos System V int llave, semid; … if ((llave = ftok(“auxiliar”, ‘K’)) == (key_t)-1) { /* Tratar el error. */ } if ((semid = semget(llave, 4, IPC_CREAT | 0600)) == -1) { /* Tratar el error. */ } Control de semáforos ● ● semctl permite acceder a la información administrativa y de control de los semáforos. int semctl(int semid, int semnum, int cmd, arg); union semun { int val; struct semid_ds *buf; ushort *array; }arg; Control de semáforos ● ● semnum indica a cual semáforo de los que están bajo semid queremos acceder. cmd ● GETVAL, SETVAL, GETPID, GETNCNT, GETZCNT, GETALL, SETALL, IPC_STAT, IPC_SET, IPC_RMID. ¡Gracias por su atención! ¿Preguntas?