Sistemas operativos modernos

saje a un buzón que está lleno, se suspende hasta que se saca un mensaje de ese buzón y se crea espacio para uno nuevo. En el caso del problema del productor-consumidor, tanto el productor como el consumidor crearían buzones lo bastante grandes como para contener N mensajes. El productor enviaría mensajes con datos al buzón del consumidor, y éste enviaría mensajes vacíos al buzón del pro­ ductor. Cuando se usan buzones, el mecanismo de búfer es obvio: el buzón de destino contie­ ne mensajes que se han enviado al proceso destinatario pero todavía no se aceptan. Lo opuesto a tener buzones es no usar búferes en absoluto. Cuando se adopta este enfoque, si send se ejecuta antes que receive, el proceso emisor se bloquea hasta que se efectúa el re- ceive, y entonces podrá copiarse el mensaje en forma directa del emisor al receptor, sin búfer intermedio. De forma análoga, si se ejecuta primero receive, el receptor se bloqueará hasta que se efectúe un send. Tal estrategia se conoce como cita (rendezvous). Es más fácil de imple­ mentar que un esquema de mensajes en búfer pero es menos flexible, pues obliga al emisor y al receptor a operar en sincronía. La transferencia de mensajes se usa mucho en sistemas de programación paralela. Un sis­ tema de transferencia de mensajes muy conocido es la interfaz de transferencia de mensajes (MPI; message-passing interface) que se utiliza de manera amplia en computación científica. Si desea más información al respecto, puede ver Gropp et al. (1994) y Snir et al. (1996). 2.3.9 Barreras Nuestro último mecanismo de sincronización está pensado para grupos de procesos más que pa­ ra situaciones tipo productor-consumidor en las que sólo hay dos procesos. Algunas aplicacio­ nes se dividen en fases y tienen la regla de que ningún proceso puede pasar a la siguiente fase antes de que todos los procesos estén listos para hacerlo. Este comportamiento puede lograrse colocando una barrera al final de cada fase. Cuando un proceso llega a la barrera, se bloquea hasta que todos los procesos han llegado a ella. El funcionamiento de una barrera se ilustra en la figura 2-30. En la figura 2-30a vemos cuatro procesos que se aproximan a una barrera. Esto implica que están computando y que todavía no han llegado al final de la fase actual. Después de un tiem­ po, el primer proceso termina todos los cálculos que se le pidió efecmar durante la primera fa­ se, y ejecuta la primitiva barrier, por lo regular, invocando a un procedimiento de biblioteca. El proceso queda suspendido. Poco después, un segundo, y luego un tercer proceso, termina la pri­ mera fase y también ejecuta la primitiva barrier. Esta situación se ilustra en la figura 2-30b. Al final, cuando el último proceso, C, llega a la barrera, todos los procesos se liberan, como se muestra en la figura 2-30c. Como ejemplo de un problema que requiere barreras, consideremos un problema de rela­ jación típico en física o ingeniería. Por lo regular, hay una matriz que contiene algunos valores iniciales, que representan temperaturas en diversos puntos de una lámina metálica. La finali­ dad podría ser calcular el riempo que tarda el efecto de una flama colocada en la esquina para propagarse por toda la lámina.

RkJQdWJsaXNoZXIy MjI4NDcx