Siguiente: Introducción básica a NFS Superior: Mejorando NFS Anterior: Mejorando NFS |
Tradicionalmente cinco llamadas al sistema han compuesto el interfaz que nos ofrece el kernel para el manejo de ficheros, ``read, write, open, close y seek''. Aunque es un conjunto completo que nos da todas las operaciones necesarias para manejar ficheros, en algunos casos es especialmente ineficiente.
Cuando estamos haciendo una copia de un fichero entre dos ordenadores remotos, el fichero debe atravesar dos veces la red, una al hacer read al ordenador local (ocupando innecesariamente memoria y CPU) y otra al hacer write de nuevo al remoto.
Para evitar este desperdicio de recursos y hacer más rápida la copia hemos añadido una nueva operación al interfaz de NFS. Se llama copy y tiene como propósito el de copiar el contenido de un descriptor de fichero a otro de forma remota. En la figura 1 se puede ver un ejemplo de uso de copy en comparación con los tradicionales read/write.
Aunque añadir una nueva operación a NFS debería haber sido fácil, nos encontramos con algunos problemas que nos tuvieron bastante tiempo bloqueados.
El primero de ellos lo produjo la forma en la que está diseñado el servidor de NFS. Este servidor atiende peticiones de una en una, lo que significa que si está bloqueado por haber mandado un copy, no puede atender la escritura que éste genera. A causa de esto se puede producir un interbloqueo del servidor consigo mismo que congele la atención de cualquier otra operación de NFS. Mas adelante detallamos cómo resolvimos este problema.
La segunda cuestión con la que nos encontramos es que, sorprendentemente, si el origen y el destino son distintos y remotos, en algunos casos, realiza más despacio la operación de copia usando copy. Mas adelante explicaremos por qué.