Sistemas operativos modernos
En condiciones normales, la primera opción es la mejor, sobre todo si se cuenta con múltiples subprocesos, en cuyo caso otros podrán seguir trabajando mientras uno está bloqueado, tratan do de transmitir. Tampoco requiere búferes de kemel para su administración. Además, como puede ver al comparar la figura 8 - 20 a con la figura 8 - 20 b, el mensaje generalmente se enviará más pronto si no es preciso copiar. Nos gustaría dejar asentado aquí que algunos autores uülizan un criterio distinto para dis tinguir las primitivas síncronas de las asincronas. Desde el otro punto de vista, una llamada só lo es síncrona si el transmisor se bloquea hasta que el mensaje se ha recibido y se ha devuelto un acuse (Andrews, 1991). En el mundo de la comunicación en fiempo real, el término “sín crono” tiene un significado adicional, que por desgracia puede dar pie a confusiones. Así como send puede ser bloqueadora o no bloqueadora, también puede serlo receive. Una lla mada bloqueadora tan sólo suspende al invocador hasta que llegue un mensaje. Si se cuenta con múltiples subprocesos, la estrategia es sencilla. Como alternativa, un receive no bloqueador sólo comunica al kemel la ubicación del búfer y devuelve el control casi de inmediato. Puede utilizar se una interrupción para avisar que ha llegado un mensaje. Sin embargo, las interrupciones son di fíciles de programar y también son muy lentas, por lo que podría ser preferible que el receptor sondee para ver si han llegado mensajes, utilizando un procedimiento de sondeo, poli, que indica si hay mensajes esperando. Si los hay, el invocador puede llamar a getjnessage, que devuelve el primer mensaje que llegó. En algunos sistemas el compilador puede insertar llamadas de sondeo en el código en puntos apropiados, aunque no es fácil determinar la frecuencia de sondeo óptima. Otra opción es un esquema en el que la llegada de un mensaje hace que se cree en forma es pontánea un nuevo subproceso en el espacio de direcciones del proceso receptor. Este tipo de subprocesos se denominan subprocesos emergentes. El subproceso ejecuta un procedimiento especificado con antelación y cuyo parámetro es un apuntador al mensaje que llegó. Después de procesar el mensaje, el subproceso termina y se le destruye de manera automática. Una variante de esta idea consiste en ejecutar el código del receptor directo en el manejador de interrupciones, sin tomarse la molestia de crear un subproceso emergente. Para que este esque ma sea aún más rápido, el mensaje mismo contiene la dirección del manejador, de modo que, cuan do llega el mensaje, el manejador puede invocarse con unas cuantas instrucciones. La gran ventaja en este caso es que no se necesita ningún copiado. El manejador toma el mensaje de la tarjeta de interfaz y lo procesa sobre la marcha. Este esquema se denomina mensajes activos (Von Eicken et al., 1992). Puesto que cada mensaje contiene la dirección del manejador, los mensajes activos sólo funcionan cuando los transmisores y receptores confían ciegamente unos en otros. 8.2.4 Llamada a procedimiento remoto Aunque el modelo de transferencia de mensajes ofrece una forma conveniente de estructurar un sistema operativo para multicomputadora, adolece de un defecto incurable: el paradigma bá sico en tomo al cual se construye toda la comunicación es el de entrada/salida. La actividad fundamental de los procedimientos send y receive es realizar E/S, y muchas personas piensan que la E/S es el modelo de programación equivocado. Este problema se conoce desde hace mucho, pero poco se hizo al respecto hasta que un tra bajo de Birrell y Nelson (1984) introdujo una forma distinta por completo de atacarlo. Aunque
RkJQdWJsaXNoZXIy MjI4NDcx