1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas...
-
Upload
veronica-lanza -
Category
Documents
-
view
239 -
download
0
Transcript of 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas...
![Page 1: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/1.jpg)
1
Sistemas Operativos
Semáforos
![Page 2: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/2.jpg)
2
Se necesitan para
• Sincronizar Procesos• Exclusión mutua• Zonas críticas • Abstracción de recursos
• Semáforo: una variable que permite o no el paso• Sem = 0 disponible Sem >< 0 ocupado• Una cola asociada
![Page 3: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/3.jpg)
3
Una aproximación
• CIERRE(X) APERTURA(X)• EXAM: X = 0;• If X = Ocupado
Go to EXAM;• X := 1;
• Loop de uso procesador – Inseguro por interrupción
![Page 4: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/4.jpg)
4
Modificaciones
• Test&Set (x)
• Wait (x) (duerme proceso en cola asociada) (FIFO)
• Signal (x) (depierta proceso de la cola asociada) (¿dónde lo pone?)
![Page 5: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/5.jpg)
5
Nueva aproximación
• CIERRE(X) APERTURA(X)• EXAM: T.S.(X) X = 0• If X = Ocupado
then WAIT(X) SIGNAL(X)
• Go to EXAM
• ¿por qué volver EXAM?
![Page 6: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/6.jpg)
6
Dijkstra (semáforos contadores)
• P (x)
x = x - 1 si x 0, wait (x)
• V(x)
x = x + 1 si x 0, signal (x)
![Page 7: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/7.jpg)
7
Modelo de Exclusión
• Init sem x = 1
P(x)
V(x)
¿cómo incide en la administración de procesos?
![Page 8: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/8.jpg)
8
Modelo Productor Consumidor
![Page 9: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/9.jpg)
9
Modelo P/C un mensaje
• Init Espacio = 1 Mensaje = 0
• EMISOR RECEPTOR
P(Espacio) P(Mensaje)
. .
Coloca inf. Retira inf.
. .
V(Mensaje) V(Espacio)
![Page 10: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/10.jpg)
10
Modelo P/C con más de un espacio (emisor)
• E Mensaje = 0
P(Espacio) Espacio = 3
VEC(i) = M i = 0
i = (i+1) módulo 3
V(Mensaje)
![Page 11: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/11.jpg)
11
Modelo P/C con más de un espacio (consumidor)
• R
P(Mensaje) j = 0
X = VEC(j)
j = (j+1) módulo 3
V(Espacio)
![Page 12: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/12.jpg)
12
Problemas
• Siempre que hay cambio de información, por datos o por estructuras, es necesario excluir (serializar)
• Problemas de las exclusiones
![Page 13: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/13.jpg)
13
Problemas
• Productor
P(Exclu)
P(Espacio)
VEC(i) = M
i = (i+1) módulo 3
V(Mensaje)
V(Exclu)
![Page 14: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/14.jpg)
14
Problemas
• Consumidor
P(Exclu)
P(Mensaje)
X = VEC(j)
j = (j+1) módulo 3
V(Espacio)
V(Exclu)
![Page 15: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/15.jpg)
15
Solución
• Productor
P(Espacio)
P(Exclu)
VEC(i) = M
i = (i+1) módulo 3
V(Exclu)
V(Mensaje)
![Page 16: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/16.jpg)
16
Solución
• Consumidor
P(Mensaje)
P(Exclu)
X = VEC(j)
j = (j+1) módulo 3
V(Exclu)
V(Espacio)
![Page 17: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/17.jpg)
17
Implementado con stack
• E (semáforo) = MAX = 3 (cuenta el máximo de mensajes producibles)
• S (semáforo) = 0 (cuenta el número de mensajes disponibles para consumo)
• X (semáforo de exclusión) = 1
![Page 18: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/18.jpg)
18
Stack
![Page 19: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/19.jpg)
19
Prod/Cons Implementación Stack con exclusión bien puesta
• Las rutinas serán :A (Productor) B (Consumidor)P(E) P(S)P(X) P(X)[1] P = genera apuntador [2] C = PrimeroP.Mensaje = Dato [5] Primero=C.Próximo[3] P. Próx = Primero Dato = C.Mensaje[4] Primero = P Libera CV(X) V(X)V(S) V(E)
![Page 20: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/20.jpg)
20
Si suponemos sin exclusión
![Page 21: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/21.jpg)
21
Estudio de casos
• 0) A Prod B y C Cons sec. ABCABC...
• 1) A prod B Cons sec. ABBABB...
• 2) idem sec. A (BC) o A (CB)...
• 3) idem sec. ABCACBABCACB...
![Page 22: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/22.jpg)
22
Implementación
![Page 23: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/23.jpg)
23
![Page 24: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/24.jpg)
24
Implementación
/* One semid data structure for each set of semaphores in the system. */
struct semid_ds { struct ipc_perm sem_perm; /* permissions .. see ipc.h */time_t sem_otime; /* last semop time */ time_t sem_ctime; /* last change time */ struct sem *sem_base; /* ptr to first semaphore in array */ struct wait_queue *eventn; struct wait_queue *eventz; struct sem_undo *undo; /* undo requests on this array */ushort sem_nsems; /* no. of semaphores in array */
};
![Page 25: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/25.jpg)
25
Implementación
• sem_perm • This is an instance of the ipc_perm structure, which is defined for us in
linux/ipc.h. This holds the permission information for the semaphore set, including the access permissions, and information about the creator of the set (uid, etc).
• sem_otime • Time of the last semop() operation (more on this in a moment)
• sem_ctime • Time of the last change to this structure (mode change, etc)
• sem_base • Pointer to the first semaphore in the array (see next structure)
• sem_undo • Number of undo requests in this array (more on this in a moment)
• sem_nsems
• Number of semaphores in the semaphore set (the array)
![Page 26: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/26.jpg)
26
Implementación IPC (crea semáforo)
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <stdio.h>
#define KEY (1492)
void main()
{ int id; /* Number by which the semaphore is known within a program */
...
id = semget(KEY, 1, 0666 | IPC_CREAT);
}
![Page 27: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/27.jpg)
27
Implementación IPC (operación V)
#include <sys/types.h> ...#define KEY (1492) void main() { int id;
id = semget(KEY, 1, 0666); /* Which semaphore in the semaphore array : */
operations[0].sem_num = 0; /* Which operation? Add 1 to semaphore value : */
operations[0].sem_op = 1; /* Set the flag so we will wait : */
operations[0].sem_flg = 0; /* So do the operation! */
retval = semop(id, operations, 1); (sobre retval se pregunta)}
![Page 28: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/28.jpg)
28
Implementación IPC (operación P)
#include <sys/types.h> ...#define KEY (1492) void main() { int id;
id = semget(KEY, 1, 0666); /* Which semaphore in the semaphore array : */
operations[0].sem_num = 0; /* Which operation? Substract 1 to semaphore value : */
operations[0].sem_op = -1; /* Set the flag so we will wait : */
operations[0].sem_flg = 0; /* So do the operation! */
retval = semop(id, operations, 1); (sobre retval se pregunta)}
![Page 29: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/29.jpg)
29
Implementación POSIX
• P1003.1b • Function Description• sem_close Deallocates the specified named semaphore• sem_destroy Destroys an unnamed semaphore• sem_getvalue Gets the value of a specified semaphore• sem_init Initializes an unnamed semaphore• sem_open Opens/creates a named semaphore for use by a process• sem_post Unlocks a locked semaphore• sem_trywait Performs a semaphore lock on a semaphore only if it can
lock the semaphore without waiting for another process to unlock it• sem_unlink Removes a specified named semaphore• sem_wait Performs a semaphore lock on a semaphore
![Page 30: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/30.jpg)
30
Implementación POSIX
• The following example creates a semaphore named /tmp/mysem with a
value of 3
#include <sys/types.h>#include <stdio.h>#include <errno.h>#include <fcntl.h>#include <unistd.h>
#include <sys/mman.h> #include <semaphore.h>
#include <sys/stat.h>
![Page 31: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/31.jpg)
31
Implementación POSIX
sem_t *mysemp;
int oflag = O_CREAT;
mode_t mode = 0644;
const char semname[] = "/tmp/mysemp"unsigned int value = 3;
int sts;…mysemp = sem_open(semname, oflag, mode, value);
if (mysemp == (void *)-1) { perror(sem_open() " failed ");}• To access a previously created semaphore, a process must call the
sem_open function using the name of the semaphore.
![Page 32: 1 Sistemas Operativos Semáforos. 2 Se necesitan para Sincronizar Procesos Exclusión mutua Zonas críticas Abstracción de recursos Semáforo: una variable.](https://reader036.fdocuments.ec/reader036/viewer/2022062323/5665b4731a28abb57c91944f/html5/thumbnails/32.jpg)
32
Implementación POSIXExclusión Mutua
void *t1 void *t2
... ...
sem_wait(*sem) sem_wait(*sem)
Zona Crítica Zona Crítica
sem_post(*sem) sem_post(*sem)
... ...
sem_init(*sem,0,1)