Sistemas operativos modernos

8.2 MULTICOMPUTADORAS __________________________ 531 | Algunas tarjetas de interfaz tienen una CPU completa, además de tal vez uno o más cana­ les DMA. Este diseño implica que la CPU principal puede delegar algo de trabajo a la tarjeta de red, como encargarse de que la transmisión sea confiable (si el hardware subyacente puede perder paquetes), efectuar mulüdifusión (enviar un paquete a más de un destino) y encargarse de la protección en un sistema que tiene múltiples procesos. Sin embargo, tener dos CPUs im­ plica que deben sincronizarse para evitar condiciones de competencia, lo cual aumenta el pro­ cesamiento adicional y representa más trabajo para el sistema operativo. 8.2.2 Software de comunicación de bajo nivel El enemigo de la comunicación de alto rendimiento en los sistemas de multicomputadora es el copiado excesivo de paquetes. En el mejor de los casos, habrá un copiado de la RAM a la tar­ jeta de interfaz del nodo de origen, un copiado de esa tarjeta a la tarjeta de interfaz del destino (si no hay almacenamiento y reenvío a lo largo del camino) y un copiado de ahí a la RAM de desfino, para un total de tres copiados. Sin embargo, en muchos sistemas la situación es peor aún. En particular, si se establece una correspondencia entre la tarjeta de interfaz y el espacio de direcciones virtual del kernel y no con el espacio de direcciones virtual del usuario, un pro­ ceso de usuario sólo podrá enviar un paquete emitiendo una llamada al sistema que salte hacia el kernel. Éste podría tener que copiar los paquetes en su propia memoria tanto al enviarlos co­ mo al recibirlos, por ejemplo, para evitar fallos de página al transmitir por la red. Además, es probable que el kemel receptor no sabrá dónde colocar los paquetes que llegan, sino hasta que haya tenido oportunidad de examinarlos. Estos cinco pasos de copiado se ilustran en la figura 8-18. Si los copiados en RAM y desde RAM dominan el desempeño, los copiados adicionales en el kemel y desde el kemel podrían aumentar al doble el retraso de extremo a extremo y reducir el ancho de banda a la mitad. Para evitar esta merma del desempeño, muchas multicomputado­ ras establecen una correspondencia directa entre la tarjeta de interfaz y el espacio de usuario y permiten al proceso de usuario colocar los paquetes en la tarjeta en forma directa, sin parti­ cipación del kemel. Aunque este enfoque ayuda en definitiva al desempeño, introduce dos pro­ blemas. En primer lugar, ¿qué sucede si hay varios procesos ejecutándose en el nodo y necesitan acceso a la red para enviar paquetes? ¿Cuál consigue la tarjeta de interfaz y su espacio de di­ recciones? Tener una llamada al sistema para establecer y anular la correspondencia o mapeo entre la tarjeta y un espacio de direcciones virtual es costoso, pero si sólo un proceso consigue la tarjeta, ¿cómo hacen los demás para enviar paquetes? ¿Y qué sucede si la tarjeta se hace co­ rresponder con el espacio de direcciones virtual del proceso A y llega un paquete para el pro­ ceso B, sobre todo s i A y B pertenecen a usuarios distintos, ninguno de los cuales quiere hacer un esfuerzo por ayudar al otro? Una solución es hacer corresponder la tarjeta de interfaz con todos los procesos que la requieren, pero entonces se necesita un mecanismo para evitar condiciones de competencia. Por ejemplo, si A se adueña de un búfer de la tarjeta de interfaz y luego, al terminarse su por­ ción de fiempo, B se ejecuta y se adueña del mismo búfer, el resultado será un desastre. Se ne-

RkJQdWJsaXNoZXIy MjI4NDcx