Diferencia entre revisiones de «Monitores»
De Wiki de Sistemas Operativos
(→Definición) |
|||
Línea 3: | Línea 3: | ||
* Los semáforos son difíciles de usar. Es frecuente que el programador cometa errores al emplearlos. | * Los semáforos son difíciles de usar. Es frecuente que el programador cometa errores al emplearlos. | ||
* El compilador no asiste al programador en el desarrollo de programas concurrentes mediante semáforos, pues no ofrece ningún tipo de validación en tiempo de compilación. | * El compilador no asiste al programador en el desarrollo de programas concurrentes mediante semáforos, pues no ofrece ningún tipo de validación en tiempo de compilación. | ||
+ | * No hay nada que obligue a usarlos. Puede suceder que el programador los necesite y lo desconozca | ||
+ | * Son independientes del recurso compartido | ||
Los monitores tienen que estar integrados en el lenguaje de programación. | Los monitores tienen que estar integrados en el lenguaje de programación. | ||
Línea 43: | Línea 45: | ||
</source> | </source> | ||
+ | |||
+ | Como vemos, los monitores se implementan con semáforos. | ||
== Fuentes == | == Fuentes == | ||
http://java.sun.com/developer/Books/performance2/chap4.pdf | http://java.sun.com/developer/Books/performance2/chap4.pdf |
Revisión del 21:56 6 abr 2011
Idea desarrollada en los años 70 Brinch-Hansen y Hoare que notaron los siguientes problemas con respecto al uso de los semáforos:
- Los semáforos son difíciles de usar. Es frecuente que el programador cometa errores al emplearlos.
- El compilador no asiste al programador en el desarrollo de programas concurrentes mediante semáforos, pues no ofrece ningún tipo de validación en tiempo de compilación.
- No hay nada que obligue a usarlos. Puede suceder que el programador los necesite y lo desconozca
- Son independientes del recurso compartido
Los monitores tienen que estar integrados en el lenguaje de programación.
Definición
Un monitor es una estructura del lenguaje cuyas principales características son:
- Los datos son privados.
- Ofrecen una serie de métodos públicos para acceder a dichos datos.
- En cada momento sólo puede haber un proceso activo en algún método del monitor, es decir, ejecutando código de esos métodos públicos del monitor.
Permiten organizar procesos en espera mediante:
- Variables de condición: lista de procesos inicialmente vacía.
- Primitivas: wait(c), añade el proceso p invocante a c y proceso p bloquea; signal(c), selecciona a uno de los procesos en c y lo pone en preparado.
class recursoCompartido {
public int get(void);
public void set(int valor);
private int recursoCompartido;
private Semaforo s = 1;
public int get(void){
int ret;
down(s);
ret = recursoCompartido;
up(s);
return ret;
}
public void set(int valor){
down(s);
recursoCompartido = v;
up(s);
}
}
Como vemos, los monitores se implementan con semáforos.