capítulo 8 gestión de archivos y directorios - …sandoval/apuntesso/cap08.pdf · • objeto que...

46
1 Sistemas operativos: una visión aplicada Capítulo 8 Gestión de Archivos y Directorios Sistemas operativos: una visión aplicada 1 © J. Carretero, F. García, P. de Miguel, F. Pérez Contenido Visión del usuario del sistema de archivos Archivos Directorios Servicios de archivos Servicios de directorios Sistemas de archivos El servidor de archivos

Upload: hoangkhuong

Post on 20-Sep-2018

229 views

Category:

Documents


0 download

TRANSCRIPT

1

Sistemas operativos: una visión aplicada

Capítulo 8Gestión de Archivos y Directorios

Sistemas operativos: una visión aplicada 1 © J. Carretero, F. García, P. de Miguel, F. Pérez

Contenido

• Visión del usuario del sistema de archivos• Archivos• Directorios• Servicios de archivos• Servicios de directorios• Sistemas de archivos• El servidor de archivos

2

Sistemas operativos: una visión aplicada 2 © J. Carretero, F. García, P. de Miguel, F. Pérez

Visión del usuario

• Visión lógica:– Archivos – Directorios – Sistemas de archivos y particiones

• Visión física: – Bloques o bytes ubicados en dispositivos

Visiónlógica

Visiónfísica

Sistemas operativos: una visión aplicada 3 © J. Carretero, F. García, P. de Miguel, F. Pérez

Función principal

• El SF establece una correspondencia entre los archivos y los dispositivos lógicos.

SISTEMADE

FICHEROS

ProtecciónInte

rfaz

de

acce

so

3

Sistemas operativos: una visión aplicada 4 © J. Carretero, F. García, P. de Miguel, F. Pérez

Características para el usuario

• Almacenamiento permanentes de información. No desaparecen aunque se apague el computador.

• Conjunto de información estructurada de forma lógica según criterios de aplicación.

• Nombres lógicos y estructurados.• No están ligados al ciclo de vida de una aplicación particular.• Abstraen los dispositivos de almacenamiento físico.• Se acceden a través de llamadas al sistema operativo o de

bibliotecas de utilidades.

Sistemas operativos: una visión aplicada 5 © J. Carretero, F. García, P. de Miguel, F. Pérez

Sistema de archivos

• 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 archivos 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

4

Sistemas operativos: una visión aplicada 6 © J. Carretero, F. García, P. de Miguel, F. Pérez

Archivos: visión lógica• Conjunto de información relacionada que ha sido definida por su creador • Estructura de un archivo:

– Secuencia o tira de bytes (UNIX, POSIX)

– Registros (de tamaño fijo o variable)

Posición

Registro 1

Registro 3

Registro 2

Registro 4

Registro n

C1

C1

C1

C1

C1

C2

C2

C2

C2

C2

C3

C3

C3

C3

C3

C5C5

C5

C5

C5

C4C4

C4

C4

C4

Registro 1

Registro 3

Registro 2

Registro 4

Registro n

C1

C1

C1

C1

C1

C2

C2

C2

C3C3

C3

C4

C4

C4

C4

C3

C3

C5

C5

Sistemas operativos: una visión aplicada 7 © J. Carretero, F. García, P. de Miguel, F. Pérez

Concepto de archivo

• Un espacio lógico de direcciones contiguas usado para almacenar datos

• Tipos de archivos: – Datos:

• numéricos • carácter • binarios

– Programas: • código fuente • archivos objetos (imagen de carga)

– Documentos

5

Sistemas operativos: una visión aplicada 8 © J. Carretero, F. García, P. de Miguel, F. Pérez

Representación del archivo

• La información relacionada con el archivo se mantiene en el descriptor del archivo, al que se apunta desde los directorios.• Es distinto en cada sistema operativo: nodo-i, registro Windows, etc.•Tipos de archivos:

–Archivos normales: ASCII y binarios.–Archivos especiales: de bloques y de caracteres

–Atributos de un archivo:–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

Sistemas operativos: una visión aplicada 9 © J. Carretero, F. García, P. de Miguel, F. Pérez

Ejemplos de representación

Nombre Atrib.

Size KBAgrup. FAT

cabecera AtributosTamañoNombre

Seguridad

Datos

Vclusters

6

Sistemas operativos: una visión aplicada 10 © J. Carretero, F. García, P. de Miguel, F. Pérez

Nombres de fichero y extensiones I

• Muy importante para los usuarios. Es característico de cada sistema de archivos.

• Problema: usar nombre lógicos basados en tiras de caracteres.• Motivo: los usuarios no recuerdan el nombre 001223407654• Tipo y longitud cambian de un sistema a otro

– Longitud: fija en MS-DOS o variable en UNIX– Extensión: obligatoria o no, más de una o no, fija para cada

tipo de archivos, etc.• Sensibles a tipografía. Ejemplo: “CATALINA” y “catalina”

son el mismo archivo en Windows pero distintos en LINUX.• El sistema de ficheros trabaja con descriptores internos, sólo

distingue algunos formatos (ejecutables, texto, ...). Ejemplo: número mágico UNIX.

Sistemas operativos: una visión aplicada 11 © J. Carretero, F. García, P. de Miguel, F. Pérez

Nombres de fichero y extensiones II

• Los directorios relacionan nombres lógicos y descriptores internos de ficheros• Las extensiones son significativas para las aplicaciones (html, c, cpp, etc.)

7

Sistemas operativos: una visión aplicada 12 © J. Carretero, F. García, P. de Miguel, F. Pérez

Estructura del fichero

• Ninguna - secuencia de palabras o bytes (UNIX)• Estructura sencilla de registros

– Líneas– Longitud fija– Longitud variable

• Estructuras complejas– Documentos con formato (HTML, postscript)– Fichero de carga reubicable (módulo de carga)

• Se puede simular estructuras de registro y complejas con una estructura plana y secuencias de control

• ¿Quién decide la estructura?– Interna: El sistema operativo– Externa: Las aplicaciones

Sistemas operativos: una visión aplicada 13 © J. Carretero, F. García, P. de Miguel, F. Pérez

Archivos: visión lógica y física

• Usuario: Visión lógica.• Sistema operativo: visión física ligada a dispositivos. Conjunto de bloques.

Posición

1

13

25

7

19

4

16

28

10

22

2

14

26

8

20

5

17

29

11

23

3

15

27

9

21

6

18

30

12

24

Bloques de la Unidad de Disco

Archivo ABloques: 13

201831619

Visión lógica

Visión física

8

Sistemas operativos: una visión aplicada 14 © J. Carretero, F. García, P. de Miguel, F. Pérez

Archivos: visión física

• Bloque – Unidad de transferencia – 2n sectores – Parámetro fijo por sistema de archivos

• Agrupación – Unidad de asignación – 2p bloques – Aumenta la secuencialidad del archivo

• Descripción de la estructura física: – Bloques utilizados

Sistemas operativos: una visión aplicada 15 © J. Carretero, F. García, P. de Miguel, F. Pérez

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

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

Tipo de Fichero y ProtecciónNúmero de Nombres

PropietarioGrupo del Propietario

TamañoInstante de creación

Instante del último accesoInstante de la última modificación

Puntero a bloque de datos 0Puntero a bloque de datos 1

Puntero a bloque de datos 9Puntero indirecto simplePuntero indirecto doblePuntero indirecto triple

nodo-i

Punterosa Bloquesde Datos

Punterosa Bloquesde Datos

Punterosa Bloquesde Datos

Punterosa Bloquesde Datos

Punterosa Bloquesde Datos

Punterosa Bloquesde Datos

9

Sistemas operativos: una visión aplicada 16 © J. Carretero, F. García, P. de Miguel, F. Pérez

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ízNombre Atrib. KB Agrup.

Directorio pep_dir

carta1.wp R 24 74

prue.zip 16 91 7576

91

51

74

45

58

27

FAT

7576

58

92

Nombre Atrib. KB Agrup.

Sistemas operativos: una visión aplicada 17 © J. Carretero, F. García, P. de Miguel, F. Pérez

Métodos de Acceso

• Acceso secuencial: lectura de los bytes del archivo en orden ascendente, empezando por el principio.– read next, write next, reset, no read after last write, …– rewind: ir al principio para buscar hacia delante– Lectura -> posición = posición + datos leídos– Dispositivos de cinta– ISAM: método de acceso secuencial indexado

• Acceso Directo:– read n, write n, goto n, rewrite n, read next, write next, …– n = número de bloque relativo al origen– Dispositivos: discos magnéticos

10

Sistemas operativos: una visión aplicada 18 © J. Carretero, F. García, P. de Miguel, F. Pérez

Contenido

• Visión del usuario del sistema de archivos• Archivos

• Directorios• Servicios de archivos• Servicios de directorios• Sistemas de archivos• El servidor de archivos• Puntos a recordar

Sistemas operativos: una visión aplicada 19 © J. Carretero, F. García, P. de Miguel, F. Pérez

Concepto de directorio

• Objeto que relaciona de forma unívoca un nombre de usuario de archivo con su descriptor interno

• Organizan y proporcionan información sobre la estructuración de los sistemas de archivos

• Una colección de nodos que contienen información acerca de los archivos

11

Sistemas operativos: una visión aplicada 20 © J. Carretero, F. García, P. de Miguel, F. Pérez

Directorios: visión lógica

• Esquema jerárquico. • Cuando se abre un archivo 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 archivos (nombres únicos) – Proporciona una gestión de la distribución => agrupar

archivos de forma lógica (mismo usuario, misma aplicación)

Sistemas operativos: una visión aplicada 21 © J. Carretero, F. García, P. de Miguel, F. Pérez

Estructura de los directorios

• Tanto la estructura del directorio como los archivos residen en discos

• Los directorios se suelen implementar como archivos• Copias de respaldo en cintas, por seguridad• Información en un directorio: nombre, tipo, dirección, longitud

máxima y actual, tiempos de acceso y modificación, dueño, etc.• Hay estructuras de directorio muy distintas. La información

depende de esa estructura.• Dos alternativas principales:

– Almacenar atributos de archivo en entrada directorio– Almacenar <nombre, identificador>, con datos archivo en

una estructura distinta. Ésta es mejor.

12

Sistemas operativos: una visión aplicada 22 © J. Carretero, F. García, P. de Miguel, F. Pérez

NombreNodo-i: Puntero al descriptor del archivo

Directorio de CP/M

NombreTipo de archivo

Contadorde bloques

Código deusuario

archivoextendido

Númerosde bloque

. . .

Directorio de MS-DOS

Directorio de UNIX

NombreTipo de archivo Reservado

Atributos Fecha Tamaño

Hora

Númerodel primer bloque

Ejemplo de entradas de directorio

Sistemas operativos: una visión aplicada 23 © J. Carretero, F. García, P. de Miguel, F. Pérez

Directorio de un nivel

• Un único directorio para todos los usuarios• Problemas de nombrado y agrupación

Directorio

Archivos

carta mapa.gif lista.txt programa.o... ...

... ...

13

Sistemas operativos: una visión aplicada 24 © J. Carretero, F. García, P. de Miguel, F. Pérez

Directorio de dos niveles

• Un directorio por cada usuario• Camino de acceso automático o manual• El mismo nombre de archivo para varios usuarios• Búsqueda eficiente, pero problemas de agrupación

Directoriomaestromarivi miguel elvira... ...

archivos... ...

Directoriodel usuario

datos lista.c claves... ...

archivos... ...

Directoriodel usuario

test agenda claves... ...

archivos... ...

Directoriodel usuario

mail lista.c mio.o... ...

Sistemas operativos: una visión aplicada 25 © J. Carretero, F. García, P. de Miguel, F. Pérez

Directorio con estructura de árbol

• Búsqueda eficiente y agrupación• Nombres relativos y absolutos -> directorio de trabajo

Directorioraíz

tmp home usr... ...

marivi miguel elvira...

test agenda claves

sh rm vi

bin include mail

mio.o

buzonstdio.h

datos lista.c claves

correo agenda

14

Sistemas operativos: una visión aplicada 26 © J. Carretero, F. García, P. de Miguel, F. Pérez

Directorio con estructura de árbol

• Los nombres absolutos contienen todo el camino• Los nombres relativos parten del directorio de trabajo o actual• Cambio de directorio:

– cd /spell/mail/prog– cd prog

• Borrar un archivo: rm <nombre-archivo>• Crear un subdirectorio: mkdir <nombre_dir>• Ejemplo:

– cd /spell/mail – mkdir count– ls /spell/mail/count

• Borrar un subdirectorio: rm -r mail

Sistemas operativos: una visión aplicada 27 © J. Carretero, F. García, P. de Miguel, F. Pérez

Nombres jerárquicos

• Nombre absoluto: especificación del nombre respecto a la raíz (/en LINUX, \ en Windows).

• Nombre relativo: especificación del nombre respecto a un directorio distinto del raíz– Ejemplo: (Estamos en /users/) miguel/claves– Relativos al dir. de trabajo o actual: aquel en el que se está al

indicar el nombre relativo. En Linux se obtiene con pwd• Directorios especiales:

– . Directorio de trabajo. Ejemplo: cp /users/miguel/claves .– .. Directorio padre. Ejemplo: ls ..– Directorio HOME: el directorio base del usuario

15

Sistemas operativos: una visión aplicada 28 © J. Carretero, F. García, P. de Miguel, F. Pérez

Interpretación de nombres en LINUX. I

clavestextos

7583265

.

.....

.

..

Sistemas operativos: una visión aplicada 29 © J. Carretero, F. García, P. de Miguel, F. Pérez

• Interpretar /users/miguel/claves– Traer a memoria entradas archivo con nodo-i 2– Se busca dentro users y se obtiene el nodo-i 342– Traer a memoria entradas archivo con nodo-i 342– Se busca dentro miguel y se obtiene el nodo-i 256– Traer a memoria entradas archivo con nodo-i 256– Se busca dentro claves y se obtiene el nodo-i 758– Se lee el nodo-i 758 y ya se tienen los datos del archivo

• ¿Cuándo parar?– Se ha encontrado el nodo-i del archivo– No se ha encontrado y no hay más subdirectorios– Estamos en un directorio y no contiene la siguiente

componente del nombre (por ejemplo, miguel).

Interpretación de nombres en LINUX. II

16

Sistemas operativos: una visión aplicada 30 © J. Carretero, F. García, P. de Miguel, F. Pérez

Sistemas de archivos y particiones

• Volumen: conjunto coherente de metainformación y datos. • Ejemplos de Sistemas de archivos:

Boot Dos copiasde la FAT

DirectorioRaíz

Datos yDirectorios

Boot nodos-iSuperBloque

Mapasde bits

Datos yDirectorios

MS-DOS

UNIX

Sistemas operativos: una visión aplicada 31 © J. Carretero, F. García, P. de Miguel, F. Pérez

Contenido

• Visión del usuario del sistema de archivos• Archivos• Directorios

• Servicios de archivos• Servicios de directorios• Sistemas de archivos• El servidor de archivos• Puntos a recordar

17

Sistemas operativos: una visión aplicada 32 © J. Carretero, F. García, P. de Miguel, F. Pérez

Operaciones genéricas sobre archivos

• creat: crea un archivo con un nombre y protección y devuelve un descriptor

• delete: borra el archivo con un nombre• open: abre un archivo con nombre para una(s) operación(es) y

devuelve un descriptor• close: cierra un archivo abierto con un descriptor• read: lee datos de un archivo abierto, usando su descriptor, a un

almacén en memoria • write: escribe datos a un archivo abierto, usando su descriptor,

desde un almacén en memoria • lseek: mueve el apuntador a relativo_a+ desplazamiento• ioctl: permite manipular los atributos de un archivo

Sistemas operativos: una visión aplicada 33 © J. Carretero, F. García, P. de Miguel, F. Pérez

Servicios POSIX para archivos

• Visión lógica: tira secuencial de bytes• Apuntador de posición a partir del cual se efectúan las operaciones• Descriptores de archivos: enteros de 0 a 64K• Predefinidos (describir programas independientes de dispositivos):

– 0: entrada estándar– 1: salida estándar– 2: salida de error

• Fork: duplicación de BCP, pero compartición de tabla de archivos.• Servicios consulta y modificación atributos.• Protección:

– dueño grupo mundo– rwx rwx rwx

• Ejemplos: 755 indica rwxr-xr-x

18

Sistemas operativos: una visión aplicada 34 © J. Carretero, F. García, P. de Miguel, F. Pérez

Archivos, directorios y servicios en POSIX (UNIX)

• Tipos de archivo: – Normales – Directorios – Especiales

• Nombres de archivo 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

Sistemas operativos: una visión aplicada 35 © J. Carretero, F. García, P. de Miguel, F. Pérez

creat. Crea un archivo

• Servicio:

#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int creat(char *name, mode_t mode);

• Argumentos:– name Nombre de archivo – mode Bits de permiso para el archivo

• Devuelve: – Devuelve un descriptor de archivo ó -1 si error.

19

Sistemas operativos: una visión aplicada 36 © J. Carretero, F. García, P. de Miguel, F. Pérez

creat. Crea un archivo (II)

• Descripción: – El archivo se abre para escritura. – Si no existe crea un archivo vació.

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

Sistemas operativos: una visión aplicada 37 © J. Carretero, F. García, P. de Miguel, F. Pérez

unlink. Borra un archivo

• Servicio: #include <unistd.h>int unlink(const char* path);

• Argumentos: – path nombre del archivo

• Devuelve: – Devuelve 0 ó -1 si error.

• Descripción: – Decrementa el contador de veces que el archivo está abierto.

Si el contador es 0, borra el archivo y libera sus recursos.

20

Sistemas operativos: una visión aplicada 38 © J. Carretero, F. García, P. de Miguel, F. Pérez

open. abre un archivo• Servicio:

#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(char *name, int flag, ...);

• Argumentos: – name puntero al nombre del archivo – 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 archivo

abierto • O_CREAT Si existe no tiene efecto. Si no existe lo crea • O_TRUNC Trunca si se abre para escritura

Sistemas operativos: una visión aplicada 39 © J. Carretero, F. García, P. de Miguel, F. Pérez

open. Abre un archivo II

• Devuelve: – Un descriptor de archivo ó -1 si hay error.

• Ejemplos:

fd = open("/home/juan/datos.txt");fd = open("/home/juan/datos.txt",

O_WRONLY | O_CREAT | O_TRUNC, 0750);

21

Sistemas operativos: una visión aplicada 40 © J. Carretero, F. García, P. de Miguel, F. Pérez

close. Cierra un descriptor de archivo

• Servicio: int close(int fd);

• Argumentos: – fd descriptor de archivo

• Devuelve: – Cero ó -1 si error.

• Descripción: – El proceso pierde la asociación a un archivo.

Sistemas operativos: una visión aplicada 41 © J. Carretero, F. García, P. de Miguel, F. Pérez

read. Lectura de un archivo• Servicio:

#include <sys/types.h>ssize_t read(int fd, void *buf, size_t n_bytes);

• Argumentos: – fd descriptor de archivo – 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 archivo o

se interrumpe por una señal. – Después de la lectura se incrementa el puntero del archivo con el número

de bytes realmente transferidos.

22

Sistemas operativos: una visión aplicada 42 © J. Carretero, F. García, P. de Miguel, F. Pérez

write. Escritura de un archivo• Servicio:

#include <sys/types.h>ssize_t write(int fd, void *buf, size_t n_bytes);

• Argumentos: – fd descriptor de archivo – 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 archivo o se interrumpe por una señal. – Después de la escritura se incrementa el puntero del archivo con el

número de bytes realmente transferidos. – Si se rebasa el fin de archivo el archivo aumenta de tamaño.

Sistemas operativos: una visión aplicada 43 © J. Carretero, F. García, P. de Miguel, F. Pérez

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 archivo – 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 archivo + offset

23

Sistemas operativos: una visión aplicada 44 © J. Carretero, F. García, P. de Miguel, F. Pérez

fnctl. modificación de atributos de un archivo

• Servicio: #include <sys/types.h>int fnctl(int fildes, int cmd /* arg*/ ...);

• Argumentos: – fildes descriptor de archivos– cmd mandato para modificar atributos, puede haber varios.

• Devuelve: – 0 para éxito ó -1 si error

• Descripción: – Modifica los atributos de un archivo abierto.

Sistemas operativos: una visión aplicada 45 © J. Carretero, F. García, P. de Miguel, F. Pérez

dup. Duplica un descriptor de archivo

• Servicio: int dup(int fd);

• Argumentos: – fd descriptor de archivo

• Devuelve: – Un descriptor de archivo que comparte todas las propiedades del fd ó -1

si error. • Descripción:

– Crea un nuevo descriptor de archivo que tiene en común con el anterior:

• Accede al mismo archivo • Comparte el mismo puntero de posición • El modo de acceso es idéntico.

– El nuevo descriptor tendrá el menor valor numérico posible.

24

Sistemas operativos: una visión aplicada 46 © J. Carretero, F. García, P. de Miguel, F. Pérez

stat.Obtiene información sobre un archivo

• 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 archivo – fd descriptor de archivo – buf puntero a un objeto de tipo struct stat donde se

almacenará la información del archivo. • Devuelve:

– Cero ó -1 si error

Sistemas operativos: una visión aplicada 47 © J. Carretero, F. García, P. de Miguel, F. Pérez

stat.Obtiene información sobre un archivo

• Descripción:– Obtiene información sobre un archivo y la almacena en una estructura de

tipo struct stat:

struct stat {mode_t st_mode; /* modo del archivo */ino_t st_ino; /* número del archivo */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 */

};

25

Sistemas operativos: una visión aplicada 48 © J. Carretero, F. García, P. de Miguel, F. Pérez

stat.Obtiene información sobre un archivo

• Comprobación del tipo de archivo aplicado a st_mode: S_ISDIR(s.st_mode) Cierto si directorioS_ISCHR(s.st_mode) Cierto si especial de caracteresS_ISBLK(s.st_mode) Cierto si especial de bloquesS_ISREG(s.st_mode) Cierto si archivo normalS_ISFIFO(s.st_mode) Cierto si pipe o FIFO

Sistemas operativos: una visión aplicada 49 © J. Carretero, F. García, P. de Miguel, F. Pérez

Ejemplo. Copia un archivo 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;

26

Sistemas operativos: una visión aplicada 50 © J. Carretero, F. García, P. de Miguel, F. Pérez

Ejemplo. Copia un archivo en otro (II)

/* abre el archivo de entrada */fd_ent = open(argv[1], O_RDONLY); if (fd_ent < 0) {

perror("open");exit(-1);

}

/* crea el archivo de salida */fd_sal = creat(argv[2], 0644);if (fd_sal < 0) {

close(fd_ent);perror("open");exit(-1);

}

Sistemas operativos: una visión aplicada 51 © J. Carretero, F. García, P. de Miguel, F. Pérez

Ejemplo. Copia un archivo en otro (III)

/* bucle de lectura del archivo de entrada */while ((n_read = read(fd_ent, buffer, BUFSIZE)) > 0) {

/* escribir el buffer al archivo de salida */if (write(fd_sal, buffer, n_read) < n_read) {

perror("write2);close(fd_ent); close(fd_sal);exit(-1);

}}

if (n_read < 0) { perror("read");close(fd_ent); close(fd_sal);exit(-1);

} close(fd_ent); close(fd_sal);exit(0);

}

27

Sistemas operativos: una visión aplicada 52 © J. Carretero, F. García, P. de Miguel, F. Pérez

Contenido

• Visión del usuario del sistema de archivos• Archivos• Directorios• Servicios de archivos

• Servicios de directorios• Sistemas de archivos• El servidor de archivos• Puntos a recordar

Sistemas operativos: una visión aplicada 53 © J. Carretero, F. García, P. de Miguel, F. Pérez

Servicios POSIX para directorios

• Visión lógica: tabla de entradas nombre lógico, nodo-i• Cada entrada tiene la siguiente estructura:

Struct dirent {char *d_name; /* nombre archivo */...

}

• Gestión complicada porque los nombres de archivo tienen longitud variable.

• Servicios POSIX: gestión de directorios y de la tabla

28

Sistemas operativos: una visión aplicada 54 © J. Carretero, F. García, P. de Miguel, F. Pérez

mkdir. Crea un directorio

• Servicio: #include <sys/types.h>#include <dirent.h>int mkdir(const 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

Sistemas operativos: una visión aplicada 55 © J. Carretero, F. García, P. de Miguel, F. Pérez

rmdir. Borra un directorio

• Servicio: #include <sys/types.h>int rmdir(const 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.

29

Sistemas operativos: una visión aplicada 56 © J. Carretero, F. García, P. de Miguel, F. Pérez

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.

Sistemas operativos: una visión aplicada 57 © J. Carretero, F. García, P. de Miguel, F. Pérez

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.

30

Sistemas operativos: una visión aplicada 58 © J. Carretero, F. García, P. de Miguel, F. Pérez

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.

Sistemas operativos: una visión aplicada 59 © J. Carretero, F. García, P. de Miguel, F. Pérez

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.

31

Sistemas operativos: una visión aplicada 60 © J. Carretero, F. García, P. de Miguel, F. Pérez

link. Crea una entrada de directorio

• Servicio: #include <unistd.h>

int link(const char *existing, const char *new);int symlink(const char *existing, const char *new);

• Argumentos: – existing nombre del archivo existente. – new nombre de la nueva entrada que será un enlace al archivo existente.

• Devuelve: – Cero ó -1 si error.

• Descripción: – Crea un nuevo enlace, físico o simbólico, para un archivo 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.

Sistemas operativos: una visión aplicada 61 © J. Carretero, F. García, P. de Miguel, F. Pérez

unlink. Elimina una entrada de directorio

• Servicio: #include <sys/types>int unlink(char *name);

• Argumentos: – name nombre de archivo

• Devuelve: – Cero ó -1 si error

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

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

32

Sistemas operativos: una visión aplicada 62 © J. Carretero, F. García, P. de Miguel, F. Pérez

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.

Sistemas operativos: una visión aplicada 63 © J. Carretero, F. García, P. de Miguel, F. Pérez

rename. Cambia el nombre de un archivo

• Servicio: #include <unistd.h>int rename(char *old, char *new);

• Argumentos: – old nombre de un archivo existente – new nuevo nombre del archivo

• Devuelve: – Cero ó -1 si error

• Descripción: – Cambia el nombre del archivo old. El nuevo nombre es new.

33

Sistemas operativos: una visión aplicada 64 © J. Carretero, F. García, P. de Miguel, F. Pérez

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

Sistemas operativos: una visión aplicada 65 © J. Carretero, F. García, P. de Miguel, F. Pérez

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

34

Sistemas operativos: una visión aplicada 66 © J. Carretero, F. García, P. de Miguel, F. Pérez

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

}

Sistemas operativos: una visión aplicada 67 © J. Carretero, F. García, P. de Miguel, F. Pérez

Contenido

• Visión del usuario del sistema de archivos• Archivos• Directorios• Servicios de archivos• Servicios de directorios

• Sistemas de archivos• El servidor de archivos• Puntos a recordar

35

Sistemas operativos: una visión aplicada 68 © J. Carretero, F. García, P. de Miguel, F. Pérez

Sistemas de archivos y particiones

• El sistema de archivos permite organizar la información dentro de los dispositivos de almacenamiento secundario en un formato inteligible para el sistema operativo.

• Previamente a la instalación del sistema de archivos es necesario dividir físicamente, o lógicamente, los discos en particiones o volúmenes [Pinkert1989].

• Una partición es una porción de un disco a la que se la dota de una identidad propia y que puede ser manipulada por el sistema operativo como una entidad lógica independiente.

• Una vez creadas las particiones, el sistema operativo debe crear las estructuras de los sistemas de archivos dentro de esas particiones. Para ello seproporcionan mandatos como format o mkfs al usuario. – #mkswap –c /dev/hda2 20800– #mkfs -c /dev/hda3 –b 8196 123100

Sistemas operativos: una visión aplicada 69 © J. Carretero, F. García, P. de Miguel, F. Pérez

Partición 2

Partición 3

Partición 5Partición 4

Tipos de particiones

36

Sistemas operativos: una visión aplicada 70 © J. Carretero, F. García, P. de Miguel, F. Pérez

Sistemas de archivos y particiones (I)

• Sistema de archivos: conjunto coherente de metainformación y datos. • Ejemplos de Sistemas de archivos:

Boot Dos copiasde la FAT

DirectorioRaíz

Datos yDirectorios

Boot nodos-iSuperBloque

Mapasde bits

Datos yDirectorios

MS-DOS

UNIX

Sistemas operativos: una visión aplicada 71 © J. Carretero, F. García, P. de Miguel, F. Pérez

Sistemas de archivos y particiones (II)

• Descripción de sistemas de archivos: – El sector de arranque en MS-DOS – El superbloque en UNIX

• Relación sistema de archivos-dispositivo: – Típico: 1 dispositivo N sistemas de archivos (particiones) – Grandes archivos: N dispositivos 1 sistema de archivos

• Típicamente cada dispositivo se divide en una o más particiones (en cada partición sistema de archivos)

• La tabla de particiones indica el principio, el tamaño y el tipo de cada partición.

37

Sistemas operativos: una visión aplicada 72 © J. Carretero, F. García, P. de Miguel, F. Pérez

Bloques y agrupaciones

• Bloque: agrupación lógica de sectores de disco y es la unidad de transferencia mínima que usa el sistema de archivos. – Optimizar la eficiencia de la entrada/salida de los

dispositivos secundarios de almacenamiento. – Todos los sistemas operativos proporcionan un tamaño de

bloque por defecto.– Los usuarios pueden definir el tamaño de bloque a usar

dentro de un sistema de archivos mediante el mandato mkfs. • Agrupación: conjunto de bloques que se gestionan como una

unidad lógica de gestión del almacenamiento. – El problema que introducen las agrupaciones, y los bloques

grandes, es la existencia de fragmentación interna.

Sistemas operativos: una visión aplicada 73 © J. Carretero, F. García, P. de Miguel, F. Pérez

Tamaño de Bloque

ancho de banda

uso del disco

Anc

ho d

e B

anda

(K

byte

s/se

c)

Uso

del

Esp

acio

de

Dis

co

0

50

100

500

800

256 512 1K 2K 4K 8K 16K 32K

0

100 %

25

50

75

Tamaño bloque, ancho banda y uso disco

38

Sistemas operativos: una visión aplicada 74 © J. Carretero, F. García, P. de Miguel, F. Pérez

Estructuras de sistemas de archivos

Sistemas operativos: una visión aplicada 75 © J. Carretero, F. García, P. de Miguel, F. Pérez

Contenido

• Visión del usuario del sistema de archivos• Archivos• Directorios• Servicios de archivos• Servicios de directorios• Sistemas de archivos

• El servidor de archivos• Puntos a recordar

39

Sistemas operativos: una visión aplicada 76 © J. Carretero, F. García, P. de Miguel, F. Pérez

Servidor de archivos

• Para proporcionar un acceso eficiente y sencillo a los dispositivos de almacenamiento, todos los sistemas operativos tienen un servidor de archivos que permite almacenar, buscar y leer datos fácilmente.

• Dicho servidor de archivos tiene dos tipos de problemas de diseño muy distintos entre sí:– Definir la visión de usuario del sistema de entrada/salida,

incluyendo servicios, archivos, directorios, sistemas de archivos, etc.

– Definir los algoritmos y estructuras de datos a utilizar para hacer corresponder la visión del usuario con el sistema físicode almacenamiento secundario.

Sistemas operativos: una visión aplicada 77 © J. Carretero, F. García, P. de Miguel, F. Pérez

Estructura del servidor de archivos

Proceso deUsuario 1

Proceso deUsuario 2

Proceso deUsuario 3

Proceso deUsuario n

. . .Nivel deusuario

Nivel desistema

Manejadores de Dispositivo

Servidor de Bloques

Módulo de Organización de Archivos

Cache de Bloques

ext2 msdos ffs . . .

. . .

proc

Sistema de Archivos Virtual

40

Sistemas operativos: una visión aplicada 78 © J. Carretero, F. García, P. de Miguel, F. Pérez

Servidor de bloques

• Se encarga de emitir los mandatos genéricos para leer y escribir bloques a los manejadores de dispositivo.

• La E/S de bloques de archivo, y sus posibles optimizaciones, se lleva a cabo en este nivel del servidor de archivos.

• Las operaciones se traducen a llamadas de los manejadores de cada tipo de dispositivo específico y se pasan al nivel inferior del sistema de archivos.

• Esta capa oculta los distintos tipos de dispositivos, usando nombres lógicos para los mismos. Por ejemplo, /dev/hda3será un dispositivo de tipo hard disk (hd), cuyo nombre principal es a y en el cual se trabaja sobre su partición 3.

• Los mecanismos de optimización de la E/S, como la cache de bloques, se incluye en este nivel.

Sistemas operativos: una visión aplicada 79 © J. Carretero, F. García, P. de Miguel, F. Pérez

Descomposición en operaciones de bloques

• Archivos con estructura de bytes – Escritura leer

Fichero (tira de bytes)Fichero (tira de bytes)

Bloques

41

Sistemas operativos: una visión aplicada 80 © J. Carretero, F. García, P. de Miguel, F. Pérez

Manejadores de dispositivos

• Un manejador por cada dispositivo, o clase de dispositivo, del sistema. • Su función principal es recibir ordenes de E/S de alto nivel, tal como

move_to_block 234, y traducirlas al formato que entiende el controladordel dispositivo, que es dependiente de su hardware.

• Habitualmente, cada dispositivo tiene una cola de peticiones pendientes, de forma que un manejador puede atender simultáneamente a varios dispositivosdel mismo tipo.

• Una de las principales funciones de los manejadores de dispositivos es recibir las peticiones de entrada/salida y colocarlas en el lugar adecuado de la cola de peticiones del dispositivo afectado. – La política de inserción en cada cola puede ser diferente, dependiendo del

tipo de dispositivo o de la prioridad de los dispositivos. Para un disco, por ejemplo, se suele usar la política CSCAN.

Sistemas operativos: una visión aplicada 81 © J. Carretero, F. García, P. de Miguel, F. Pérez

Flujo de datos en el S. de A.

Usuario

read (fd, buffer, tamaño)

tamaño

buffer

bloques del archivo

bloques del dispositivo

bloques del disco

archivo lógico(VFS)

archivo lógico(FFS)

Manejador de disco y

dispositivo

Bloques lógicos(Servidor

de bloques)

3

1340

1340

1756

1756

840

840

8322

8322

4 5 6

42

Sistemas operativos: una visión aplicada 82 © J. Carretero, F. García, P. de Miguel, F. Pérez

Relación Sector Lógico y Sector Físico (I)

• El nivel más básico del servidor de bloques– Los dispositivos de almacenamiento secundario se muestran

como un array lineal de bloques.– Estructura física tridimensional

• Número de sector físico• Número de cabeza• Número de cilindro

– Parámetros• Sectores/pista• Pistas/cilindro (Nº de cabezas)• Cilindros/disco (Nº de cilindros)

Sistemas operativos: una visión aplicada 83 © J. Carretero, F. García, P. de Miguel, F. Pérez

Relación Sector Lógico y Sector Físico (II)

• Lógico= Nº sector físico + (sectores/pista)*cabeza +(sectores/pista)*(Nº cabezas)*cilindro

Sector lógico Sector físico Cabeza Cilindro 0 0 0 0 1 1 0 0 2 2 0 0 3 3 0 0 4 0 1 0 5 1 1 0 6 2 1 0 7 3 1 0 8 0 0 1

… … … …

43

Sistemas operativos: una visión aplicada 84 © J. Carretero, F. García, P. de Miguel, F. Pérez

Estructuras de datos asociadas al S. de A. (I)

• Tabla de archivos abiertos (tdaa) por un proceso, dentro del BCP, con sus descriptores temporales y el valor del apuntador de posición del archivo para ese proceso. – El tamaño de esta tabla define el máximo número de archivos que cada

proceso puede tener abierto de forma simultánea. – El descriptor de archivo fd indica el lugar de tabla. La tdaa se rellena

de forma ordenada, de forma que siempre se ocupa la primera posición libre de la tabla.

– En los sistemas UNIX cada proceso tiene tres descriptores de archivos abiertos por defecto: entrada estándar, fd = 0, salida estándar, fd = 1, error estándar, fd = 2.

Sistemas operativos: una visión aplicada 85 © J. Carretero, F. García, P. de Miguel, F. Pérez

Correspondencia bloques-archivos

• ¿Cómo asignar los bloques de disco a un archivo y cómo hacerlos corresponder con la imagen del archivo que tiene la aplicación?

• Asignación de bloques contiguos. – Sencillo de implementar y el rendimiento de la E/S es muy bueno.– Si no se conoce el tamaño total del archivo cuando se crea, puede ser necesario

buscar un nuevo hueco de bloques consecutivos cada vez que el archivo crece.– Fragmentación externa -> compactar el disco.

• Asignación de bloques discontiguos. – Se asigna al archivo el primer bloque que se encuentra libre. – No hay fragmentación externa del disco ni búsqueda de huecos. – Los archivos pueden crecer mientras exista espacio en el disco. – Complica la implementación de la imagen de archivo -> mapa de bloques

del archivo.

44

Sistemas operativos: una visión aplicada 86 © J. Carretero, F. García, P. de Miguel, F. Pérez

Mecanismos enlazados

• Listas o índices enlazados: desde cada entrada de un bloque existe un enlace al siguiente bloque del archivo.

• Ejemplo: tabla FAT de Windows

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

archivo A: 6 8 4 2

archivo B: 5 9 12

archivo C: 10 3 13

FAT

Sistemas operativos: una visión aplicada 87 © J. Carretero, F. García, P. de Miguel, F. Pérez

Mecanismos indexados

• Cada archivo tiene sus bloques de índice que incluyen apuntadores a los bloques de disco del archivo. – El orden lógico se consigue mediante la inserción de los apuntadores en

orden creciente, a partir del primero, en los bloques de índices. – Ventaja: basta con traer a memoria el bloque de índices donde está el

apuntador a los datos para tener acceso al bloque de datos. Si un apuntador de bloque ocupa 4 bytes y el bloque es de 4 Kbytes, con un único acceso a disco tendremos 1024 apuntadores a bloques del archivo.

– Problema: el espacio extra necesario para los bloques de índices. • Ese problema, fue resuelto en UNIX BSD combinando un sistema de índices

puros con un sistema de índices multinivel, que es que se usa actualmente en UNIX y LINUX.� • Permite almacenar archivos pequeños sin necesitar bloques de índices. � • Permite accesos aleatorios a archivos muy grandes con un máximo de 3

accesos a bloques de índices.

45

Sistemas operativos: una visión aplicada 88 © J. Carretero, F. García, P. de Miguel, F. Pérez

Mapa de bloques en un nodo-i

nodo-i

Bloque indirecto

Indirecto simple

Indirecto doble

Indirecto triple

Direcciones delos 10 primeros

bloques

Información del archivo

820

1134

675

10211

8204

2046

20464

342

1623

DISCO

...

...

Sistemas operativos: una visión aplicada 89 © J. Carretero, F. García, P. de Miguel, F. Pérez

Gestión de espacio libre

• Mapas de bits, o vectores de bits: un bit por recurso existente (descriptor de archivo, bloque o agrupación). Si el recurso está libre, el valor del bit asociado al mismo es 1, si está ocupado es 0. – Ejemplo, sea un disco en el que los bloques 2, 3, 4, 8, 9 y 10 están ocupados y el

resto libres, y en el que los descriptores de archivo 2, 3 y 4 están ocupados. Sus mapas de bits de serían:• MB de bloques: 1100011100011.... M• MB de descriptores: 1100011...

– Fácil de implementar y sencillo de usar. Eficiente si el dispositivo no está muy lleno o muy fragmentado.

• Listas de recursos libres: mantener enlazados en una lista todos los recursos disponibles (bloques o descriptores de archivos) manteniendo un apuntador al primer elemento de la lista. – Este método no es eficiente, excepto para dispositivos muy llenos y

fragmentados– Uso de agrupaciones.

46

Sistemas operativos: una visión aplicada 90 © J. Carretero, F. García, P. de Miguel, F. Pérez

Ejemplo de listas de recursos

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Bloques libres 7 14 16 1711 18 (A)

Bloques libres 11,1 16,314,17,1 (B)

Sistemas operativos: una visión aplicada 91 © J. Carretero, F. García, P. de Miguel, F. Pérez

Incremento de prestaciones

• Basados en el uso de almacenamiento intermedio de datos de entrada/salidaen memoria principal. Estos mecanismos son de dos tipos:– Discos RAM, cuyos datos están almacenados sólo en memoria.

• Aceptan todas las operaciones de cualquier otro sistema de archivos y son gestionados por el usuario.

• Pseudodispositivos para almacenamiento temporal o para operaciones auxiliares del sistema operativo. Su contenido es volátil.

– Cache de datos, instaladas en secciones de memoria principal controladas por el sistema operativo, donde se almacenan datos para optimizar accesos posteriores.

• Se basan en la existencia de proximidad espacial y temporal en las referencias a los datos de entrada/salida.

• Dos caches importantes dentro del servidor de archivos: cache denombres y cache de bloques.