Gestión de almacenamiento secundario - fdi.ucm.es · o Archivos ASCII: consisten en líneas de...

13
Tema: Gestión de almacenamiento secundario Tema 5: Gestión de almacenamiento secundario 1

Transcript of Gestión de almacenamiento secundario - fdi.ucm.es · o Archivos ASCII: consisten en líneas de...

Page 1: Gestión de almacenamiento secundario - fdi.ucm.es · o Archivos ASCII: consisten en líneas de texto. o Archivos Binarios: ... proceso lee en orden todos los bytes o registros del

Tema: Gestión de almacenamiento secundario

Tema 5:

Gestión de almacenamiento secundario

1

Page 2: Gestión de almacenamiento secundario - fdi.ucm.es · o Archivos ASCII: consisten en líneas de texto. o Archivos Binarios: ... proceso lee en orden todos los bytes o registros del

Tema: Gestión de almacenamiento secundario

Profesor : M.Victoria González del Campo 5.1 INTRODUCCIÓN Necesidades básicas que motivan la existencia de archivos:

1. Almacenar gran cantidad de información que no cabe en la memoria principal. 2. Persistencia de la información más allá de distintas ejecuciones. 3. Acceso a información de forma concurrente.

La solución es el almacenamiento de la información en discos y otros medios externos en

unidades llamadas archivos. Los archivos son una colección de datos con nombre. Los archivos deben ser persistentes, es decir que no deben verse afectados por la creación o terminación de un proceso. Un archivo sólo debe desaparecer si su dueño lo elimina de forma explícita.

El responsable es el SO y lo realiza mediante la gestión del Sistema de Archivos. Esto da dos puntos de vista a estudiar:

1. El usuario ( o programa) como cliente del sistema de archivos 2. El SO como gestor del sistema de archivos.

5.2 ARCHIVOS NOMBRES DE ARCHIVO

Las reglas de nomenclatura varían de un SO a otro:

• Formato 8.3 de MS-DOS. Nombre del archivo más una extensión para indicar tipo de información almacenada. No distingue entre mayúsculas y minúsculas.

• UNIX: Nombres de cualquier longitud y sensibles a las mayúsculas. El uso de

extensiones es sólo por convenio. ESTRUCTURA DE ARCHIVOS

Los archivos se pueden estructurar de varias maneras, las más comunes son 1) Secuencia no estructurada de bytes:

• El SO no sabe qué contiene el archivo ni le interesa, lo único que ve son bytes. Cualquier significado que tenga el archivo deberán imponérselo los programas en el nivel de usuario.

• Máxima flexibilidad: los programas de usuario pueden colocar lo que deseen en sus archivos y darles los nombres que les convenga.

• MS-DOS, UNIX, WINDOWS.

2) Secuencia de registros de longitud fija.

• El archivo es una secuencia de registros de longitud fija, cada uno con su propia estructura interna.

2

Page 3: Gestión de almacenamiento secundario - fdi.ucm.es · o Archivos ASCII: consisten en líneas de texto. o Archivos Binarios: ... proceso lee en orden todos los bytes o registros del

Tema: Gestión de almacenamiento secundario

• La operación de lectura devuelve un registro y la operación de lectura sobrescribe o anexa un registro.

• Ningún sistema actual de uso general funciona así.

3) Árbol de registros de longitud variable:

• El archivo consta de un árbol de registros, no necesariamente de la misma longitud. • Cada registro tiene un campo key (llave o clave) en una posición fija del registro. • El árbol se ordena mediante el campo de clave para permitir una rápida búsqueda de una

clave particular. • La operación básica aquí no es obtener el siguiente registro, que también puede hacerse,

sino, sino obtener el que tenga una clave dada. • Se utiliza en grandes computadoras para procesamiento comercial de datos. • Se pueden añadir registros nuevos al archivo y dejar que el SO, no el usuario, quien

decida dónde colocarlos.

TIPOS DE ARCHIVOS

Muchos S. O. soportan varios tipos de archivos, por ej.: archivos normales, directorios, archivos especiales de caracteres, archivos especiales de bloques, etc., donde

• Los Archivos Normales son aquellos que contienen información del usuario. o Archivos ASCII: consisten en líneas de texto. o Archivos Binarios: Lo que simplemente significa que no son archivos ASCII. Por

lo general tienen alguna estructura interna conocida por los programas que los usan.

• Los Directorios son archivos de sistema para el mantenimiento de la estructura del sistema de archivos.

• Los Archivos Especiales de Caracteres: o Tienen relación con la E/S. o Se utilizan para modelar dispositivos de E/S (terminales, impresoras, redes, etc.).

• Los Archivos Especiales de Bloques se utilizan para modelar discos. TIPOS DE ACCESO A ARCHIVOS POR SU ORGANIZACIÓN

Los tipos de acceso más conocidos son:

• Acceso Secuencial: Los primeros SO sólo permitían este tipo de acceso a los archivos. El proceso lee en orden todos los bytes o registros del archivo comenzando por el principio, sin poder efectuar saltos ni leer en otro orden. Lo que sí podía hacerse con los archivos secuenciales era rebobinarlos para poder leerlos tantas veces como se deseara. Los archivos secuenciales eran convenientes cuando el medio de almacenamiento era la cinta magnética, no el disco.

• Acceso Aleatorio: cuando comenzaron a usarse discos para almacenar archivos se hizo posible leer los bytes o registros en cualquier orden. Si por ejemplo un cliente de una línea aérea llama para reservar un asiento en un vuelo dado, el programa de reservas deberá contar con la capacidad de acceder al registro de ese vuelo sin tener que leer primero los miles de vuelos distintos.

ATRIBUTOS DE ARCHIVO

3

Page 4: Gestión de almacenamiento secundario - fdi.ucm.es · o Archivos ASCII: consisten en líneas de texto. o Archivos Binarios: ... proceso lee en orden todos los bytes o registros del

Tema: Gestión de almacenamiento secundario

Propiedades del archivo externas a la propia información que contiene:

1. Seguridad: Protección, Contraseña, Creador, Propietario. 2. Acceso: Lectura, Oculto, Sistema, Bloqueado. 3. Tipo: ASCII o binario. 4. Tipo de acceso: Secuencial o aleatorio. 5. Información sobre los datos: Longitud de registro, posición de la clave, longitud clave. 6. Información del archivo: Fecha de creación, último acceso, última modificación, tamaño

actual, tamaño máximo.

OPERACIONES SOBRE ARCHIVOS

• Create (crear): el archivo se crea sin datos y se establecen ciertos atributos. • Delete (eliminar): si el archivo ya no es necesario debe eliminarse para liberar espacio

en disco. • Open (abrir): antes de utilizar un archivo, un proceso debe abrirlo. La finalidad es

permitir que el sistema traslade los atributos y la lista de direcciones en disco a la memoria principal para un rápido acceso en llamadas posteriores.

• Close (cerrar): cuando concluyen los accesos, los atributos y direcciones del disco ya no son necesarios, por lo que el archivo debe cerrarse y liberar espacio.

• Read (leer): los datos se leen del archivo; quien hace la llamada debe especificar la cantidad de datos necesarios y proporcionar un buffer para colocarlos. Normalmente se lee a partir de la posición que indica el apuntador de posición del archivo.

• Write (escribir): los datos se escriben en el archivo. Normalmente se lee a partir de la posición que indica el apuntador de posición del archivo, si está en medio se sobrescriben los datos, si está al final del archivo su tamaño crece.

• Append (añadir): es una forma restringida de “write”. Solo puede añadir datos al final del archivo.

• Seek (buscar): Cambia el valor del apuntador de posición del archivo. • Get attributes (obtener atributos): permite a los procesos obtener los atributos del

archivo. • Set attributes (establecer atributos): algunos atributos pueden ser determinados por el

usuario y modificados después de la creación del archivo. La información relativa al modo de protección y la mayoría de las banderas son un ejemplo obvio.

• Rename (cambiar de nombre): permite modificar el nombre de un archivo ya existente.

COMPARTIR ARCHIVOS

Varios usuarios teniendo derechos de acceso, comparten archivos (simultáneo o no) Para que lo hagan simultáneamente, además hay que asegurar un acceso consistente. Derechos básicos de acceso:

Ninguno Conocimiento (visibilidad) Ejecución Lectura Adición de información (escritura), pero sin modificar la existente Actualización: modificar, borrar y añadir datos del archivo Cambios de tipo de acceso Eliminación del archivo

4

Page 5: Gestión de almacenamiento secundario - fdi.ucm.es · o Archivos ASCII: consisten en líneas de texto. o Archivos Binarios: ... proceso lee en orden todos los bytes o registros del

Tema: Gestión de almacenamiento secundario

El propietario es la persona que creó el archivo Los derechos los asigna el propietario en función del usuario que accede. Estos derechos difieren entre S.O. Normalmente se distinguen tres tipos de usuario: (unix,linux) • Los derechos se asignan de forma individual a un usuario. • Los derechos se asignan de forma colectiva a un grupo de usuarios. • Los derechos se pueden asignar de forma colectiva a otros, que incluyen todos los usuarios. Accesos simultáneos : Problemas del acceso concurrente a los sistemas de archivos: exclusión mutua e interbloqueo.

5.3 DIRECTORIOS: UN CASO ESPECIAL DE ARCHIVO

Son utilizados por los S. O. para llevar el control de los archivos. SISTEMAS JERÁRQUICOS DE DIRECTORIOS El directorio contiene un conjunto de datos por cada archivo referenciado.

• Una posibilidad es que el directorio contenga por cada archivo referenciado

• El nombre. • Sus atributos. • Las direcciones en disco donde se almacenan los datos.

Ejemplo: MS-DOS y WINDOWS.

• Otra posibilidad es que cada entrada del directorio contenga:

• El nombre del archivo. • Un apuntador a otra estructura de datos donde se encuentran los atributos y las

direcciones en disco.

Ejemplo: UNIX

Al abrir un archivo el S. O.:

• Busca en su directorio el nombre del archivo. • Extrae los atributos y direcciones en disco. • Graba esta información en una tabla de memoria real. • Todas las referencias subsecuentes al archivo utilizarán la información de la memoria

principal.

El número y organización de directorios varía de sistema en sistema:

• Directorio único: el sistema tiene un sólo directorio con todos los archivos de todos los usuarios. Problema: en un sistema con múltiples usuarios, diferentes usuarios podrían usar por accidente los mismos nombres para sus archivos. Este esquema ya nos se usa en los sistemas multiusuario.

5

Page 6: Gestión de almacenamiento secundario - fdi.ucm.es · o Archivos ASCII: consisten en líneas de texto. o Archivos Binarios: ... proceso lee en orden todos los bytes o registros del

Tema: Gestión de almacenamiento secundario

• Un directorio por usuario: el sistema habilita un sólo directorio por cada usuario. Resolvemos el problema anterior, pero es común que los usuarios quieran agrupar sus archivos de formas lógicas. Por ello:

• Un árbol de directorios por usuario: el sistema permite que cada usuario tenga tantos directorios como necesite, respetando una jerarquía general. Casi todos los sistemas de archivos modernos están organizados de esta manera.

D1

A1 A1 A1

D1

U1

A1 A1 A1

U1 U1

D1

U1

A1 A1

U1 U1

D1

NOMBRE DE LAS RUTAS DE ACCESO

Cuando el sistema de archivos está organizado como un árbol de directorios se necesita una forma de determinar los nombres de los archivos. Los principales métodos para nombres de los archivos son

• Ruta de Acceso Absoluta: o Cada archivo tiene una ruta de acceso absoluta. o Consta de la ruta de acceso desde el directorio raíz (directorio principal) hasta el

archivo. o Los componentes de la ruta de acceso se separan mediante algún carácter llamado

“separador”. En Windows el separador es: \ y en UNIX es: / • Ruta de Acceso Relativa:

o Se utiliza junto con el concepto de directorio de trabajo o directorio activo. o Todos los nombres que no comiencen en el directorio raíz se toman en relación

con el directorio de trabajo. Por ejemplo, en UNIX el comando cp /usr/ast/correo /usr/ast/correo.bak y el comando cp correo correo.bak hacen exactamente lo mismo si el directorio de trabajo es /usr/ast

OPERACIONES CON DIRECTORIOS

Las llamadas al sistema permitidas para el manejo de los directorios tienen variación de sistema a sistema. Las más comunes son las siguientes:

• Create (crear): se crea un directorio vacío. • Delete (eliminar): se elimina un directorio, que debe estar vacío. • Opendir (abrir directorio): se pueden leer los directorios:

o Antes de poder leer un directorio, éste debe ser abierto. • Closedir (cerrar directorio): cuando se ha leído un directorio, éste debe ser cerrado para

liberar los recursos de memoria y del S.O. relativos al mismo. • Readdir (leer directorio): regresa la siguiente entrada en un directorio abierto, sin

importar el tipo de estructura de directorios que se utilice.

6

Page 7: Gestión de almacenamiento secundario - fdi.ucm.es · o Archivos ASCII: consisten en líneas de texto. o Archivos Binarios: ... proceso lee en orden todos los bytes o registros del

Tema: Gestión de almacenamiento secundario

• Rename (cambiar de nombre): cambia el nombre de un directorio de manera similar al cambio para archivos.

• Link (ligar): es una técnica que permite que un archivo aparezca en más de un directorio:

o Especifica un archivo existente y el nombre de una ruta de acceso. o Crea un enlace del archivo ya existente con el nombre especificado en la ruta de

acceso. • Unlink (desligar): se elimina una entrada del directorio:

o Si el archivo que se desea desligar aparece solo en un directorio (el caso normal): Se elimina del sistema de archivos.

o Si el archivo que se desea desligar, está presente en varios directorios: Solo se elimina la ruta de acceso especificada. Las demás rutas permanecen.

5.4 IMPLEMENTACIÓN DEL SISTEMA DE ARCHIVOS. Los sistemas de archivos se almacenan en discos. Cada partición de un disco puede contener un sistema de archivos independiente. Para ello, es necesario dar formato a la partición: format, mkfs u otra herramienta.

MBR(Master Boot Record): Registro maestro de arranque, para arrancar la computadora. El final del MBR contiene la tabla de particiones que contiene las direcciones inicial y final de cada partición. Una de las particiones está marcada como activa. Cuando se enciende la computadora, el BIOS lee el MBR del disco y lo ejecuta. Lo primero que hace el programa del MBR es localizar la partición activa, leer su primer bloque, llamado bloque de arranque, y lo ejecuta. El programa del bloque de arranque carga el S.O. contenido en esa partición. La organización de una partición de disco varía de un S.O a otro S:O. Es común que el sistema de archivos contenga algunos de los siguientes elementos:

• El Superbloque contiene todos los parámetros clave acerca del sistema de archivos y se transfiere del disco a la memoria cuando se arranca la computadora.

• A continuación podría haber información sobre bloques libres en el sistema de archivos. • Luego los nodos-i, una por archivo, proporciona todas las características del archivo. • Después el directorio raíz, que contiene la parte más alta del árbol del sistema de

archivos.

7

Page 8: Gestión de almacenamiento secundario - fdi.ucm.es · o Archivos ASCII: consisten en líneas de texto. o Archivos Binarios: ... proceso lee en orden todos los bytes o registros del

Tema: Gestión de almacenamiento secundario

• El resto del disco suele contener los demás directorios y ficheros. HARDWARE DE UN DISPOSITIVO E/S: DISCOS DUROS

Caracterización:

• Cada plato /disco tiene dos caras • Cabezas de lectura/escritura: una por cada cara de cada disco. • La superficie del disco se divide en pistas, que se subdividen en sectores. • Pista: división circular de la superficie de un disco. Número fijo por disco • Sector: subdivisión de información dentro de una pista. Unidad mínima de información

que puede leerse o escribirse del disco. Todos los sectores contienen el mismo nº de bytes. Los sectores cercanos a la orilla serán mayores físicamente que los cercanos al anillo, el espacio adicional no se utiliza.

• Cilindro: conjunto de pistas de todas las caras que pueden accederse sin mover la cabeza.

PistaSector

Cilindro

Cabezas

• Ejemplos de cálculo de espacio :

Los sectores varían desde los 32 hasta los 4096 bytes; generalmente son de 512 bytes. 4 - 32 sectores por pista. 20 - 1.500 pistas en la superficie del disco.

512*4*20*2(caras)=81.920 bytes/plato 512*32*1500*2=49.152.000 bytes/plato

9 Gb = 183 platos

PARÁMETROS DE EFICIENCIA:

• Tiempo de búsqueda: tiempo necesario para posicionar la cabeza móvil en la pista solicitada. Este tiempo es el que domina, por lo que la reducción del tiempo promedio de búsqueda puede mejorar en gran medida el rendimiento del sistema. Existen diversos algoritmos para minimizar este tiempo reordenando las peticiones de acceso a disco.

• Tiempo de latencia: tiempo necesario para que mediante giro podamos leer el sector deseado.

• Tiempo de transmisión: tiempo efectivo de transmisión de la información. IMPLEMENTACIÓN DE ARCHIVOS. 1. Asignación contigua

• Archivo = conjunto de bloques contiguos de un tamaño dado. • Ventajas:

8

Page 9: Gestión de almacenamiento secundario - fdi.ucm.es · o Archivos ASCII: consisten en líneas de texto. o Archivos Binarios: ... proceso lee en orden todos los bytes o registros del

Tema: Gestión de almacenamiento secundario

Sencilla: Para acceder a un archivo, basta con recordar la dirección del primer bloque. Directorio de archivos: sólo una entrada por archivo con el comienzo y la longitud. Rendimiento: sólo se necesita un desplazamiento de la cabeza lectora (al primer bloque)

• Desventajas Cambiar el tamaño del archivo obliga a reubicaciones donde quepa todo. Fragmentación grande del disco. Compactación muy costosa.

Nombre

A

B

Inicio

2

11

Tamaño

3

6

2

11

2. Asignación con listas enlazadas o encadenada: • Archivo = se implementa como una lista enlazada de bloques tamaño fijo en disco • La primera palabra de cada bloque se reserva para un puntero al siguiente

Datos Datos Datos

0

• Ventajas

No hay fragmentación externa. Hay fragmentación interna sólo en el último bloque. Asignación: Los ficheros pueden crecer sin problemas, cualquier bloque libre puede anexarse a la cadena. Los directorios sólo tienen que almacenar, para cada archivo, punteros al primer bloque.

• Desventajas Complica el acceso aleatorio, para leer bloque n-ésimo hay que leer los n-1 bloques anteriores (implica seguir puntero, varios accesos a disco). El acceso a secuencias de bloques es menos eficiente (más accesos).

9

Page 10: Gestión de almacenamiento secundario - fdi.ucm.es · o Archivos ASCII: consisten en líneas de texto. o Archivos Binarios: ... proceso lee en orden todos los bytes o registros del

Tema: Gestión de almacenamiento secundario

Nombre

A

B

Inicio

2

11

Tamaño

3

6

2

11

3. Asignación con lista enlazada empleando una tabla en la memoria.

• Archivo : lista enlazada donde los campos a siguiente se organizan en una tabla de disco. Se denomina tabla de asignación de archivos FAT (file allocation table)

• Cada elemento de la tabla contiene el número del bloque siguiente, el inicio de los archivos se marca con un puntero y el final con un índice especial (p. e. 0)

A 5

670

Tabla Indices : El primer bloque del fichero A es el 5, el segundo el 6 y el tercero el 7. • Ventajas

Todo el bloque de disco disponible para datos. Las búsquedas de bloque se hacen en memoria sobre la tabla (gestión de tamaño, ...) En los directorios, para cada archivo sólo hay que guardar un entero identificando el primer bloque de cada archivo. Rendimiento: aceptable para acceso secuencial y bueno para acceso directo

• Desventaja: Para que los accesos sean rápidos hay que mantener toda la tabla en memoria. Por ejemplo, para un disco de 20 Gb y bloques de 1 Kb la tabla necesita 20.000.000 de entradas, una para cada uno de los 20.000.000 de bloques de disco. Para cada entrada se necesitan 4 bytes, así que necesitaríamos 80 Mb de memoria principal todo el tiempo.

• Se usa en MS-DOS. 4. Nodo-i A cada archivo se le asocia un nodo índice con atributos más campos de direccionamiento. Éste se traslada del disco a la memoria principal al abrir el archivo.

10

Page 11: Gestión de almacenamiento secundario - fdi.ucm.es · o Archivos ASCII: consisten en líneas de texto. o Archivos Binarios: ... proceso lee en orden todos los bytes o registros del

Tema: Gestión de almacenamiento secundario

Los bloques que se asignan al archivo no tienen por qué ser contiguos. Los nodos-i contienen 52 bytes de información de direccionamiento organizados en 13 direcciones de 4 bytes. Los 10 primeros punteros apuntan a los 10 primeros bloques de datos del archivo. Si el archivo posee más de 10 bloques se usan 2 o más niveles de indexación: • La dirección 11 apunta a un bloque llamado bloque indirecto que contiene punteros a los

siguientes bloques del archivo. • Si aún no es suficiente, el puntero 12 contiene la dirección a un bloque de indexación doble

que a su vez contiene direcciones de bloques de indexación simple. • Si aún no tenemos suficiente espacio para el archivo, el puntero 13 apunta a un bloque de

indexación triple. En Unix cada bloque es de 1Kb, y se direcciona con 32 bits (4 bytes), en esta situación un bloque de datos almacena 256 direcciones de bloques, por lo que un fichero podría llegar a tener un tamaño del orden de 16Gbytes.

Ventajas:

11

Page 12: Gestión de almacenamiento secundario - fdi.ucm.es · o Archivos ASCII: consisten en líneas de texto. o Archivos Binarios: ... proceso lee en orden todos los bytes o registros del

Tema: Gestión de almacenamiento secundario

• Los nodos-i son de tamaño fijo y relativamente pequeños por lo que se pueden tener bastante tiempo en memoria principal.

• Se puede acceder a archivos pequeños con poca o ninguna indexación. • El tamaño mayor para los archivos es bastante grande.

IMPLEMENTACIÓN DE DIRECTORIOS.

Directorios en MS-DOS: Árbol jerárquico: los directorios pueden contener directorios. Entradas de 32 bytes. Nombre 8 bytes

Extensión3 bytes

Atributos 1 bytes

Reservado 10 bytes

Hora 2 bytes

Fecha 2 bytes

Bloque 1 2 bytes

Tamaño 4 bytes

Directorios en UNIX Cada entrada contiene el nombre del archivo y el nodo-i, el resto de la información se encuentra en el nodo-i. Nodo-i 2 bytes

Nombre del archivo 14 bytes

5.5 ADMINISTRACIÓN DE ESPACIO EN DISCO Como hemos dicho, para almacenar un archivo de n bytes pueden adoptarse dos estrategias:

• Asignar n bytes consecutivos de espacio en disco. Problemas: si el archivo crece es probable que tenga que pasarse a otro lugar del disco, esta operación es muy lenta.

• Dividir el archivo en varios bloques no necesariamente contiguos. Mejor esta opción que la anterior.

Una vez que se ha decidido almacenar archivos en bloques de tamaño fijo, surge la pregunta de qué tamaño debe tener un bloque:

• Si el bloque es muy grande: mucha fragmentación. • Si el bloque es muy pequeño: implica que cada archivo va a constar de muchos bloques.

Leer cada bloque por lo regular requiere un desplazamiento de la cabeza lectora, por lo que la lectura de un archivo integrado por muchos bloques pequeños es lenta. En UNIX el tamaño del bloque es 1Kb. CONTROL DE BLOQUES LIBRES: 1. Lista enlazada de bloques de disco: en cada uno de los cuales se guardan tantos números de

bloques de disco como quepan. Con bloques de 1Kb y direcciones de 32 bits, cada bloque de la lista libre contendrá los números de 255 bloques libres (se necesita una ranura para el apuntador al siguiente bloque). Sólo es preciso mantener un bloque de apuntadores en la memoria principal. Cuando se crea un archivo, los bloques que necesita se toman del bloque

12

Page 13: Gestión de almacenamiento secundario - fdi.ucm.es · o Archivos ASCII: consisten en líneas de texto. o Archivos Binarios: ... proceso lee en orden todos los bytes o registros del

Tema: Gestión de almacenamiento secundario

de apuntadores. Cuando este bloque se agota, se lee del disco un nuevo bloque de apuntadores. Puede dar lugar a un número elevado de operaciones de e/s de disco.

2. Mapa de bits: Un disco con n bloques requiere un mapa de bits con n bits. Los bloques libres se marcan con 1 en el mapa y los libres con 0. El mapa de bits requiere menos espacio, puesto que usa un bit por bloque, en comparación con los 32 bits si se usa el modelo de lista enlazada.

La elección depende de la cantidad de memoria principal para albergar la lista o el mapa de bits. Bibliografía consultada:

1. Sistemas Operativos Modernos. Ed. Prentice Hall. Autor :Tanenbaum. 2. Sistemas Operativos. Una visión aplicada. Ed. Mc-Graw-Hill. Autor: J. Carretero y otros.

13