Sistemas operativos modernos

das en la figura 10-37). Así, con base en el nodo-v es posible ver si un archivo o directorio es local o remoto. Si es local, podrá localizarse el sistema de archivos y nodo-i correctos. Si es re­ moto, podrá localizarse el anfitrión remoto y el idenfificador de archivo. Cuando se abre un archivo remoto en el cliente, en algún punto durante el análisis del nom­ bre de ruta, el kemel llegará al directorio en el que está montado el sistema de archivos remo­ to. El kemel ve que el directorio es remoto y encuentra en el nodo-v del directorio el apuntador al nodo-r. Luego pide al código de cliente NFS que abra el archivo. El código de cliente NFS indaga la porción restante del nombre de ruta en el servidor remoto asociado con el directorio montado y obfiene el identificador de archivo correspondiente. Luego crea en sus tablas un no­ do-r para el archivo remoto y avisa a la capa VFS que ya terminó. La capa VFS inserta en sus tablas un nodo-v para el archivo, con un apuntador al nodo-r. Una vez más, vemos que todo ar­ chivo o directorio abierto fiene un nodo-v que apunta a un nodo-r, o bien a un nodo-i. El invocador recibe un descriptor de archivo para el archivo remoto. Este descriptor se hace corresponder con el nodo-v mediante tablas en la capa VFS. Cabe señalar que en el servidor no se crean entradas de tabla. Aunque el servidor está preparado para proporcionar idenfificadores de archivo cuando se le soliciten, no lleva el control de cuáles archivos tienen identificadores en­ tregados y cuáles no. Cuando recibe un identificador de archivo para efectuar un acceso, exami­ na dicho idenfificador y, si es válido, lo usa. La validación puede incluir la verificación de una clave de autenficidad contenida en los encabezados RPC, si está habilitada la seguridad. Cuando se usa el descriptor de archivo en una llamada al sistema posterior, por ejemplo, read, la capa VFS localiza el nodo-v correspondiente y, con base en él, determina si es local o remoto y también cuál nodo-i o nodo-r lo describe. Luego envía al servidor un mensaje que contiene el identificador, el desplazamiento del archivo (que se manfiene en el cliente, no en el del servidor) y el número de bytes. Por eficiencia, las transferencias entre cliente y servi­ dor se efectúan en trozos grandes, regularmente de 8192 bytes, aunque se soliciten menos bytes. Cuando el mensaje de solicitud liega al servidor, se pasa a la capa VFS, que determina cuál sistema de archivos local confiene el archivo solicitado. Luego la capa VFS efectúa una llama­ da a ese sistema de archivos loca! para que lea y devuelva los bytes. A confinuación, estos da­ tos se pasan al cliente. Una vez que la capa VFS del cliente ha obtenido el trozo de 8 KB que pidió, emite en forma automáfica una solicitud para el siguiente trozo, con el objetivo de tener­ lo por si se le necesita en breve. Esta característica, llamada lectura adelantada, mejora el de­ sempeño en forma considerable. En el caso de escrituras, se sigue un camino análogo del cfiente al servidor. Las transferen­ cias también se efectúan en trozos de 8 KB. Si una llamada al sistema write proporciona me­ nos de 8 KB de datos, éstos tan sólo se acumulan en forma local. Sólo hasta que se llena el trozo de 8 KB se envía al servidor. Sin embargo, cuando un archivo se cierra, todos sus datos se envían al servidor de inmediato. Otra técnica que se usa para mejorar el desempeño es el uso de cachés, como en el UNIX ordinario. Los servidores almacenan datos en caché para evitar accesos a disco, pero esto es in­ visible para los clientes. Éstos mantienen dos cachés, uno para atributos de archivo (nodos-i) y uno para datos de archivos. Cuando se necesita un nodo-i o un bloque de archivo, se ve si es posible safisfacer la solicitud desde el caché. Si se puede, se evitará tráfico de red.

RkJQdWJsaXNoZXIy MjI4NDcx