1 / 47

Sistema de Ficheros

Sistema de Ficheros. ARISO 2 Escola Tècnica Superior d’Enginyeria de Telecomunicació de Barcelona ( Universitat Politècnica de Catalunya). Licencia Creative Commons.

skule
Télécharger la présentation

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. Sistema de Ficheros ARISO 2 EscolaTècnica Superior d’Enginyeria de Telecomunicació de Barcelona (UniversitatPolitècnica de Catalunya)

  2. Licencia CreativeCommons Esta obra está bajo una licencia Reconocimiento-No comercial-Compartir bajo la misma licencia 2.5 España de CreativeCommons. Para ver una copia de esta licencia, visite: http://creativecommons.org/licenses/by-nc-sa/2.5/es/ o envíe una carta a: CreativeCommons, 559 NathanAbbottWay, Stanford, California 94305, USA.

  3. Licencia CreativeCommons Eres libre de: • copiar, distribuir y comunicar públicamente la obra • hacer obras derivadas Bajo las condiciones siguientes: • Atribución. Debes reconocer la autoría de la obra en los términos especificados por el propio autor o licenciante. • No comercial. No puedes utilizar esta obra para fines comerciales. • Licenciamiento Recíproco. Si alteras, transformas o creas una obra a partir de esta obra, solo podrás distribuir la obra resultante bajo una licencia igual a ésta. • Al reutilizar o distribuir la obra, tienes que dejar bien claro los términos de la licencia de esta obra. • Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor Advertencia: • Los derechos derivados de usos legítimos u otras limitaciones reconocidas por ley no se ven • afectados por lo anterior. • Esto es un resumen legible por humanos del texto legal (la licencia completa)

  4. Sistema de Ficheros Introducción

  5. Dispositivos I/O • Hardware • Dispositivo • Controlador • Software • Driver (parte del SO) • Métodos espera • Busywaiting • Interrupts • DMA (DirectMemoryAcces) Dispositivo Controlador Dispositivo Bus

  6. Sistema de Ficheros • Organización virtual de la información almacenada

  7. Ficheros • Tira de bytes identificados por un nombre • Tipos: • Regular Files • Ficheros con datos de usuario • Directories • CharacterSpecial Files • Dispositivos E/S en serie (terminales, impresoras)

  8. Ficheros • Información organizada en bloques: • Sector: unidad de transferencia • Definida por el HW • #sector  disco, cara, pista, … • Bloque: unidad de asignación • Definido por el SO • Que tamaño definimos?

  9. Ficheros • Estructura Árbol Secuencia de bytes Secuencia de bloques

  10. Ficheros • Acceso a ficheros • Secuencial • Para leer el elemento n hay que leer los n-1 anteriores • “Aleatorio” (RandomAcces Files) • Puedes escoger que elemento leer en cada momento

  11. Ficheros • Atributos de un fichero • Metadatos • Información del SO • Ejemplos de atributos • Creador • Dueño • Flags (Read-only, oculto, sistema) • Fechas (creación, modificación, último acceso) • Tamaño • Protección

  12. Ficheros • Operaciones • Crear • Eliminar • Abrir • Cerrar • Leer • Escribir • Posicionar • Obtener atributos • Establecer atributos

  13. Sistema de Ficheros Llamadas a sistema UNIX/Linux

  14. Llamadas a sistema: open • Crea las estructuras de datos en SO para usar un fichero • int open (char *path, intflags, [intrights]) • path: ruta del fichero que se va a abrir • flags: modo de apertura • rights: permisos RWX (en caso de creación) • Devuelve: el id de la TC que se ha asignado -1 en caso de error

  15. Llamadas a sistema: open • Flags : • Modo apertura (obligatorio) • O_RDONLY • O_WRONLY • O_RDWR • Modo de creación (opcional) • O_CREAT : ∄, lo crea ∃, lo abre • O_EXCL+O_CREAT : ∄, lo crea ∃, error • O_APPEND: posiciona elpunteroen EOF • O_TRUNC: borra el contenido del fichero previamente

  16. Llamadas a sistema: open • Ejemplos • fd=open(“hola1.txt”, O_WRONLY|O_CREAT, 660); • fd=open(“hola2.txt”, O_CREAT|O_WRONLY|O_TRUNC); • fd=open(“hola3.txt”, O_RDONLY); • Que hace el SO; • Buscar posición en la tabla de canales (TDVA) • Nueva entrada en la TFA • TC[n]  TFA

  17. Llamadas a sistema: close • Libera las estructuras de datos del SO de un fichero • intclose (intfile_descriptor) • file_descriptor : posición de la TC • Devuelve: 0 OK -1 en caso de error

  18. Llamadas a sistema: close • Ejemplos • fd=open(“hola.txt”, O_WRONLY|O_CREAT, 660); • close(fd); • close(1); • Que hace el SO; • Libera la posición en la tabla de canales (TDVA) • Decrementa o libera TFA • Si el proceso finaliza, se liberan todos las entradas de la TC

  19. Llamadas a sistema: dup • Duplica una entrada de la tabla de canales • intdup (intfile_descriptor) • file_descriptor : posición de la TC • Devuelve: el id de la TC que se ha asignado -1 en caso de error

  20. Llamadas a sistema: dup • Ejemplos • fd=dup(1); • Que hace el SO; • Busca la primera posición libre de la TC • La nueva posición de la TC apunta al mismo punto de la TFA que la pasada por parámetro • Incrementa en #referencias en la TFA

  21. Llamadas a sistema: dup2 • Igual que dup, pero especificando el FD destino • int dup2 (intfd_origen, intfd_destino) • fd_origen: posición de la TC a duplicar • fd_destino: posición de la TC donde duplicar • Devuelve: el id de la TC que se ha asignado -1 en caso de error

  22. Llamadas a sistema: read • Leer datos de un dispositivo virtual • intread (intfd, void *buffer, intnbytes) • fd: posición de la TC • buffer: donde se guardaran los datos leídos • nbytes: numero de bytes que queremos leer • Devuelve: • -1: en caso de error • 0: Fin de fichero (no hay mas datos) • >0: #bytes leídos

  23. Llamadas a sistema: read • Ejemplos • n = read(fd, &c, sizeof(char)); • n = read(fd, &vect, 16); • Que hace el SO: • Lee los bytes correspondientes • Avanza el puntero (*r/w) de la TFA

  24. Llamadas a sistema: write • Escribe datos en un dispositivo virtual • intwrite(intfd, void *buffer, intnbytes) • fd: posición de la TC • buffer: datos a escribir • nbytes: numero de bytes que queremos escribir • Devuelve: • -1: en caso de error • >0: #bytes escritos • Ejemplos • n = write(fd, &c, sizeof(char));

  25. Llamadas a sistema: lseek • Modifica *r/w (puntero de lectura/escritura) • intlseek(intfd, longoffset, intwhence) • fd: posición de la TC • offset: desplazamiento en bytes de *r/w • whence: punto inicial del *r/w • SEEK_SET: inicio fichero • SEEK_CUR: posición actual • SEEK_END: final fichero • Devuelve: • -1: en caso de error • ≥0: nueva posición de *r/w (desde el inicio)

  26. Sistema de Ficheros Ejercicios solucionados

  27. Ejercicio: MiCat intmain(void) { char c; while (read(0,&c,sizeof(char)) > 0 ) { write(1,&c,sizeof(char)); } } intmain(void) { char buffer[64]; intsize; size=read(0,buffer,sizeof(buffer)); while (size > 0 ) { write(1,buffer,size); size=read(0,buffer,sizeof(buffer)); } }

  28. Ejercicio: MiCP intmain(intargc, char **argv) { intfo,fd,size; char buffer[128]; fo=open(argv[1],O_RDONLY); fd=open(argv[2],O_WRONLY|O_CREAT|O_EXCL,0600); size=read(fo,buffer,sizeof(buffer)); while (size > 0 ) { write(fd,buffer,size); size=read(fo,buffer,sizeof(buffer)); } close(fo); close(fd); }

  29. Ejercicio: MiAppend intmain(intargc, char **argv) { intfo,fd,size; char buffer[128]; fo=open(argv[1],O_RDONLY); fd=open(argv[2],O_WRONLY|O_CREAT,0600); lseek(fd,0,SEEK_END); size=read(fo,buffer,sizeof(buffer)); while (size > 0 ) { write(fd,buffer,size); size=read(fo,buffer,sizeof(buffer)); } close(fo); close(fd); }

  30. Ejercicio: MiSearch intmain(intargc, char** argv) {char c; intfo,i,j=0,fin,size,x,actual; fo=open(argv[1],O_RDONLY); fin=lseek(fo,0,SEEK_END); lseek(fo,0,SEEK_SET); size=strlen(argv[2]); for(i=0;i<fin;i++) { read(fo,&c,sizeof(char)); if(c==argv[2][0]) {x=1; j=0; actual=lseek(fo,0,SEEK_CUR); while(c==argv[2][j] && j<size && x>0) { x=read(fo,&c,sizeof(char)); j++;} if(j==size) printf("%d\n",actual-1); lseek(fo,actual,SEEK_SET); } } }

  31. Ejercicio: Stock typedefstruct {char id[20]; intcantidad; } registro; int main() { intfic; registro r1,r2,r3; r1.cantidad=10; sprintf(r1.id,"Panrico"); r2.cantidad=20; sprintf(r2.id,"Bimbo"); fic=open("stock.db",O_RDWR|O_CREAT,0600); write(fic,&r1,sizeof(registro)); write(fic,&r2,sizeof(registro)); lseek(fic,0,SEEK_SET); read(fic,&r3,sizeof(registro)); printf("%s, %d\n",r3.id,r3.cantidad); close(fic); }

  32. Sistema de Ficheros Ejemplos de FileSystem

  33. CD-ROM FileSystem (iso 9660) • Asignación de ficheros “contigua” • Todos los bloques del archivo están contiguos • Se necesita una única entrada por archivo: • Bloque inicial • Longitud del archivo • Ventajas: • Acceso eficiente al disco • Localización del bloque n sencilla • Desventajas: • Asignación previa, no flexible Archivo

  34. CD-ROM FileSystem (iso 9660) • Directoryentry • Location of file: #sector inicio fichero 1 1 8 8 7 1 2 4 1 4-15 Flags Extended attribute record lenght Interleave Directoryentrylength BaseName.Ext;Ver RootDirectory

  35. FileAllocationTable (FAT) • Asignación de ficheros “encadenada” • Cada bloque de datos reserva espacio para un puntero que indica cual es el siguiente bloque del archivo • Se necesita una única entrada por archivo: • Bloque inicial • Ventajas: • Asignación previa o dinámica • Desventajas: • Para acceder al bloque n, hay que acceder a todos los anteriores Archivo

  36. FileAllocationTable (FAT) • Asignación “encadenada” en tabla • Los punteros a bloques se guardan juntos en una tabla, no en los propios bloques • Se necesita una única entrada por archivo: • Bloque inicial • Ventajas sobre la anterior: • Para acceder al bloque n, hay que acceder a la tabla • Se puedereplicar la tabla Archivo

  37. FileAllocationTable (FAT) • Directoryentry • FAT-12, FAT-16, FAT-32 • 12, 16 y 32: #bits @disco 8 3 1 10 2 2 2 4

  38. UNIX v7 FileSystem • Asignación “indexada” • Existe un bloque índice por fichero • El bloque índice contiene: • Punteros a bloques que forman el fichero • Acaba con un puntero a NULL • Ventajas: • Buen acceso secuencial y directo • Desventajas: • Perdida de espacio (bloques de índices grandes) • Muchos accesos en ficheros grandes (bloques de índices pequeños) Archivo

  39. UNIX v7 FileSystem • Asignación “indexada” multinivel • Existe un bloque índice por fichero • El bloque índice contiene: • Punteros a bloques que forman el fichero • Punteros a bloques con más índices • Acaba con un puntero a NULL • Se crea una estructura jerárquica de índices • Ventajas: • Muy pocos accesos incluso en ficheros grandes • Poca perdida de espacio en ficheros pequeños

  40. UNIX v7 FileSystem i-node Bloque 1 indirección Bloque 2 indirección Bloque 3 indirección

  41. UNIX v7 FileSystem • Directoryentry • i-Nodo 64 bytes 2 14

  42. UNIX v7 FileSystem Accesos para buscar /usr/rubenb/fich.txt Bloque 406 datos de /usr/rubenb i-nodo 6 de /usr Bloque 132 datos de/usr i-nodo 19 de /usr/rubenb Rootdirectory

  43. Sistema de Ficheros Virtual FileSystem

  44. Estructura Llamadas a sistema (open, read, …) VirutalFileSystem (VFS) EXT2 EXT3 NTFS FAT32 I/O Buffer Cache Device Driver Device Driver Device Driver

  45. Virtual FileSystem • Los sistemas operativos soportan diferentes sistemas de ficheros • Linux: Ext2, Ext3, FAT, ISO9660, XFS, RaiserFS, NTFS… • Estructura en dos niveles: • Estructuras independientes del SF (VFS) • Estructuras dependientes del SF (Ext2, Ext3…)

  46. Virtual FileSystem • VFS • Contiene descripciones de los sistemas soportados • file_operations, inode_operations, superblock_operations • virtual i-nodes y virtual files • Las llamadas de sistema interaccionan con estas estructuras independientes • vfs_create, vfs_unlink, ... • Estructuras dependientes del SF • accedidas a través de las operaciones descritas en el VFS • i-nodes, FAT, ...

  47. Virtual FileSystem Tabla de canales Tabla de ficheros abiertos Tabla de i-nodos virtuales Tabla de canales Acceso compartido Acceso concurrente

More Related