jueves, 20 de octubre de 2011

PRACTICA SEMAFOROS

lock_lp (tipo_flag flag)/*solicita ejecutar la seccion critica*/
{
  BOOL entrar= 0;
  while (!entrar)
  {
  lock(cerrojo_flags);
  if (flag)
 {
  unlock(cerrojo_flags);
  dormir(flag);
 }
  else
 {
entrar= 1;
flag= 1;
unlock(cerrojo_flags);
 }
  }
}
unlock_lp (tipo_flag flag)/*otro proceso puede ejecutar la seccion critica*/
{
lock(cerrojo_flags);/*Una sección crítica se protege*/
flag= 0;
despertar(flag);
unlock(cerrojo_flags);
}


El codigo de la Figura 2.15 representa una implementacion para un
multiprocesador de las primitivas de exclusion mutua de largo plazo basadas en
dormir y despertar.
(a) Analizar la estructura de las secciones criticas que contienen.
/*Un evento se implementa mediante una variable booleana o flag
y la cola asociada de procesos bloqueados en él. Los procesos que
 ejecutan dormir sobre un flag activado pasan a estado bloqueado,
 provocando un cambio de contexto. Cuando otro proceso o el propio
 sistema operativo ejecuta despertar sobre ese flag, desbloquea a todos
 los procesos dormidos en ese flag.
*/
(b) Siguiendo esta misma idea, dados los algoritmos de las primitivas de bajar y subir
sobre semaforos estudiadas, re-implementar bajar y subir sobre semaforos.
Subir () puede encargarse de liberar los cerrojos de los procesos, y bajar() de restaurarlos. En otras palabras, los procesos en estado bloqueado se consideran fuera de toda sección crítica. Un problema del esquema subir/bajar es que bajar desbloquea a todos los procesos subidos en el flag y sólo uno de ellos accederá a la sección crítica. Esto es especialmente preocupante en multiprocesadores, ya que producirían contención en el acceso al cerrojo. Sin embargo, la limitación fundamental del manejo de eventos con este mecanismo deriva de que la primitiva de bajar no almacena el evento; lo que introduce la posibilidad de condiciones de carrera en una secuencia de subir y bajar sobre un flag (importa el orden en que se ejecutan).
p wait espera
v señal.
Publicado por : Ma. Isabel Serrano Medina

No hay comentarios:

Publicar un comentario