Diferencia entre revisiones de «Monitores»
De Wiki de Sistemas Operativos
Línea 17: | Línea 17: | ||
* Variables de condición: lista de procesos inicialmente vacía. | * Variables de condición: lista de procesos inicialmente vacía. | ||
* Primitivas: ''wait(c)'', cuando el proceso p invocante a c y proceso p bloquea; ''signal(c)'', selecciona a uno de los procesos en c y lo pone preparado. | * Primitivas: ''wait(c)'', cuando el proceso p invocante a c y proceso p bloquea; ''signal(c)'', selecciona a uno de los procesos en c y lo pone preparado. | ||
+ | |||
+ | <source lang="java"> | ||
+ | |||
+ | 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); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </source> | ||
== Fuentes == | == Fuentes == | ||
http://java.sun.com/developer/Books/performance2/chap4.pdf | http://java.sun.com/developer/Books/performance2/chap4.pdf |
Revisión del 12:38 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.
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.
Permiten organizar procesos en espera mediante:
- Variables de condición: lista de procesos inicialmente vacía.
- Primitivas: wait(c), cuando el proceso p invocante a c y proceso p bloquea; signal(c), selecciona a uno de los procesos en c y lo pone 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);
}
}