Sistema de Ficheros

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

description

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

Transcript of Sistema de Ficheros

Page 1: Sistema de Ficheros

Sistema de FicherosARISO 2

Escola Tècnica Superior d’Enginyeria de Telecomunicació de Barcelona(Universitat Politècnica de Catalunya)

Page 2: Sistema de Ficheros

Esta obra está bajo una licencia Reconocimiento-No comercial-Compartir bajo la misma licencia 2.5 España de Creative Commons. Para ver una copia de esta licencia, visite:

http://creativecommons.org/licenses/by-nc-sa/2.5/es/

o envíe una carta a:Creative Commons, 559 Nathan Abbott Way, Stanford,California 94305, USA.

Licencia Creative Commons

Page 3: Sistema de Ficheros

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)

Licencia Creative Commons

Page 4: Sistema de Ficheros

Sistema de FicherosIntroducción

Page 5: Sistema de Ficheros

Bus

Dispositivos I/O

Dispositivo

Controlador Dispositivo

Hardware◦ Dispositivo◦ Controlador

Software◦ Driver (parte del SO)

Métodos espera◦ Busy waiting◦ Interrupts◦ DMA (Direct Memory Acces)

Page 6: Sistema de Ficheros

Sistema de Ficheros Organización virtual de la información

almacenada

/

bin etc tmp lib dev usr

profes

ariso2

rubenb

docs

F1.txt F2.txt

practicas proyectos

alumnes

Page 7: Sistema de Ficheros

Ficheros Tira de bytes identificados por un nombre Tipos:

◦ Regular Files Ficheros con datos de usuario

◦ Directories◦ Character Special Files

Dispositivos E/S en serie (terminales, impresoras)

Page 8: Sistema de Ficheros

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?

Page 9: Sistema de Ficheros

Ficheros Estructura

Secuenciade bytes

Secuenciade bloques

Árbol

Page 10: Sistema de Ficheros

Ficheros Acceso a ficheros

◦ Secuencial Para leer el elemento n hay que leer los n-1

anteriores

◦ “Aleatorio” (Random Acces Files) Puedes escoger que elemento leer en cada momento

Page 11: Sistema de Ficheros

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

Page 12: Sistema de Ficheros

Ficheros Operaciones

◦ Crear◦ Eliminar◦ Abrir◦ Cerrar◦ Leer◦ Escribir◦ Posicionar◦ Obtener atributos◦ Establecer atributos

Page 13: Sistema de Ficheros

Sistema de FicherosLlamadas a sistema UNIX/Linux

Page 14: Sistema de Ficheros

Llamadas a sistema: open Crea las estructuras de datos en SO para

usar un fichero

int open (char *path, int flags, [int rights])◦ 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

Page 15: Sistema de Ficheros

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 el puntero en EOF O_TRUNC: borra el contenido del fichero previamente

Page 16: Sistema de Ficheros

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

Page 17: Sistema de Ficheros

Llamadas a sistema: close Libera las estructuras de datos del SO de un

fichero

int close (int file_descriptor)◦ file_descriptor : posición de la TC

◦ Devuelve: 0 OK -1 en caso de error

Page 18: Sistema de Ficheros

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

Page 19: Sistema de Ficheros

Llamadas a sistema: dup Duplica una entrada de la tabla de canales

int dup (int file_descriptor)◦ file_descriptor : posición de la TC

◦ Devuelve: el id de la TC que se ha asignado -1 en caso de error

Page 20: Sistema de Ficheros

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

Page 21: Sistema de Ficheros

Llamadas a sistema: dup2 Igual que dup, pero especificando el FD

destino

int dup2 (int fd_origen, int fd_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

Page 22: Sistema de Ficheros

Llamadas a sistema: read Leer datos de un dispositivo virtual

int read (int fd, void *buffer, int nbytes)◦ 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

Page 23: Sistema de Ficheros

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

Page 24: Sistema de Ficheros

Llamadas a sistema: write Escribe datos en un dispositivo virtual int write(int fd, void *buffer, int nbytes)

◦ 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));

Page 25: Sistema de Ficheros

Llamadas a sistema: lseek Modifica *r/w (puntero de lectura/escritura) int lseek(int fd, long offset, int whence)

◦ 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)

Page 26: Sistema de Ficheros

Sistema de FicherosEjercicios solucionados

Page 27: Sistema de Ficheros

Ejercicio: MiCatint main(void){char c;while (read(0,&c,sizeof(char)) > 0 ){ write(1,&c,sizeof(char)); }

}

int main(void){ char buffer[64];int size;size=read(0,buffer,sizeof(buffer)); while (size > 0 ){ write(1,buffer,size);size=read(0,buffer,sizeof(buffer)); }

}

Page 28: Sistema de Ficheros

Ejercicio: MiCPint main(int argc, char **argv){int fo,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);}

Page 29: Sistema de Ficheros

Ejercicio: MiAppendint main(int argc, char **argv){int fo,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);}

Page 30: Sistema de Ficheros

Ejercicio: MiSearchint main(int argc, char** argv){char c;int fo,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);} } }

Page 31: Sistema de Ficheros

Ejercicio: Stocktypedef struct {char id[20]; int cantidad; } registro;int main(){int fic;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);}

Page 32: Sistema de Ficheros

Sistema de FicherosEjemplos de File System

Page 33: Sistema de Ficheros

CD-ROM File System (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

Page 34: Sistema de Ficheros

CD-ROM File System (iso 9660)

Directory entry

Location of file: #sector inicio fichero

      Location of file   File Size   Date and Time       CD # L File Name     Sys

1 1 8 8 7 1 2 4 1 4-15

Directory entry length

Extended attribute record lenghtFlags

Interleave

BaseName.Ext;Ver

Directory entry

Directory entry

Directory entry

Directory entry

Root Directory

Page 35: Sistema de Ficheros

File Allocation Table (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

Page 36: Sistema de Ficheros

File Allocation Table (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 puede replicar la tabla

Archivo

Page 37: Sistema de Ficheros

File Allocation Table (FAT) Directory entry

FAT-12, FAT-16, FAT-32◦ 12, 16 y 32: #bits @disco

File name  Ext.   Atr Reserved  Time Date 1st Bl Size 8 3 1 2 2 2 410

Block Size

FAT-12 FAT-16 FAT -32

0,5 KB 2 Mb

1 KB 4 Mb

2 KB 8 Mb 128 Mb

4 KB 16 Mb 256 Mb 1 Tb

8 KB 521 Mb 2 Tb

16 KB 1 Gb 2 Tb

32 KB 2 Gb 2 Tb

Page 38: Sistema de Ficheros

UNIX v7 File System 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)

i

Archivo

Page 39: Sistema de Ficheros

UNIX v7 File System 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

Page 40: Sistema de Ficheros

UNIX v7 File SystemBloque Datos

Bloque Datos

Bloque Datos

Bloque Datos

Bloque Datos

Bloque Datos

Bloque Datos

Bloque Datos

Bloque 1 indirección

i-node

Bloque 2 indirección

Bloque 3 indirección

Bloque 168Bloque 174Bloque 185Bloque 448Bloque 251

Page 41: Sistema de Ficheros

UNIX v7 File System Directory entry

i-Nodo64 bytes

# i-node  File name2 14

Campo

Bytes

Descripcion

Mode 2 File Type, protection bits

Nlinks 2 # directory entries que apuntan a este i-nodo

Uid 2 Id del usuario al que pertenece el fichero

Gid 2 Id del grupo al que pertenece el fichero

Size 4 Tamaño en bytes del fichero

Addr 39 Direcciones de 13 bloques (10 datos, 3 de indirecciones)

Gen 1 Numero de generación (incrementa con la reutilización)

Atime 4 Fecha de ultimo acceso

Mtime 4 Fecha de ultima modificación

Ctime 4 Fecha del último cambio del i-nodo

Page 42: Sistema de Ficheros

UNIX v7 File System

inodeFilena

me

1 .

1 ..

4 bin

7 dev

14 lib

9 etc

6 usr

8 tmp

inodeFilena

me

6 .

1 ..

19 rubenb

30 victorr

51 xavim

26 tonis

inodeFilena

me

19 .

6 ..

91 ariso2

96 fich.txt

99 notas

ModoTamañoTimes

UsuarioGrupo

132

ModoTamañoTimes

UsuarioGrupo

406

Root directoryi-nodo 6 de /usr

Bloque 132 datos de/usr

i-nodo 19 de /usr/rubenb

Bloque 406 datos de

/usr/rubenb

Accesos para buscar /usr/rubenb/fich.txt

Page 43: Sistema de Ficheros

Sistema de FicherosVirtual File System

Page 44: Sistema de Ficheros

Estructura

Llamadas a sistema (open, read, …)

Virutal File System (VFS)

EXT2 EXT3 NTFS FAT32

I/O Buffer Cache

DeviceDriver

DeviceDriver

DeviceDriver

Page 45: Sistema de Ficheros

Virtual File System 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…)

Page 46: Sistema de Ficheros

Virtual File System 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, ...

Page 47: Sistema de Ficheros

Virtual File System

struct files_stru

ct

struct file

f_count f_pos, f_mode,

2struct

files_struct

struct dentry

d_count d_iname

1

2

struct inode

d_count d_iname

1

1Tabla de canales

Tabla de ficheros abiertos Tabla de i-nodos virtuales

Tabla de canales

Accesocompartido

Accesoconcurrent

e