Vous êtes sur la page 1sur 2

Certamen 2 Sistemas Operativos

Cecilia Hernandez
May 16, 2013
Importante: En caso de copia se calicar a con un 1 a todos los involucrados.
1. Escriba un monitor que implemente una primitiva de sincronizaci on llamada
MSync que permita controlar la ejecuci on de m ultiples hebras. La idea es que
las hebras tienen distintas etapas de ejecuci on (etapa1, etapa2, etapa3, etc) y
al t ermino de cada etapa las hebras se sincronizan llamando al m etodo sync()
del monitor. Las hebras se ejecutan en paralelo mientras est an en una misma
etapa y para pasar a la siguiente las hebras deben esperar a que todas terminen
la actual. Es decir, cuando una hebra termina con su etapa debe esperar hasta
que la ultima termine la suya. Cuando todas han terminado pueden continuar a
la siguiente etapa. (1 punto)
2. Analice el siguiente segmento de c odigo y determine si est a libre de problemas.
En caso de no estarlo, explique y aplique las correcciones que estime conve-
niente. (1 punto)
struct nodo_int {
int valor;
struct nodo_int *next;
};
typedef struct nodo_int nodo;
mutex m = PTHREAD_MUTEX_INITIALIZER;
nodo *head = NULL;
int InsertarInicio(int v) {
mutex_lock(&m); // lock(m)
nodo *nuevo = (nodo *)malloc(sizeof(nodo));
if (nuevo == NULL) {
return -1;
}
nuevo->valor = v;
nuevo->next = head;
head = nuevo;
mutex_unlock(&m); // unclock(m)
return 0;
}
1
3. Considere un problema de sincronizaci on que permita alternar la ejecuci on de
2 tipos de hebras (A y B) de manera que cada vez que la hebra A se eje-
cute 2 veces la hebra B s olo se ejecuta una. Osea el patr on de ejecuci on es
AABAABAAB... Asuma que la hebra tipo A empieza la secuencia. Resuelva el
problema de sincronizaci on con sem aforos. (2 puntos)
4. Considere el siguiente segmento de c odigo asociado al problema del produc-
tor/consumidor visto en clases. Recuerde que en este problema hebras produc-
toras ingresan temes a un buffer de tama no limitado y hebras consumidoras los
extraen. Identique distintos escenarios con problemas que pueden producirse.
Describa cada uno y proporcione un c odigo alternativo que resuelva cada uno
de esos problemas. (1 punto)
semaforo a = 0;
semaforo b = 1;
void Productor(){
while(1){
// Produce un Item en item
wait(b);
AgregaABuffer(item);
signal(a);
signal(b);
}
}
void Consumidor(){
while(1){
wait(b);
wait(a);
Item item = ExtraeDeBuffer();
signal(b);
// Consume item extrado
}
}
5. Haga una comparaci on entre un lock y un spinlock. Explique cuando es conve-
niente usar uno en lugar de otro. (1 punto)
2

Vous aimerez peut-être aussi