Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Procesos
Introduccin
Productor
while (true) {
/* produce an item and put in nextProduced */
while (count == BUFFER_SIZE)
; // do nothing
buffer [in] = nextProduced;
in = (in + 1) % BUFFER_SIZE;
count++;
}
Consumidor
while (true) {
while (count == 0)
; // do nothing
nextConsumed = buffer[out];
out = (out + 1) % BUFFER_SIZE;
count--;
/* consume the item in nextConsumed
}
Condiciones de Carrera
Condiciones de Carrera
Problema
Las condiciones de carrera se dan cuando varios
procesos accesan y manipulan los mismos datos
concurrentemente, y el resultado final depende del
orden particular en que los accesos se llevaron a
cabo
Solucin
Usar mecanismos de sincronizacin para que
solamente un proceso pueda manipular los datos a la
vez
Problema de la Seccin-Crtica
1.
2.
3.
2.
3.
4.
10
Solucin de Peterson
11
P0
while (true) {
P1
while (true) {
flag[0]=TRUE;
flag[1]=TRUE;
turn=1;
turn=0;
//seccion critica P0
//seccion critica P1
flag[0]=FALSE
}
flag[1]=FALSE
}
12
14
TestAndSet
15
Usando TestAndSet
Lock =Variable typo bool compartida e inicializada a falso
do {
while ( TestAndSet (&lock ))
; // do nothing
//
critical section
lock = FALSE;
//
remainder section
} while (TRUE);
16
17
do {
key = TRUE;
while ( key == TRUE)
Swap (&lock, &key );
//
critical section
lock = FALSE;
//
remainder section
} while (TRUE);
18
Sincornizacion Librerias:Semforos
// initialized to 1
do {
wait (mutex);
// Critical Section
signal (mutex);
// remainder section
} while (TRUE);
21
Implementacin de Semforos
22
23
Implementacin de signal():
signal(semaphore *S) {
S->value++;
if (S->value <= 0) {
remove a process P from S->list;
wakeup(P);
}
}
24
Interbloqueo e Inanicin
25
26
27
Productor
do {
Consumidor
do {
// produce an item
wait (full);
wait (empty);
wait (mutex);
wait (mutex);
// remove an item
signal (mutex);
signal (mutex);
signal (empty);
signal (full);
} while (TRUE);
} while (TRUE);
29
Estructura
Escritor
do {
Lector
do {
wait (wrt) ;
wait (mutex) ;
readcount ++ ;
if (readcount == 1)
wait (wrt) ;
signal (mutex)
// writing is performed
signal (wrt) ;
// reading is performed
} while (TRUE);
wait (mutex) ;
readcount - - ;
if (readcount == 0)
signal (wrt) ;
signal (mutex) ;
} while (TRUE);
30
Datos compartidos
Tazn de arroz (conjunto de datos)
Semforo chopStick [5] inicializado en 1
Filsofos pueden comer o pensar
31
32
33
Monitores
34
Sintaxis de un Monitor
35
Esquema de un Monitor
36
Monitores
37
Variables de Condicin
Condition x, y;
Dos operaciones en una variable de condicin:
x.wait () un proceso que invoca la operacin
es suspendido
x.signal () se contina a uno de los procesos
que invocaron x.wait ()
38
Variables de condicin
39
Variable de condicin
Solucin:
Uso de variables de condicin, y
Uso de operaciones wait() y signal() en esas
variables
40
Variable de condicin
41
42
43
44
45
Variables
semaphore mutex; // (inicializado = 1)
semaphore next; // (inicializado = 0), proceso que sigue
int next-count = 0; //numero de procesos
body of F;
if (next_count > 0)
signal(next)
else
signal(mutex);
46
Monitor Implementacion
47
Monitor Implementation
La operacion x.signal puede ser implementada asi:
if (x-count > 0) {
next_count++;
signal(x_sem);
wait(next);
next_count--;
}
48
49
Ejemplos de Sincronizacin
Solaris
Windows XP
Linux
Pthreads
50
Solaris
51
Windows XP
52
Linux
Linux:
Desabilita interrupciones para SC cortas
Proporciona:
semforos
spinlocks
53
Pthreads
54