Sistemas Operativos I - Tema 5

  • June 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Sistemas Operativos I - Tema 5 as PDF for free.

More details

  • Words: 3,366
  • Pages: 10
Gestión del sistema de archivos |1

5. GESTIÓN DEL SISTEMA DE ARCHIVOS Se necesitan tres condiciones para el almacenamiento de la información a largo plazo: a) La información debe permanecer cuando el proceso termina b) Se debe poder almacenar una cantidad grande de información c) Debe ser posible que varios procesos tengan acceso concurrente a la información

5.1 Archivos Normalmente, los archivos corresponden a programas y a datos. En general, es una seria de bits, bytes o registros cuyo significado está definido por su autor y los usuarios. Los archivos son nombrados y referenciados por su nombre. La forma de hacerlo varía de un SO a otro. Por regla general son cadenas de caracteres alfanuméricos, aunque también es normal usar caracteres especiales, como puntos, guiones o blancos. Además del nombre, los archivos tienen otras propiedades como su tipo, la fecha y hora de su creación, el nombre o identificador del creador, su longitud y algunos más (conocidos como atributos).

5.1.1 Tipos y estructuras de los archivos Dependiendo del uso, los archivos tendrán una determinada estructura. El SO puede tener conocimiento de estas distintas estructuras lógicas y considerar diferentes tipos de archivos. Las desventajas de que el SO tenga conocimiento de los tipos de archivos se pueden resumir en dos: 1) Mayor tamaño del SO, ya que tendrá que tener el código para soportar cada uno de los tipos de archivos considerados. 2) Se tiene una gran rigidez. Si en algún momento se necesita crear un archivo diferente, se entraría en conflicto con el SO. En SO como UNIX no se definen tipos de archivos, dejando plena libertad al usuario. La interpretación corre a cuentas de las aplicaciones. Se tiene una gran flexibilidad, con un soporte mínimo.

5.1.2 Operaciones con los archivos CREATE (Crear) Se tienen que realizar las siguientes acciones:

Gestión del sistema de archivos |2 OPEN (Abrir) Se establece un enlace entre el programa y el archivo. Para ello se trasladan los atributos y la lista de direcciones del archivo a la memoria principal.

SEEK (Buscar) Se cambia la posición del apuntador para señalar al byte o registro cuya dirección lógica se suministra en la llamada.

READ (Leer) Por lo general, la lectura se hace en la posición actual y en la llamada se tiene que especificar la cantidad de datos necesarios y proporcionar un buffer para su transmisión.

Gestión del sistema de archivos |3 WRITE (Escribir) La única diferencia importante con READ es que sirve también para ampliar el archivo. Algunos sistemas tienen una forma restringida de WRITE, con la que sólo pueden añadir datos al final del archivo (APPEND).

CLOSE (Cerrar) Cuando un archivo no se va a utilizar, es necesario cerrarlo, de forma que se libere la tabla con la lista de atributos y direcciones que se mantenía en la memoria principal y que ya no es necesaria.

Gestión del sistema de archivos |4 DELETE (Borrar)

RENAME (Renombrar) La opción de renombrar no siempre es necesaria, ya que se puede copiar el archivo con otro nombre y borrar el original. COPYFILE (Copiar)

Lectura y modificación de los atributos También se permite en muchos sistemas el cambio de algunos atributos, o por lo menos la lectura de los mismos.

5.2 Directorios de archivos Los directorios son tablas simbólicas de archivos. Una entrada típica de directorio puede contener: a) Nombre, tipo y número de versión del archivo. b) Puntero de acceso al archivo, dirección de comienzo en el disco. c) Lista de atributos: tamaño, dueño, modos de protección, fecha de creación, fecha de la última copia de seguridad, fecha de la última modificación o referencia, etc.

Gestión del sistema de archivos |5 El número de directorios varía de un SO a otro. El diseño más sencillo es el directorio de nivel único: un único directorio contiene todos los archivos del sistema o volumen. Tiene muchos inconvenientes, sobre todo en sistemas multiusuarios, y se presentan más problemas para asignar protección a los archivos. Una mejora se obtiene al considerar un directorio por usuario. Pero los usuarios que tienen muchos archivos siguen teniendo un gran problema de organización de los mismos. La solución es permitir una jerarquización total, creando un árbol de directorios. Normalmente, cada usuario tiene su “directorio inicial”. Cuando un usuario se conecta, el sistema operativo busca en un archivo de “cuentas” una entrada para este usuario. Los nombres de los caminos pueden ser de dos tipos: completos o relativos. La mayoría de los SO con estructura de directorios jerárquicos tienen dos entradas especiales para cada directorio: 1) “.” (punto): es una entrada para el propio directorio (con un puntero a sí mismo) 2) “..” (punto-punto): es una entrada para el directorio padre (el que está por encima en la jerarquía) Otro problema es donde y como ubicar los directorios. Como suelen ser muy grandes, el mejor sitio es el disco.

5.2.1 Operaciones con directorios MAKEDIR (Crear directorio) En el directorio actual se crea una entrada para un nuevo subdirectorio que estará vacío salvo las entradas relativas a él mismo, “.”, y al directorio padre “..”. REMOVEDIR (Borrar directorio) Eliminar un directorio supone que está vacío. Si no es el caso se pueden hacer dos cosas: 1) No permitir borrar un directorio que no esté vacío. Primero borrar los archivos contenidos en él. 2) Suponer que cuando se hace una petición de eliminar un directorio se quiere borrar todos los archivos que contiene. OPENDIR (Leer directorio) En muchos sistemas abrir un directorio supone copiar las tablas del directorio en la memoria principal de forma que se agilice la gestión. Cuando se termina de utilizar el directorio se cierra, actualizándose en el disco las tablas. READDIR (Leer directorio) En un principio esta llamada era la misma que para los archivos (READ), pero suponia que el programador o usuario debía conocer la estructura de los archivos. Por este motivo se utiliza esta llamda, distinta, para devolver en un formato estándar la entrada actual del directorio. RENAMEDIR (Cambiar de nombre)

LINK (Enlazar) Forma de hacer que un archivo o subdirectorio aparezca en varios directorios. Se crea un enlace entre el camino de acceso al archivo y el archivo. UNLINK (Desenlazar) Operación contraria a LINK.

Gestión del sistema de archivos |6

5.3 Realización del sistema de archivos De forma general existen dos estrategias para almacenar un archivo de n bytes: 1) Asignar n bytes consecutivos del espacio del disco 2) Dividir el archivo en bloques que no necesitan estar adyacentes En la asignación del espacio del disco los tres métodos más usados son: a) Asignación contigua b) Mediante listas enlazadas c) Mediante índices

5.3.1 Gestión del espacio libre La cuestión clave es mantener una lista del espacio libre en el disco. Para ello, se usan principalmente dos métodos: a) Mapa de bits de bloques libres: Un disco con n bloques, necesitará un mapa de bits de n bits. No ocupa mucho espacio, y es preferible este método si existe espacio suficiente en la memoria principal para mantenerlo. b) Lista enlazada: Manteniendo un puntero al primer bloque libre. No es muy eficiente, porque para recorrer la lista hay que leer todos los bloques. Una modificación de éste método es utilizar una lista enlazada de bloques, en la que cada bloque contiene tantos números de bloques libres como pueda. Otra cuestión es la elección del tamaño de los bloques para la asignación. Un compromiso habitual es elegir los bloques de 512 bytes, 1 Kb o 2 Kb.

5.3.2 Método de asignación contigua La asignación contigua de un archivo se define por la dirección del primer bloque y la longitud del archivo. Si un archivo ocupa n bloques y comienza en el bloque b, ocupará los bloques b, b+1, … b+n-1. La dificultad es la asignación de espacio correcto cuando se crea el archivo. Esto se debe a que se tiene que buscar un hueco de bloques libres en el que se pueda introducir al archivo. Las soluciones a esto son los algoritmos de primero en ajustarse o mejor en ajustarse. Este método tiene buen rendimiento cuando se quiere leer un archivo completo. Pero también tiene grandes inconvenientes: no es realizable salvo que se conozca el tamaño máximo del archivo en el momento de su creación. El problema es grave en muchas aplicaciones en las que los archivos crecen dinámicamente. El segundo problema es la fragmentación resultante en el disco. La solución es la compactación, pero es una operación costosa.

5.3.3 Método de asignación mediante listas enlazadas Se mantienen los archivos como una lista enlazada de bloques en el disco. Las entradas en el directorio sólo tienen que guardar un puntero al primer bloque del disco asignado al archivo. Escribir en el archivo supone coger uno de los bloques libres y añadirlo al final de la lista. Esta técnica no causa fragmentación externa. El problema principal es el acceso aleatorio a un archivo que es extremadamente lento.

5.3.4 Método de asignación mediante indexación Una alternativa a las listas enlazadas es colocar los índices a los bloques de los archivos en una tabla de índices. El directorio contiene la dirección del bloque donde están los índices a los bloques de datos del archivo. Todo el bloque está disponible para los datos y se soporta con la misma eficacia el acceso aleatorio y el secuencial. Aunque presenta pérdida de espacio, hay una solución, utilizar sistemas de indexación de varios niveles.

Gestión del sistema de archivos |7 5.3.5 Algunos aspectos de diseño Un sistema de archivos tiene dos problemas de diseño. Por una parte hay que definir cómo verá el usuario al sistema de archivos. Y se tienen que crear los algoritmos y las estructuras de datos que relacionan al sistema de archivos lógicos con el dispositivo físico de almacenamiento.

Por otra parte, el sistema de archivos se puede considerar compuesto por varios niveles: - El nivel más bajo consiste en los dispositivos físicos de control de las transferencias de información entre la memoria y el disco - El siguiente nivel es el sistema básico de archivos, que usa las características del nivel anterior para leer y escribir bloques al y desde el disco. - La indicación de os bloques que tiene que leer o escribir el sistema básico de archivos lo hace un módulo de organización de archivos. - La estructura de directorios la conoce el sistema de archivos lógicos. Los directorios se pueden tratar como archivos de forma que el módulo de organización de éstos puede leer y escribir los directorios. - Por último se tendrían los programas de aplicaciones. Otro aspecto que hay que cuidar es el control de acceso.

5.3.6 Compartición de archivos Un archivo o un directorio compartido no es lo mismo que dos copias del archivo. La compartición de archivos se puede realizar de distintas formas. Una de las más comunes consiste en tener una pequeña estructura de datos, el nodo-i, asociada al propio archivo, de forma que los directorios apuntarían al nodo-i correspondiente. Mediante enlaces simbólicos. Se crea un nuevo archivo que contiene solamente la ruta de acceso al archivo al que se quiere enlazar. Sólo el propietario verdadero del archivo tiene un apuntador al nodo-i. Los usuarios enlazados al archivo tienen nombres de rutas de acceso y no apuntadores al nodo-i. Cuando el propietario elimina el archivo este se destruye, y los posteriores intentos de otros usuarios de acceder a él fracasarán. El inconveniente de los enlaces simbólicos es su alto coste.

5.4 Cachés de disco Como consecuencia de los diferentes tiempos de acceso entre la memoria principal y la secundaria, muchos sistemas operativos han sido diseñados para reducir el número necesario de accesos. Una de las técnicas más comunes son las cachés de disco. La idea es mantener un depósito de copias de bloques del disco en la memoria principal. Uno de los algoritmos más comunes para la administración de la caché es verificar todas las solicitudes de lectura/escritura para saber si el bloque solicitado se encuentra en la caché. Cuando se tiene que cargar un bloque en una caché totalmente ocupada se pueden utilizar algoritmos tipo FIFO, LRU, etc. Una de las dificultades de uso de las cachés surge en las peticiones de escritura al disco, ya que se si la escritura se hace en la caché y posteriormente se hace realmente en el disco, se pueden presentar situaciones de inconsistencia o corrupción de archivos si entre ambas escrituras se produce un fallo del sistema. En Unix se vacía la caché a intervalos periódicos mediante una llamada al sistema (sync), que obliga a todos los bloques modificados a actualizarse en el disco. Otra técnica es la utilización de cachés de escritura directa, en este caso los bloques modificados se escriben inmediatamente en el disco. Con esta solución disminuye el rendimiento.

Gestión del sistema de archivos |8 El uso de la caché supone una gestión más compleja en el acceso a los archivos de los discos y presenta además el peligro potencial de las inconsistencias o corrupciones indicadas, pero estos inconvenientes quedan compensados por sus ventajas, entre las que se encuentran: a) Mejora del tiempo efectivo de acceso al disco y del tiempo de respuesta de las aplicaciones b) Eliminación de algunos accesos al disco, puesto que mientras los bloques están en la caché pueden ser leídos y escritos varias veces antes de actualizarse en el disco. c) En la utilización de discos compartidos en red supone una gran reducción de la carga en el servidor de archivos y en la res, ya que los archivos de los discos compartidos pueden ser capturados en caché.

5.5 Seguridad y protección 5.5.1 Integridad del sistema de archivos Los problemas del sistema de archivos pueden venir por el uso de bloques del disco que están en mal estado. Se puede solventar conociendo cuales son los bloques defectuosos. Las inconsistencias en el SO pueden ocurrir por otras causas: si el sistema falla en la mitad de una operación de lectura, modificación y escritura de un bloque… Los problemas usuales de inconsistencia: a) Que un bloque aparezca en la lista de bloques usados y bloques libres. La solución es eliminarlo de la lista de bloques libres. b) Que un bloque no aparezca en ninguna lista. La solución es añadirlo a la lista de bloques libres. c) Que un bloque esté repetido en la lista de bloques libres. La solución es reconstruir la lista de bloques libres, con una entrada para cada bloque libre. d) Que un bloque esté asignado a dos o más archivos. Si se elimina uno de los archivos se presenta la situación a), o si se eliminan los dos la c). La solución es que se asigne un bloque libre a un archivo y se copie el contenido del bloque que estaba asignado a los dos. Suele haber utilidades del SO que las detectan y, si nos extremadamente graves, las pueden corregir. La forma más fácil de realizar copias de seguridad es haciendo volcados periódicos de todo el sistema de archivos. Otra forma es mediante los volcados incrementales. Sólo se transfieren aquellos archivos que han sido modificados desde la última vez que se hizo un volcado de seguridad. La principal desventaja de los volcados incrementales es la cantidad de datos que se generan y la complejidad del procedimiento de restauración.

5.5.2 Ataques a la integridad y seguridad del sistema de archivos El objetivo de la seguridad es prevenir y eliminar las amenazas de intrusos. La penetración en un sistema informático se puede hacer de diferentes formas y por diversos medios: a) La utilización por parte del intruso de la cuenta de un usuario legítimo. Cuando el usuario legítimo deja una sesión abierta en un terminal, u obteniendo la contraseña de un usuario. b) La ejecución de “caballos de Troya”, frecuentemente destinada a obtener datos o derechos de acceso del usuario. El intruso crea un programa falso de login para conocer la contraseña. c) Gusanos y virus informáticos. El virus es parte del código de un programa, que infectará a otros programas copiándose. Por lo general, también realiza actividades dañinas, como eliminar archivos o corromper los bloques de arranque del disco. El

Gestión del sistema de archivos |9 gusano es un programa en si mismo. Causa graves problemas al sistema debido a que carga en exceso al computador. d) La inspección del sistema de archivos. Hay sistemas que permiten por defecto leer los archivos a todos los usuarios.

5.5.3 Principios de diseño de sistemas seguros 1) El diseño del sistema debe ser público. Los algoritmos pueden ser conocidos, pero las claves deben ser secretas. 2) El estado predefinido es el de no acceso. Los derechos de acceso deben ser adquiridos sólo con permiso explícito. 3) Verificar la autorización actual. Cada petición de acceso a un objeto debe conllevar la comprobación de la autorización. 4) Mínimos privilegios. Cada proceso debe utilizar el mínimo grupo de de privilegios para completar su tarea. 5) Mecanismo simples e integrados. Un diseño tan sencillo como sea posible facilita la verificación y corrección de las implementaciones. 6) Psicológicamente aceptable. Debe ser fácil de usar de forma que sea aplicado correctamente y no sea rechazado por los usuarios.

5.5.4 Identificación de usuarios Para que un usuario acceda al sistema, debe ser validado por el mismo. La validación se basa en: 1) Posesión de un secreto (contraseña). 2) Posesión de un artefacto (tarjetas magnéticas, llaves…). 3) Uso de alguna característica fisiológica o de comportamiento del usuario (huellas dactilares, patrones de voz…).

5.6 Mecanismos de protección y control de acceso La necesidad de compartir objetos tanto en memoria principal como en la memoria secundaria motivó que los mecanismos de acceso se hicieran más complejos. Hay que distinguir entre política de protección y mecanismo de protección. Los mecanismos dicen como se hará algo, mientras que la política dice qué se hará.

5.6.1 Dominios de protección Un proceso sólo debe poder acceder a aquellos recursos para los cuales está autorizado y que necesita en ese momento para completar su tarea (principio de la necesidad de saber). Cada proceso trabaja dentro de un dominio, el cual especifica los recursos a los cuales puede tener acceso. Cada dominio define un conjunto de objetos y las operaciones que se les pueden aplicar.

5.6.2 Matriz de acceso Las relaciones entre dominios y objetos se pueden representar con una matriz (matriz de acceso). Las filas de la matriz representan dominios y las columnas objetos. El problema es como realizar de forma eficaz la matriz. Generalmente es una matriz dispersa, con muchos huecos vacíos. Por ello, una forma sencilla de realizarla es mediante una tabla global, consistente en tripletas ordenadas (dominio, objeto, derechos). Lo malo es que la tabla suele ser grande y no se puede conservar en memoria principal, por lo que requiere operaciones de E/S. Hay dos métodos prácticos, almacenar la matriz por columnas (lista de accesos) o por filas (lista de capacidades).

G e s t i ó n d e l s i s t e m a d e a r c h i v o s | 10 5.6.3 Lista de accesos A cada objeto se le asocia una lista ordenada con todos los dominios que pueden tener acceso al objeto y la forma de dicho acceso. El principal inconveniente es el retardo que se provoca con la búsqueda para verificar la autoridad de un sujeto para acceder al objeto solicitado. Para evitar búsquedas largas, algunos sistemas dividen a los usuarios en grupos y sólo almacenan los derechos de acceso de los grupos.

5.6.4 Lista de capacidades A cada dominio se le asocia una lista de objetos a los cuales puede tener acceso, junto con una indicación de las operaciones permitidas sobre cada objeto. Las capacidades se propusieron como un tipo de apuntador seguro para satisfacer la necesidad de protección de recursos en los sistemas multiprogramados. Nunca se permite que una capacidad se mueva al espacio de direcciones accesibles por un proceso de un usuario. Manteniendo las capacidades seguras, los objetos a los que protegen también están seguros frente a un acceso no autorizado. Uno de los inconvenientes es la revocación de acceso a un objeto, ya que el sistema tiene que determinar todas las capacidades existentes para cierto objeto y eliminarlas. La forma de invalidar la capacidad es romper el enlace entre el objeto indirecto y el real.

Related Documents