semÁforos §conceptos l mecanismo para prevenir la colisión que se produce cuando dos o más...

39
SEMÁFOROS Conceptos Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que deben compartir. Tabla de semáforos

Upload: rafael-roldan-soler

Post on 02-Feb-2016

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

SEMÁFOROS

Conceptos Mecanismo para prevenir la colisión que

se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que deben compartir.

Tabla de semáforos

Page 2: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

ESTRUCTURAS BÁSICAS Estructura semid_ds:Asociada a cada conjunto de semáforos.

Struct semid_ds{

struct ipc_perm

time_t sem_otime

time_t sem_ctime

struct sem* sem_base

struct sem_queue* sem_pending

struct sem_queue** sem_pending_last

struct sem_undo* undo

ushort sem_nsems

...

};

Page 3: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

ESTRUCTURAS BÁSICAS

Estructura sembuf:Operación a realizar sobre un semáforo.

Struct sembuf{

ushort sem_num;

short sem_op;

short sem_flg;

};

Page 4: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

ESTRUCTURAS BÁSICAS

Estructura semun:Almacenar o recuperar información sobre los semáforos.

Struct semun{

int val;

struct semid_ds buf;

ushort * array;

struct seminfo* __buf;

void __pad;

};

Page 5: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

SEMÁFOROS

Estructura Seminfo.Permite conocer valores límite o actuales del sistema(semctl).

Struct seminfo{

int semmap;

int semmni;

int semmns;

int semmnu;

int semmsl;

Page 6: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

SÉMAFOROS

int semmopm;

int semume;

int semusz;

int semvmx;

int semaem;};

Page 7: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

SÉMAFOROS

LLAMADAS AL SISTEMA

Semget: Creación y búsqueda de grupos de semáforos.

Semctl: Control de los semáforos. Semop: Operaciónes sobre los semáforos.

Page 8: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

SEMÁFOROS

Semget (creación y búsqueda de grupos de semáforos)

#include <sys/types.h> #include<sys/ipc.h> #include<sys/sem.h>

int (key, int nsems,int semflg);

Page 9: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

SEMÁFOROS

Keynsemssemflg

Campo II:

Campo I: 00X00

IPC_CREAT 000X0

IPC_EXCL 0000X

Page 10: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

SEMÁFOROS

Descripción: Retorna un descriptor de semáforo. Si no existe el descriptor y si se especifica IPC_CREAT creará uno.

Error: Retornará un -1 y errno tendrá el código de error.

Page 11: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

SEMÁFOROS

En este último caso, la variable errno toma uno de los valores siguientes: EACCES EEXIST EIDRM ENOMEN ENOSPC

Page 12: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

SEMÁFOROS

Semop(operaciones sobre los semáforos)

#include <sys/types.h> #include <sys/ipc.h> #include<sys/sem.h>

int semop(int semid, struct sembuf * sops,

unsigned nsops);

Page 13: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

SEMÁFOROS

SemidsopsnsopsOperaciones:

Valor estrictamente positivo Valor nulo Valor estrictamente negativo

Page 14: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

SEMÁFOROS

Ejecución correcta: Operará según el valor que tenga sem_op asociado a cada semáforo.

Error: Retornará un -1 y errno tendrá el código de error.Valores de la variable errno seguidamente:

Page 15: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

SEMÁFOROS

E2BIGEACCESEAGAINEFAULTEFBIG

EIDRMEINTREINVALENOMENERANGE

Page 16: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

SEMÁFOROS

Semctl(el control de los semáforos)

#include <sys/types.h> #include <sys/ipc.h> #include<sys/sem.h>

int semctl(int semid, int semnum, int cmd,union semun arg);

Page 17: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

SEMÁFOROS

semidsemnumargcmdEl parámetro cmd indica indica pues la

operación a realizar, y según su valor puede ser:

Page 18: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

SEMÁFOROS

IPC_STAT IPC_SET IPC_RMIDGETPID

GETNCNTGETVAL/SETVALGETALL/SETALL

Page 19: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

SEMÁFOROS

Descripción: Se accede a los valores que definen un semáforo.Dependiendo de la operación realizada su retorno será 0 o un valor positivo.

Error: Retornará un -1 y errno tendrá el código de error.

Page 20: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

SEMÁFOROS

En caso de error en errno:

EACCES EFAULT EIDRM EINVAL EPERM ERANGE

Exito se devuelve valor positivo o nulo dependiendo de cmd:

GETPID GETVAL GETNCNT GET2CNT

Page 21: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

MEMORIA COMPARTIDA

Conceptos Enviar datos de un proceso a otro Compartir una parte de su espacio de

direccionamiento. Obligan implementar un mecanismo de

sincronización de accesos

Page 22: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

MEMORIA COMPARTIDA

Estructura shmid_ds:Entrada en la tabla de memorias compartidas.

Struct shmid_ds{

struct ipc_perm;

int shm_shmgsz;

time_t shm_atime;

time_t shm_dtime;

time_t shm_ctime;

unsigned short shm_cpid;

Page 23: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

MEMORIA COMPARTIDA

unsigned short shm_lpid;

short shm_nattch;

unsigned short shm_npages;

unsigned long * shm_pages;

struct attaches;

vm_area_struct *;

};

Page 24: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

MEMORIA COMPARTIDA

Estructura shminfo:Utilizada sólo por el núcleo. Se utiliza en una llamada a shmctl con IPC_INFO como argumento.

struct shminfo{

int shmax;

int shmmin;

int shmmni;

int shmseg;

int shmall;

};

Page 25: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

MEMORIA COMPARTIDA

Llamadas al sistema:

shmget: Creación y búsqueda de una zona de memoria compartida.

shmctl: Control de las zonas de memorias compartidas.

shmat: Vincular una zona de memoria.

shmdt: Desvincular una zona de memoria.

Page 26: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

MEMORIA COMPARTIDA

shmget (creación y búsqueda de una zona de memoria

compartida) #include <sys/ipc.h> #include<sys/shm.h> int shmget (key_t, int size, int option);

Page 27: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

MEMORIA COMPARTIDA

key_t

size

option

Campo I: IPC_CREAT IPC_EXL

Campo II:

00X00 Usuario 000X0 Grupos 0000X Otros

Page 28: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

MEMORIA COMPARTIDA

Descripción: Retorna un descriptor de región de memoria compartida. Si no existe descriptor y se especifica IPC_CREAT creará uno.

Error: Retornará un -1 y errno tendrá el código de error.

Page 29: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

MEMORIA COMPARTIDA

• Tamaño especificado debe ser inferior o igual al de

la memoria existente.

• En otro caso el tamaño asignado debe ser múltiplo

de PAGE_SIZE

Page 30: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

MEMORIA COMPARTIDA

Valores que puede tomar la variable errno:

ENOMEN EINVAL ENOENT EEXIST

EIDRM EACCES, EPERM EFAULT ENOSPC

Page 31: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

MEMORIA COMPARTIDA

shmat (vincular de una zona de memoria)

#include <sys/ipc.h> #include<sys/shm.h> void *shmat (int shmid, const void *shmaddr,

int option);

Page 32: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

MEMORIA COMPARTIDA

shmid*shmaddroption

shmaddr == NULL entonces el SO intenta encontrar una zona de memoria libre

Page 33: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

MEMORIA COMPARTIDA

Si no, el sistema operativo intenta vincular la memoria compartida a la dirección especificada

Si se especifica la opción SHM_RND, el

sistema intenta vincular la zona de

memoria a una dirección múltiplo de

SHMLBA lo más próxima posible a la

especificada.

Page 34: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

MEMORIA COMPARTIDA

SHM_RDONLYNo existe un medio para escritura exclusiva Esta llamada al sistema actualiza los

parámetros siguientes de la estructura shmid_ds: shm_atime recibe la fecha actual; shm_lpid recibe el pid del proceso que llama; shm_nattch se incrementa en una unidad.

Page 35: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

MEMORIA COMPARTIDA

Ejecución correcta: conectará una región de

memoria compartida a la memoria de

usuario.

Error: Retornará un -1 y errno tendrá el código de error.

Page 36: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

MEMORIA COMPARTIDA

La variable errno puede tomar uno de los valores siguientes: EACCES EINVAL ENOMEN EIDRM

Page 37: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

MEMORIA COMPARTIDA

Shmdt (desvincular una zona de una zona de memoria)

#include<sys.types.h>

#include <sys/ipc.h>

#include<sys/shm.h>

void *shmat (int shmid, const void *shmaddr,

int option);

Page 38: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

MEMORIA COMPARTIDA

Shmct (Control de las zonas de memoria compartidas)

#include <sys/ipc.h>

#include<sys/shm.h>

int shmct (int shmid, int cmd,

struct shmid_ds *buf);

Page 39: SEMÁFOROS §Conceptos l Mecanismo para prevenir la colisión que se produce cuando dos o más procesos solicitan simultáneamente el uso de un recurso que

MEMORIA COMPARTIDA

Diferentes usos: IPC_STAT IPC_SET IPC_RMID

opciones específicas de Linux SHM_LOCK SHM_UNLOCK