Diferencia entre revisiones de «Monitores»

De Wiki de Sistemas Operativos
Saltar a: navegación, buscar
(Definición)
Línea 11: Línea 11:
 
* Los datos son privados.
 
* Los datos son privados.
 
* Ofrecen una serie de métodos públicos para acceder a dichos datos.
 
* 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.
+
* 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:
 
Permiten organizar procesos en espera mediante:
  
 
* 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)'', 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.
  
 
<source lang="java">
 
<source lang="java">
Línea 43: Línea 43:
  
 
</source>
 
</source>
 
  
 
== Fuentes ==
 
== Fuentes ==
 
http://java.sun.com/developer/Books/performance2/chap4.pdf
 
http://java.sun.com/developer/Books/performance2/chap4.pdf

Revisión del 16:21 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, 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);
    }
}

Fuentes

http://java.sun.com/developer/Books/performance2/chap4.pdf