La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Capítulo 8 Gestión de Archivos y Directorios Sistemas operativos: una visión aplicada.

Presentaciones similares


Presentación del tema: "Capítulo 8 Gestión de Archivos y Directorios Sistemas operativos: una visión aplicada."— Transcripción de la presentación:

1 Capítulo 8 Gestión de Archivos y Directorios Sistemas operativos: una visión aplicada

2 Sistemas operativos: una visión aplicada 1 © J. Carretero, F. García, P. de Miguel, F. Pérez Gestión de archivos y directorios Objetivos: –Entender los conceptos de fichero y directorio –Mostrar los métodos de acceso y los mecanismos de protección –Estudiar las semánticas de compartición –Comprender la estructura del sistema de ficheros Presentar las llamadas al sistema y ejemplos de programación en LINUX y Windows –Presentar distintas técnicas de gestión de archivos y directorios a nivel de diseño.

3 Sistemas operativos: una visión aplicada 2 © J. Carretero, F. García, P. de Miguel, F. Pérez Contenido Visión del usuario del sistema de archivos Archivos Directorios Servicios de archivos Servicios de directorios Sistemas de archivos El servidor de archivos Puntos a recordar

4 Sistemas operativos: una visión aplicada 3 © J. Carretero, F. García, P. de Miguel, F. Pérez Visión del usuario Visión lógica: –Archivos –Directorios –Sistemas de archivos y particiones Visión física: –Bloques o bytes ubicados en dispositivos

5 Sistemas operativos: una visión aplicada 4 © J. Carretero, F. García, P. de Miguel, F. Pérez Función principal El SF establece una correspondencia entre los archivos y los dispositivos lógicos.

6 Sistemas operativos: una visión aplicada 5 © J. Carretero, F. García, P. de Miguel, F. Pérez Características para el usuario Almacenamiento permanente de información. No desaparecen aunque se apague el computador. Conjunto de información estructurada de forma lógica según criterios de aplicación. Nombres lógicos y estructurados. No están ligados al ciclo de vida de una aplicación particular. Abstraen los dispositivos de almacenamiento físico. Se acceden a través de llamadas al sistema operativo o de bibliotecas de utilidades.

7 Sistemas operativos: una visión aplicada 6 © J. Carretero, F. García, P. de Miguel, F. Pérez El acceso a los dispositivos es: –Incómodo Detalles físicos de los dispositivos Dependiente de las direcciones físicas –No seguro Si el usuario accede a nivel físico no tiene restricciones El sistema de archivos es la capa de software entre dispositivos y usuarios. Objetivos: –Suministrar una visión lógica de los dispositivos –Ofrecer primitivas de acceso cómodas e independientes de los detalles físicos –Mecanismos de protección Sistema de archivos

8 Sistemas operativos: una visión aplicada 7 © J. Carretero, F. García, P. de Miguel, F. Pérez Contenido Visión del usuario del sistema de archivos Archivos Directorios Servicios de archivos Servicios de directorios Sistemas de archivos El servidor de archivos Puntos a recordar

9 Sistemas operativos: una visión aplicada 8 © J. Carretero, F. García, P. de Miguel, F. Pérez Archivos: visión lógica Conjunto de información relacionada. Definida por su creador. Estructura de un archivo: –Secuencia o tira de bytes (UNIX, POSIX). –Registros (de tamaño fijo o variable). Posición C1C2C3C4 Registro 1 C1 C2 C3C4 Registro 2 C1C2C3C4 Registro 3 C1C2C3C4 Registro 4 C1C2C3C4 Registro n C1 C2 C3C4 Registro 1 C1 C2 C3C4 Registro 2 C1 C2 C3C4 Registro 3 C1 C2 C3C4 Registro 4 C1 C2 C3C4 Registro n

10 Sistemas operativos: una visión aplicada 9 © J. Carretero, F. García, P. de Miguel, F. Pérez Concepto de archivo Un espacio lógico de direcciones contiguas usado para almacenar datos Tipos de archivos: –Datos: numéricos carácter binarios –Programas: código fuente archivos objetos (imagen de carga) –Documentos

11 Sistemas operativos: una visión aplicada 10 © J. Carretero, F. García, P. de Miguel, F. Pérez Atributos del archivo Nombre: la única información en formato legible por una persona. Identificación única del archivo y del usuario: descriptor interno del archivo, dueño y grupo del archivo Tipo de archivo: necesario en sistemas que proporciona distintos formatos de archivos. Tamaño del archivo: número de bytes en el archivo, máximo tamaño posible, etc. Protección: control de accesos y de las operaciones sobre archivos Información temporal: de creación, de acceso, de modificación, etc. Información de control: archivo oculto, de sistema, normal o directorio, etc.

12 Sistemas operativos: una visión aplicada 11 © J. Carretero, F. García, P. de Miguel, F. Pérez Representación del archivo La información relacionada con el archivo se mantiene en el descriptor del archivo, al que se apunta desde los directorios. Es distinto en cada sistema operativo: nodo-i, registro Windows, etc. Tipos de archivos: –Archivos normales: ASCII y binarios. –Archivos especiales: de bloques y de caracteres

13 Sistemas operativos: una visión aplicada 12 © J. Carretero, F. García, P. de Miguel, F. Pérez Ejemplos de representación

14 Sistemas operativos: una visión aplicada 13 © J. Carretero, F. García, P. de Miguel, F. Pérez Nombres de Fichero y Extensiones Extensión Significado exe, com, bin, none c, s, asm, p pas, f77 Z, z, zip gif, jpg o, obj ps, dvi, pdf txt, doc tex, roff html Programa ejecutable Código fuente en distintos lenguajes Archivos comprimidos Archivos de imágenes Archivos de texto Archivos de hipertexto para World Wide Web Archivos de entrada para formateadores de texto Archivos ASCII o binarios en formato imprimible o visible Archivos objeto, compilados pero sin montar Tiras de caracteres Longitud: fija o variable Sensibles a tipografía Extensión: obligatoria o no Los usuarios usan nombres lógicos de este estilo Los directorios relacionan nombres lógicos y descriptores internos de ficheros El sistema de ficheros trabaja con descriptores internos

15 Sistemas operativos: una visión aplicada 14 © J. Carretero, F. García, P. de Miguel, F. Pérez Estructura del fichero Ninguna - secuencia de palabras o bytes (UNIX) Estructura sencilla de registros –Líneas –Longitud fija –Longitud variable Estructuras complejas –Documentos con formato (HTML, postscript) –Fichero de carga reubicable (módulo de carga) Se puede simular estructuras de registro y complejas con una estructura plana y secuencias de control ¿Quién decide la estructura? –Interna: El sistema operativo –Externa: Las aplicaciones

16 Sistemas operativos: una visión aplicada 15 © J. Carretero, F. García, P. de Miguel, F. Pérez Distintas estructuras lógicas

17 Sistemas operativos: una visión aplicada 16 © J. Carretero, F. García, P. de Miguel, F. Pérez Archivos: visión lógica Estructura de un archivo: –Archivos de estructura compleja Archivos indexados Archivos directos o de dispersión –Ejemplo de archivo indexado: –Los archivos estructurados en registros y los archivos con estructuras complejas se pueden construir como una capa sobre la visión de tira de bytes.

18 Sistemas operativos: una visión aplicada 17 © J. Carretero, F. García, P. de Miguel, F. Pérez Estructura de archivo ejecutable LINUX

19 Sistemas operativos: una visión aplicada 18 © J. Carretero, F. García, P. de Miguel, F. Pérez Usuario: Visión lógica. Sistema operativo: visión física ligada a dispositivos. Conjunto de bloques. Posición Archivos: visión lógica y física.

20 Sistemas operativos: una visión aplicada 19 © J. Carretero, F. García, P. de Miguel, F. Pérez Archivos: visión física Bloque –Unidad de transferencia –2 n sectores –Parámetro fijo por sistema de archivos Agrupación –Unidad de asignación –2 p bloques –Aumenta la secuencialidad del archivo Descripción de la estructura física: –Bloques utilizados

21 Sistemas operativos: una visión aplicada 20 © J. Carretero, F. García, P. de Miguel, F. Pérez Descripción física en UNIX (nodo-i) Tamaño máximo del archivo: 10Sb+(Sb/4)Sb +(Sb/4) 2 Sb +(Sb/4) 3 Sb Sb el tamaño del bloque y direcciones de bloques de 4 bytes.

22 Sistemas operativos: una visión aplicada 21 © J. Carretero, F. García, P. de Miguel, F. Pérez Descripción física en MS-DOS (FAT) FAT de 12 bits 4K agrupaciones FAT de 16 bits 64K agrupaciones pep_dir dir 5 27 fiche1.txt Directorio Raíz Nombre Atrib. KB Agrup. Directorio pep_dir carta1.wp R prue.zip FAT Nombre Atrib. KB Agrup.

23 Sistemas operativos: una visión aplicada 22 © J. Carretero, F. García, P. de Miguel, F. Pérez Métodos de Acceso Acceso secuencial: lectura de los bytes del archivo en orden ascendente, empezando por el principio. –read next, write next, reset, no read after last write, … –rewind: ir al principio para buscar hacia delante –Lectura -> posición = posición + datos leídos –Dispositivos de cinta –ISAM: método de acceso secuencial indexado Acceso Directo: –read n, write n, goto n, rewrite n, read next, write next, … –n = número de bloque relativo al origen –Dispositivos: discos magnéticos

24 Sistemas operativos: una visión aplicada 23 © J. Carretero, F. García, P. de Miguel, F. Pérez Archivos: semántica de coutilización Cualquier forma de acceso tiene problemas cuando varios usuarios trabajan con el archivo simultáneamente. Semántica de coutilización: especifica el efecto de varios procesos accediendo de forma simultánea al mismo archivo y cuando se hacen efectivas las modificaciones. Tipos de semánticas: –Semántica UNIX (POSIX) Las escrituras son inmediatamente visibles para todos los procesos con el archivo abierto. Los procesos pueden compartir archivos. Si existe relación de parentesco pueden compartir el puntero. La coutilización afecta también a los metadatos.

25 Sistemas operativos: una visión aplicada 24 © J. Carretero, F. García, P. de Miguel, F. Pérez Archivos: semántica de coutilización (II) –Semántica de sesión Las escrituras que hace un proceso no son inmediatamente visibles para los demás procesos con el archivo abierto. Cuando se cierra el archivo los cambios se hacen visibles para las futuras sesiones. Un archivo puede asociarse temporalmente a varias imágenes. –Semántica de versiones Las actualizaciones se hacen sobre copias con nº versión. Sólo son visibles cuando se consolidan versiones. Sincronización explícita si se requiere actualización inmediata –Semántica de archivos inmutables Una vez creado el archivo sólo puede ser compartido para lectura y no cambia nunca

26 Sistemas operativos: una visión aplicada 25 © J. Carretero, F. García, P. de Miguel, F. Pérez Contenido Visión del usuario del sistema de archivos Archivos Directorios Servicios de archivos Servicios de directorios Sistemas de archivos El servidor de archivos Puntos a recordar

27 Sistemas operativos: una visión aplicada 26 © J. Carretero, F. García, P. de Miguel, F. Pérez Concepto de directorio Objeto que relaciona de forma unívoca un nombre de usuario de archivo con su descriptor interno Organizan y proporcionan información sobre la estructuración de los sistemas de archivos Una colección de nodos que contienen información acerca de los archivos

28 Sistemas operativos: una visión aplicada 27 © J. Carretero, F. García, P. de Miguel, F. Pérez Directorios: visión lógica Esquema jerárquico. Cuando se abre un archivo el SO busca el nombre en la estructura de directorios. Operaciones sobre un directorio: –Crear (insertar) y borrar (eliminar) directorios. –Abrir y cerrar directorios. –Renombrar directorios. –Leer entradas de un directorio. –Montar (combinar) La organización jerárquica de un directorio –Simplifica el nombrado de archivos (nombres únicos) –Proporciona una gestión de la distribución => agrupar archivos de forma lógica (mismo usuario, misma aplicación)

29 Sistemas operativos: una visión aplicada 28 © J. Carretero, F. García, P. de Miguel, F. Pérez Ejemplo: explorador de Windows

30 Sistemas operativos: una visión aplicada 29 © J. Carretero, F. García, P. de Miguel, F. Pérez Estructura de los directorios Tanto la estructura del directorio como los archivos residen en discos Los directorios se suelen implementar como archivos Copias de respaldo en cintas, por seguridad Información en un directorio: nombre, tipo, dirección, longitud máxima y actual, tiempos de acceso y modificación, dueño, etc. Hay estructuras de directorio muy distintas. La información depende de esa estructura. Dos alternativas principales: –Almacenar atributos de archivo en entrada directorio –Almacenar, con datos archivo en una estructura distinta. Esta es mejor.

31 Sistemas operativos: una visión aplicada 30 © J. Carretero, F. García, P. de Miguel, F. Pérez Ejemplo de entradas de directorio

32 Sistemas operativos: una visión aplicada 31 © J. Carretero, F. García, P. de Miguel, F. Pérez Organización del directorio Eficiencia: localizar un archivo rápidamente Nombrado: conveniente y sencillo para los usuarios –Dos usuarios pueden tener el mismo nombre para archivos distintos –Los mismos archivos pueden tener nombres distintos –Nombres de longitud variable Agrupación: agrupación lógica de los archivos según sus propiedades (por ejemplo: programas Pascal, juegos, etc.) Estructurado: operaciones claramente definidas y ocultación Sencillez: la entrada de directorio debe ser lo más sencilla posible.

33 Sistemas operativos: una visión aplicada 32 © J. Carretero, F. García, P. de Miguel, F. Pérez Directorio de un nivel Un único directorio para todos los usuarios Problemas de nombrado y agrupación

34 Sistemas operativos: una visión aplicada 33 © J. Carretero, F. García, P. de Miguel, F. Pérez Directorio de dos niveles Un directorio por cada usuario Camino de acceso automático o manual El mismo nombre de archivo para varios usuarios Búsqueda eficiente, pero problemas de agrupación

35 Sistemas operativos: una visión aplicada 34 © J. Carretero, F. García, P. de Miguel, F. Pérez Directorio con estructura de árbol Búsqueda eficiente y agrupación Nombres relativos y absolutos -> directorio de trabajo

36 Sistemas operativos: una visión aplicada 35 © J. Carretero, F. García, P. de Miguel, F. Pérez Directorio con estructura de árbol Los nombres absolutos contienen todo el camino Los nombres relativos parten del directorio de trabajo o actual Cambio de directorio: –cd /spell/mail/prog –cd prog Borrar un archivo: rm Crear un subdirectorio: mkdir Ejemplo: –cd /spell/mail –mkdir count –ls /spell/mail/count Borrar un subdirectorio: rm -r mail

37 Sistemas operativos: una visión aplicada 36 © J. Carretero, F. García, P. de Miguel, F. Pérez Directorio de grafo acíclico I Tienen archivos y subdirectorios compartidos Este concepto no existe en Windows

38 Sistemas operativos: una visión aplicada 37 © J. Carretero, F. García, P. de Miguel, F. Pérez Directorio de grafo acíclico II link: Un archivo con varios nombres -> control de enlaces –un único archivo con contador enlaces en descriptor (e. Físicos) –archivos nuevos con el nombre destino dentro (e. simbólicos) Borrado de enlaces: –a) decrementar contador; si 0 borrar archivo –b) recorrer los enlaces y borrar todos –c) borrar únicamente el enlace y dejar los demás Problema grave: existencia de bucles en el árbol. Soluciones: –Permitir sólo enlaces a archivos, no subdirectorios –Algoritmo de búsqueda de bucle cuando se hace un enlace Limitación de implementación en UNIX: sólo enlaces físicos dentro del mismo sistema de archivos.

39 Sistemas operativos: una visión aplicada 38 © J. Carretero, F. García, P. de Miguel, F. Pérez Nombres jerárquicos Nombre absoluto: especificación del nombre respecto a la raíz (/ en LINUX, \ en Windows). Nombre relativo: especificación del nombre respecto a un directorio distinto del raíz –Ejemplo: (Estamos en /users/) miguel/claves –Relativos al dir. de trabajo o actual: aquel en el se está al indicar el nombre relativo. En Linux se obtiene con pwd Directorios especiales: –. Directorio de trabajo. Ejemplo: cp / users/miguel/claves. –.. Directorio padre. Ejemplo: ls.. –Directorio HOME : el directorio base del usuario

40 Sistemas operativos: una visión aplicada 39 © J. Carretero, F. García, P. de Miguel, F. Pérez Interpretación de nombres en LINUX. I

41 Sistemas operativos: una visión aplicada 40 © J. Carretero, F. García, P. de Miguel, F. Pérez Interpretar /users/miguel/claves –Traer a memoria entradas archivo con nodo-i 2 –Se busca dentro users y se obtiene el nodo-i 342 –Traer a memoria entradas archivo con nodo-i 342 –Se busca dentro miguel y se obtiene el nodo-i 256 –Traer a memoria entradas archivo con nodo-i 256 –Se busca dentro claves y se obtiene el nodo-i 758 –Se lee el nodo-i 758 y ya se tienen los datos del archivo ¿Cuándo parar? –Se ha encontrado el nodo-i del archivo –No se ha encontrado y no hay más subdirectorios –Estamos en un directorio y no contiene la siguiente componente del nombre (por ejemplo, miguel). Interpretación de nombres en LINUX. II

42 Sistemas operativos: una visión aplicada 41 © J. Carretero, F. García, P. de Miguel, F. Pérez Jerarquía de directorios ¿Árbol único de directorios? –Por dispositivo lógico en Windows (c:\users\miguel\claves, j:\pepe\tmp,...) –Para todo el sistema en UNIX (/users/miguel/claves, /pepe/tmp,...). Hacen falta servicios para construir la jerarquía: mount y umount. –mount /dev/hda /users –umount /users Ventajas: imagen única del sistema y ocultan el tipo de dispositivo Desventajas: complican la traducción de nombres, problemas para enlaces físicos entre archivos

43 Sistemas operativos: una visión aplicada 42 © J. Carretero, F. García, P. de Miguel, F. Pérez Montado de Sistemas de archivos o particiones / /lib /bin/usr / /d1/d2/d3 /d3/f2/d3/f1 / /lib/bin/usr /usr/d1 /usr/d3 /usr/d3/f2/usr/d3/f1 Volumen raiz (/dev/hd0) Volumen sin montar (/dev/hd1) mount /dev/hd1 /usr Volumen montado /usr/d2

44 Sistemas operativos: una visión aplicada 43 © J. Carretero, F. García, P. de Miguel, F. Pérez Contenido Visión del usuario del sistema de archivos Archivos Directorios Servicios de archivos Servicios de directorios Sistemas de archivos El servidor de archivos Puntos a recordar

45 Sistemas operativos: una visión aplicada 44 © J. Carretero, F. García, P. de Miguel, F. Pérez Operaciones genéricas sobre archivos creat: crea un archivo con un nombre y protección y devuelve un descriptor delete: borra el archivo con un nombre open: abre un archivo con nombre para una(s) operación(es) y devuelve un descriptor close: cierra un archivo abierto con un descriptor read: lee datos de un archivo abierto, usando su descriptor, a un almacén en memoria write: escribe datos a un archivo abierto, usando su descriptor, desde un almacén en memoria lseek: mueve el apuntador a relativo_a+ desplazamiento ioctl: permite manipular los atributos de un archivo

46 Sistemas operativos: una visión aplicada 45 © J. Carretero, F. García, P. de Miguel, F. Pérez Servicios POSIX para archivos Visión lógica: tira secuencial de bytes Apuntador de posición a partir del cual se efectúan las operaciones Descriptores de archivos: enteros de 0 a 64K Predefinidos (describir programas independientes de dispositivos): –0: entrada estándar –1: salida estándar –2: salida de error Fork: duplicación de BCP, pero compartición de tabla de archivos. Servicios consulta y modificación atributos. Protección: –dueñogrupomundo –rwxrwxrwx Ejemplos: 755 indica rwxr-xr-x Ejemplo de programación en el libro (Programa 8.1)

47 Sistemas operativos: una visión aplicada 46 © J. Carretero, F. García, P. de Miguel, F. Pérez Archivos, directorios y servicios en POSIX (UNIX) Tipos de archivo: –Normales –Directorios –Especiales Nombres de archivo y directorio: –Nombre completo (empieza por / ) /usr/include/stdio.h –Nombre relativo al directorio actual (no empieza por / ) stdio.h asumiendo que /usr/include es el directorio actual. –La entradas. y.. pueden utilizarse para formar rutas de acceso../include/stdio.h

48 Sistemas operativos: una visión aplicada 47 © J. Carretero, F. García, P. de Miguel, F. Pérez creat. Crea un archivo Servicio: #include int creat(char *name, mode_t mode); Argumentos: –name Nombre de archivo –mode Bits de permiso para el archivo Devuelve: – Devuelve un descriptor de archivo ó -1 si error.

49 Sistemas operativos: una visión aplicada 48 © J. Carretero, F. García, P. de Miguel, F. Pérez creat. Crea un archivo (II) Descripción: –El archivo se abre para escritura. –Si no existe crea un archivo vació. UID_dueño = UID_efectivo GID_dueño = GID_efectivo –Si existe lo trunca sin cambiar los bits de permiso. Ejemplos: fd = creat("datos.txt", 0751); fd = open("datos.txt", O_WRONLY | O_CREAT | O_TRUNC, 0751);

50 Sistemas operativos: una visión aplicada 49 © J. Carretero, F. García, P. de Miguel, F. Pérez unlink. Borra un archivo Servicio: #include int unlink(const char* path); Argumentos: –path nombre del archivo Devuelve: –Devuelve 0 ó -1 si error. Descripción: –Decrementa el contador de veces que el archivo está abierto. Si el contador es 0, borra el archivo y libera sus recursos.

51 Sistemas operativos: una visión aplicada 50 © J. Carretero, F. García, P. de Miguel, F. Pérez open. abre un archivo Servicio: #include int open(char *name, int flag,...); Argumentos: –name puntero al nombre del archivo –flags opciones de apertura: O_RDONLY Sólo lectura O_WRONLY Sólo escritura O_RDWR Lectura y escritura O_APPEND El puntero de acceso se desplaza al final del archivo abierto O_CREAT Si no existe no tiene efecto. Si no existe lo crea O_TRUNC Trunca si se abre para escritura

52 Sistemas operativos: una visión aplicada 51 © J. Carretero, F. García, P. de Miguel, F. Pérez open. Abre un archivo II Devuelve: –Un descriptor de archivo ó -1 si hay error. Ejemplos: fd = open("/home/juan/datos.txt"); fd = open("/home/juan/datos.txt", O_WRONLY | O_CREAT | O_TRUNC, 0750);

53 Sistemas operativos: una visión aplicada 52 © J. Carretero, F. García, P. de Miguel, F. Pérez close. Cierra un descriptor de archivo Servicio: int close(int fd); Argumentos: –fd descriptor de archivo Devuelve: –Cero ó -1 si error. Descripción: –El proceso pierde la asociación a un archivo.

54 Sistemas operativos: una visión aplicada 53 © J. Carretero, F. García, P. de Miguel, F. Pérez read. Lectura de un archivo Servicio: #include ssize_t read(int fd, void *buf, size_t n_bytes); Argumentos: –fd descriptor de archivo –buf zona donde almacenar los datos –n_bytes número de bytes a leer Devuelve: –Número de bytes realmente leídos ó -1 si error Descripción: –Transfiere n_bytes. –Puede leer menos datos de los solicitados si se rebasa el fin de archivo o se interrumpe por una señal. –Después de la lectura se incrementa el puntero del archivo con el número de bytes realmente transferidos.

55 Sistemas operativos: una visión aplicada 54 © J. Carretero, F. García, P. de Miguel, F. Pérez write. Escritura de un archivo Servicio: #include ssize_t write(int fd, void *buf, size_t n_bytes); Argumentos: –fd descriptor de archivo –buf zona de datos a escribir –n_bytes número de bytes a escribir Devuelve: –Número de bytes realmente escritos ó -1 si error Descripción: –Transfiere n_bytes. –Puede escribir menos datos de los solicitados si se rebasa el tamaño máximo de un archivo o se interrumpe por una señal. –Después de la escritura se incrementa el puntero del archivo con el número de bytes realmente transferidos. –Si se rebasa el fin de archivo el archivo aumenta de tamaño.

56 Sistemas operativos: una visión aplicada 55 © J. Carretero, F. García, P. de Miguel, F. Pérez lseek. Modifica el valor del puntero de posición Servicio: #include off_t lseek(int fd, off_t offset, int whence); Argumentos: –fd Descriptor de archivo –offset desplazamiento –whence base del desplazamiento Devuelve: –La nueva posición del puntero ó -1 si error. Descripción: –Coloca el puntero de acceso asociado a fd –La nueva posición se calcula: SEEK_SET posición = offset SEEK_CUR posición = posición actual + offset SEEK_END posición = tamaño del archivo + offset

57 Sistemas operativos: una visión aplicada 56 © J. Carretero, F. García, P. de Miguel, F. Pérez fnctl. modificación de atributos de un archivo Servicio: #include int fnctl(int fildes, int cmd /* arg*/...); Argumentos: –fildes descriptor de archivos –cmd mandato para modificar atributos, puede haber varios. Devuelve: –0 para éxito ó -1 si error Descripción: –Modifica los atributos de un archivo abierto.

58 Sistemas operativos: una visión aplicada 57 © J. Carretero, F. García, P. de Miguel, F. Pérez dup. Duplica un descriptor de archivo Servicio: int dup(int fd); Argumentos: –fd descriptor de archivo Devuelve: –Un descriptor de archivo que comparte todas las propiedades del fd ó -1 si error. Descripción: –Crea un nuevo descriptor de archivo que tiene en común con el anterior: Accede al mismo archivo Comparte el mismo puntero de posición El modo de acceso es idéntico. –El nuevo descriptor tendrá el menor valor numérico posible.

59 Sistemas operativos: una visión aplicada 58 © J. Carretero, F. García, P. de Miguel, F. Pérez ftruncate. Asigna espacio a un archivo Servicio: #include int ftruncate(int fd, off_t length); Argumentos: –fd descriptor de archivo –length nuevo tamaño del archivo Devuelve: –Devuelve 0 ó -1 si error. Descripción: –El nuevo tamaño del archivo es length. Si length es 0 se trunca el archivo.

60 Sistemas operativos: una visión aplicada 59 © J. Carretero, F. García, P. de Miguel, F. Pérez stat. Obtiene información sobre un archivo Servicio: #include int stat(char *name, struct stat *buf); int fstat(int fd, struct stat *buf); Argumentos: –name nombre del archivo –fd descriptor de archivo –buf puntero a un objeto de tipo struct stat donde se almacenará la información del archivo. Devuelve: –Cero ó -1 si error

61 Sistemas operativos: una visión aplicada 60 © J. Carretero, F. García, P. de Miguel, F. Pérez stat. Obtiene información sobre un archivo Descripción: –Obtiene información sobre un archivo y la almacena en una estructura de tipo struct stat : struct stat { mode_t st_mode; /* modo del archivo */ ino_t st_ino; /* número del archivo */ dev_t st_dev; /* dispositivo */ nlink_t st_nlink; /* número de enlaces */ uid_t st_uid; /* UID del propietario */ gid_t st_gid; /* GID del propietario */ off_t st_size; /* número de bytes */ time_t st_atime; /* último acceso */ time_t st_mtime; /* última modificacion */ time_t st_ctime; /* último modificacion de datos */ };

62 Sistemas operativos: una visión aplicada 61 © J. Carretero, F. García, P. de Miguel, F. Pérez stat. Obtiene información sobre un archivo Comprobación del tipo de archivo aplicado a st_mode : S_ISDIR(s.st_mode) Cierto si directorio S_ISCHR(s.st_mode) Cierto si especial de caracteres S_ISBLK(s.st_mode) Cierto si especial de bloques S_ISREG(s.st_mode) Cierto si archivo normal S_ISFIFO(s.st_mode) Cierto si pipe o FIFO

63 Sistemas operativos: una visión aplicada 62 © J. Carretero, F. García, P. de Miguel, F. Pérez utime. Modifica las fecha de último acceso y modificación Servicio: #include int utime(char *name, struct utimbuf *times); Argumentos: –name nombre del archivo –times estructura con las fechas de último acceso y modificación. time_t actime fecha de acceso time_t mctime fecha de modificación Devuelve: –Devuelve 0 ó -1 si error Descripción: –Cambia las fechas de último acceso y última modificación según los valores de la estructura struct utimbuf

64 Sistemas operativos: una visión aplicada 63 © J. Carretero, F. García, P. de Miguel, F. Pérez Ejemplo. Copia un archivo en otro #include #define BUFSIZE512 main(int argc, char **argv) { int fd_ent, fd_sal; char buffer[BUFSIZE]; int n_read;

65 Sistemas operativos: una visión aplicada 64 © J. Carretero, F. García, P. de Miguel, F. Pérez Ejemplo. Copia un archivo en otro (II) /* abre el archivo de entrada */ fd_ent = open(argv[1], O_RDONLY); if (fd_ent < 0) { perror("open"); exit(-1); } /* crea el archivo de salida */ fd_sal = creat(argv[2], 0644); if (fd_sal < 0) { close(fd_ent); perror("open"); exit(-1); }

66 Sistemas operativos: una visión aplicada 65 © J. Carretero, F. García, P. de Miguel, F. Pérez Ejemplo. Copia un archivo en otro (III) /* bucle de lectura del archivo de entrada */ while ((n_read = read(fd_ent, buffer, BUFSIZE)) > 0) { /* escribir el buffer al archivo de salida */ if (write(fd_sal, buffer, n_read) < n_read) { perror("write2); close(fd_ent); close(fd_sal); exit(-1); } if (n_read < 0) { perror("read"); close(fd_ent); close(fd_sal); exit(-1); } close(fd_ent); close(fd_sal); exit(0); }

67 Sistemas operativos: una visión aplicada 66 © J. Carretero, F. García, P. de Miguel, F. Pérez Ejemplo: redirecciones Programa que ejecuta ls > archivo void main(void) { pid_t pid; int status; int fd; fd = open("archivo", O_WRONLY|O_CREAT|O_TRUNC, 0644); if (fd < 0) { perror("open"); exit(-1); } pid = fork();

68 Sistemas operativos: una visión aplicada 67 © J. Carretero, F. García, P. de Miguel, F. Pérez Ejemplo: redirecciones (II) switch(pid) { case -1: /* error */ perror("fork"); exit(-1); case 0: /* proceso hijo ejecuta "ls" */ close(STDOUT_FILENO); /* cierra la salida estandar */ dup(fd); /* duplica el descriptor del archivo */ close(fd); execlp("ls","ls",NULL); perror("execlp"); exit(-1); default: /* proceso padre */ close(fd); /* cierra el archivo */ while (pid != wait(&status)); } exit(0); }

69 Sistemas operativos: una visión aplicada 68 © J. Carretero, F. García, P. de Miguel, F. Pérez Servicios Win32 para archivos Visión lógica: tira secuencial de bytes Apuntador de posición a partir del cual se efectúan las operaciones Archivo: objeto del núcleo de Windows. Se devuelve un manejador ( handle ) al mismo. Apertura: creación objeto en memoria y de su manejador. –Operaciones permitidas –Atributos –Apuntador de posición –Parte de los datos del principio del archivo... Operaciones: manipulación de archivo y sus atributos, manipulación de manejadores, etc. Además, hay operaciones de más alto nivel ( copy,...) Todas las llamadas con muchos parámetros para definir especificidades Protección: descriptor de seguridad con ACL Ejemplo de programación: Programas 8.2 y 8.3 del libro

70 Sistemas operativos: una visión aplicada 69 © J. Carretero, F. García, P. de Miguel, F. Pérez Crear y abrir un archivo Servicio: HANDLE CreateFile(LPCSTR lpFileName, DWORD dwDesiredAccess,DWORD dwShareMode, LPVOID lpSecurityAttributes, DWORD CreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); Descripción: –Creación, o apertura, de un archivo con nombre lpFileName. –Modo de acceso dwDesiredAccess ( GENERIC_READ, GENERIC_WRITE ) –Modo de compartición dwShareMode ( NO_SHARE, SHARE_READ, SHARE_WRITE ). –lpSecurityAttributes define los atributos de seguridad para el archivo, cuya estructura se comentará en el Capítulo de Seguridad y Protección.

71 Sistemas operativos: una visión aplicada 70 © J. Carretero, F. García, P. de Miguel, F. Pérez Cerrar y Borrar un archivo Servicio: BOOL CloseHandle(HANDLE hObject); Descripción: –Si la llamada termina correctamente, se liberan los posibles cerrojos sobre el archivo fijados por el proceso, se invalidan las operaciones pendientes y se decrementa el contador del manejador del objeto. –Si el contador del manejador es cero, se liberan los recursos ocupados por el archivo. Devuelve TRUE en caso de éxito o FALSE en caso de error. Servicio: BOOLDeleteFile(LPCTSTR lpszFileName); Descripción: –El nombre del archivo a borrar se indica en lpszFileName. –Devuelve TRUE en caso de éxito o FALSE en caso de error.

72 Sistemas operativos: una visión aplicada 71 © J. Carretero, F. García, P. de Miguel, F. Pérez Leer y escribir datos a un archivo Servicio: BOOL ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPVOID lpOverlapped); BOOL WriteFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPVOID lpOverlapped); Descripción: –Transferencia de datos desde/hacia el archivo indicado por el manejador hFile. –La posición de memoria desde donde copiar los datos se especifica en el argumento lpBuffer –El número de bytes a escribir se especifica en lpNumberOfBytesToWrite.

73 Sistemas operativos: una visión aplicada 72 © J. Carretero, F. García, P. de Miguel, F. Pérez Contenido Visión del usuario del sistema de archivos Archivos Directorios Servicios de archivos Servicios de directorios Sistemas de archivos El servidor de archivos Puntos a recordar

74 Sistemas operativos: una visión aplicada 73 © J. Carretero, F. García, P. de Miguel, F. Pérez Servicios POSIX para directorios Visión lógica: tabla de entradas nombre lógico, nodo-i Cada entrada tiene la siguiente estructura: Struct dirent { char *d_name; /* nombre archivo */... } Gestión complicada porque los nombres de archivo tienen longitud variable. Servicios POSIX: gestión de directorios y de la tabla Ejemplos de programación en el libro (Programas 8.4 y 8.5)

75 Sistemas operativos: una visión aplicada 74 © J. Carretero, F. García, P. de Miguel, F. Pérez mkdir. Crea un directorio Servicio: #include int mkdir(const char *name, mode_t mode); Argumentos: –name nombre del directorio –mode bits de protección Devuelve: –Cero ó -1 si error Descripción: –Crea un directorio de nombre name. –UID_dueño = UID_efectivo –GID_dueño = GID_efectivo

76 Sistemas operativos: una visión aplicada 75 © J. Carretero, F. García, P. de Miguel, F. Pérez rmdir. Borra un directorio Servicio: #include int rmdir(const char *name); Argumentos: –name nombre del directorio Devuelve: –Cero ó -1 si error Descripción: –Borra el directorio si está vacío. –Si el directorio no está vacío no se borra.

77 Sistemas operativos: una visión aplicada 76 © J. Carretero, F. García, P. de Miguel, F. Pérez opendir. Abre un directorio Servicio: #include DIR *opendir(char *dirname); Argumentos: –dirname puntero al nombre del directorio Devuelve: –Un puntero para utilizarse en readdir() o closedir(). NULL si hubo error. Descripción: –Abre un directorio como una secuencia de entradas. Se coloca en el primer elemento.

78 Sistemas operativos: una visión aplicada 77 © J. Carretero, F. García, P. de Miguel, F. Pérez closedir. Cierra un directorio Servicio: #include int closedir(DIR *dirp); Argumentos: –dirp puntero devuelto por opendir(). Devuelve: –Cero ó -1 si error. Descripción: –Cierra la asociación entre dirp y la secuencia de entradas de directorio.

79 Sistemas operativos: una visión aplicada 78 © J. Carretero, F. García, P. de Miguel, F. Pérez readdir. Lectura de entradas de directorio Servicio: #include struct dirent *readdir(DIR *dirp); Argumentos: –dirp puntero retornado por opendir(). Devuelve: –Un puntero a un objeto del tipo struct dirent que representa una entrada de directorio o NULL si hubo error. Descripción: –Devuelve la siguiente entrada del directorio asociado a dirp. –Avanza el puntero a la siguiente entrada. –La estructura es dependiente de la implementación. Debería asumirse que tan solo se obtiene un miembro: char *d_name.

80 Sistemas operativos: una visión aplicada 79 © J. Carretero, F. García, P. de Miguel, F. Pérez rewindir. Sitúa el puntero de directorio Servicio: #include void rewindir(DIR *dirp); Argumentos: –dirp puntero devuelto por opendir() –Descripción: –Sitúa el puntero de posición dentro del directorio en la primera entrada.

81 Sistemas operativos: una visión aplicada 80 © J. Carretero, F. García, P. de Miguel, F. Pérez link. Crea una entrada de directorio Servicio: #include int link(const char *existing, const char *new); int symlink(const char *existing, const char *new); Argumentos: –existing nombre del archivo existente. –new nombre de la nueva entrada que será un enlace al archivo existente. Devuelve: –Cero ó -1 si error. Descripción: –Crea un nuevo enlace, físico o simbólico, para un archivo existente. –El sistema no registra cuál es el enlace original. –existing no debe ser el nombre de un directorio salvo que se tenga privilegio suficiente y la implementación soporte el enlace de directorios.

82 Sistemas operativos: una visión aplicada 81 © J. Carretero, F. García, P. de Miguel, F. Pérez unlink. Elimina una entrada de directorio Servicio: #include int unlink(char *name); Argumentos: –name nombre de archivo Devuelve: –Cero ó -1 si error Descripción: –Elimina la entrada de directorio y decrementa el número de enlaces del archivo correspondiente. –Cuando el número de enlaces es igual a cero y ningún proceso lo mantiene abierto, se libera el espacio ocupado por el archivo y el archivo deja de ser accesible.

83 Sistemas operativos: una visión aplicada 82 © J. Carretero, F. García, P. de Miguel, F. Pérez chdir. Cambia el directorio actual Servicio: int chdir(char *name); Argumentos: –name nombre de un directorio Devuelve: –Cero ó -1 si error Descripción: –Modifica el directorio actual, aquel a partir del cual se forman los nombre relativos.

84 Sistemas operativos: una visión aplicada 83 © J. Carretero, F. García, P. de Miguel, F. Pérez rename. Cambia el nombre de un archivo Servicio: #include int rename(char *old, char *new); Argumentos: –old nombre de un archivo existente –new nuevo nombre del archivo Devuelve: –Cero ó -1 si error Descripción: –Cambia el nombre del archivo old. El nuevo nombre es new.

85 Sistemas operativos: una visión aplicada 84 © J. Carretero, F. García, P. de Miguel, F. Pérez getcwd. o btiene el nombre del directorio actual Servicio: char *getcwd(char *buf, size_t size); Argumentos: –buf puntero al espacio donde almacenar el nombre del directorio actual –size longitud en bytes de dicho espacio Devuelve: –Puntero a buf o NULL si error. Descripción: –Obtiene el nombre del directorio actual

86 Sistemas operativos: una visión aplicada 85 © J. Carretero, F. García, P. de Miguel, F. Pérez Programa que lista un directorio #include #define MAX_BUF 256 void main(int argc, char **argv) { DIR *dirp; struct dirent *dp; char buf[MAX_BUF]; /* imrpime el directorio actual */ getcwd(buf, MAX_BUF); printf("Directorio actual: %s\n", buf);

87 Sistemas operativos: una visión aplicada 86 © J. Carretero, F. García, P. de Miguel, F. Pérez Programa que lista un directorio (II) /* abre el directorio pasado como argumento */ dirp = opendir(argv[1]); if (dirp == NULL) { fprintf(stderr,"No puedo abrir %s\n", argv[1]); } else { /* lee entrada a entrada */ while ( (dp = readdir(dirp)) != NULL) printf("%s\n", dp->d_name); closedir(dirp); } exit(0); }

88 Sistemas operativos: una visión aplicada 87 © J. Carretero, F. García, P. de Miguel, F. Pérez Servicios Win32 para directorios Visión lógica: como un archivo. Operaciones similares a las de POSIX Apertura: creación objeto en memoria y de su manejador. –Operaciones permitidas –Atributos –Apuntador de posición –Parte de los datos del principio del archivo... Operaciones: manipulación de directorio y sus atributos, manipulación de manejadores, etc. Todas las llamadas con muchos parámetros para definir especificidades Protección: descriptor de seguridad con ACL

89 Sistemas operativos: una visión aplicada 88 © J. Carretero, F. García, P. de Miguel, F. Pérez Servicios Win32 para directorios (II) BOOL CreateDirectory(LPCSTR lpPathName, LPVOID lpSecurityAttributes); BOOL RemoveDirectory (LPCSTR lpszPath); HANDLE FindFirstFile(LPCSTR lpFileName, LPWin32_FIND_DATA lpFindFileData); BOOL FindNextFile(HANDLE hFindFile, LPWin32_FIND_DATA lpFindFileData); BOOL FindClose(HANDLE hFindFile);

90 Sistemas operativos: una visión aplicada 89 © J. Carretero, F. García, P. de Miguel, F. Pérez Contenido Visión del usuario del sistema de archivos Archivos Directorios Servicios de archivos Servicios de directorios Sistemas de archivos El servidor de archivos Puntos a recordar

91 Sistemas operativos: una visión aplicada 90 © J. Carretero, F. García, P. de Miguel, F. Pérez Sistemas de archivos y particiones El sistema de archivos permite organizar la información dentro de los dispositivos de almacenamiento secundario en un formato inteligible para el sistema operativo. Previamente a la instalación del sistema de archivos es necesario dividir físicamente, o lógicamente, los discos en particiones o volúmenes [Pinkert 1989]. Una partición es una porción de un disco a la que se la dota de una identidad propia y que puede ser manipulada por el sistema operativo como una entidad lógica independiente. Una vez creadas las particiones, el sistema operativo debe crear las estructuras de los sistemas de archivos dentro de esas particiones. Para ello se proporcionan mandatos como format o mkfs al usuario. #mkswap –c /dev/hda #mkfs -c /dev/hda3 –b

92 Sistemas operativos: una visión aplicada 91 © J. Carretero, F. García, P. de Miguel, F. Pérez Tipos de particiones

93 Sistemas operativos: una visión aplicada 92 © J. Carretero, F. García, P. de Miguel, F. Pérez Sistemas de archivos y particiones (II) Sistema de archivos: conjunto coherente de metainformación y datos. Ejemplos de Sistemas de archivos:

94 Sistemas operativos: una visión aplicada 93 © J. Carretero, F. García, P. de Miguel, F. Pérez Sistemas de archivos y particiones (III) Descripción de sistemas de archivos: –El sector de arranque en MS-DOS –El superbloque en UNIX Relación sistema de archivos-dispositivo: –Típico: 1 dispositivo N sistemas de archivos (particiones) –Grandes archivos: N dispositivos 1 sistema de archivos Típicamente cada dispositivo se divide en una o más particiones (en cada partición sistema de archivos) La tabla de particiones indica el principio, el tamaño y el tipo de cada partición.

95 Sistemas operativos: una visión aplicada 94 © J. Carretero, F. García, P. de Miguel, F. Pérez Bloques y agrupaciones Bloque: agrupación lógica de sectores de disco y es la unidad de transferencia mínima que usa el sistema de archivos. –Optimizar la eficiencia de la entrada/salida de los dispositivos secundarios de almacenamiento. –Todos los sistemas operativos proporcionan un tamaño de bloque por defecto. –Los usuarios pueden definir el tamaño de bloque a usar dentro de un sistema de archivos mediante el mandato mkfs. Agrupación: conjunto de bloques que se gestionan como una unidad lógica de gestión del almacenamiento. –El problema que introducen las agrupaciones, y los bloques grandes, es la existencia de fragmentación interna.

96 Sistemas operativos: una visión aplicada 95 © J. Carretero, F. García, P. de Miguel, F. Pérez Tamaño bloque, ancho banda y uso disco

97 Sistemas operativos: una visión aplicada 96 © J. Carretero, F. García, P. de Miguel, F. Pérez Estructuras de sistemas de archivos

98 Sistemas operativos: una visión aplicada 97 © J. Carretero, F. García, P. de Miguel, F. Pérez Superbloque de sistemas de archivos en LINUX

99 Sistemas operativos: una visión aplicada 98 © J. Carretero, F. García, P. de Miguel, F. Pérez Otros sistemas de archivos Fast File System EXT2 (extended file system) Archivos con bandas LFS (log structured file system) Sistemas de archivos paralelos....

100 Sistemas operativos: una visión aplicada 99 © J. Carretero, F. García, P. de Miguel, F. Pérez Estructura del FFS

101 Sistemas operativos: una visión aplicada 100 © J. Carretero, F. García, P. de Miguel, F. Pérez Estructura de un sistema de archivos con bandas

102 Sistemas operativos: una visión aplicada 101 © J. Carretero, F. García, P. de Miguel, F. Pérez Contenido Visión del usuario del sistema de archivos Archivos Directorios Servicios de archivos Servicios de directorios Sistemas de archivos El servidor de archivos Puntos a recordar

103 Sistemas operativos: una visión aplicada 102 © J. Carretero, F. García, P. de Miguel, F. Pérez Servidor de archivos Para proporcionar un acceso eficiente y sencillo a los dispositivos de almacenamiento, todos los sistemas operativos tienen un servidor de archivos que permite almacenar, buscar y leer datos fácilmente. Dicho servidor de archivos tiene dos tipos de problemas de diseño muy distintos entre sí: –Definir la visión de usuario del sistema de entrada/salida, incluyendo servicios, archivos, directorios, sistemas de archivos, etc. –Definir los algoritmos y estructuras de datos a utilizar para hacer corresponder la visión del usuario con el sistema físico de almacenamiento secundario.

104 Sistemas operativos: una visión aplicada 103 © J. Carretero, F. García, P. de Miguel, F. Pérez Estructura del servidor de archivos

105 Sistemas operativos: una visión aplicada 104 © J. Carretero, F. García, P. de Miguel, F. Pérez Sistema de archivos virtuales S.A. Virtual: interfaz de llamadas de entrada/salida del sistema y de pasar al módulo de organización de archivos la información necesaria para ejecutar los servicios pedidos por los usuarios. Servicios: –manejo de directorios, –gestión de nombres, –algunos servicios de seguridad, –integración dentro del servidor de archivos de distintos tipos de sistemas de archivos –servicios genéricos de archivos y directorios. Nodo virtual: estructura de información que incluye las características mínimas comunes a todos los sistemas de archivos subyacentes y que enlaza con un descriptor de archivo de cada tipo particular.

106 Sistemas operativos: una visión aplicada 105 © J. Carretero, F. García, P. de Miguel, F. Pérez Estructura de un nodo virtual de UNIX

107 Sistemas operativos: una visión aplicada 106 © J. Carretero, F. García, P. de Miguel, F. Pérez Módulo de organización de archivos Proporciona el modelo del archivo del sistema operativo y los servicios de archivos. Relaciona la imagen lógica del archivo con su imagen física, proporcionando algoritmos para trasladar direcciones lógicas de bloques a sus correspondientes direcciones físicas. Gestiona el espacio de los sistemas de archivos, la asignación de bloques a archivos y el manejo de los descriptores de archivo (nodos-i de UNIX o registros de Windows NT). Un módulo de este estilo por cada tipo de archivo soportado (UNIX, AFS, Windows NT, MS-DOS, EFS, MINIX, etc.). Dentro de este nivel también se proporcionan servicios para pseudo-archivos, tales como los del sistema de archivos proc. Las llamadas de gestión de archivos y de directorios particulares de cada sistema de archivos se resuelven en el módulo de organización de archivos. Para ello, se usa la información existente en el nodo-i del archivo afectado por las operaciones.

108 Sistemas operativos: una visión aplicada 107 © J. Carretero, F. García, P. de Miguel, F. Pérez Servidor de bloques Se encarga de emitir los mandatos genéricos para leer y escribir bloques a los manejadores de dispositivo. La E/S de bloques de archivo, y sus posibles optimizaciones, se lleva a cabo en este nivel del servidor de archivos. Las operaciones se traducen a llamadas de los manejadores de cada tipo de dispositivo específico y se pasan al nivel inferior del sistema de archivos. Esta capa oculta los distintos tipos de dispositivos, usando nombres lógicos para los mismos. Por ejemplo, /dev/hda3 será un dispositivo de tipo hard disk ( hd ), cuyo nombre principal es a y en el cual se trabaja sobre su partición 3. Los mecanismos de optimización de la E/S, como la cache de bloques, se incluye en este nivel.

109 Sistemas operativos: una visión aplicada 108 © J. Carretero, F. García, P. de Miguel, F. Pérez Descomposición en operaciones de bloques Archivos con estructura de bytes –Escritura leer

110 Sistemas operativos: una visión aplicada 109 © J. Carretero, F. García, P. de Miguel, F. Pérez Descomposición en operaciones de bloques (II) Archivos de registros de tamaño fijo R1R2R3R4R5R6 R1R2R4R5R6R3 Bloque 2Bloque 1Bloque 3 Bloque 1Bloque 2Bloque 3

111 Sistemas operativos: una visión aplicada 110 © J. Carretero, F. García, P. de Miguel, F. Pérez Manejadores de dispositivos Un manejador por cada dispositivo, o clase de dispositivo, del sistema. Su función principal es recibir ordenes de E/S de alto nivel, tal como move_to_block 234, y traducirlas al formato que entiende el controlador del dispositivo, que es dependiente de su hardware. Habitualmente, cada dispositivo tiene una cola de peticiones pendientes, de forma que un manejador puede atender simultáneamente a varios dispositivos del mismo tipo. Una de las principales funciones de los manejadores de dispositivos es recibir las peticiones de entrada/salida y colocarlas en el lugar adecuado de la cola de peticiones del dispositivo afectado. –La política de inserción en cada cola puede ser diferente, dependiendo del tipo de dispositivo o de la prioridad de los dispositivos. Para un disco, por ejemplo, se suele usar la política CSCAN.

112 Sistemas operativos: una visión aplicada 111 © J. Carretero, F. García, P. de Miguel, F. Pérez Flujo de datos en el S. de A.

113 Sistemas operativos: una visión aplicada 112 © J. Carretero, F. García, P. de Miguel, F. Pérez Estructuras de datos asociadas al S. de A. (I) Tabla de nodos-v: almacena en memoria la información del nodo-v existente en el disco y otra que se usa dinámicamente y que sólo tiene sentido cuando el archivo está abierto. –Problema: si sólo hay un campo de apuntador, cada operación de un proceso afectaría a todos los demás. –Posible solución: incluir la información relativa al archivo dentro del bloque de descripción del proceso (BCP). Tabla de archivos abiertos ( tdaa ) por un proceso, dentro del BCP, con sus descriptores temporales y el valor del apuntador de posición del archivo para ese proceso. –El tamaño de esta tabla define el máximo número de archivos que cada proceso puede tener abierto de forma simultánea. –El descriptor de archivo fd indica el lugar de tabla. La tdaa se rellena de forma ordenada, de forma que siempre se ocupa la primera posición libre de la tabla. –En los sistemas UNIX cada proceso tiene tres descriptores de archivos abiertos por defecto: entrada estándar, fd = 0, salida estándar, fd = 1, error estándar, fd = 2.

114 Sistemas operativos: una visión aplicada 113 © J. Carretero, F. García, P. de Miguel, F. Pérez Estructuras de datos asociadas al S. de A. (II) Tabla intermedia nodo-i-posición: entre la tabla de archivos del BCP y la tabla de nodos-I. Dicha tabla incluye, entre otras cosas: –La entrada del nodo-i del archivo abierto en la tabla de nodos-i. –El apuntador de posición correspondiente al proceso, o procesos, que usan el archivo durante esa sesión. –El modo de apertura del archivo Tabla de nodos-i: almacena en memoria la información del nodo-i existente en el disco y otra que se usa dinámicamente y que sólo tiene sentido cuando el archivo está abierto. –Esta tabla limita el número de máximo de archivos abiertos en el sistema de forma simultánea.

115 Sistemas operativos: una visión aplicada 114 © J. Carretero, F. García, P. de Miguel, F. Pérez Tablas que usa el servidor de archivos

116 Sistemas operativos: una visión aplicada 115 © J. Carretero, F. García, P. de Miguel, F. Pérez Correspondencia bloques-archivos ¿Cómo asignar los bloques de disco a un archivo y cómo hacerlos corresponder con la imagen del archivo que tiene la aplicación? Asignación de bloques contiguos. –Sencillo de implementar y el rendimiento de la E/S es muy bueno. –Si no se conoce el tamaño total del archivo cuando se crea, puede ser necesario buscar un nuevo hueco de bloques consecutivos cada vez que el archivo crece. –Fragmentación externa -> compactar el disco. Asignación de bloques discontiguos. –Se asigna al archivo el primer bloque que se encuentra libre. –No hay fragmentación externa del disco ni búsqueda de huecos. –Los archivos pueden crecer mientras exista espacio en el disco. –Complica la implementación de la imagen de archivo -> mapa de bloques del archivo.

117 Sistemas operativos: una visión aplicada 116 © J. Carretero, F. García, P. de Miguel, F. Pérez Mecanismos enlazados Listas o índices enlazados: desde cada entrada de un bloque existe un enlace al siguiente bloque del archivo. Ejemplo: tabla FAT de Windows

118 Sistemas operativos: una visión aplicada 117 © J. Carretero, F. García, P. de Miguel, F. Pérez Mecanismos indexados Cada archivo tiene sus bloques de índice que incluyen apuntadores a los bloques de disco del archivo. –El orden lógico se consigue mediante la inserción de los apuntadores en orden creciente, a partir del primero, en los bloques de índices. –Ventaja: basta con traer a memoria el bloque de índices donde está el apuntador a los datos para tener acceso al bloque de datos. Si un apuntador de bloque ocupa 4 bytes y el bloque es de 4 Kbytes, con un único acceso a disco tendremos 1024 apuntadores a bloques del archivo. –Problema: el espacio extra necesario para los bloques de índices. Ese problema, fue resuelto en UNIX BSD combinando un sistema de índices puros con un sistema de índices multinivel, que es que se usa actualmente en UNIX y LINUX. – Permite almacenar archivos pequeños sin necesitar bloques de índices. – Permite accesos aleatorios a archivos muy grandes con un máximo de 3 accesos a bloques de índices.

119 Sistemas operativos: una visión aplicada 118 © J. Carretero, F. García, P. de Miguel, F. Pérez Mapa de bloques en un nodo-i

120 Sistemas operativos: una visión aplicada 119 © J. Carretero, F. García, P. de Miguel, F. Pérez Gestión de espacio libre Mapas de bits, o vectores de bits: un bit por recurso existente (descriptor de archivo, bloque o agrupación). Si el recurso está libre, el valor del bit asociado al mismo es 1, si está ocupado es 0. –Ejemplo, sea un disco en el que los bloques 2, 3, 4, 8, 9 y 10 están ocupados y el resto libres, y en el que los descriptores de archivo 2, 3 y 4 están ocupados. Sus mapas de bits de serían: MB de bloques: M MB de descriptores: –Fácil de implementar y sencillo de usar. Eficiente si el dispositivo no está muy lleno o muy fragmentado. Listas de recursos libres: mantener enlazados en una lista todos los recursos disponibles (bloques o descriptores de archivos) manteniendo un apuntador al primer elemento de la lista. –Este método no es eficiente, excepto para dispositivos muy llenos y fragmentados –Uso de agrupaciones.

121 Sistemas operativos: una visión aplicada 120 © J. Carretero, F. García, P. de Miguel, F. Pérez Ejemplo de listas de recursos

122 Sistemas operativos: una visión aplicada 121 © J. Carretero, F. García, P. de Miguel, F. Pérez Incremento de prestaciones Basados en el uso de almacenamiento intermedio de datos de entrada/salida en memoria principal. Estos mecanismos son de dos tipos: –Discos RAM, cuyos datos están almacenados sólo en memoria. Aceptan todas las operaciones de cualquier otro sistema de archivos y son gestionados por el usuario. Pseudodispositivos para almacenamiento temporal o para operaciones auxiliares del sistema operativo. Su contenido es volátil. –Cache de datos, instaladas en secciones de memoria principal controladas por el sistema operativo, donde se almacenan datos para optimizar accesos posteriores. Se basan en la existencia de proximidad espacial y temporal en las referencias a los datos de entrada/salida. Dos caches importantes dentro del servidor de archivos: cache de nombres y cache de bloques.

123 Sistemas operativos: una visión aplicada 122 © J. Carretero, F. García, P. de Miguel, F. Pérez Cache de bloques Fundamento: –Proximidad espacial –Proximidad temporal –Dos clases de flujos de E/S: Usan una sola vez cada bloque Usan repetidamente los bloques –Acceso a disco mucho más lento que el acceso a memoria

124 Sistemas operativos: una visión aplicada 123 © J. Carretero, F. García, P. de Miguel, F. Pérez Cache de bloques (II) Estructura de datos en memoria con los bloques más frecuentemente utilizados –Lecturas adelantadas –Limpieza de la cache (sync) Principal problema: fiabilidad del sistema de archivos.

125 Sistemas operativos: una visión aplicada 124 © J. Carretero, F. García, P. de Miguel, F. Pérez Flujo datos con cache de bloques

126 Sistemas operativos: una visión aplicada 125 © J. Carretero, F. García, P. de Miguel, F. Pérez Políticas de reemplazo Algoritmo: –Comprobar si el bloque a leer está en la cache. En caso de que no esté, se lee del dispositivo y se copia a la cache. Si la cache está llena, es necesario hacer hueco para el nuevo bloque reemplazando uno de los existentes: políticas de reemplazo. Si el bloque ha sido escrito (sucio): política de escritura. Políticas de reemplazo: FIFO (First in First Out), segunda oportunidad, MRU (Most Recently Used), LRU (Least Recently Used), etc. –La política de reemplazo más frecuentemente usada es la LRU. Esta política reemplaza el bloque que lleva más tiempo sin ser usado, asumiendo que no será referenciado próximamente. –Los bloques más usados tienden a estar siempre en la cache y, por tanto, no van al disco. La utilización estricta de esta política puede crear problemas de fiabilidad en el sistema de archivos si el computador falla. –La mayoría de los servidores de archivos distinguen entre bloques especiales y bloques de datos.

127 Sistemas operativos: una visión aplicada 126 © J. Carretero, F. García, P. de Miguel, F. Pérez Políticas de escritura Escritura inmediata (write-through): se escribe cada vez que se modifica el bloque. –No hay problema de fiabilidad, pero se reduce el rendimiento del sistema. Escritura diferida (write-back): sólo se escriben los datos a disco cuando se eligen para su reemplazo por falta de espacio en la cache. –Optimiza el rendimiento, pero genera los problemas de fiabilidad anteriormente descritos. Escritura retrasada (delayed-write), que consiste en escribir a disco los bloques de datos modificados en la cache de forma periódica cada cierto tiempo (30 segundos en UNIX). –Compromiso entre rendimiento y fiabilidad. –Reduce la extensión de los posibles daños por pérdida de datos. –Los bloques especiales se escriben inmediatamente al disco. –No se puede quitar un disco del sistema sin antes volcar los datos de la cache. Escritura al cierre (write-on-close): cuando se cierra un archivo, se vuelcan al disco los bloques del mismo que tienen datos actualizados.

128 Sistemas operativos: una visión aplicada 127 © J. Carretero, F. García, P. de Miguel, F. Pérez Montado de sistemas de archivos o particiones Oculta el nombre del dispositivo físico o partición En MS-DOS c:\tmp\datos.txt / /lib /bin/usr / /d1/d2/d3 /d3/f2/d3/f1 / /lib/bin/usr /usr/d1 /usr/d3 /usr/d3/f2/usr/d3/f1 Volumen raiz (/dev/hd0) Volumen sin montar (/dev/hd1) mount /dev/hd1 /usr Volumen montado /usr/d2

129 Sistemas operativos: una visión aplicada 128 © J. Carretero, F. García, P. de Miguel, F. Pérez Enlaces Permite que dos o más nombres hagan referencia al mismo archivo. Dos tipos: –Enlace físico El archivo sólo se elimina cuando se borran todos los enlaces Sólo se permiten enlazar archivos (no directorios) del mismo volumen. –Enlace simbólico El archivo se elimina cuando se borra el enlace físico. Si permanece el enlace simbólico provoca errores al tratar de accederlo. Se puede hacer con archivos y directorios. Se puede hacer entre archivos de diferentes sistema de archivos

130 Sistemas operativos: una visión aplicada 129 © J. Carretero, F. García, P. de Miguel, F. Pérez Enlace físico

131 Sistemas operativos: una visión aplicada 130 © J. Carretero, F. García, P. de Miguel, F. Pérez Enlace simbólico

132 Sistemas operativos: una visión aplicada 131 © J. Carretero, F. García, P. de Miguel, F. Pérez Ejemplo de montado

133 Sistemas operativos: una visión aplicada 132 © J. Carretero, F. García, P. de Miguel, F. Pérez Fiabilidad del sistema de archivos Fallos HW y SW pueden provocar fallos en un volumen Soluciones: –Hardware: Controladores que tratan con sectores con fallos Discos con información redundante (RAID) –Backups (copias de respaldo) En discos En cintas Backups incrementales

134 Sistemas operativos: una visión aplicada 133 © J. Carretero, F. García, P. de Miguel, F. Pérez Redundancia con paridad

135 Sistemas operativos: una visión aplicada 134 © J. Carretero, F. García, P. de Miguel, F. Pérez Consistencia del sistema de archivos (I) Dos aspectos importantes: –Comprobar que la estructura física del sistema de archivos es coherente. –Verificar que la estructura lógica del sistema de archivos es correcta. Estrucutra física: se comprueba la superficie del dispositivo de almacenamiento. Estructura lógica: 1.Se comprueba que el contenido del superbloque responde a las características del sistema de archivos. 2.Se comprueba que los mapas de bits de nodos-i se corresponden con los nodos-i ocupados en el sistema de archivos. 3.Se comprueba que los mapas de bits de bloques se corresponden con los bloques asignados a archivos. 4.Se comprueba que ningún bloque esté asignado a más de un archivo. 5.Se comprueba el sistema de directorios del sistema de archivos, para ver que un mismo nodo-i no está asignado a más de un directorio.

136 Sistemas operativos: una visión aplicada 135 © J. Carretero, F. García, P. de Miguel, F. Pérez Consistencia del sistema de archivos (II) Consistencia sobre archivos: –Contador de enlaces > contador real –Contador de enlaces < contador real –Número de nodo-i > Número total de nodos-i –Archivos con bits de protección 0007 –Archivos con privilegios en directorios de usuario UNIX y LINUX: fsck fsck /dev/dsk/c0t0d3s1 –Comprueba el dispositivo físico c0t0d3s1

137 Sistemas operativos: una visión aplicada 136 © J. Carretero, F. García, P. de Miguel, F. Pérez Estado de los bloques

138 Sistemas operativos: una visión aplicada 137 © J. Carretero, F. García, P. de Miguel, F. Pérez Cerrojos Tipos: –Compartido –Exclusivo Importante para trabajo colaborativo Fichero Cerrojo C Cerrojo Ex

139 Sistemas operativos: una visión aplicada 138 © J. Carretero, F. García, P. de Miguel, F. Pérez Cerrojos en POSIX #include int fcntl(int fd, int cmd, struct flock *f); cmd puede ser: –F_SETLK => no bloqueante –F_SETLKW => bloqueante La estructura struct flock –l_type => F_RDLCK indica un cerrojo compartido F_WDLCK indica un cerrojo exclusivo F_UNLCK Elimina un cerrojo –l_whence origen del desplazamiento ( SEEK_SET, SEEK_CUR, SEEK_END ) –l_start desplazamiento en bytes. –l_len número de bytes sobre los que se establece el cerrojo

140 Sistemas operativos: una visión aplicada 139 © J. Carretero, F. García, P. de Miguel, F. Pérez Otros servicios Actualización atómica, o indivisible: asegura a los usuarios que sus operaciones están libres de interferencia con las de otros usuarios y que la operación se realiza completamente o no tiene ningún efecto en el sistema. Transacciones: permite ejecutar operaciones atómicas que agrupan a varias operaciones de entrada/salida y que se ejecutarán con semántica todo o nada. Replicación: mantener varias copias de los datos y otros recursos del sistema. Gestión de copias: –Copia primaria –Gestión colectiva

141 Sistemas operativos: una visión aplicada 140 © J. Carretero, F. García, P. de Miguel, F. Pérez Gestión de la replicación

142 Sistemas operativos: una visión aplicada 141 © J. Carretero, F. García, P. de Miguel, F. Pérez Contenido Visión del usuario del sistema de archivos Archivos Directorios Servicios de archivos Servicios de directorios Sistemas de archivos El servidor de archivos Puntos a recordar

143 Sistemas operativos: una visión aplicada 142 © J. Carretero, F. García, P. de Miguel, F. Pérez Puntos a recordar (I) Los archivos y los directorios son los elementos centrales del sistema. Archivo: unidad de almacenamiento lógico no volátil que agrupa un conjunto de información relacionada entre sí bajo un mismo nombre. Todos los sistemas operativos tienen un descriptor de archivo que almacena atributos del mismo. Todos los sistemas operativos proporcionan mecanismos de nombrado que permiten asignar un nombre a un archivo en el momento de su creación. Desde el punto de vista del usuario, la información de un archivo puede estructurarse como una lista de caracteres, un conjunto de registros secuencial o indexado, etc. Las dos formas de acceso más habituales son el acceso secuencial y el directo (o aleatorio). La semántica de coutilización especifica qué ocurre cuando varios procesos acceden de forma simultánea al mismo archivo. Un directorio es un objeto que relaciona de forma unívoca el nombre de usuario de un archivo y el descriptor interno del mismo usado por el sistema operativo.

144 Sistemas operativos: una visión aplicada 143 © J. Carretero, F. García, P. de Miguel, F. Pérez Puntos a recordar (II) Hay dos posibles formas de especificar un nombre: nombre completo del archivo, denominado nombre absoluto, o nombre de forma relativa a algún subdirectorio del árbol de directorios, denominado nombre relativo. Previamente a la instalación del sistema operativo es necesario dividir físicamente, o lógicamente, los discos en particiones o volúmenes. Una vez creadas las particiones, el sistema operativo debe crear las estructuras de los sistemas de archivos dentro de esas particiones. Para ello se proporcionan mandatos como format o mkfs al usuario. El superbloque, los mapas de bloques y los mapas de descriptores constituyen la metainformación de un sistema de archivos. Si el superbloque se estropea, todo el sistema de archivos queda inaccesible. Existen distintos tipos de estructuras de sistemas de archivos: tradicional, FFS, LFS, con bandas, etc. Cada una de ellas es más apropiada para determinados propósitos. El FFS es muy usado en la actualidad. Los servidores de archivos tienen una estructura interna que, en general, permite acceder a los distintos dispositivos del sistema mediante archivos de distintos tipos, escondiendo estos detalles a los usuarios.

145 Sistemas operativos: una visión aplicada 144 © J. Carretero, F. García, P. de Miguel, F. Pérez Puntos a recordar (III) El sistema de archivos virtuales proporciona una interfaz de llamadas de entrada/salida genéricas válidas para todos los tipos de sistemas de archivos instalados en el sistema operativo. Los mecanismos de asignación hacen corresponder la imagen lógica del archivo con la imagen física que existe en el almacenamiento secundario. Hay dos políticas de asignación básicas: bloques contiguos y bloques discontiguos. Dos mecanismos populares para gestionar el espacio libre son los mapas de bits y la lista de bloques libres. Para optimizar el rendimiento del sistema de entrada/salida, el servidor de archivos incorpora mecanismos de incremento de prestaciones tales como discos RAM, caches de nombres, caches de bloques y compresión de datos. La destrucción de un sistema de archivos es, a menudo, mucho peor que la destrucción de un computador. Es importante salvaguardar los datos. Un sistema de archivos puede quedar en estado incoherente por mal uso, caídas de tensión, apagados indebidos del sistema operativo, etc. · Actualmente, algunos servidores de archivos incorporan servicios avanzados tales como actualizaciones atómicas, transacciones o replicación.


Descargar ppt "Capítulo 8 Gestión de Archivos y Directorios Sistemas operativos: una visión aplicada."

Presentaciones similares


Anuncios Google