Upload
skule
View
33
Download
0
Embed Size (px)
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
Citation preview
Sistema de FicherosARISO 2
Escola Tècnica Superior d’Enginyeria de Telecomunicació de Barcelona(Universitat Politècnica de Catalunya)
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
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
Sistema de FicherosIntroducción
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)
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
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)
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?
Ficheros Estructura
Secuenciade bytes
Secuenciade bloques
Árbol
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
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
Ficheros Operaciones
◦ Crear◦ Eliminar◦ Abrir◦ Cerrar◦ Leer◦ Escribir◦ Posicionar◦ Obtener atributos◦ Establecer atributos
Sistema de FicherosLlamadas a sistema UNIX/Linux
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
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
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
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
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
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
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
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
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
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
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));
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)
Sistema de FicherosEjercicios solucionados
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)); }
}
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);}
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);}
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);} } }
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);}
Sistema de FicherosEjemplos de File System
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
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
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
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
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
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
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
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
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
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
Sistema de FicherosVirtual File System
Estructura
Llamadas a sistema (open, read, …)
Virutal File System (VFS)
EXT2 EXT3 NTFS FAT32
I/O Buffer Cache
DeviceDriver
DeviceDriver
DeviceDriver
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…)
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, ...
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