1 / 80

E/S y sistema de ficheros

E/S y sistema de ficheros. María de los Santos Pérez Hernández mperez@fi.upm.es. Índice. Conceptos básicos de E/S Concepto de sistema de ficheros Ficheros Directorios Volúmenes y particiones Protección Ficheros, directorios y servicios en POSIX Cache de bloques

haruki
Download Presentation

E/S y sistema de ficheros

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. E/S y sistema de ficheros María de los Santos Pérez Hernández mperez@fi.upm.es

  2. Índice • Conceptos básicos de E/S • Concepto de sistema de ficheros • Ficheros • Directorios • Volúmenes y particiones • Protección • Ficheros, directorios y servicios en POSIX • Cache de bloques • Fiabilidad del sistema de ficheros • Introducción a los sistemas de ficheros distribuidos (NFS) mperez@fi.upm.es

  3. Referencias bibliográficas • “Sistemas Operativos: una visión aplicada” Jesús Carretero et al. McGraw Hill, 2001 • “Sistemas Operativos” Willian Stalling Willian Stalling Prentice Hall, 1997 • “Operating System Concepts” A. Silberschatz, P. Galvin Addison-Wesley, 1998 mperez@fi.upm.es

  4. Conceptos básicos de E/S • Funciones del SO: • Controlar el funcionamiento de los dispositivos de E/S • Ofrecer un interfaz entre los dispositivos y el resto del sistema • Hardware de E/S: • Dispositivos de E/S: • De bloques (discos) • De caracteres (teclado, ratón) • Controladores de dispositivos • E/S programada • Interrupciones • DMA mperez@fi.upm.es

  5. Hardware de E/S mperez@fi.upm.es

  6. Conceptos básicos de E/S • Software de E/S • Objetivos: independencia de los dispositivos • Estructuración del SW de E/S: mperez@fi.upm.es

  7. Sistema de ficheros • 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 ficheros 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 mperez@fi.upm.es

  8. Sistema de ficheros (II) • El SF establece una correspondencia entre los ficheros y los dispositivos lógicos. mperez@fi.upm.es

  9. Sistema de ficheros (III) • Visión lógica: • Ficheros • Directorios • Volúmenes y particiones • Visión física: • Bloques o bytes ubicados en dispositivos mperez@fi.upm.es

  10. Ficheros: visión lógica • Conjunto de información relacionada que ha sido definida por su creador • Estructura de un fichero: • Secuencia o tira de bytes (UNIX, POSIX) • Registros (de tamaño fijo o variable) mperez@fi.upm.es

  11. Ficheros: visión lógica (II) • Estructura de un fichero (continuación): • Ficheros de estructura compleja • Ficheros indexados • Ficheros directos o de dispersión • Ejemplo de fichero indexado • Los ficheros estructurados en registros y los ficheros con estructuras complejas se pueden construir como una capa sobre la visión de tira de bytes. mperez@fi.upm.es

  12. Ficheros: visión lógica (III) • Tipos de ficheros: • Ficheros normales • Ficheros especiales: • De bloques • De caracteres • Atributos de un fichero: • Nombre • Tipo • Dueño y grupo • Información de protección • Tamaño real • Hora y fecha de creación • Hora y fecha del último acceso • Hora y fecha de la última modificación • Número de enlaces mperez@fi.upm.es

  13. Ficheros: visión lógica (IV) • Tipos de acceso: • Acceso secuencial • Acceso directo • Acceso indexado • Operaciones sobre ficheros: • Crear ficheros • Abrir y cerrar ficheros • Renombrar • Borrar ficheros • Leer y escribir ficheros • Truncar un fichero • Asignar espacio a un fichero • Situar el puntero en una determinada posición dentro del fichero • Obtener atributos • Modificar atributos mperez@fi.upm.es

  14. Ficheros: semántica de coutilización • Para trabajar con un fichero hay que definir una sesión con las llamadas open y close. • Semántica de coutilización: especifica el efecto de varios procesos accediendo de forma simultánea al mismo fichero. • Tipos de semánticas: • Semántica UNIX (POSIX) • Las escrituras son inmediatamente visibles para todos los procesos con el fichero abierto. • Los procesos pueden compartir ficheros. Si existe relación de parentesco pueden compartir el puntero. mperez@fi.upm.es

  15. Ficheros: 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 fichero abierto. • Cuando se cierra el fichero los cambios se hacen visibles para las futuras sesiones. • Un fichero puede asociarse temporalmente a varias imágenes. • Semántica de ficheros inmutables • Una vez creado el fichero sólo puede ser compartido para lectura y no cambia nunca mperez@fi.upm.es

  16. Ficheros: visión física • Conjunto de bloques ubicados en un dispositivo mperez@fi.upm.es

  17. Ficheros: visión física (II) • Bloque • Unidad de transferencia • 2n sectores • Parámetro fijo por sistema de ficheros • Agrupación • Unidad de asignación • 2p bloques • Aumenta la secuencialidad del fichero • Descripción de la estructura física: • Bloques utilizados mperez@fi.upm.es

  18. Descripción física en UNIX (nodo-i) Tamaño máximo del fichero: 10Sb+(Sb/4)Sb +(Sb/4)2Sb +(Sb/4)3Sb Sb el tamaño del bloque y direcciones de bloques de 4 bytes. mperez@fi.upm.es

  19. Descripción física en MS-DOS (FAT) • FAT de 12 bits 4K agrupaciones • FAT de 16 bits 64K agrupaciones mperez@fi.upm.es

  20. Directorios: visión lógica • Un directorio es una tabla de entradas que asocia nombres simbólicos a ficheros. • Esquema jerárquico. • Cuando se abre un fichero 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 ficheros (nombres únicos) • Proporciona una gestión de la distribución => agrupar ficheros de forma lógica (mismo usuario, misma aplicación) mperez@fi.upm.es

  21. Directorios: visión física • Directorios en MS-DOS • Directorios en UNIX mperez@fi.upm.es

  22. Volúmenes y particiones • Volumen: conjunto coherente de metainformación y datos. • Ejemplos de volúmenes: mperez@fi.upm.es

  23. Volúmenes y particiones (II) • Descripción de volúmenes: • El sector de arranque en MS-DOS • El superbloque en UNIX • Relación volumen-dispositivo: • Típico: 1 dispositivo N volúmenes (particiones) • Grandes ficheros: N dispositivos 1 volumen • Típicamente cada dispositivo se divide en una o más particiones (en cada partición un volumen) • La tabla de particiones indica el principio, el tamaño y el tipo de cada partición. mperez@fi.upm.es

  24. Montado de volúmenes o particiones • Oculta el nombre del dispositivo físico o partición • En MS-DOS c:\tmp\datos.txt mperez@fi.upm.es

  25. Enlaces • Permite que dos o más nombres hagan referencia al mismo fichero. • Dos tipos: • Enlace físico • El fichero sólo se elimina cuando se borran todos los enlaces • Sólo se permiten enlazar ficheros (no directorios) del mismo volumen. • Enlace simbólico • El fichero 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 ficheros y directorios. • Se puede hacer entre ficheros de diferentes volúmenes mperez@fi.upm.es

  26. Enlace físico mperez@fi.upm.es

  27. Enlace simbólico mperez@fi.upm.es

  28. Protección • Proteger del acceso inadecuado • Distintos tipos de protección: • Lectura • Escritura • Ejecución • Eliminación • Autenticación (¿quién?) • Claves (paswords) • Identificación física • Tarjetas inteligentes • Reconocimiento de voz • Derechos de acceso (¿qué?) • Objeto => qué usuarios y qué derechos • Usuario => qué objetos y qué derechos mperez@fi.upm.es

  29. Ficheros, directorios y servicios en POSIX (UNIX) • Nombres de fichero 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 • ./../include/stdio.h • /usr/./include/../include/stdio.h • Estos tres ficheros hacen referencia a stdio.h si /usr/include es el directorio actual mperez@fi.upm.es

  30. Ficheros, directorios y servicios en POSIX (UNIX) (II) • Tipos de fichero: • Normales • Directorios • Especiales • Descriptores de fichero: • Entero no negativo que identifica un fichero abierto • Se asignan en orden 0, 1, 2, ... • Los procesos en su inicio: • 0 entrada estándar • 1 salida estándar • 2 salida de error • Se heredan en el fork() • Los ficheros abiertos siguen abiertos después del exec() • Cuando se hace un fork() se comparte el puntero mperez@fi.upm.es

  31. Protección • Identificación de usuarios y grupos • UID: identificador de usuario • GID: identificador de grupo • Los procesos se ejecutan con • UID real • UID efectivo • GID real • GID efectivo mperez@fi.upm.es

  32. Protección (II) • Protección sobre un fichero • UID del propietario y GID del grupo • 9 bits de protección rwx para el propietario grupo y otros. • En ficheros • r => leer • w => escribir • x => permiso de ejecución • En directorios • r => listar contenidos • w => crear o eliminar entradas • x => permiso de acceso mperez@fi.upm.es

  33. Protección (III) • Bits SETUID y GETUID • Si un proceso ejecuta un fichero con el SETUID activo UID efectivo = UID del propietario del fichero • Si un proceso ejecuta un fichero con el GETUID activo GID efectivo = GID del propietario del fichero • Reglas de protección: • Si UID efectivo = 0 se concede el acceso • Si UID efectivo = UID del propietario se utiliza el primer grupo de bits; si no • Si GID efectivo = GID del propietario se utiliza el segundo grupos de bits; si no • Se utiliza el último grupo de bits. mperez@fi.upm.es

  34. Operaciones sobre ficheros mperez@fi.upm.es

  35. Servicio: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(char *name, int flag, ...); Argumentos: name:Puntero al nombre del fichero 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 delfichero abierto O_CREAT: Si no existe no tiene efecto. Si no existe lo crea O_TRUNC: Trunca si se abre para escritura Devuelve: Un descriptor de fichero o -1 si hay error. Ejemplos: fd =open ("/home/juan/datos.txt"); fd =open ("/home/juan/datos.txt", O_WRONLY | O_CREAT | O_TRUNC, 0750); open.Abre un fichero mperez@fi.upm.es

  36. Servicio: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int creat(char *name, mode_t mode); Argumentos: name: Nombre de fichero mode: Bits de permiso para el fichero Devuelve: Devuelve un descriptor de fichero ó -1 si error. Descripción: El fichero se abre para escritura. Si no existe crea un fichero vacío. 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); creat.Crea un fichero mperez@fi.upm.es

  37. Servicio: #include <sys/types.h> ssize_t read(int fd, void *buf, size_t n_bytes); Argumentos: fd: descriptor de fichero 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 fichero o se interrumpe por una señal. Después de la lectura se incrementa el puntero del fichero con el número de bytes realmente transferidos. read.Lectura de un fichero mperez@fi.upm.es

  38. Servicio: #include <sys/types.h> ssize_t write(int fd, void *buf, size_t n_bytes); Argumentos: fd: descriptor de fichero 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 eltamaño máximo de un fichero o se interrumpe por una señal. Después de la escritura se incrementa el puntero delfichero con el número de bytes realmente transferidos. Si se rebasa el fin de fichero el fichero aumenta de tamaño. write. Escritura de un fichero mperez@fi.upm.es

  39. close. Cierra un descriptor defichero • Servicio: int close(int fd); • Argumentos: • fd: descriptor de fichero • Devuelve: • Cero o -1 si error. • Descripción: • El proceso pierde la asociación a un fichero. mperez@fi.upm.es

  40. Servicio: #include <sys/types.h> #include <unistd.h> off_t lseek(int fd, off_t offset, int whence); Argumentos: fd: Descriptor de fichero 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 fichero + offset lseek.Modifica el valor del puntero de posición mperez@fi.upm.es

  41. Servicio: int dup(int fd); Argumentos: fd: descriptor de fichero Devuelve: Un descriptor de fichero que comparte todas las propiedadesdel fd ó -1 si error. Descripción: Crea un nuevo descriptor de fichero que tiene en común con el anterior: Accede al mismo fichero Comparte el mismo puntero de posición El modo de acceso es idéntico. El nuevo descriptor tendrá el menor valor numéricoposible. dup. Duplica un descriptor de fichero mperez@fi.upm.es

  42. ftruncate.Asigna espacio a un fichero • Servicio: #include <unistd.h> int ftruncate(int fd, off_t length); • Argumentos: • fd descriptor de fichero • length nuevo tamaño del fichero • Devuelve: • Devuelve 0 ó -1 si error. • Descripción: • El nuevo tamaño del fichero es length. Si length es 0 se trunca el fichero. mperez@fi.upm.es

  43. Operaciones sobre directorios mperez@fi.upm.es

  44. opendir.Abre un directorio • Servicio: #include <sys/types.h> #include <dirent.h> 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. mperez@fi.upm.es

  45. readdir.Lectura de entradas de directorio • Servicio: #include <sys/types.h> #include <dirent.h> 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. mperez@fi.upm.es

  46. closedir.Cierra un directorio • Servicio: #include <sys/types.h> #include <dirent.h> 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. mperez@fi.upm.es

  47. rewindir.Sitúa el puntero de directorio • Servicio: #include <sys/types.h> #include <dirent.h> 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. mperez@fi.upm.es

  48. mkdir.Crea un directorio • Servicio: #include <sys/types.h> #include <dirent.h> int mkdir(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 mperez@fi.upm.es

  49. rmdir.Borra un directorio • Servicio: #include <sys/types.h> int rmdir(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. mperez@fi.upm.es

  50. link.Crea una entrada de directorio • Servicio: #include <unistd.h> int link(char *existing, char *new); • Argumentos: • existing nombre del fichero existente. • new nombre de la nueva entrada que será un enlace al fichero existente. • Devuelve: • Cero ó -1 si error. • Descripción: • Crea un nuevo enlace para un fichero 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. mperez@fi.upm.es

More Related