Sistemas operativos modernos
Cuando un transmisor tiene un nuevo paquete que enviar, primero verifica si hay una ranu ra disponible en el anillo de envío. Si no la hay, tendrá que esperar para evitar un desborda miento. Si hay una ranura, copia el paquete en la siguiente ranura disponible y después establece a 1 el bit correspondiente del mapa de bits. Cuando la CPU de la tarjeta termina lo que está haciendo, examina el anillo de envío. Si el anillo contiene paquetes, toma el que ha estado ahí más tiempo y lo transmite. Al terminar, establece a Oel bit correspondiente del ma pa de bits. Puesto que la CPU principal es la única que establece los bits y la CPU de la tarje ta es la única que los borra, no habrá condiciones de competencia. El anillo de recepción funciona al revés: la CPU de la tarjeta borra un bit para indicar la llegada de un paquete y la CPU prin cipal lo apaga para indicar que ya copió el paquete y liberó el búfer. Este esquema también puede usarse aunque la CPU principal no efectúe E/S programada. En ese caso, la ranura del anillo de envío no contiene el paquete en sí, sino un apuntador al paquete en la RAM principal. Cuando la CPU de la taijeta esté lista para transmitir el paquete, lo trae a la taijeta de interfaz, ya sea utilizando E/S programada o por medio de DMA. En ambos casos, el enfoque sólo funciona si se sabe que la página que contiene el paquete está fija en la memoria. 8.2.3 Software de comunicación en el nivel de usuario Los procesos que se ejecutan en diferentes CPUs de una multicomputadora se comunican en viándose mensajes. En su forma más sencilla, esta transferencia de mensajes está a la vista de los procesos de usuario. Dicho de otro modo, el sistema operativo ofrece un mecanismo para en viar y recibir mensajes, y los procedimientos de biblioteca ponen esas llamadas subyacentes a dis posición de los procesos de usuario. En una forma más avanzada, la transferencia de mensajes en sí se oculta a los usuarios, haciendo que la comunicación remota parezca una llamada a un procedimiento. A continuación estudiaremos estos dos métodos. Envío y recepción Como mínimo, los servicios de comunicación que se ofrecen pueden reducirse a dos llamadas (de biblioteca), una para enviar mensajes y otra para recibirlos. La llamada para enviar un men saje podría ser send(dest, &apuntm); y la llamada para recibir un mensaje podría ser receive(dir, &apuntm); La primera envía el mensaje al que apunta apuntm a un proceso identificado por dest, y hace que el invocador se bloquee hasta que se haya enviado el mensaje. La segunda hace que el in vocador se bloquee hasta que llegue un mensaje. Cuando el mensaje llega, se copia en el búfer al que apunta apuntm, y el invocador se desbloquea. El parámetro dir especifica la dirección de la cual está pendiente el receptor. Puede haber muchas variantes de estos dos procedimien tos y sus parámetros.
RkJQdWJsaXNoZXIy MjI4NDcx