Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porRafael Roldán Soler Modificado hace 9 años
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 deben compartir. l Tabla de semáforos
2
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... };
3
ESTRUCTURAS BÁSICAS §Estructura sembuf:Operación a realizar sobre un semáforo. Struct sembuf{ ushort sem_num; short sem_op; short sem_flg; };
4
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; };
5
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;
6
SÉMAFOROS int semmopm; int semume; int semusz; int semvmx; int semaem; };
7
SÉMAFOROS §LLAMADAS AL SISTEMA l Semget: Creación y búsqueda de grupos de semáforos. l Semctl: Control de los semáforos. l Semop: Operaciónes sobre los semáforos.
8
SEMÁFOROS §Semget ( creación y búsqueda de grupos de semáforos) l #include l int (key, int nsems,int semflg);
9
SEMÁFOROS §Key §nsems §semflg Campo II: Campo I: 00X00 IPC_CREAT 000X0 IPC_EXCL 0000X
10
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.
11
SEMÁFOROS §En este último caso, la variable errno toma uno de los valores siguientes: l EACCES l EEXIST l EIDRM l ENOMEN l ENOSPC
12
SEMÁFOROS §Semop( operaciones sobre los semáforos) l #include l int semop(int semid, struct sembuf * sops, unsigned nsops);
13
SEMÁFOROS §Semid §sops §nsops §Operaciones: l Valor estrictamente positivo l Valor nulo l Valor estrictamente negativo
14
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:
15
SEMÁFOROS §E2BIG §EACCES §EAGAIN §EFAULT §EFBIG §EIDRM §EINTR §EINVAL §ENOMEN §ERANGE
16
SEMÁFOROS §Semctl( el control de los semáforos) l #include l int semctl(int semid, int semnum, int cmd,union semun arg);
17
SEMÁFOROS §semid §semnum §arg §cmd §El parámetro cmd indica indica pues la operación a realizar, y según su valor puede ser:
18
SEMÁFOROS §IPC_STAT §IPC_SET §IPC_RMID §GETPID §GETNCNT §GETVAL/SETVAL §GETALL/SETALL
19
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.
20
SEMÁFOROS §En caso de error en errno: l EACCES l EFAULT l EIDRM l EINVAL l EPERM l ERANGE §Exito se devuelve valor positivo o nulo dependiendo de cmd: l GETPID l GETVAL l GETNCNT l GET2CNT
21
MEMORIA COMPARTIDA §Conceptos l Enviar datos de un proceso a otro l Compartir una parte de su espacio de direccionamiento. l Obligan implementar un mecanismo de sincronización de accesos
22
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;
23
MEMORIA COMPARTIDA unsigned short shm_lpid; short shm_nattch; unsigned short shm_npages; unsigned long * shm_pages; struct attaches; vm_area_struct *; };
24
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; };
25
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.
26
MEMORIA COMPARTIDA §shmget ( creación y búsqueda de una zona de memoria compartida ) l #include l int shmget (key_t, int size, int option);
27
MEMORIA COMPARTIDA §key_t §size §option §Campo I: l IPC_CREAT l IPC_EXL §Campo II: l 00X00 Usuario l 000X0 Grupos l 0000X Otros
28
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.
29
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
30
MEMORIA COMPARTIDA §Valores que puede tomar la variable errno: l ENOMEN l EINVAL l ENOENT l EEXIST l EIDRM l EACCES, EPERM l EFAULT l ENOSPC
31
MEMORIA COMPARTIDA shmat ( vincular de una zona de memoria ) l #include l void *shmat (int shmid, const void *shmaddr, int option);
32
MEMORIA COMPARTIDA §shmid §*shmaddr §option l shmaddr == NULL entonces el SO intenta encontrar una zona de memoria libre
33
MEMORIA COMPARTIDA l Si no, el sistema operativo intenta vincular la memoria compartida a la dirección especificada l 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.
34
MEMORIA COMPARTIDA §SHM_RDONLY §No existe un medio para escritura exclusiva §Esta llamada al sistema actualiza los parámetros siguientes de la estructura shmid_ds: l shm_atime recibe la fecha actual; l shm_lpid recibe el pid del proceso que llama; l shm_nattch se incrementa en una unidad.
35
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.
36
MEMORIA COMPARTIDA §La variable errno puede tomar uno de los valores siguientes: l EACCES l EINVAL l ENOMEN l EIDRM
37
MEMORIA COMPARTIDA Shmdt (desvincular una zona de una zona de memoria) #include void *shmat (int shmid, const void *shmaddr, int option);
38
MEMORIA COMPARTIDA Shmct ( Control de las zonas de memoria compartidas ) #include int shmct (int shmid, int cmd, struct shmid_ds *buf);
39
MEMORIA COMPARTIDA §Diferentes usos: l IPC_STAT l IPC_SET l IPC_RMID §opciones específicas de Linux l SHM_LOCK l SHM_UNLOCK
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.