e/s y sistema de ficheros maría de los santos pérez hernández [email protected]

80
E/S y sistema de ficheros María de los Santos Pérez Hernández [email protected]

Upload: paco-portales

Post on 07-Feb-2015

2 views

Category:

Documents


0 download

TRANSCRIPT

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

E/S y sistema de ficheros

María de los Santos Pérez Herná[email protected]

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

[email protected] 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)

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

[email protected] 3

Referencias bibliográficas “Sistemas Operativos: una visión aplicada”

Jesús Carretero et al.McGraw Hill, 2001

“Sistemas Operativos” Willian StallingWillian Stalling Prentice Hall, 1997

“Operating System Concepts” A. Silberschatz, P. GalvinAddison-Wesley, 1998

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

[email protected] 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

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

[email protected] 5

Hardware de E/S

CPU

discos

controladorde disco

controlador de im presora

otroscontroladores

m em oria

im presora

BUS

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

[email protected] 6

Conceptos básicos de E/S

Software de E/S Objetivos: independencia de los dispositivos Estructuración del SW de E/S:

S W de E /S de n ive l de usuario

S W de E /S independiente de los d ispositivos (S F)

M anejadores de d ispositivos (d rive rs)

M anejadores de in terrupciones

C ontro ladores

D ispositivos

H ardw are

Softw are

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

[email protected] 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

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

[email protected] 8

Sistema de ficheros (II) El SF establece una correspondencia entre los

ficheros y los dispositivos lógicos.

SISTEM AD E

FIC H ER O S

ProtecciónInte

rfa

z de

acc

eso

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

[email protected] 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

Visiónlóg ica

Visiónfísica

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

[email protected] 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)

Posición

R egistro 1

R egistro 3

R egistro 2

R egistro 4

R egistro n

C 1

C 1

C 1

C 1

C 1

C 2

C 2

C 2

C 2

C 2

C 3

C 3

C 3

C 3

C 3

C 5

C 5

C 5

C 5

C 5

C 4

C 4

C 4

C 4

C 4

R egistro 1

R egistro 3

R egistro 2

R egistro 4

R egistro n

C 1

C 1

C 1

C 1

C 1

C 2

C 2

C 2

C 3

C 3

C 3

C 4

C 4

C 4

C 4

C 3

C 3

C 5

C 5

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

[email protected] 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.

C la ve

R e g is tro

Ficheroind ice

F ichero principa l

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

[email protected] 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

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

[email protected] 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

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

[email protected] 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.

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

[email protected] 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

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

[email protected] 16

Ficheros: visión física

Conjunto de bloques ubicados en un dispositivo

Bloques

Bytes

Visión FísicaVisión Lógica

Fichero

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

[email protected] 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

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

[email protected] 18

Descripción física en UNIX (nodo-i)

Tamaño máximo del fichero: 10Sb+(Sb/4)Sb +(Sb/4)2Sb +(Sb/4)3SbSb el tamaño del bloque y direcciones de bloques de 4 bytes.

Tip o d e F ic he ro y P ro tec c ió nN ú m e ro d e N o m b res

P ro p ie ta r ioG rup o d e l P ro p ie ta rio

Ta m añ oIn s ta n te d e c rea c ió n

In s ta n te d e l ú ltim o a cc e s oIn s ta n te d e la ú ltim a m o d if ic ac ió n

P u n te ro a b loq u e d e d a to s 0P u n te ro a b loq u e d e d a to s 1

P u n te ro a b loq u e d e d a to s 9P u n te ro ind ire c to s im p leP u n te ro ind ire c to d o b leP u n te ro ind ire c to t rip le

nodo-i

Pu n te ro sa B lo q ue sd e D atos

Pu n te ro sa B lo q ue sd e D atos

Pu n te ro sa B lo q ue sd e D atos

Pu n te ro sa B lo q ue sd e D atos

Pu n te ro sa B lo q ue sd e D atos

Pu n te ro sa B lo q ue sd e D atos

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

[email protected] 19

Descripción física en MS-DOS (FAT)

FAT de 12 bits 4K agrupaciones FAT de 16 bits 64K agrupaciones

<eof>

<eof>

<eof>

<eof>

pep_dir dir 5 27

fiche1.txt 12 45

Directorio RaízN om bre A trib . KB Agrup.

Directorio pep_dir

carta1.wp R 24 74

prue.z ip 16 91 7576

91

51

74

45

58

27

FAT

7576

58

92

N om bre A trib . KB Agrup.

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

[email protected] 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)

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

[email protected] 21

Directorios: visión física

Directorios en MS-DOS

Directorios en UNIX

B y te s 8 3 1 1 0 2 2 2 4

E x te n s ió n

N o m b r e

A t r i b u to s

R e s e rv a d o

H o r a F e c h a P r im e r a

a g ru p a c ió n

( F A T )

T a m a ñ o

N om bre de fichero

N úm ero de nodo-i

Bytes 2 14

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

[email protected] 22

Volúmenes y particiones

Volumen: conjunto coherente de metainformación y datos. Ejemplos de volúmenes:

B o o t D o s c o p ia sd e la FAT

D ire c to r ioR a íz

D a to s yD ire c to r io s

B o o t n o d o s - iS u p e rB lo q u e

M ap a sd e b its

D a to s yD ire c to r io s

M S-DO S

UN IX

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

[email protected] 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.

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

[email protected] 24

Montado de volúmenes 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

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

[email protected] 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

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

[email protected] 26

Enlace físico

ln /user/pepe/datos.txt /user/juan/datos2.txt

/

usr lib

pepe

user

juan

prog.cdatos.txt

prog.c

..

.datos.txt

23100

28400

pepe

..

.

datos2.txt

80100

60 enlaces = 2prueba.txt

datos2.txtprueba.txt

28

descripción del fichero

juannodo-i 28

/

usr lib

pepe

user

prog.c prueba.txtdatos.txt

prog.c

..

.datos.txt

23100

28400

pepe

..

.prueba.txt

80100

60

juan

juan

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

[email protected] 27

Enlace simbólico

ln -s /user/pepe/da tos.txt /user/juan/datos2.tx t

/

us r lib

pe pe

user

juan

prog .cda to s.tx t

prog .c

..

.da to s.tx t

23100

130400

pe pe

..

.

da to s2.tx t

80100

60prue ba.tx t

da to s2.tx tprue ba.tx t

28

juan

en laces = 1

/use r/pepe /da tos .tx t

no do-i 1 30

en laces = 1

de scrip c ió n de l fichero

no do-i 2 8

/

us r lib

pe pe

user

prog .c prue ba.tx tda to s.tx t

prog .c

..

.da to s.tx t

23100

28400

pe pe

..

.prue ba.tx t

80100

60

juan

juan

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

[email protected] 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

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

[email protected] 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

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

[email protected] 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

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

[email protected] 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

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

[email protected] 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

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

[email protected] 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.

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

[email protected] 34

Operaciones sobre ficheros

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

[email protected] 35

open. Abre un fichero 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 del fichero 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);

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

[email protected] 36

creat. Crea un fichero 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);

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

[email protected] 37

read. Lectura de un fichero

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.

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

[email protected] 38

write. Escritura de un fichero

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 el tamaño máximo de un fichero o se interrumpe por una señal.

Después de la escritura se incrementa el puntero del fichero con el número de bytes realmente transferidos.

Si se rebasa el fin de fichero el fichero aumenta de tamaño.

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

[email protected] 39

close. Cierra un descriptor de fichero

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.

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

[email protected] 40

lseek. Modifica el valor del puntero de posición

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

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

[email protected] 41

dup. Duplica un descriptor de fichero

Servicio:int dup(int fd);

Argumentos: fd: descriptor de fichero

Devuelve: Un descriptor de fichero

que comparte todas las propiedades del 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érico posible.

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

[email protected] 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.

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

[email protected] 43

Operaciones sobre directorios

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

[email protected] 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.

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

[email protected] 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.

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

[email protected] 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.

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

[email protected] 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.

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

[email protected] 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

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

[email protected] 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.

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

[email protected] 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.

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

[email protected] 51

unlink. Elimina una entrada de directorio

Servicio: #include <sys/types>

int unlink(char *name);

Argumentos: name nombre de fichero

Devuelve: Cero ó -1 si error

Descripción: Elimina la entrada de directorio y decrementa el número de

enlaces del fichero 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 fichero y el fichero deja de ser accesible.

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

[email protected] 52

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.

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

[email protected] 53

rename. Cambia el nombre de un fichero

Servicio: #include <unistd.h>

int rename(char *old, char *new);

Argumentos: old nombre de un fichero existente new nuevo nombre del fichero

Devuelve: Cero ó -1 si error

Descripción: Cambia el nombre del fichero old. El nuevo nombre es new.

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

[email protected] 54

getcwd. Obtiene 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

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

[email protected] 55

Protección

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

[email protected] 56

access. Accesibilidad sobre un fichero

Servicio: #include <unistd.h>

int access(char *name, int amode); Argumentos:

name nombre del fichero amode modo de acceso que se quiere comprobar. amode es el OR inclusivo de R_OK, W_OK, X_OK o F_OK.

Devuelve: 0 si el proceso tiene acceso al fichero (para lectura,

escritura o ejecución) ó -1 en caso contrario

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

[email protected] 57

Descripción: Utiliza el UID real y el GID real (en lugar de los

efectivos) para comprobar los derechos de acceso sobre un fichero.

Ejemplos: access("fichero", F_OK) devuelve 0 si el fichero

existe ó -1 si no existe. access("fichero", R_OK|W_OK) devuelve 0 si el

proceso que ejecuta la llamada tiene permisos de acceso de lectura y escritura sobre el fichero (utilizando el UID real y el GID real).

access. Accesibilidad sobre un fichero (II)

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

[email protected] 58

umask.Asigna la máscara de

creación Servicio: #include <sys/types.h>

#include <sys/stat.h>mode_t umask(mode_t cmask);

Argumentos: cmask bits de permiso a desasignar en la creación de ficheros.

Devuelve: Devuelve la máscara previa

Descripción: Asigna la máscara de creación de ficheros del proceso que la

invoca. Los bits activos en la máscara son desactivados en la palabra de

protección del fichero. Si máscara =022 , y se crea un fichero con bits 0777 , los

bits reales del fichero serán 0755 .

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

[email protected] 59

chmod.Cambia los bits de

permiso Servicio: #include <sys/types.h>

#include <sys/stat.h>

int chmod(char *name, mode_t mode); Argumentos:

name nombre del fichero mode Nuevos bits de protección

Devuelve: Cero ó -1 si error.

Descripción: Modifica los bits de permiso y los bits SETUID y SETGID del

fichero. Sólo el propietario del fichero puede cambiar estos bits

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

[email protected] 60

chown.Cambia la propiedad de un

fichero Servicio: #include <sys/types.h>

#include <unistd.h>

int chown(char name, uid_t owner, gid_t group); Argumentos:

name nombre del fichero owner nuevo propietario del fichero group nuevo identificador de grupo del fichero

Devuelve: Cero ó -1 si error

Descripción: Modifica el identificador de usuario y de grupo del fichero Los bits SETUID y SETGID son borrados

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

[email protected] 61

Atributos

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

[email protected] 62

stat, fstat Información sobre un

fichero Servicio:

#include <sys/types.h>#include <sys/stat.h>int stat(char *name, struct stat *buf);int fstat(int fd, struct stat *buf);

Argumentos: name nombre del fichero fd descriptor de fichero buf puntero a un objeto de tipo struct stat donde

se almacenará la información del fichero. Devuelve:

Cero ó -1 si error

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

[email protected] 63

stat, fstat Información sobre un

fichero Descripción:

Obtiene información sobre un fichero y la almacena en una estructura de tipo struct stat:

struct stat {

mode_t st_mode; /* modo del fichero */

ino_t st_ino; /* número del fichero */

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 */

};

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

[email protected] 64

stat, fstat Información sobre un

fichero

Comprobación del tipo de fichero aplicado a st_mode:

S_ISDIR(s.st_mode) Cierto si directorio

S_ISCHR(s.st_mode) Cierto si especial de caracteresS_ISBLK(s.st_mode) Cierto si especial de bloquesS_ISREG(s.st_mode) Cierto si fichero normalS_ISFIFO(s.st_mode) Cierto si pipe o FIFO

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

[email protected] 65

utime.Fechas último acceso y

modifación Servicio: #include <sys/stat.h> #include <utime.h>

int utime(char *name, struct utimbuf *times); Argumentos:

name nombre del fichero 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

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

[email protected] 66

Ejemplo. Copia un fichero en otro

#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdio.h>

#define BUFSIZE 512

main(int argc, char **argv) { int fd_ent, fd_sal; char buffer[BUFSIZE]; int n_read;

/* abre el fichero de entrada */ fd_ent = open(argv[1], O_RDONLY); if (fd_ent < 0) { perror("open"); exit(1); }

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

[email protected] 67

Ejemplo. Copia un fichero en otro (II)

/* crea el fichero de salida */ fd_sal = creat(argv[2], 0644); if (fd_sal < 0) { close(fd_ent); perror("open"); exit(1); }

/* bucle de lectura del fichero de entrada */ while ((n_read = read(fd_ent, buffer, BUFSIZE)) > 0) { /* escribir el buffer al fichero de salida */ if (write(fd_sal, buffer, n_read) < n_read) { perror("write2); close(fd_ent); close(fd_sal); exit(1); } }

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

[email protected] 68

Ejemplo. Copia un fichero en otro (III)

if (n_read < 0) {

perror("read");

close(fd_ent); close(fd_sal);

exit(1);

}

close(fd_ent); close(fd_sal);

exit(0);

}

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

[email protected] 69

Ejemplo: redirecciones Programa que ejecuta ls > fichero

void main(void)

{

pid_t pid;

int status;

int fd;

fd = open("fichero", O_WRONLY|O_CREAT|O_TRUNC, 0644);

if (fd < 0) {

perror("open");

exit(1);

}

pid = fork();

switch(pid) { case -1: /* error */ perror("fork");

exit(1);

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

[email protected] 70

Ejemplo: redirecciones (II)

case 0: /* proceso hijo ejecuta "ls" */

close(STDOUT_FILENO); /* cierra la salida estandar */

dup(fd); /* duplica el descriptor del fichero */

close(fd);

execlp("ls","ls",NULL);

perror("execlp");

exit(1);

default: /* proceso padre */

close(fd); /* cierra el fichero */

while (pid != wait(&status));

}

exit(0);

}

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

[email protected] 71

Programa que lista un directorio

#include <sys/types.h>#include <dirent.h>#include <stdio.h> #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);

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

[email protected] 72

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

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

[email protected] 73

Descomposición en operaciones de bloques

Ficheros con estructura de bytes Escritura leer

F iche ro (tira de b yte s)F iche ro (tira de b yte s)

B loques

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

[email protected] 74

Descomposición en operaciones de

bloques (II) Ficheros de registros de tamaño fijo

R1 R2 R3 R4 R5 R6

R1 R2R3 R4 R5 R6R3

R6

Bloque 2Bloque 1 Bloque 3

Bloque 1 Bloque 2 Bloque 3

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

[email protected] 75

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

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

[email protected] 76

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 ficheros.

Disco

Proceso

Disco

C ache

Proceso

C ache

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

[email protected] 77

Fiabilidad del sistema de ficheros

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 seguridad) En discos

En cintas Backups incrementales

A

BA

B

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

[email protected] 78

Consistencia del sistema de ficheros

Reparar fallos software en un volumen Ejemplo: herramienta fsck Dos tipos de consistencia:

Consistencia sobre bloques:

Número de bloque

31 2 4 5 6 7 8 9 101112

1 1 0 1 0 0 1 1 1 0 1 1Bloquesen uso

Bloqueslibres

31 2 4 5 6 7 8 9 101112

0 0 1 0 2 1 0 0 0 1 0 0

Volumen consistente

31 2 4 5 6 7 8 9 101112

1 1 0 1 0 0 1 1 1 0 1 1Bloquesen uso

Bloqueslibres

31 2 4 5 6 7 8 9 101112

0 0 1 0 1 1 0 0 0 1 0 0

Número de bloque

Bloque libre duplicado

Número de bloque

31 2 4 5 6 7 8 9 10 1112

1 1 0 1 0 0 1 1 1 0 1 1Bloquesen uso

Bloqueslibres

31 2 4 5 6 7 8 9 10 1112

0 0 0 0 1 1 0 0 0 1 0 0

Número de bloque

31 2 4 5 6 7 8 9 10 1112

1 1 0 1 0 0 2 1 1 0 1 1Bloquesen uso

Bloqueslibres

31 2 4 5 6 7 8 9 10 1112

0 0 1 0 1 1 0 0 0 1 0 0

Bloque perdido

Bloque de datosduplicado

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

[email protected] 79

Consistencia del sistema de ficheros (II)

Consistencia sobre ficheros: Contador de enlaces > contador real Contador de enlaces < contador real Número de nodo-i > Número total de nodos-i Ficheros con bits de protección 0007 Ficheros con privilegios en directorios de usuario

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

[email protected] 80

Introducción a los sistemas de ficheros

distribuidos (NFS) Objetivo: compartir y distribuir ficheros entre diferentes

máquinas.

En B mount -t nfs maqA:/bin /bin mount -t nfs maqA:/usr /usr

MáquinaA

include

/

binusr

lib

MáquinaB

/

homebin usr