Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Guia Sincronizacion 2011 Resuelta PDF
Guia Sincronizacion 2011 Resuelta PDF
SistemasOperativos
UTNFRBA
Ejercicios de sincronizacin
1- Dados los siguientes procesos con variables compartidas, sincronizarlos para garantizar la
mutua exclusin sobre ellas.
variables_compartidasa=b=1;
Proceso0
Proceso1
variable_locald=1;
While(TRUE){
a=a+d;
d=d*d;
b=bd;
}
variable_locale=2;
While(TRUE){
b=b*e;
e=e^e;
a++;
}
2- Dado un sistema con N procesos del mismo programa, sincronice su cdigo mediante
semforos para respetar el lmite de tres instancias del recurso usado.
Programa
while(TRUE){
id_recurso=pedir_recurso();
usar_recurso(id_recurso);
}
3- Dado un sistema con los siguientes tipos de procesos, sincronice su cdigo mediante
semforos sabiendo que hay tres impresoras, dos escnners y una variable compartida.
ProcesoA(ninstancias)
While(TRUE){
usar_impresora();
variable_compartida++;
}
ProcesoB(ninstancias)
While(TRUE){
variable_compartida++;
usar_escanner();
}
ProcesoC(ninstancias)
While(TRUE){
usar_escanner();
usar_impresora();
}
4- Sean dos procesos A y B, sincronizarlos para que ejecuten de manera alternada (A,B,A,B,...).
5- Sean los procesos A, B y C, sincronizarlos para que ejecuten de manera alternada
(A,B,C,A,B,C...).
6- Sean los procesos A, B y C, sincronizarlos para que ejecuten de la siguiente manera:
B,A,C,A,B,A,C,A,....
Ejerciciosbsicos2011Revisin3
SistemasOperativos
UTNFRBA
7- Suponga que un proceso tiene por tarea compilar un conjunto de programas y luego enviar el
resultado de cada compilacin por email al encargado de ese proyecto. Dicho proceso est
organizado de la siguiente manera: N hilos de kernel compilan cada uno un programa distinto, y
luego cada uno de ellos depositan en una lista (compartida para todo el proceso) el resultado;
por otro lado, un hilo de kernel retira los resultados de las compilaciones y manda un email por
cada uno de ellos.
Estructura compartida: lista // Lista de resultados de compilaciones
KLT compilador (N instancias)
While (TRUE){
id_programa = obtener_nuevo_programa();
r = compilar_programa(id_programa);
depositar_resultado(r, lista);
}
Ejerciciosbsicos2011Revisin3
SistemasOperativos
UTNFRBA
1)
variables_compartidas a = b = 1;
semaforos mutex: mutex_a, mutex_b = 1
Proceso 0
variable_local d = 1;
While (TRUE){
Proceso 1
variable_local e = 2;
While (TRUE){
wait(mutex_a);
a = a + d;
signal(mutex_a);
wait(mutex_b);
b = b * e;
signal(mutex_b);
d = d * d;
e = e ^ e;
wait(mutex_b);
b = b d;
signal(mutex_b);
wait(mutex_a);
a++;
signal(mutex_a);
2)
sem_a=3
while (TRUE){
wait(sem_a);
id_recurso = pedir_recurso();
usar_recurso(id_recurso);
signal(sem_a);
3)
i=3,s=2,vc=1
Proceso A (n instancias)
While (TRUE){
wait(i);
usar_impresora();
signal(i);
Proceso B (n instancias)
While (TRUE){
wait(vc);
variable_compartida++;
signal(vc);
Proceso C (n instancias)
While (TRUE){
wait(s);
usar_escanner();
signal(s);
wait(vc);
variable_compartida++;
signal(vc);
}
wait(s);
usar_escanner();
signal(s);
wait(i);
usar_impresora();
signal(i);
4)
a=1;b=0;
A
wait(a);
wait(b);
signal(b);
signal(a);
5)
a=1;b=0;c=0;
A
wait(a);
wait(b);
wait(c);
signal(b);
signal(c);
signal(a);
6)
a=0;b=1;c=0; d=1;
A
wait(a);
wait(b);
wait(c);
wait(d);
wait(d);
signal(c);
signal(b);
signal(a);
signal(a);
signal(d);
7)
a)
a=0
Estructura compartida: lista // Lista de resultados de compilaciones
KLT compilador (N instancias)
While (TRUE){
While (TRUE){
id_programa = obtener_nuevo_programa();
wait(a);
r = compilar_programa(id_programa);
wait(mutex);
wait(mutex);
depositar_resultado(r, lista);
r2 = retirar_resultado(lista);
signal(mutex);
signal(mutex);
signal(a);
enviar_email(r2);
}
b)
l=m;a=0;
Estructura compartida: lista // Lista de resultados de compilaciones
KLT compilador (N instancias)
While (TRUE){
While (TRUE){
id_programa = obtener_nuevo_programa();
wait(a);
r = compilar_programa(id_programa);
wait(mutex);
wait(l);
r2 = retirar_resultado(lista);
wait(mutex);
signal(mutex);
depositar_resultado(r, lista);
signal(l);
signal(mutex);
enviar_email(r2);
signal(a);
}
8)pistas=10;a=0;e=0;s=0;
pistasLibres = 10; // variable compartida
AVIN
CONTROLADOR ENTRADA
while(TRUE){
while(TRUE){
CONTROLADOR SALIDA
while(TRUE){
mantenimiento();
wait(s);
signal(e);
wait(a);
wait(e);
wait(pistas);
despegar();
otorgarUnaPista();
pistasLibres--;
log(pistasLibres);
signal(s);
signal(a);
liberarUnaPista();
pistasLibres++;
log(pistasLibres);
signal(pistas);
}
volar();
signal(e);
wait(a);
aterrizar();
signal(s);
}
9)
vector de semforos jugador[5]=[1,0,0,0,0];
pos_jug,pos_arq,orden,arbitro,gol,pateo=0
Proceso RBITRO
Proceso JUGADOR
Proceso ARQUERO
while(TRUE){
while(TRUE){
while(TRUE){
wait(pos_jug);
wait(pos_arq);
wait(jugador[actual()]);
posicionarse();
signal(pos_jug);
posicionarse();
signal(pos_arq);
dar_orden();
signal(orden);
wait(arbitro);
validar_tiro();
signal(gol);
signal(gol);
signal(jugador[siguiente()]);
}
wait(orden);
patear();
signal(pateo);
wait(gol);
if (GOL==TRUE){
festejar();
else{
lamentarse();
}
wait(pateo);
atajar();
signal(arbitro);
wait(gol);
if (GOL==FALSE){
festejar();
else{
lamentarse();
}