Asignación+de+las+partes+de+la+aplicación


 * SISTEMAS DE ARCHIVOS DISTRIBUIDOS. **

El servidor de archivos es uno de los servidores más importantes en un sistema distribuido. Soporta el procesamiento realizado por diversas computadoras, facilitando la compartición de archivos y base de datos y provee una base para la construcción de otros tipos de servidores requeridos por los usuarios tales como servidores de impresión o servidores de nombres.

Los servidores de archivos proveen también servicios como:


 * Respaldo automático y recuperación. ** El respaldo se realiza como una medida preventiva de las fallas de los medios de almacenamiento y errores de usuarios. Los procedimientos de recuperación requieren de una atención especial la cual no se le puede confiar al usuario.


 * Movilidad del usuario. ** El servicio de archivos hace posible el uso de diferentes computadoras en diferentes tiempos.


 * Transferencia de archivos explícito. ** Provee los servicios más básicos; el cliente debe invocar a una utilería de transferencia de archivos, para transferir archivos remotos antes y después de usarlos. En algunos casos utilizan mecanismos de control de acceso y autentificación para protección. Se utilizan protocolos de transferencia de archivos basados en conexión como: FTP. La unidad de acceso es: archivo y el cliente debe conocer la ubicación del archivo.


 * Sistema de archivos distribuidos. ** En éste método la localización es transparente para el cliente, quien hace referencia al archivo por su nombre solamente. El sistema localiza al servidor que aloja al archivo en cuestión, sus operaciones están orientadas a la seguridad, los accesos a los archivos se sincronizan. Por razones de rendimiento algunos datos e información de directorios se alojan en memoria intermedia (caché), y por razones de confiabilidad algunos archivos pueden ser replicados.

**Aspectos de la implementación de servidores de archivos **
El rendimiento de un sistema distribuido depende de la eficiencia del servidor de archivos, cuya implementación juega un papel muy importante.

La técnica más eficiente para construir servidores de archivos es dividirlo en varias partes, cada una de las cuales es implementada de manera separada como un proceso medio (comparten datos globales, pero tienen contadores de programas y pila separado). El problema aquí es determinar las fronteras de las partes. Se discute más adelante.

**Servicios básicos que provee el sistema de archivos **
Para poder manejar y controlar los archivos, se requieren de métodos que se apliquen a nivel del sistema. En particular se deben aplicar las siguientes funciones: servicios de bloque (disco), servicios de archivos y servicios de directorio.


 * <span style="font-family: Arial,sans-serif;">Arquitectura de un sistema de archivos centralizado **

<span style="font-family: Arial,sans-serif;">En un sistema operativo centralizado, los servicios de bloque (disco), servicios de archivo y servicio de directorio lo realizan los siguientes módulos:


 * <span style="font-family: Arial,sans-serif;">Figura 6.1. **<span style="font-family: Arial,sans-serif;"> Sistemas de archivos distribuidos.

//<span style="font-family: Arial,sans-serif;">Módulo de dispositivo. //<span style="font-family: Arial,sans-serif;"> Ejecuta I/O de disco y bufereo.

//<span style="font-family: Arial,sans-serif;">Módulo de Bloque. //<span style="font-family: Arial,sans-serif;"> Ejecuta acceso y asignación de bloques de disco.

//<span style="font-family: Arial,sans-serif;">Módulo de archivo. //<span style="font-family: Arial,sans-serif;"> Su tarea es la de ver los identificadores de archivos (ID´s).

//<span style="font-family: Arial,sans-serif;">Módulo de acceso a archivo. //<span style="font-family: Arial,sans-serif;"> El cual lee y escribe datos de archivo o atributos.

//<span style="font-family: Arial,sans-serif;">Módulo de control de acceso. //<span style="font-family: Arial,sans-serif;"> Verifica que las operaciones solicitadas sean adecuadas.

//<span style="font-family: Arial,sans-serif;">Módulo de directorio. //<span style="font-family: Arial,sans-serif;"> Provee lo necesario para mapear nombres de archivos y referencias a archivos, esto es, ID de archivos.

**<span style="font-family: Arial,sans-serif; font-size: 12pt;">Arquitectura de un sistema de archivos distribuidos **
<span style="font-family: Arial,sans-serif;">Un sistema de archivos distribuidos debe proveer, en general, los mismos servicios que un sistema de archivos centralizado, esto es, servicios de bloques, servicios de archivos y servicios de disco. Sin embargo, por razones de rendimiento, confiabilidad y distribución, hay algunos elementos adicionales a considerar: replicación y actualización de múltiples copias, transacciones y control de acciones atómicas, nombramiento de objetos distribuidos, y la localización y colocación de archivos en el sistema de archivos distribuidos.

<span style="font-family: Arial,sans-serif;">Ahora el problema es la manera en que todos estos elementos deben verse en el sistema distribuido, diferentes investigadores (Braban, Schlenk, Brown, Lench, Levine, Mullender, Tanenbaum, Fridrich, Older, Sandberg, Giffor y Satyanarayan) han desarrollado modelos de arquitecturas, en los que sobresalen los siguientes elementos comunes.


 * <span style="font-family: Arial,sans-serif;">Figura 6.2. **<span style="font-family: Arial,sans-serif;"> Modelo de arquitectura de sistemas de archivos distribuidos.

//<span style="font-family: Arial,sans-serif;">Módulo de dispositivo. //<span style="font-family: Arial,sans-serif;"> Ejecuta I/O de disco y bufereo.

//<span style="font-family: Arial,sans-serif;">Módulo de Bloque. //<span style="font-family: Arial,sans-serif;"> Ejecuta acceso y asignación de bloques de disco.

//<span style="font-family: Arial,sans-serif;">Módulo de caché. //<span style="font-family: Arial,sans-serif;"> Su tarea es la de respaldar los resultados de operaciones de disco y remotas.

//<span style="font-family: Arial,sans-serif;">Módulo de archivo. //<span style="font-family: Arial,sans-serif;"> Su tarea es la de ver los identificadores de archivos (ID´s).

//<span style="font-family: Arial,sans-serif;">Módulo de acceso a archivo. //<span style="font-family: Arial,sans-serif;"> El cual lee y escribe datos de archivo o atributos.

//<span style="font-family: Arial,sans-serif;">Módulo de acceso a atributos. //<span style="font-family: Arial,sans-serif;"> Lee y escribe atributos de archivo.

//<span style="font-family: Arial,sans-serif;">Módulo de operaciones de transacciones. //<span style="font-family: Arial,sans-serif;"> Provee los mecanismos para agrupar las operaciones en una transacción y ejecutarlos de manera atómica.

//<span style="font-family: Arial,sans-serif;">Módulo de recuperación. //<span style="font-family: Arial,sans-serif;"> Provee mecanismos de recuperación en presencia de fallas.

//<span style="font-family: Arial,sans-serif;">Módulo de control de concurrencia. //<span style="font-family: Arial,sans-serif;"> Provee los mecanismo para mantener la consistencia de objetos y que cada acción atómica se lleve a cabo en un tiempo finito.

//<span style="font-family: Arial,sans-serif;">Módulo de consistencia de datos y actualización de múltiples copias. //<span style="font-family: Arial,sans-serif;"> Provee mecanismos para la compartición de archivos y para la actualización de múltiples copias.

//<span style="font-family: Arial,sans-serif;">Módulo de directorio. //<span style="font-family: Arial,sans-serif;"> Provee lo necesario para mapear nombres de archivos y referencias a archivos, esto es, ID de archivos.

//<span style="font-family: Arial,sans-serif;">Módulo de control de acceso. //<span style="font-family: Arial,sans-serif;"> Verifica que las operaciones solicitadas sean adecuadas.

//<span style="font-family: Arial,sans-serif;">Módulo de colocación. //<span style="font-family: Arial,sans-serif;"> Selecciona al servidor para que aloje a un nuevo archivo.

//<span style="font-family: Arial,sans-serif;">Módulo de localización. //<span style="font-family: Arial,sans-serif;"> Localiza al servidor donde se encuentra alojado el archivo.

//<span style="font-family: Arial,sans-serif;">Módulo de relocalización. //<span style="font-family: Arial,sans-serif;"> Provee de métodos para relocalizar archivos.

**<span style="font-family: Arial,sans-serif; font-size: 12pt;">Servicios de disco **
<span style="font-family: Arial,sans-serif;">El servicio de disco provee una vista lógica del sistema de alojamiento. Al servicio de disco le concierne la lectura y escritura de bloques de disco sin importar como se encuentran organizados, también es responsable del mantenimiento de bloques de frecuente uso en un buffer de memoria.

**<span style="font-family: Arial,sans-serif; font-size: 12pt;">Alojamiento de archivos **
<span style="font-family: Arial,sans-serif;">Un archivo puede ser considerado como una secuencia de datos sin estructura. Para éste caso de estudio, un archivo es modelado como una secuencia de datos modificables de algún tamaño. Cuando un archivo se crea, se le debe asignar espacio. Éste espacio se recupera cuando un archivo se borra o se trunca. El tamaño del archivo se modifica cuando se ejecutan operaciones sobre él. De ésta manera, se requiere de una asignación dinámica del alojamiento.

<span style="font-family: Arial,sans-serif;">Además de los datos, los archivos tienen otros atributos que lo describen. Cada atributo tiene un nombre, un tipo y un valor. Algunos atributos se inicializan cuando el archivo se crea y no cambian. Otros pueden ser modificados por el usuario. Un tercer grupo de atributos es manejado por el servidor.

<span style="font-family: Arial,sans-serif;">Algunos atributos de los archivos son:

<span style="font-family: Arial,sans-serif;">Nombre del archivo.

<span style="font-family: Arial,sans-serif;">Operaciones permitidas.

<span style="font-family: Arial,sans-serif;">Control de acceso a datos.

<span style="font-family: Arial,sans-serif;">Fecha y hora de creación.

<span style="font-family: Arial,sans-serif;">Fecha y hora de última modificación.

<span style="font-family: Arial,sans-serif;">Llave de encriptado.

<span style="font-family: Arial,sans-serif;">Los archivos se alojan en bloques direccionables de tamaño fijo, típicamente de dos a ocho kbytes. Esto explica la existencia de un módulo de manejo de bloques, el cuál es responsable de la asignación, lectura y escritura de bloques.

<span style="font-family: Arial,sans-serif;">El uso de servicios de bloque ofrece algunas ventajas en la implementación de archivos compartidos.

<span style="font-family: Arial,sans-serif;">Servicios de archivos con especificaciones diferentes pueden coexistir y compartir el mismo dispositivo de alojamiento.

<span style="font-family: Arial,sans-serif;">Se pueden utilizar una gran variedad de disco y otros medios de almacenamiento.

<span style="font-family: Arial,sans-serif;">La implementación del servicio de archivo puede ser separado de las optimizaciones específicas de disco u otro hardware.

<span style="font-family: Arial,sans-serif;">Con la técnica basada en bloque, un archivo se puede almacenar en un conjunto de bloques no contiguos. Esto implica la necesidad de grabar una secuencia de apuntadores a bloques por cada archivo. Esta secuencia de apuntadores se almacena en estructuras de datos llamadas índices de archivos, mismos que deben organizarse de tal manera que permita el acceso a archivo secuencial y directo.

<span style="font-family: Arial,sans-serif;">Los servicios de bloque que generalmente se implementan son: asignación, liberación, lectura y escritura de bloques, cada uno de ellos está protegido, lo que significa que si un bloque es asignado a un usuario, otro usuario no lo puede acceder sin permiso.

**<span style="font-family: Arial,sans-serif; font-size: 12pt;">Funciones del servicio de disco **
<span style="font-family: Arial,sans-serif;">Allocate_block. Asigna un nuevo bloque y devuelve un apuntador.

<span style="font-family: Arial,sans-serif;">Free_block. Libera un bloque.

<span style="font-family: Arial,sans-serif;">Get_block. Lee un bloque dado una dirección del disco, lo aloja en un buffer libre de la caché pasa una copia al proceso de usuario. Si un bloque se encuentra en la caché el acceso a disco no se realiza.

<span style="font-family: Arial,sans-serif;">Put_block. Los datos alojados en la caché se copian en un bloque dado de disco.

<span style="font-family: Arial,sans-serif;">Flush_block. Se remueve un bloque de la caché.

**<span style="font-family: Arial,sans-serif; font-size: 12pt;">Sistema de caché **
<span style="font-family: Arial,sans-serif;">El rendimiento de cualquier sistema que soporte memoria externa se ve afectado por operaciones de acceso a disco y operaciones remotas, las cuales consumen mucho tiempo; es necesario buscar la manera de disminuir tal efecto. Se desarrolla entonces un sistema de software que disminuya el costo de acceso a archivos el cual almacene en memoria local los bloques de más reciente uso y re-usarlos siempre que contengan información válida. Al sistema anterior se le llama sistema de caché.

<span style="font-family: Arial,sans-serif;">La caché es un área de memoria principal que se encuentra organizada como un arreglo de bloques, el tamaño de un bloque en caché es el mismo que el tamaño de un bloque en disco. Cada bloque de caché tiene asociado un apuntador. Éste apuntador se verifica en cada operación de lectura. Si un apuntador de caché está presente, se lee el bloque de caché. En otro caso, el caché se carga con el contenido del bloque del disco y el apuntador asociado se actualiza. Con esto, las lecturas subsecuentes que requieren el mismo bloque, lo toman de la caché.

<span style="font-family: Arial,sans-serif;">El buffer de caché puede mantenerse en la memoria del servidor de archivos o en la memoria de la computadora cliente. Cuando la caché es demasiado grande, es difícil mantener la confiabilidad en caso de fallas del servidor de archivos. Otro problema es el de mantenimiento de consistencia entre bloques alojados en más de una localidad. Se dice que la caché es consistente si contiene una copia exacta de datos. Al problema de mantener una copia de caché local actualizado cuando se realizan cambios en localidades remotas se le llama “consistencia de caché”.

**<span style="font-family: Arial,sans-serif; font-size: 12pt;">Servicios de archivo **
<span style="font-family: Arial,sans-serif;">El servicio de archivos provee al cliente el concepto de archivo, el cual es una secuencia lineal de elementos de datos (registros). Los elementos de datos pueden ser definidos por el usuario o por el sistema. Las posibles operaciones son lectura y escritura de registros, iniciando desde algún lugar particular del archivo. No le concierne al usuario donde y/o como se almacenan los datos en el archivo y si existen relaciones entre los archivos.

<span style="font-family: Arial,sans-serif;">El servicio de archivos distribuidos permite al usuario acceder archivos sin que tenga que copiarlos a una estación de trabajo local. Más aún, si se utiliza una estación de trabajo sin disco, el servicio de archivos provee almacenamiento de datos permanente.

**<span style="font-family: Arial,sans-serif; font-size: 12pt;">Archivos mutables e inmutables **
<span style="font-family: Arial,sans-serif;">En el servidor de archivos se alojan dos tipos de archivos: Se dice que un archivo es mutable, si hay sólo una secuencia de almacenamiento la cual se altera en cada operación de actualización (Ejemplo: XDFS, CFS).

<span style="font-family: Arial,sans-serif;">Un archivo inmutable, es uno que no puede ser modificado una vez que ha sido creado, sólo se puede borrar. La segunda propiedad importante de los archivos inmutables es que su nombre no puede ser reutilizado. Esto implica que el nombre de un archivo inmutable indica el contenido fijo de el archivo, no el archivo como un contenedor para información variable. Los archivos inmutables pueden ser fácilmente compartidos, además de que es relativamente fácil la implementación de un sistema de archivos distribuidos.

<span style="font-family: Arial,sans-serif;">Los archivos inmutables crean dos problemas importantes: El uso del espacio de disco se incrementa, de igual forma la asignación de disco. Cedar File System (CFS).

<span style="font-family: Arial,sans-serif; font-size: 12pt;">Operaciones sobre datos del servicio de archivos
<span style="font-family: Arial,sans-serif;">Un archivo contiene datos, y tiene atributos. Esto implica que hay dos conjuntos de operaciones, uno que tiene que ver con los datos y otro con los atributos. Las operaciones disponibles para el usuario son aquellas que le permitirán manipular el contenido de los archivos.

<span style="font-family: Arial,sans-serif;">Lista de operaciones sobre datos. Crear, abrir, copiar, leer, escribir, cerrar, borrar.

<span style="font-family: Arial,sans-serif; font-size: 12pt;">Operaciones sobre atributos del servicio de archivos
<span style="font-family: Arial,sans-serif;">El servicio de archivos mantiene un conjunto de atributos para cada archivo, tales como fecha de creación, tipo, fecha de último acceso, fecha de última modificación, lista de acceso, etc. Éstos atributos se alojan y recuperan como una secuencia de bytes.

<span style="font-family: Arial,sans-serif;">Lista de operaciones sobre atributos: Leer_atributos y escribir_atributos.


 * <span style="font-family: Arial,sans-serif;">Propiedades operacionales del sistema de archivos **

<span style="font-family: Arial,sans-serif;">Hay dos propiedades importantes sobre las operaciones que se realizan sobre los archivos abiertos, los cuales son importantes en la construcción de sistemas distribuidos: la idempotencia y servidor sin estado.


 * <span style="font-family: Arial,sans-serif;">Idempotencia. **<span style="font-family: Arial,sans-serif;"> Se dice que una operación es idempotente si su efecto cuando se ejecuta más de una vez es la misma que si se ejecutara una sola vez.


 * <span style="font-family: Arial,sans-serif;">Servidor sin estado. **<span style="font-family: Arial,sans-serif;"> Los servidores no mantienen la información de los clientes, es decir, cuando un cliente envía una solicitud a un servidor, éste la lleva a cabo, envía la respuesta y elimina de sus tablas internas toda la información relativa a dicha solicitud. Ejemplo de información de estado es el apuntador de lectura-escritura, cuando un servidor con estado falla esta información se pierde y ya no existe cuando el servidor se recupera, esto provoca problemas con las solicitudes subsecuentes del cliente.

<span style="font-family: Arial,sans-serif;">En resumen un servidor sin estado satisface la recuperación a caídas del servidor ya que la información de estado es mantenida por el cliente. Si el cliente falla no es necesaria ninguna recuperación, ni por parte del servidor ni por el cliente.

<span style="font-family: Arial,sans-serif;">Por otro lado, si se mantiene el estado por el servidor, la recuperación es difícil, ya que tanto el cliente como el servidor deben detectar de manera confiable la falla: el cliente debe detectar la falla del servidor para recuperar el estado del servidor y el servidor debe detectar la falla del cliente para eliminar cualquier estado correspondiente a ese cliente.

**<span style="font-family: Arial,sans-serif; font-size: 12pt;">Nombramiento/servicio de directorio **
<span style="font-family: Arial,sans-serif;">Conceptos:


 * <span style="font-family: Arial,sans-serif;">Servicio de nombres: **<span style="font-family: Arial,sans-serif;"> le permite al usuario poner nombres a los objetos, es decir, le brinda las facilidades de asignar secuencias de caracteres a los objetos.


 * <span style="font-family: Arial,sans-serif;">Transparencia de localización: **<span style="font-family: Arial,sans-serif;"> el sistema que proporcione transparencia de localización, brinda la facilidad a los usuarios de localizar sus objetos con solo proporcionar el nombre del mismo.


 * <span style="font-family: Arial,sans-serif;">Nombre: **<span style="font-family: Arial,sans-serif;"> es una cadena de símbolos (bits o caracteres) que identifican un objeto. Los nombres se mapean en direcciones.

<span style="font-family: Arial,sans-serif; font-size: 12pt;">Nombres
<span style="font-family: Arial,sans-serif;">El sistema debe proporcionar facilidades para el manejo de nombres de usuario y el mapeo correspondiente a nombres del sistema los cuales son más manejables a nivel de máquina. Esto permite que las referencias a archivos se den en secuencias de texto. Es muy importante la separación lógica entre las políticas de almacenamiento y las reglas de mapeo para tener bien claro lo que representa el nombre.

<span style="font-family: Arial,sans-serif;">Recordando que los nombres del sistema deben ser únicos en un sistema distribuido. Los nombres de usuario deben ser uniformes tal que el nombre de un archivo no cambie de una máquina a otra. Sin embargo, a cada usuario se le debe permitir nombrar sus archivos personales sin que tenga conocimiento de los nombres utilizados por otros usuarios. Esto puede conducir a que nombres de usuario diferentes se pueden asignar al mismo archivo o nombres de usuario iguales se puedan asignar a archivos diferentes. El servicio de nombres debe ser desarrollado de tal manera que habilite estos requerimientos contradictorios y que sean cumplidos. La respuesta es un espacio de nombres de árbol jerárquico.

<span style="font-family: Arial,sans-serif;">Generalmente los archivos son de quién los crea. El sistema de archivos debe proveer un servicio de protección para frenar accesos no autorizados a los archivos. Sin embargo muchos archivos son compartidos. Esto implica que el sistema de protección debe permitir la compartición a diferentes niveles de usuarios (por ejemplo: propios, grupos, otros).

<span style="font-family: Arial,sans-serif;">En un sistema distribuido puede haber más de un servidor de archivos. Sin embargo, un cliente no necesita saberlo. Los servidores se encuentran geográficamente distribuidos, los archivos pueden estar alojados en cualesquiera de ellos. Esto nos lleva a que los servidores de archivos colaboran para proveer un servicio de archivos integrado transparente a la localización, distribución y replicado de archivos.

<span style="font-family: Arial,sans-serif; font-size: 12pt;">Servicio de directorio
<span style="font-family: Arial,sans-serif;">Al servicio de directorio le concierne el nombramiento y protección de archivos. Éste servicio típicamente provee objetos llamados directorios, que mapea nombres de archivos ASCII en identificadores de archivos (UFIDs) usados por el servicio de archivos. Un directorio es en su mayor parte un archivo y un conjunto de funciones el cual lo distinguen de un archivo de datos ordinario, permitiendo que éste archivo sea visto como un archivo de registros de tamaño fijo, cada registro corresponde a una entrada en el directorio. El servicio de directorio es un cliente del servicio de archivos, sus mapeos son almacenados por el servicio de archivos. Así cada directorio tiene su UFID. El servicio de directorio protege a los archivos, utilizando una lista de acceso para cada archivo y asegura que un UFID no sea asignado a un cliente erróneo. El servicio de directorio se encuentra separado del servicio de archivos una variedad de servicios de directorios pueden ser desarrolladas y utilizadas por el servicio de archivos simple.

<span style="font-family: Arial,sans-serif;">La división de responsabilidades entre el servicio de archivos y el servicio de directorio es en base al uso de UFID para acceder al contenido de los archivos. Así, cuando un archivo se crea por un cliente solicitante, el servicio de archivo le asigna un nuevo UFID. Entonces, éste cliente puede solicitar al servicio de directorio que grave el UFID y el nombre (de usuario) en texto. Como resultado, el cliente puede solicitar acceso al archivo proporcionando el nombre de usuario al servicio de directorio.

<span style="font-family: Arial,sans-serif;">Comúnmente se utiliza un espacio de nombre en árbol jerárquico en los sistemas centralizados. (Ejemplo: UNIX). Esto garantiza nombres únicos y una resolución de nombres eficiente.