Sistemas operativo

Solo disponible en BuenasTareas
  • Páginas : 24 (5964 palabras )
  • Descarga(s) : 0
  • Publicado : 18 de noviembre de 2011
Leer documento completo
Vista previa del texto
SOLUCION A EJERCICIOS Cátedra Sistemas Operativos Facultad Regional Santa Fe – Universidad Tecnológica Nacional
COMUNICACIÓN ENTRE PROCESOS.

Ejercicio Nº 1 Existe un mecanismo de comunicación y sincronización entre procesos ligeros utilizado en Win32 denominado mutex y variables condicionales; el mecanismo es similar al concepto de monitor. a) Los mutex se emplean para asegurar la exclusiónmutua sobre secciones críticas. Sobre un mutex se pueden realizar dos operaciones atómicas básicas: lock(m), intenta bloquear el mutex m. Si el mutex ya está bloqueado por otro proceso, el proceso que realiza la operación se bloquea. En caso contrario, se bloquea al mutex sin bloquear al proceso. unlock(m), desbloquea el mutex m. Si existen procesos bloqueados en él, se desbloqueará a uno de ellosque será el nuevo proceso que adquiera el mutex. lock(m); /* solicita la entrada en la sección crítica */ unlock(m); /* salida de la sección crítica */ Implemente tal mecanismo (operaciones lock y unlock) utilizando semáforos. Solución Ej. 1 – caso a) Alternativa 1: Representación de mutex por medio de un array, donde la variable m es el índice del vector. typedef int mutex; semaforomutexs[NmaxMutex]= {1, 1, ..., 1}; /* NmaxMutex es el valor máximo de mutexs definidos, todos los semáforos se inicializan en 1*/ lock(mutex m) { down(mutexs[m]); } unlock(mutex m) { up(mutexs[m]); } Alternativa 2: Representación de mutex por medio de una estructura compuesta de una variable de tipo semáforo, la variable m es un puntero a dicha estructura. struct { semaforo s=1: } mutex; lock(mutex &m) {down(m->s); } unlock(mutex &m) { up(m->s); }

1

Ejercicios de Exámenes Sistemas Operativos Facultad Regional Santa Fe – Universidad Tecnológica Nacional b) Una variable condicional es una variable de sincronización asociada a un mutex que se utiliza para bloquear a un proceso hasta que ocurra algún suceso. Las variables condicionales tienen dos operaciones atómicas para esperar y señalizar:c_wait(c, m), bloquea al proceso que ejecuta la llamada y lo expulsa del mutex m dentro del cual se ejecuta y al que está asociado la variable condicional c, permitiendo que algún otro proceso adquiera el mutex. c_signal(c), desbloquea a un proceso suspendido en la variable condicional c. El proceso que se despierta debe competir nuevamente por el mutex. Por ejemplo, en el siguiente fragmento decódigo si cierta condición no es válida, el proceso se bloquea mediante la operación c_wait(c, m) y libera el mutex permitiendo que otro proceso entre en ella. lock(m); /* solicita la entrada en la sección crítica */ /* código de la sección crítica */ while (condicion == FALSE) c_wait(c, m); /* resto de la sección crítica */ unlock(m); /* salida de la sección crítica */ Luego, un proceso que hace ciertala condición, ejecuta la operación c_signal(c) despertando a un proceso bloqueado en la variable condicional c. Cuando el proceso ligero que espera en la variable condicional c se desbloquea, vuelve a competir por el mutex. lock(m); /* solicita la entrada en la sección crítica */ /* código de la sección crítica */ /* se modifica la condición y ésta se hace TRUE */ condicion = TRUE c_signal(c);unlock(m); /* salida de la sección crítica */ Implemente tal mecanismo (operaciones c_wait y c_signal) utilizando semáforos. Solución Ej. 1 – caso b) Alternativa 1: Representación de las variables condicionales por medio de un array, donde la variable c es el índice del vector. typedef int variableCondicional; semaforo varconds[NmaxVarCond]= {0, 0, ..., 0}; /* NmaxVarCond es el valor máximo devariables condicionales definidas */ /* Todos los semáforos se inicializan en 0*/ c_wait(variableCondicional c, mutex m) { up(mutexs[m]); down(varconds[c]); down(mutexs[m]); } c_signal(variableCondicional c) { up(varconds[c]); } Alternativa 2: Representación de variable condicional por medio de una estructura compuesta de una variable de tipo semáforo, la variable c es un puntero a dicha estructura....
tracking img