tema 6 - ipc del unix system v -...

31
Sistemas Operativos: Programación de Sistemas Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J. Santana Pérez Curso 2006-07 Tema 6 : IPC del Unix System V

Upload: others

Post on 18-Aug-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Sistemas Operativos: Programación de Sistemas

Oscar Déniz SuárezAlexis Quesada Arencibia

Francisco J. Santana Pérez

Curso 2006-07

Tema 6 : IPC del UnixSystem V

Page 2: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Introducción El paquete de comunicación entre procesos

(IPC) del UNIX System V se compone de tresmecanismos: Semáforos, para sincronizar procesos Memoria compartida, para compartir el espacio de

direcciones virtuales de los procesos Colas de mensaje, para intercambiar datos con un

formato determinado entre procesos Las estructuras IPC están en el núcleo, como

los pipes, y no en el sistema de archivos, comolas FIFO

Page 3: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Formación de claves

Cada IPC posee un identificador único Al crear un IPC es necesario especificar

una clave de tipo key_t, que el núcleousa para generar el identificador del IPC(key_t es un entero)

Diferentes llamadas a la función decreación de un IPC con la misma clavedevuelven el mismo identificador, lo quepermite compartir un IPC entre procesos

Page 4: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Formación de claves ¿ cómo asegurar que todos los procesos que

quieran usar la misma estructura IPC utilicen lamisma clave ? En caso de procesos creados con fork => comparten

el identificador. Además si el proceso hijo realiza unexec, se puede pasar el identificador mediante unparámetro al exec

Un proceso crea el IPC y guarda la clave en unfichero accesible a los otros procesos

Poner la clave en un archivo cabecera (.h) común. Apoyarse en la función de la biblioteca de C ftok

Page 5: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Formación de claves Creación de una clave mediante ftok

#include <types.h>#include <sys/ipc.h>key_t ftok (char *path, char id);

ftok devuelve una clave basada enpath y en id

Page 6: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

IPC desde el shell Ordenes ipcs e ipcrm

Ipcs => mostrar información (-q, -m, -s) lpcrm => eliminar mecanismos IPC (-q, -m, -s)

Page 7: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Desventajas del IPC del UnixSystem V

Tiene una interfaz de programación compleja No se mantiene contador del número de

procesos que está usando una estructura Por lo tanto, no hay un método automático para

reclamar estructuras IPC abandonadas Si un proceso crea y usa una estructura y

termina sin eliminarla apropiadamente, laestructura permanece hasta que: Se reinicie el sistema Se elimina específicamente con el comando

ipcrm Otro proceso la elimina

Page 8: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Semáforos Mecanismo de sincronización Dijkstra, 1965

Tipo abstracto de datos que admite dosoperaciones:

• P (espera o wait)• V (señal o signal)

Importante: las operaciones P y V sonatómicas

Page 9: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Semáforos Creación de un semáforo: llamada semget

#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>int semget (key_t key, int nsems, int semflg);donde:Key es la clave que identifica al grupo de semáforosNsems es el número de semáforos a crearSemflg es una máscara de bits (IPC_CREAT,

IPC_EXCL, permisos) Ejemplo:

int semid=semget(IPC_PRIVATE, 1, IPC_CREATE | 0600)

Page 10: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Semáforos La llamada semctl nos da acceso a la

información administrativa y de control quedispone el núcleo de un semáforo#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>int semctl (int semid, int semnum, int cmd, union semun

arg); semnum es el nº del semáforo del conjunto en

con que se quiere operar (entre 0 y nsems-1) cmd indica la operación a realizar. Según el

valor de cmd arg contendrá otras opciones

Page 11: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Semáforos Las operaciones más interesantes son:

GETVAL, retorna el valor actual del semáforo SETVAL, modifica el valor del semáforo (un

cuarto parámetro entero especifica el nuevovalor)

IPC_RMID, destruye el semáforo

Page 12: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Semáforos La llamada semop nos permite realizar

operaciones atómicas sobre el conjunto desemáforos#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>int semop (int semid, struct sembuf *sops, int nsops);donde:semid identifica al grupo de semáforos sobre los que se

va a realizar la operaciónsops es un puntero a un array de estructuras que

indican las operaciones que se lrealizarán sobre lossemáforos

nsops es el número de elementos del array sops

Page 13: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Semáforos Las operaciones se especifican mediante una

estructura de tipo sembufstruct sembuf{

ushort sem_num; /* número del semáforo*/short sem_op; /*operación (inc. o dec.)*/short sem_flg; /*máscara de bits*/

}

semop >0 => incremento y desbloqueosemop <0 => bloqueo y/o decremento según sem_flg (IPC_WAIT,IPC_NOWAIT, SEM_UNDO)semop =0 => el proceso se bloquea hasta que el semáforo sea 0 (a menosque se especifique IPC_NOWAIT en sem_flg)

Page 14: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Semáforos Ejercicio práctico:

Vamos a crear un proceso padre y un proceso hijoque escriban por pantalla un cierto número de vecesN que pasamos como argumento mediante la líneade órdenes “Soy el proceso Padre con PID XXX” y“Soy el proceso Hijo con PID YYY” respectivamente.Con independencia del proceso que escriba primero,siempre deben visualizarse en pantalla todos losmensajes de cada proceso sin que estos seentremezclen.

Page 15: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Memoria compartida La forma más rápida de comunicar dos procesos es

hacer que compartan una zona de memoria La memoria convencional que puede direccionar un

proceso es local al mismo, y cualquier intento deacceso desde otro proceso provocará una violación desegmento

UNIX System V proporciona un sistema de memoriacompartida entre varios procesos

Para trabajar con memoria compartida es necesariocrear un vínculo (attachment) entre la memoria local delproceso y el segmento compartido

El proceso que vincula un segmento de memoriacompartida cree estar trabajando con ella como si fueracierta área de memoria local

Page 16: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Memoria compartida Para crear una zona de memoria compartida

usamos la llamada shmget#include <sys/types.h>#include <sys/ipc.h>#include <sys/shm.h>int shmget (key_t key, int size, int shmflg);donde:Key es la clave que identifica al segmento de memoria

(IPC_PRIVATE o una clave devuelta por ftok)size especifica el tamaño del segmento (será

redondeado al valor de PAGE_SIZE)shmflg es una máscara de bits (IPC_CREAT,

IPC_EXCL, permisos)

Page 17: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Memoria compartida Antes de usar la memoria compartida, tenemos que asignarle un

espacio de direcciones virtuales de nuestro proceso; es lo que seconoce como atarse al segmento de memoria compartida

Al terminar de usar el segmento de memoria, debemosdesatarnos de él#include <sys/types.h>#include <sys/ipc.h>#include <sys/shm.h>char *shmat (int shmid, char *shmaddr, int shmflg);int shmdt (char *shmaddr);donde:shmid es el identificador del segmentoShmaddr es la dirección virtual donde queremos que empiece la zona de

memoria compartida (cuando toma el valor 0, es el núcleo el que eligela dirección virtual de inicio)

shmflg es una máscara de bits que indica la forma de acceso(SHM_RDONLY)

Page 18: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Memoria compartida Para controlar una zona de memoria

compartida usamos la llamada shmctl

#include <sys/types.h>#include <sys/ipc.h>#include <sys/shm.h>int shmctl (int shmid, int cmd, struct shmid_ds

*buf);

Page 19: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Memoria compartida Algunas operaciones son:

IPC_STAT: lee la estructura de control asociada ashmid y la deposita en la estructura apuntada porbuff.

IPC_RMID: elimina el identificador de memoriacompartida especificado por shmid del sistema,destruyendo el segmento de memoria compartida ylas estructuras de control asociadas. El segmentodesaparecerá cuando el último proceso que lo utilizanotifique su desconexión del segmento

SHM_LOCK: bloquea la zona de memoriacompartida (sólo superusuario)

SHM_UNLOCK: desbloquea la región de memoriacompartida (sólo superusuario)

Page 20: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Memoria compartida Ejercicio práctico:

Vamos a crear un proceso padre y unproceso hijo de forma que el proceso hijoescriba un valor entero en una zona dememoria compartida y el proceso padre lolea y lo imprima por pantalla una vez que elproceso hijo haya terminado.

Page 21: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Colas de mensajes Son listas de mensajes gestionadas por el

núcleo La comunicación tiene lugar entre procesos

lanzados en la misma máquina Pueden existir múltiples procesos lectores y

escritores La “sincronización” es responsabilidad del núcleo

Los mensajes tienen este tipo:DATOS del mensajeTipo del mensaje (long)

Page 22: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Colas de mensajes Los mensajes se pueden extraer en orden

FIFO, pero también en otro orden El receptor puede esperar:

el siguiente mensaje (orden FIFO) el siguiente mensaje de cierto tipo

El núcleo impone límites máximos a: el número de bytes de un mensaje el número de bytes en una cola el número de colas en el sistema el número de mensajes en el sistema

Page 23: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Memoria compartida Para crear una cola de mensaje usamos la

llamada msgget#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>int msgget (key_t key, int msgflg);donde:Key es la clave que identifica la cola de mensajes

(IPC_PRIVATE o una clave devuelta por ftok)shmflg es una máscara de bits (IPC_CREAT,

IPC_EXCL, permisos)

Page 24: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Colas de mensajes Para escribir y leer mensajes usamos,

respectivamente, las llamadas msgsnd ymsgrcv#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>int msgsnd (int msgid, void *msgp, int msgsz, int

msgflg);int msgrcv (int msgid, void *msgp, int msgsz, long

msgtyp, int msgflg);

Page 25: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Colas de mensajesint msgsnd (int msgid, void *msgp, int msgsz, int

msgflg);int msgrcv (int msgid, void *msgp, int msgsz, long

msgtyp, int msgflg);donde:msgid es el identificador de la colaMsgp es un puntero a la zona de memoria donde está el

mensaje a escribir o leidoMsgsz es el tamaño del mensaje en bytes (sin contar el

tamaño del campo “tipo del mensaje”)

Page 26: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Colas de mensajesint msgsnd (int msgid, void *msgp, int msgsz, int

msgflg);int msgrcv (int msgid, void *msgp, int msgsz, long

msgtyp, int msgflg);msgtyp solo aparece en la operación de lectura y puede

tomar los valores siguientes:• 0, leer el primer mensaje que haya en la cola• >0, leer el primer mensaje de tipo msgtyp que haya en la cola• <0, lee el primer mensaje cuyo tipo sea el menor valor menor

o igual que el valor absoluto de msgtyp

Page 27: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Colas de mensajes El campo msgflg tiene distintos significados según sea la

llamda msgsnd o msgrcv Para la llamada msgsnd, si la cola está llena (el nº de

mensajes en la cola es igual al límite del sistema o el nºde bytes en la cola es igual al límite del sistema): Si IPC_NOWAIT está activo, msgsnd retorna inmediatamente el

error EAGAIN Si IPC_NOWAIT no está activo, el proceso que llama a msgsnd

se bloquea hasta que:• haya espacio para el mensaje• la cola sea eliminada del sistema. Se devuelve EIDRM• se reciba una señal y se vuelva del manejador de señal. Se

devuelve EINTR

Page 28: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Colas de mensajes Para la llamada msgrcv, si la cola está

vacía: Si IPC_NOWAIT está activo, msgrcv retorna

inmediatamente el error EAGAIN Si IPC_NOWAIT no está activo, el proceso

que llama a msgrcv se bloquea hasta quehaya un mensaje del tipo deseado

Page 29: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Colas de mensajes Para controlar una cola de mensajes

usamos la llamada msgctl#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>int msgctl (int msgid, int cmd, struct msgid_ds

*buf);

Page 30: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Colas de mensajes Algunas operaciones son:

IPC_STAT: devuelve la estructura de controlasociada a la cola de mensajes

IPC_SET: establece algunos valores en laestructura de control

IPC_RMID: elimina la cola de mensajes delsistema de forma inmediata.

Page 31: Tema 6 - IPC del Unix System V - ULPGCsopa.dis.ulpgc.es/progsis/material-didactico-teorico/tema6_1... · cmd indica la operación a realizar. Según el ... de órdenes “Soy el proceso

Colas de mensajes Ejercicio práctico:

Vamos a crear un proceso servidor que atiendepeticiones que le llegan a través de una cola demensajes desde una serie de procesos clientes. Losmensajes tienen el formato (PID, carácter). Elproceso servidor atiende las peticiones e imprimepor pantalla “SERVIDOR: Atendida la petición delproceso PID: carácter_enviado” y envían unarespuesta a través de otra cola a los clientes paraindicar que su petición ha sido atendida. Cuando elcliente recibe la respuesta imprime por pantalla elmensaje “CLIENTE PID: Atendida mi petición” ytermina. El servidor termina cuando un cliente lepase el carácter ‘z’. El carácter se pasa al clientecomo argumento mediante la línea de órdenes.