Sistemas operativos modernos
cesila algún tipo de mecanismo de sincronización, pero tales mecanismos, por ejemplo los mu texes, sólo funcionan si se supone que los procesos están dispuestos a cooperar. En un entorno de tiempo compartido con múltiples usuarios, todos con prisa por terminar su trabajo, un usua rio podría simplemente cerrar el mutex asociado con la tarjeta y nunca liberarlo. La conclusión aquí es que establecer una correspondencia entre la tarjeta de interfaz y el espacio de usuarios sólo funciona de manera satisfactoria cuando sólo se está ejecutando un proceso de usuario en cada nodo, a menos que se tomen precauciones especiales (por ejemplo, hacer corresponder di ferentes porciones de la RAM de la interfaz con los espacios de direcciones de los diferentes procesos). El segundo problema es que un kemel bien podría requerir por su cuenta acceso a la red de interconexión, por ejemplo, para acceder al sistema de archivos de un nodo remoto. No es re comendable que el kemel comparta la tarjeta de interfaz con los usuarios, ni siquiera bajo un régimen de tiempo compartido. ¿Qué pasaría si mienü*as la tarjeta tiene correspondencia en el espacio de usuario, llega un paquete para el kemeH ¿O si un proceso de usuario envía un pa quete a una máquina remota fingiendo ser el kemell La conclusión es que el diseño más sen cillo es tener dos tarjetas de interfaz de red, una con correspondencia en el espacio de usuario y dedicada al tráfico de las aplicaciones, y otra correspondencia en el espacio de kemel y de dicada al sistema operativo. Muchas multicomputadoras hacen precisamente esto. Comunicación entre nodos e interfaces de red Otro problema es cómo transferir los paquetes a la tarjeta de interfaz. La forma más rápida es usar el chip DMA de la tarjeta para copiarlos de la RAM. El problema con este enfoque es que DMA utiliza direcciones físicas, no virtuales, y se ejecuta con independencia de la CPU. Por principio de cuentas, aunque es indudable que un proceso de usuario conoce la dirección virtual de cualquier paquete que desea enviar, comúnmente no conoce la dirección física. No es conveniente emitir una llamada al sistema para efectuar la transformación de virtual a físi ca, pues lo que se busca al colocar la tarjeta de interfaz en el espacio de usuario es precisa mente evitar la necesidad de emitir una llamada al sistema por cada paquete que se desea enviar. Además, si el sistema operativo decide reemplazar una página mientras el chip DMA está copiando un paquete de ella, se transmitirán los datos equivocados. Peor aún, si el sistema ope rativo reemplaza la página mientras el chip DMA está copiando en ella un paquete que llegó, no sólo se perderá ese paquete, sino que también se arruinará una página de memoria inocente. Estos problemas pueden evitarse teniendo llamadas al sistema para fijar y soltar páginas en la memoria, marcándolas como temporalmente no paginables. Sin embargo, tener que emifir una llamada al sistema para fijar la página que contiene cada paquete enviado y luego tener que emitir otra llamada al sistema para soltarla resulta costoso. Si los paquetes son pequeños, diga mos de 64 bytes o menos, el gasto adicional para fijar y soltar cada búfer es prohibitivo. En el caso de paquetes grandes, digamos de 1 KB o más, podría ser tolerable. Para tamaños interme dios, todo depende de los detalles del hardware (Bhoedjang, 2000). En teoría, el mismo problema se presenta con el DMA desde un disco u otro dispositivo, pe ro puesto que esas transferencias se efectúan empleando búferes de kemel establecidos por el sis-
RkJQdWJsaXNoZXIy MjI4NDcx