Los usuarios deben poder crear, modificar y borrar archivos.
Se deben poder compartir los archivos de una manera cuidadosamente controlada [7, Deitel].
El mecanismo encargado de compartir los archivos debe proporcionar varios tipos de acceso controlado:
Ej.: “Acceso de Lectura”, “Acceso de Escritura”, “Acceso de Ejecución”, varias combinaciones de estos, etc. Se debe poder estructurar los archivos de la manera más apropiada a cada aplicación. Los usuarios deben poder ordenar la transferencia de información entre archivos.
Se deben proporcionar posibilidades de “respaldo” y “recuperación” para prevenirse contra:
La pérdida accidental de información. La destrucción maliciosa de información. Se debe poder referenciar a los archivos mediante “Nombres Simbólicos”, brindando “Independencia de Dispositivos”. En ambientes sensibles, el sistema de archivos debe proporcionar posibilidades de “Cifrado” y “Descifrado”.
El sistema de archivos debe brindar una interfase favorable al usuario:
Debe suministrar una “visión lógica” de los datos y de las funciones que serán ejecutadas, en vez de una “visión física”. El usuario no debe tener que preocuparse por: Los dispositivos particulares. Dónde serán almacenados los datos. El formato de los datos en los dispositivos. Los medios físicos de la transferencia de datos hacia y desde los dispositivos.
Inicio: Fin: El Sistema de Archivos
Un “Archivo” es un conjunto de registros relacionados [23, Tanenbaum].
El “Sistema de Archivos” es un componente importante de un S. O. y suele contener [7, Deitel]:
“Métodos de acceso” relacionados con la manera de acceder a los datos almacenados en archivos. “Administración de archivos” referida a la provisión de mecanismos para que los archivos sean almacenados, referenciados, compartidos y asegurados. “Administración del almacenamiento auxiliar” para la asignación de espacio a los archivos en los dispositivos de almacenamiento secundario. “Integridad del archivo” para garantizar la integridad de la información del archivo. El sistema de archivos está relacionado especialmente con la administración del espacio de almacenamiento secundario, fundamentalmente con el almacenamiento de disco. Una forma de organización de un sistema de archivos puede ser la siguiente:
Se utiliza una “raíz ” para indicar en qué parte del disco comienza el “directorio raíz ”. El “directorio raíz ” apunta a los “directorios de usuarios”. Un “directorio de usuario” contiene una entrada para cada uno de los archivos del usuario. Cada entrada de archivo apunta al lugar del disco donde está almacenado el archivo referenciado. Los nombres de archivos solo necesitan ser únicos dentro de un directorio de usuario dado. El nombre del sistema para un archivo dado debe ser único para el sistema de archivos.
En sistemas de archivo “jerárquicos” el nombre del sistema para un archivo suele estar formado como el “nombre de la trayectoria” del directorio raíz al archivo.
Inicio: Fin:
Archivos
Se considerará el punto de vista del usuario.
Nombre de los Archivos
Las reglas exactas para los nombres de archivos varían de sistema a sistema [23, Tanenbaum].
Algunos sistemas de archivos distinguen entre las letras mayúsculas y minúsculas, mientras que otros no.
Muchos S. O. utilizan nombres de archivo con dos partes, separadas por un punto:
La parte posterior al punto es la extensión de archivo y generalmente indica algo relativo al archivo, aunque las extensiones suelen ser meras convenciones. Inicio: Fin: Estructura de un Archivo
Los archivos se pueden estructurar de varias maneras, las más comunes son [23, Tanenbaum]:
“Secuencia de bytes”: El archivo es una serie no estructurada de bytes. Posee máxima flexibilidad. El S. O. no ayuda pero tampoco estorba. “Secuencia de registros”: El archivo es una secuencia de registros de longitud fija, cada uno con su propia estructura interna. “Árbol ”: El archivo consta de un árbol de registros, no necesariamente de la misma longitud. Cada registro tiene un campo key (llave o clave) en una posición fija del registro. El árbol se ordena mediante el campo de clave para permitir una rápida búsqueda de una clave particular. Inicio: Fin: Tipos de Archivos
Muchos S. O. soportan varios tipos de archivos, por ej.: archivos regulares, directorios, archivos especiales de caracteres, archivos especiales de bloques, etc., donde [23, Tanenbaum]:
Los Archivos Regulares son aquellos que contienen información del usuario. Los Directorios son archivos de sistema para el mantenimiento de una estructura del sistema de archivos. Los Archivos Especiales de Caracteres: Tienen relación con la e / s. Se utilizan para modelar dispositivos seriales de e / s (terminales, impresoras, redes, etc.). Los Archivos Especiales de Bloques se utilizan para modelar discos. Inicio: Fin: Acceso a un Archivo
Los tipos de acceso más conocidos son:
Acceso Secuencial: el proceso lee en orden todos los registros del archivo comenzando por el principio, sin poder: Saltar registros. Leer en otro orden. Acceso Aleatorio: el proceso puede leer los registros en cualquier orden utilizando dos métodos para determinar el punto de inicio de la lectura: Cada operación de lectura (read) da la posición en el archivo con la cual iniciar. Una operación especial (seek) establece la posición de trabajo pudiendo luego leerse el archivo secuencialmente. Inicio: Fin: Atributos de Archivo
Cada archivo tiene:
Su nombre y datos. Elementos adicionales llamados atributos, que varían considerablemente de sistema a sistema. Algunos de los posibles atributos de archivo son [23, Tanenbaum]: “Protección”: quién debe tener acceso y de qué forma. “Contraseña”: contraseña necesaria para acceder al archivo. “Creador”: identificador de la persona que creó el archivo. “Propietario”: propietario actual. “Bandera exclusivo - para - lectura”: 0 lectura / escritura, 1 para lectura exclusivamente. “Bandera de ocultamiento”: 0 normal, 1 para no exhibirse en listas. “Bandera de sistema”: 0 archivo normal, 1 archivo de sistema. “Bandera de biblioteca”: 0 ya se ha respaldado, 1 necesita respaldo. “Bandera ascii / binario”: 0 archivo en ascii, 1 archivo en binario. “Bandera de acceso aleatorio”: 0 solo acceso secuencial, 1 acceso aleatorio. “Bandera temporal”: 0 normal, 1 eliminar al salir del proceso. “Banderas de cerradura”: 0 no bloqueado, distinto de 0 bloqueado. “Longitud del registro”: número de bytes en un registro. “Posición de la llave”: ajuste de la llave dentro de cada registro. “Longitud de la llave”: número de bytes en el campo llave. “Tiempo de creación”: fecha y hora de creación del archivo. “Tiempo del último acceso”: fecha y hora del último acceso al archivo. “Tiempo de la última modificación”: fecha y hora de la última modificación al archivo. “Tamaño actual”: número de bytes en el archivo. “Tamaño máximo”: tamaño máximo al que puede crecer el archivo. Inicio: Fin: Operaciones con Archivos
Las llamadas más comunes al sistema relacionadas con los archivos son [23, Tanenbaum]:
Create (crear): el archivo se crea sin datos. Delete (eliminar): si el archivo ya no es necesario debe eliminarse para liberar espacio en disco. Ciertos S. O. eliminan automáticamente un archivo no utilizado durante “n” días. Open (abrir): antes de utilizar un archivo, un proceso debe abrirlo. La finalidad es permitir que el sistema traslade los atributos y la lista de direcciones en disco a la memoria principal para un rápido acceso en llamadas posteriores. Close (cerrar): cuando concluyen los accesos, los atributos y direcciones del disco ya no son necesarios, por lo que el archivo debe cerrarse y liberar la tabla de espacio interno. Read (leer): los datos se leen del archivo; quien hace la llamada debe especificar la cantidad de datos necesarios y proporcionar un buffer para colocarlos. Write (escribir): los datos se escriben en el archivo, en la posición actual. El tamaño del archivo puede aumentar (agregado de registros) o no (actualización de registros). Append (añadir): es una forma restringida de “write”. Solo puede añadir datos al final del archivo. Seek (buscar): especifica el punto donde posicionarse. Cambia la posición del apuntador a la posición activa en cierto lugar del archivo. Get attributes (obtener atributos): permite a los procesos obtener los atributos del archivo. Set attributes (establecer atributos): algunos atributos pueden ser determinados por el usuario y modificados luego de la creación del archivo. La información relativa al modo de protección y la mayoría de las banderas son un ejemplo obvio. Rename (cambiar de nombre): permite modificar el nombre de un archivo ya existente. Inicio: Fin: Archivos Mapeados a Memoria
Algunos S. O. permiten asociar los archivos con un espacio de direcciones de un proceso en ejecución [23, Tanenbaum].
Se utilizan las llamadas al sistema “map” y “unmap”:
“Map”: utiliza un nombre de archivo y una dirección virtual y hace que el S. O. asocie al archivo con la dirección virtual en el espacio de direcciones, por lo cual las lecturas o escrituras de las áreas de memoria asociadas al archivo se efectúan también sobre el archivo mapeado. “Unmap”: elimina los archivos del espacio de direcciones y concluye la operación de asociación. El mapeo de archivos elimina la necesidad de programar la e / s directamente, facilitando la programación. Los principales problemas relacionados son:
Imposibilidad de conocer a priori la longitud del archivo de salida, el que podría superar a la memoria. Dificultad para compartir los archivos mapeados evitando inconsistencias, ya que las modificaciones hechas en las páginas no se verán reflejadas en el disco hasta que dichas páginas sean eliminadas de la memoria. Inicio: Fin: Directorios
Generalmente son utilizados por los S. O. para llevar un registro de los archivos [23, Tanenbaum].
En muchos sistemas son a su vez también archivos.
Sistemas Jerárquicos de Directorios
El directorio contiene un conjunto de datos por cada archivo referenciado.
Una posibilidad es que el directorio contenga por cada archivo referenciado [7, Deitel]:
El nombre. Sus atributos. Las direcciones en disco donde se almacenan los datos. Otra posibilidad es que cada entrada del directorio contenga: El nombre del archivo. Un apuntador a otra estructura de datos donde se encuentran los atributos y las direcciones en disco. Al abrir un archivo el S. O.: Busca en su directorio el nombre del archivo. Extrae los atributos y direcciones en disco. Graba esta información en una tabla de memoria real. Todas las referencias subsecuentes al archivo utilizarán la información de la memoria principal. El número y organización de directorios varía de sistema en sistema: Directorio único: el sistema tiene un solo directorio con todos los archivos de todos los usuarios (ver Figura 4.1 [23, Tanenbaum]). Un directorio por usuario: el sistema habilita un solo directorio por cada usuario (ver Figura 4.2 [23, Tanenbaum]). Un árbol de directorios por usuario: el sistema permite que cada usuario tenga tantos directorios como necesite, respetando una jerarquía general (ver Figura 4.3 [23, Tanenbaum]).
Inicio: Fin:
Nombre de las Rutas de Acceso
Cuando el sistema de archivos está organizado como un árbol de directorios se necesita una forma de determinar los nombres de los archivos.
Los principales métodos para nombres de los archivos son [23, Tanenbaum]:
Ruta de Acceso Absoluta: Cada archivo tiene una ruta de acceso absoluta. Consta de la ruta de acceso desde el directorio raíz hasta el archivo. Los componentes de la ruta de acceso se separan mediante algún carácter llamado “separador”. Ruta de Acceso Relativa: Se utiliza junto con el concepto de directorio de trabajo o directorio activo. Todos los nombres que no comiencen en el directorio raíz se toman en relación con el directorio de trabajo. El nombre absoluto de la ruta de acceso siempre funciona, sin importar cual sea el directorio de trabajo. Inicio: Fin: Operaciones con Directorios
Las llamadas al sistema permitidas para el manejo de los directorios tienen variación de sistema a sistema [23, Tanenbaum].
Las más comunes son las siguientes:
Create (crear): se crea un directorio vacío. Delete (eliminar): se elimina un directorio, que debe estar vacío. Opendir (abrir directorio): se pueden leer los directorios: Antes de poder leer un directorio, éste debe ser abierto. Closedir (cerrar directorio): cuando se ha leído un directorio, éste debe ser cerrado para liberar el espacio correspondiente de la tabla interna. Readdir (leer directorio): regresa la siguiente entrada en un directorio abierto, sin importar el tipo de estructura de directorios que se utilice. Rename (cambiar de nombre): cambia el nombre de un directorio de manera similar al cambio para archivos. Link (ligar): es una técnica que permite que un archivo aparezca en más de un directorio: Especifica un archivo existente y el nombre de una ruta de acceso. Crea un enlace del archivo ya existente con el nombre especificado en la ruta de acceso. Unlink (desligar): se elimina una entrada del directorio: Si el archivo que se desea desligar aparece solo en un directorio (el caso normal): Se elimina del sistema de archivos. Si el archivo que se desea desligar, está presente en varios directorios: Solo se elimina la ruta de acceso especificada. Las demás rutas permanecen. Inicio: Fin: Implantación del Sistema de Archivos y sus Relaciones con la Asignación y Liberación de Espacio
Se consideran aspectos tales como [7, Deitel]:
La forma de almacenamiento de archivos y directorios. La administración del espacio en disco. La forma de hacerlo de manera eficiente y confiable. Se deben tener presentes problemas tales como la “fragmentación” creciente del espacio en disco: Ocasiona problemas de performance al hacer que los archivos se desperdiguen a través de bloques muy dispersos. Una técnica para aliviar el problema de la “fragmentación” consiste en realizar periódicamente: “Condensación”: se pueden “reorganizar” los archivos expresamente o automáticamente según algún criterio predefinido. “Recolección de basura o residuos”: se puede hacer fuera de línea o en línea, con el sistema activo, según la implementación. Inicio: Fin: Implantación de Archivos
El aspecto clave de la implantación del almacenamiento de archivos es el registro de los bloques asociados a cada archivo [7, Deitel].
Algunos de los métodos utilizados son los siguientes:
Asignación contigua o adyacente: Los archivos son asignados a áreas contiguas de almacenamiento secundario. Las principales ventajas son: Facilidad de implantación, ya que solo se precisa el número del bloque de inicio para localizar un archivo. Rendimiento excelente respecto de la e / s. Los principales defectos son: Se debe conocer el tamaño máximo del archivo al crearlo. Produce una gran fragmentación de los discos. Asignación no contigua: Son esquemas de almacenamiento más dinámicos, destacándose los siguientes: Asignación encadenada orientada hacia el sector: El disco se considera compuesto de sectores individuales. Los archivos constan de varios sectores que pueden estar dispersos por todo el disco. Los sectores que pertenecen a un archivo común contienen apuntadores de uno a otro formando una “lista encadenada”. Una “lista de espacio libre” contiene entradas para todos los sectores libres del disco. Las ampliaciones o reducciones en el tamaño de los archivos se resuelven actualizando la “lista de espacio libre” y no hay necesidad de condensación. Las principales desventajas son: Debido a la posible dispersión en el disco, la recuperación de registros lógicamente contiguos puede significar largas búsquedas. El mantenimiento de la estructura de “listas encadenadas” significa una sobrecarga en tiempo de ejecución. Los apuntadores de la estructura de lista consumen espacio en disco. Asignación por bloques: Es más eficiente y reduce la sobrecarga en ejecución. Es una mezcla de los métodos de asignación contigua y no contigua. Se asignan bloques de sectores contiguos en vez de sectores individuales. El sistema trata de asignar nuevos bloques a un archivo eligiendo bloques libres lo más próximos posible a los bloques del archivo existentes. Las formas más comunes de implementar la asignación por bloques son: Encadenamiento de bloques. Encadenamiento de bloques de índice. Transformación de archivos orientada hacia bloques. Encadenamiento de bloques o lista ligada: Las entradas en el directorio de usuarios apuntan al primer bloque de cada archivo. Cada uno de los bloques de longitud fija que forman un archivo contiene dos partes: Un bloque de datos. Un apuntador al bloque siguiente. Cada bloque contiene varios sectores. Frecuentemente el tamaño de un bloque se corresponde con el de una pista completa del disco. Localizar un registro determinado requiere: Buscar en la cadena de bloques hasta encontrar el bloque apropiado. Buscar en el bloque hasta encontrar el registro. El examen de la cadena desde el principio puede ser lento ya que debe realizarse de bloque en bloque, y pueden estar dispersos por todo el disco. La inserción y el retiro son inmediatos, dado que se deben modificar los apuntadores del bloque precedente. Se pueden usar “listas de encadenamiento doble”, hacia adelante y hacia atrás, con lo que se facilita la búsqueda (ver Figura 4.4 [23, Tanenbaum]).
Encadenamiento de bloques de índices: Los apuntadores son colocados en varios bloques de índices separados: Cada bloque de índices contiene un número fijo de elementos. Cada entrada contiene un identificador de registros y un apuntador a ese registro. Si es necesario utilizar más de un bloque de índices para describir un archivo, se encadena una serie de bloques de índices. La gran ventaja es que la búsqueda puede realizarse en los propios bloques de índices. Los bloques de índices pueden mantenerse juntos en el almacenamiento secundario para acortar la búsqueda, pero para mejor performance podrían mantenerse en el almacenamiento primario. La principal desventaja es que las inserciones pueden requerir la reconstrucción completa de los bloques de índices: Una posibilidad es dejar vacía una parte de los bloques de índices para facilitar inserciones futuras y retardar las reconstrucciones. Es suficiente que el dato del directorio contenga el número de bloque inicial para localizar todos los bloques restantes, sin importar el tamaño del archivo (ver Figura 4.5 [7, Deitel]).
Transformación de archivos orientada hacia bloques: Se utilizan números de bloques en vez de apuntadores. Los números de bloques se convierten fácilmente a direcciones de bloques gracias a la geometría del disco. Se conserva un mapa del archivo, conteniendo una entrada para cada bloque del disco. Las entradas en el directorio del usuario apuntan a la primera entrada al mapa del archivo para cada archivo. Cada entrada al mapa del archivo contiene el número del bloque siguiente de ese archivo. La entrada al mapa del archivo correspondiente a la última entrada de un archivo determinado se ajusta a algún valor “centinela” (“nil”) para indicar que se alcanzó el último bloque de un archivo. El sistema puede mantener una lista de bloques libres. La principal ventaja es que las cercanías físicas del disco se reflejan en el mapa del archivo (ver Figura 4.6 [7, Deitel]).
Nodos-i (nodos índices): Se asocia a cada archivo una pequeña tabla, llamada nodo-i (nodo índice): Contiene los atributos y direcciones en disco de los bloques del archivo. Se traslada del disco a la memoria principal al abrir el archivo. En rigor, almacena solo las primeras direcciones en disco: o Si el archivo es pequeño, toda la información está en el nodo-i. o Si el archivo es grande, una de las direcciones en el nodo-i es la dirección de un bloque en el disco llamado bloque simplemente indirecto: Contiene las direcciones en disco adicionales. Si resulta insuficiente, otra dirección en el nodo-i, el bloque doblemente indirecto, contiene la dirección de un bloque que presenta una lista de los bloques simplemente indirectos: Cada bloque simplemente indirecto apunta a un grupo de bloques de datos. De ser necesario se pueden utilizar bloques triplemente indirectos (ver Figura 4.7 [23, Tanenbaum]).
Inicio: Fin:
Implantación de Directorios
Para abrir un archivo el S. O. utiliza información del directorio:
El directorio contiene la información necesaria para encontrar los bloques en el disco. El tipo de información varía según el sistema. La principal función del sistema de directorios es asociar el nombre del archivo con la información necesaria para localizar los datos. Un aspecto íntimamente ligado con esto es la posición de almacenamiento de los atributos:
Una posibilidad es almacenarlos en forma directa dentro del dato del directorio. Otra posibilidad es almacenar los atributos en el nodo-i en vez de utilizar la entrada del directorio. Inicio: Fin: Archivos Compartidos
Frecuentemente conviene que los archivos compartidos aparezcan simultáneamente en distintos directorios de distintos usuarios.
El propio sistema de archivos es una gráfica dirigida acíclica en vez de un árbol [23, Tanenbaum].
La conexión entre un directorio y un archivo de otro directorio al cual comparten se denomina enlace.
Si los directorios realmente contienen direcciones en disco:
Se debe tener una copia de las direcciones en disco en el directorio que accede al archivo compartido al enlazar el archivo. Se debe evitar que los cambios hechos por un usuario a través de un directorio no sean visibles por los demás usuarios, para lo que se consideraran dos soluciones posibles. Primer solución: Los bloques del disco no se enlistan en los directorios, sino en una pequeña estructura de datos asociada al propio archivo. Los directorios apuntarían solo a esa pequeña estructura de datos, que podría ser el nodo-i. Segunda solución: El enlace se produce haciendo que el sistema cree un nuevo archivo de tipo “link”. El archivo “link”: Ingresa al directorio del usuario que accede a un archivo de otro directorio y usuario. Solo contiene el nombre de la ruta de acceso del archivo al cual se enlaza. Este criterio se denomina enlace simbólico. Desventajas de la primer solución: La creación de un enlace: No modifica la propiedad respecto de un archivo. Aumenta el contador de enlaces del nodo-i: El sistema sabe el número de entradas de directorio que apuntan en cierto momento al archivo. Si el propietario inicial del archivo intenta eliminarlo, surge un problema para el sistema: Si elimina el archivo y limpia el nodo-i, el directorio que enlazo al archivo tendrá una entrada que apunta a un nodo-i no válido. Si el nodo-i se reasigna a otro archivo el enlace apuntará al archivo incorrecto. El sistema: Puede ver por medio del contador de enlaces en el nodo-i que el archivo sigue utilizándose. No puede localizar todas las entradas de directorio asociadas a ese archivo para eliminarlas. La solución podría ser: Eliminar la entrada del directorio inicialmente propietario del archivo. Dejar intacto el nodo-i: Se daría el caso que el directorio que posee el enlace es el único que posee una entrada de directorio para un archivo de otro directorio, para el cual dicho archivo ya no existe. Esto no ocurre con los enlaces simbólicos ya que solo el propietario verdadero tiene un apuntador al nodo-i: Los usuarios enlazados al archivo solo tienen nombres de rutas de acceso y no apuntadores a nodo-i. Cuando el propietario elimina un archivo, este se destruye. Desventajas de la segunda solución: El principal problema es su costo excesivo, especialmente en accesos a disco, puesto que se debe leer el archivo que contiene la ruta de acceso, analizarla y seguirla componente a componente hasta alcanzar el nodo-i. Se precisa un nodo-i adicional por cada enlace simbólico y un bloque adicional en disco para almacenar la ruta de acceso. Los archivos pueden tener dos o más rutas de acceso, debido a lo cual, en búsquedas genéricas se podría encontrar el mismo archivo por distintas rutas y tratárselo como si fueran archivos distintos. Los enlaces simbólicos tienen la ventaja de que se pueden utilizar para enlazar archivos en otras máquinas, en cualquier parte del mundo; se debe proporcionar solo la dirección de la red de la máquina donde reside el archivo y su ruta de acceso en esa máquina. Inicio: Fin:
Administración del Espacio en Disco
Existen dos estrategias generales para almacenar un archivo de “n” bytes [23, Tanenbaum]:
Asignar “n” bytes consecutivos de espacio en el disco:
Tiene el problema de que si un archivo crece será muy probable que deba desplazarse en el disco, lo que puede afectar seriamente al rendimiento. Dividir el archivo en cierto número de bloques (no necesariamente) adyacentes: Generalmente los sistemas de archivos utilizan esta estrategia con bloques de tamaño fijo. Tamaño del bloque: Dada la forma en que están organizados los bloques, el sector, la pista y el cilindro son los candidatos obvios como unidades de asignación.
No hay comentarios:
Publicar un comentario