Comunicación entre procesos (System V)

Anuncio
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?
Descargar