Вы находитесь на странице: 1из 3

Sistemas operativos Problemas de: Comunicación y sincronización

Problemas de Comunicación y sincronización


Sistemas operativos

Problema 1 (semáforos)
Suponiendo que N procesos comparten la variable ch de tipo carácter cuyo valor inicial es 'a',
que se sincronizan mediante el semáforo s cuyo valor inicial es 1, y teniendo en cuenta que
todos ejecutan el algoritmo siguiente. ¿Cuál sería la salida que aparecería en la terminal?
while (CIERTO) {
wait(s);
printf("%c", ch);
ch++;
if (ch == 'z') {
printf("%c\n", ch);
ch = 'a';
}
signal(s);
}

Problema 2 (semáforos)
Sean A y B dos procesos que se sincronizan mediante los semáforos S1 y S2, con valores
iniciales 2 y 0, respectivamente. Sabiendo que ejecutan los algoritmos que se muestran a
continuación, ¿cuáles de las siguientes salidas podrían producirse?
a) 01201234012, b) 01320124, c) 3012012, d) 01203120412, e) 0120134012
A B
while (CIERTO) { while (CIERTO) {
int i; int j;

wait(S1); for (j=3; j<6; j++) {


for (i=0; i<3; i++) { wait(S2);
printf("%d", i); printf("%d", j);
fflush(stdout); fflush(stdout);
} signal(S1);
signal(S2); }
} }

Problema 3 (semáforos): Dormir/despertar


El núcleo del sistema operativo Unix utiliza internamente dos primitivas de sincronización
similares a las dos siguientes:
• dormir(valor): bloquear en valor al proceso que la invoca.
• despertar(valor): desbloquear a todos los procesos bloqueados en valor.
Suponiendo que valor es un entero entre 1 y n, proponer una implementación de estas
primitivas utilizando semáforos como herramienta de sincronización.
Sugerencia: resolver primero el problema como si sólo existiese un valor posible y después
extenderlo al caso de N valores.

Carlos Pérez y Rafael Martínez


Departamento de Informática-UVEG
10 de octubre de 2016 Ingeniería Multimedia 1 de 3
Sistemas operativos Problemas de: Comunicación y sincronización

Problema 4 (mutex y V.C.) ¿Qué ocurre?


Suponiendo que los hilos 1 y 2 ejecutan el código que se muestra a continuación, y sabiendo
que el valor inicial de x es 1.
1. ¿Qué ocurre cuando las instrucciones ejecutadas por ambos hilos se entrelazan en el orden
a1, b1, c1, f2, g2, h2, i2.1?
2. Suponiendo que tras i2 se le cede el control de la CPU al hilo 1, ¿qué instrucciones ejecuta
a continuación?
Código hilo 1 Código hilo 2
a lock_mutex(&m); f lock_mutex(&m);
b while (x > 0) g x--;
c cond_wait(&v, &m); h if (x == 0)
d x++; i cond_signal(&v);
e unlock_mutex(&m); j unlock_mutex(&m);

Problema 5 (mutex y V.C.): Semáforos


Implementar las funciones de sincronización de los semáforos (P o wait, V o signal)
utilizando las funciones de sincronización de hilos: mutex_lock(), mutex_unlock(),
cond_wait(), cond_signal() y cond_broadcast().

Problema 6 (mutex y V.C.): Dormir/despertar


El núcleo del sistema operativo Unix utiliza internamente dos primitivas de sincronización
similares a las dos siguientes:
• dormir(valor): bloquear en valor al proceso que la invoca.
• despertar(valor): desbloquear a todos los procesos bloqueados en valor.
Suponiendo que valor es un entero entre 1 y n, proponer una implementación de estas
primitivas utilizando mútex y variables condición como herramienta de sincronización.
Sugerencia: resolver primero el problema como si sólo existiese un valor posible y después
extenderlo al caso de N valores.

Problema 7 (mutex y V.C.): Puente con peso máximo


Se desea simular mediante hilos una situación de sincronización en la que cada hilo representa
a un excursionista. Los excursionistas deben cruzar un puente que solamente soporta 1000
kilos, Diseñar el algoritmo que deben ejecutar los hilos para que, sin que se hunda el puente,
puedan cruzarlo simultáneamente tantos hilos como sea posible.
NOTA: Suponer que cada hilo dispone de una variable local que le indica el peso del
excursionista al que representa.

Problema 8 (mutex y V.C.): Obtención de recursos


Una empresa desea desarrollar aplicaciones multihilo que compartan N recursos de un
determinado tipo. Para facilitar el desarrollo de las aplicaciones, se le solicita que desarrolle
una librería que ofrezca los siguientes servicios:
unsigned obt_cualquiera(void);
Selecciona uno cualquiera de los recursos disponibles y devuelve su identificador. En caso
de que no quede ninguno libre, se bloquea hasta que sea capaz de obtener alguno.

1
La notacion zi significa que el hilo i ejecuta la instrucción z.
Carlos Pérez y Rafael Martínez
Departamento de Informática-UVEG
10 de octubre de 2016 Ingeniería Multimedia 2 de 3
Sistemas operativos Problemas de: Comunicación y sincronización

void obt_uno(unsigned cual);


Obtiene el recurso. Si el recurso está ocupado se bloquea hasta que pueda obtenerlo.
void liberar_uno(unsigned cual);
Libera el recurso indicado. Si hay algún hilo esperando a que quede libre éste recurso en
concreto, debe tener preferencia sobre los hilos que puedan estar esperando a que quede
libre cualquier recurso.

Problema 9 (mutex y V.C.): La rotonda


A una rotonda llegan coches desde los cuatro puntos cardinales. Sin embargo, la rotonda está
en pruebas y no se permite entrar al siguiente coche hasta que no ha salido el anterior.
Suponiendo que cada coche está representado por un hilo, sincronizarlos para que respeten las
siguientes reglas.
• Los coches que llegan del sur siempre tienen preferencia sobre todos los demás.
• Los coches que llegan del este y del oeste tienen la misma preferencia. Cuando les toca a
ellos, pasa un coche del lado en el que la cola es más larga.
• Los coches que llegan del norte son los que tienen menos preferencia y, por lo tanto, los
últimos en pasar.

Carlos Pérez y Rafael Martínez


Departamento de Informática-UVEG
10 de octubre de 2016 Ingeniería Multimedia 3 de 3

Вам также может понравиться