Sistemas operativos

Anuncio
Sistemas operativos
Tema 10: Sistemas de ficheros
Sistemas de ficheros
► El
sistema de ficheros suele ser el aspecto más
visible de un SO para los usuarios.
► Objetivos:
ƒ Ofrecer una visión uniforme del almacenamiento de
información en memoria secundaria.
► El
SO oculta las propiedades físicas de los discos, y define
una unidad lógica de almacenamiento: el fichero.
ƒ Gestionar el espacio de almacenamiento y el acceso a la
información.
Sistemas de ficheros
► Los
primeros SO soportaban tipos de ficheros,
incorporando código para interpretar su estructura
y contenido.
► Actualmente, se tiende a ver los ficheros como
secuencias no interpretadas de bytes.
ƒ Máxima flexibilidad, pero mínimo soporte: queda todo
en manos de las aplicaciones.
ƒ Todo lo más, el SO distingue ficheros ejecutables, y
tipos de documentos según el programa con que se
crean o editan.
Métodos de acceso a ficheros
►
Acceso secuencial: se accede a las distintas partes de un
fichero una tras otra, en un orden predeterminado.
ƒ Al abrir un fichero, el puntero de L/E se sitúa al principio del
mismo.
ƒ Cada operación de L/E accede a la posición apuntada y hace que el
puntero avance a la posición siguiente.
►
Acceso directo: se puede acceder a las distintas partes de
un fichero en cualquier orden.
ƒ Los ficheros se ven como secuencias de bloques de longitud fija.
ƒ Las operaciones de L/E indican un número de bloque relativo al
comienzo del fichero.
►
Se puede simular de manera eficiente el acceso secuencial
sobre dispositivos de acceso directo, pero no viceversa.
Estructura física y lógica
Estructuras de sistemas de ficheros
► Muchos
sistemas de ficheros combinan dos
estructuras distintas:
ƒ Directorio de dispositivo.
► Contiene
información sobre las propiedades físicas de cada
fichero: localización en el dispositivo de almacenamiento,
tamaño, etc.
ƒ Directorio de ficheros.
► Contiene
información sobre las propiedades lógicas de cada
fichero: nombre, tipo, propietario, permisos, etc.
► La
vinculación entre ambas estructuras se hace a
través de un identificador unívoco de fichero.
Directorio de nivel único
►
Todas las entradas en el mismo nivel.
directorio
ficheros
►
►
Solución adoptada en los directorios de dispositivo.
No se utiliza en directorios de ficheros, por dos motivos
principales:
ƒ Falta de organización lógica.
ƒ Limitaciones al nombramiento: no podría haber dos ficheros con el
mismo nombre, aunque pertenecieran a distintos usuarios.
Directorio de dos niveles
►
Un directorio por cada usuario.
so1
p1.c
p2.c
func.h func.c
so2
directorio raíz
so3
p1.tgz notas
p1.c
p1b.c
core
directorios
de usuario
ficheros
►
►
Sólo se requiere unicidad de nombres dentro de cada
directorio.
Un usuario puede acceder a los ficheros de otro indicando
caminos de búsqueda.
Estructura de árbol
► Generalización
del directorio de dos niveles.
ƒ Los usuarios pueden crear subdirectorios.
home
so1
p1.pdf
prac1.c p1.pdf func.h func.c
so2
bin
opt
bash
gcc
p1.tgz p1b.tgz p1.c
info
share
texinfo web2c
Estructura de árbol
► Dos
tipos de caminos:
ƒ Absolutos: desde el directorio raíz.
ƒ Relativos: desde el directorio actual.
► Existe
un único camino para cada fichero o
subdirectorio desde el directorio raíz.
Estructura de grafo acíclico
►
Ficheros y subdirectorios pueden tener varios caminos
desde el directorio raíz (y, por extensión, varios nombres).
dict
list
all
w
spell
count
list
count words
radc
w7
list
Estructura de grafo acíclico
►
El grafo acíclico facilita la compartición de ficheros y
subdirectorios entre usuarios.
ƒ Sin embargo, complica los mecanismos de generación de
estadísticas de disco, copia de seguridad, etc.
►
Implementaciones:
ƒ Información replicada.
► Al
modificar un fichero, por consistencia, hay que modificar igualmente
todas sus réplicas.
ƒ Una única copia, y enlaces a los ficheros o subdirectorios
compartidos.
► Al
borrar un fichero o subdirectorio, se elimina un enlace.
► El fichero o subdirectorio se borra cuando no quedan enlaces a él (se
necesita un contador de referencias).
Estructura de grafo general
►
Se permite la aparición de ciclos, enlazando subdirectorios
de nivel superior.
dict
list
spell
count words
old
list
radc
ipc
w7
list
Estructura de grafo general
►
►
La existencia de bucles complica la generación de
estadísticas y los mecanismos de copia de seguridad.
Problemas con el borrado: pueden existir subdirectorios
con el contador de referencias a un valor distinto de cero,
y que sin embargo no son alcanzables desde el directorio
raíz.
ƒ Información inaccesible.
ƒ Se necesita un recolector de basura.
►
Pocas ventajas con respecto al grafo acíclico Æ la
estructura de grafo general apenas se utiliza.
Asignación de espacio
Asignación de espacio
► Objetivos
principal:
análogos a la gestión de memoria
ƒ Aprovechamiento de espacio.
ƒ Acceso eficiente a los ficheros.
► Compromiso
asignación:
común a todas las formas de
ƒ Como el almacenamiento se realiza por bloques,
aparece una fragmentación interna media de ½ bloque
por fichero.
► ¿Mejor
bloques pequeños?
► ¿Mejor
bloques grandes?
ƒ Para reducir los accesos a disco, debería maximizarse la
cantidad de información leída en cada operación de E/S.
Asignación contigua
►
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
A cada fichero se le asigna un conjunto de
bloques contiguos en disco.
ƒ Estrategias first-fit, best-fit o
worst-fit.
ƒ El directorio de dispositivo almacena la
dirección del primer bloque y el número de
bloques que le siguen.
Soporte eficiente para acceso secuencial y
para acceso directo.
► Fragmentación externa.
►
ƒ Se requieren mecanismos de compactación.
►
Otras cuestiones:
ƒ ¿Cómo saber cuánto espacio necesitará un
fichero?
ƒ ¿Qué hacer si un fichero crece y no hay
bloques libres después del último?
Asignación enlazada
►
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Se ve cada fichero como una
lista enlazada de bloques.
ƒ El directorio de dispositivo
almacena la dirección del
primer bloque.
ƒ Cada bloque almacena un
puntero al siguiente.
►
No hay fragmentación externa.
ƒ Aún así, la compactación puede
mejorar el rendimiento de la
E/S.
Soporte eficiente sólo para
acceso secuencial.
► El espacio ocupado en punteros
se hace notorio con bloques
pequeños.
► La pérdida de un puntero hace
inaccesible el resto del fichero.
►
Asignación indexada
►
BI
1
2
3
4
5
6
7
8
9
10
BI
12
13
14
15
16
17
18
19
20
Cada fichero tiene un bloque índice
(BI), con punteros a los bloques
que almacenan sus datos.
ƒ El directorio de dispositivo almacena
la dirección del BI.
►
►
►
Soporte eficiente para acceso
secuencial y para acceso directo.
No hay fragmentación externa.
Ficheros pequeños desaprovechan
gran parte de su BI Æ despilfarro
de espacio.
ƒ ¿Bloques pequeños?
►
En el BI caben un determinado
número de punteros Æ tamaño
máximo de los ficheros limitado.
ƒ ¿Bloques grandes?
Bloques índice enlazados
BI
1
2
3
BI
5
6
7
8
9
10
11
BI
13
14
15
16
17
18
19
20
►
El último puntero de un
bloque índice puede
apuntar a otro bloque
índice.
ƒ No hay limitación de
tamaño.
►
Acceso más lento al final
de los ficheros.
Bloques índice multinivel
BI1
BI2
BI2
BI2
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
►
►
Los bloques índice de
primer apuntan a bloques
índice de segundo nivel, y
así sucesivamente.
Sólo apuntan a bloques de
datos los bloques índice de
nivel más bajo.
ƒ Sigue habiendo limitación de
tamaño.
►
Se accede por igual a
cualquier parte de los
ficheros.
Gestión del espacio libre
Gestión de espacio libre
►
La gestión del espacio libre implica:
ƒ Buscar y asignar espacio libre cuando se crea un fichero.
ƒ Registrar como libre el espacio que ocupaba un fichero que se
borra.
ƒ Actualizar el mapa del espacio libre cuando un fichero crece o se
trunca.
►
Consideraciones importantes:
ƒ Espacio en disco necesario para almacenar el propio mapa de
espacio libre.
ƒ Facilidad para encontrar 1 bloque libre o n bloques libres contiguos.
ƒ Facilidad para actualizar el mapa de espacio libre.
Vector de bits
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
► Un
bit por cada bloque de disco.
ƒ 0 Æ bloque libre
ƒ 1 Æ bloque asignado
101000011101001100000
► Por
cuestiones de eficiencia, el
vector se suele cargar en
memoria.
Vector de bits
►
Ventajas:
ƒ Fácil de implementar y usar con cualquier método de asignación.
ƒ Facilidad para encontrar un bloque libre o un conjunto de bloques
contiguos libres.
ƒ Actualización sencilla.
101000011101001100000
►
Inconveniente: tamaño excesivo con discos grandes.
ƒ Ejemplo: disco de 16 GB y bloques de 512 bytes Æ vector de 8MB.
► Reservar
8 MB de memoria, o recorrer hasta 16384 bloques de disco.
ƒ Solución: usar bloques libres para gestionar el espacio libre.
Lista enlazada de bloques libres
►
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
►
►
Mínimo desperdicio de
espacio: sólo se necesita
almacenar la dirección del
primer bloque libre.
Con asignación no
contigua, para buscar n
bloques libres hay que leer
n-1 bloques.
Con asignación contigua,
por lo general, hay que
leer muchos más.
Lista enlazada de secciones libres
0
0
1
2
3
4
5
6
7
8
3
0
9
10
11
12
13
14
15
16
17
18
19
20
1
4
► Cada
bloque de la lista
enlazada indica
cuántos bloques libres
le siguen.
ƒ Mayor eficiencia para la
asignación contigua.
Lista enlazada de bloques índice
0
BI
2
3
4
5
BI
7
8
9
10
11
12
13
14
15
BI
17
18
19
BI
►
Un bloque índice contiene
un cierto número de
punteros a bloques libres,
más un puntero a otro
bloques índice.
ƒ Se pueden localizar
rápidamente un gran
número de bloques libres.
►
Alternativa más eficiente
para asignación contigua:
apuntar a secciones de
bloques libres contiguos.
Fin
Descargar