SISTEMA DE FICHEROS EN UNIX

Transcripción

SISTEMA DE FICHEROS EN UNIX
SISTEMA DE FICHEROS EN
UNIX
SISTEMA DE FICHEROS UNIX
J. Santos
SISTEMA DE FICHEROS EN UNIX
CONTENIDOS:
- El subsistema de ficheros en la arquitectura general de Unix.
- El buffer caché.
- Estructura del buffer caché.
- Funcionamiento del buffer caché: algoritmos.
- Partes del sistema de ficheros: bloque boot, superbloque, lista
de inodos, bloques de datos.
- Representación interna de ficheros.
- Inodos.
- Estructura de ficheros regulares.
- Directorios.
- Creación de ficheros. Asignación de inodos y bloques
de disco.
- Llamadas al sistema para el manejo de ficheros.
- Tabla de inodos, tabla de ficheros del sistema y de
descriptores de ficheros de usuario.
- Llamadas open, close, read, write, lseek.
- Llamadas link y unlink: concepto de hard link.
- Llamadas mount y umount: concepto de sistema de
ficheros montado.
- Variantes del sistema de ficheros Unix BSD.
- Grupos de cilindros.
- Directorios con entradas de tamaño variable.
- Links simbólicos.
- Sistemas de ficheros con registro.
2
SISTEMA DE FICHEROS UNIX
J. Santos
INTRODUCCIÓN
’
Una gran parte del tiempo el SO está accediendo a
información en dispositivos de bloques.
’
La relativa lentitud de discos respecto a CPU.
’
Necesidad de incrementar la velocidad en los accesos a
información en disco.
MÓDULO AMORTIGUADOR
BUFFER CACHE
DE
ACCESOS
A
DISCO:
’
Minimiza la frecuencia de accesos a disco, manteniendo unos
buffers en memoria para contener la información de algunos
bloques del disco.
’
Con un tamaño reservado para mantener en memoria 100 1000 bloques del disco se logra no tener que leer (releer) del
disco para satisfacer el 85% de las peticiones.
3
SISTEMA DE FICHEROS UNIX
J. Santos
SITUACIÓN DENTRO DEL NÚCLEO DEL SO
El Buffer Cache constituye una estructura intermedia en memoria entre el
subsistema de ficheros de Unix y los manejadores de dispositivos de bloque.
Su función es amortiguar los accesos a tales dispositivos de bloque
manteniendo un número limitado de buffers en memoria que contienen la
información de bloques de disco. Cada vez que se requiere una lectura de un
bloque en disco se determina si la información está actualmente en la cache. Si
se produce un acierto el sistema operativo se ahorra una operación de entradasalida sobre el disco. De igual modo cuando se escribe un bloque a disco se
mantendrá la información en la cache el mayor tiempo posible, de modo que
4
SISTEMA DE FICHEROS UNIX
J. Santos
sobreescrituras posteriores del mismo bloque no implican operaciones de
escritura en disco. Esto se manifiesta en la figura de tasa de fallos en el acceso
a la cache frente al tamaño de la cache para una versión particular de Unix, en
la que además se pone de relieve que existe un tamaño a partir del cual el
incremento en el número de buffers no implica un descenso notable en el
número de fallos en el acceso.
5
SISTEMA DE FICHEROS UNIX
J. Santos
Tasa de fallos respecto a tamaño de cache con gestión LRU [Stallings 96].
ESTRUCTURA DEL BUFFER CACHE
Se estudia, primeramente, la estructura de un buffer que almacena
temporalmente los datos de un determinado bloque de un disco y la
organización interna de ese conjunto de buffers. Se mantienen dos estructuras
en esa organización: la lista de buffers libres y una organización en colas de
dispersión (hash). La lista de libres incluye aquellos buffers que pueden ser
reasignados para contener los datos de otro bloque diferente de disco. En esta
lista se buscarán buffers para ser asignados a bloques de datos que se quieran
leer o escribir a disco, manteniendo un orden LRU (menos recientemente
usado) en el uso de los mismos. La organización en colas hash de los
diferentes buffers permitirá una búsqueda rápida en la cache para determinar si
un determinado bloque de datos está o no actualmente en la misma.
6
SISTEMA DE FICHEROS UNIX
J. Santos
ESTRUCTURA DE UN BUFFER
Cuerpo del buffer: datos del bloque de disco
Encabezamiento del buffer: identificación del buffer y su contenido
Estados:
- ocupado/libre
- datos válidos
- escritura retardada
- en lectura/escritura actual a/desde disco
- hay procesos esperando por el buffer
7
SISTEMA DE FICHEROS UNIX
ESTRUCTURA
DEL
(ORGANIZACIÓN)
J. Santos
CONJUNTO
DE
BUFFERS
Lista de libres:
’
’
’
’
’
Todo buffer está en la lista de libres, tenga o no datos válidos, menos
los ocupados (por un proceso).
Se usa orden LRU (menos recientemente usado).
Lista doblemente encadenada para recorrido en ambas direcciones.
Cuando un buffer pasa a libre se pasa al final de la lista (acaba de ser
usado).
Cuando se necesita un buffer para un nuevo bloque se toma el primero
de la lista, aunque contenga los datos de otro bloque.
8
SISTEMA DE FICHEROS UNIX
J. Santos
Colas hash:
’
’
’
’
’
’
Todos los buffer se organizan en múltiples colas hash para búsqueda
rápida.
La función hash opera sobre el número de bloque y número de
dispositivo
Cada cola hash es circular y doblemente enlazada (el orden no
importa).
El buffer está en una cola cuando tiene asignado un número de bloque
y dispositivo.
El SO usará la estructura hash cuando busque un bloque concreto en
BC.
Las dos estructuras (lista de libres y colas hash) organizan
simultáneamente al conjunto de buffers. Todo buffer está al menos en
una de ellas, la mayoría de los buffer están en ambas.
9
SISTEMA DE FICHEROS UNIX
J. Santos
Ejemplo de organización de los buffer en 4 colas hash.
DISTRIBUCIÓN DE LA TAREA EN ALGORITMOS
A continuación se estudian los diferentes algoritmos que manejan la estructura
de la cache. El primero de ellos es el algoritmo getblk, que determina si un
bloque concreto está o no en la cache. Si no es así elige uno de los libres para
ser asignado al bloque que se requiere leer o escribir. En este algoritmo se
pueden presentar cinco situaciones o escenarios diferentes dependiendo de
esas dos circunstancias básicas y de posibles condiciones de concurrencia
entre procesos. Así, si un proceso requiere un buffer libre y no hay ninguno
actualmente, el algoritmo debe manejar esa situación. Y de igual modo, cuando
un proceso requiere un buffer y éste está en la cache, pero bloqueado porque
se están usando actualmente sus datos, el algoritmo getblk debe suspenderse
hasta que se termine el bloqueo en el buffer requerido. Este algoritmo también
es responsable de actualizar la información en disco cuando ha elegido un
10
SISTEMA DE FICHEROS UNIX
J. Santos
Principales
algoritmos
de manejo
del BC.
buffer de la lista de libres cuyos datos no están actualizados. Todas estas
situaciones se presentan con un ejemplo gráfico y explicativo del escenario
correspondiente y los pasos que el algoritmo realiza. En dos escenarios (4 y 5)
se presenta, además, un ejemplo de concurrencia entre procesos que explica
tales pasos en el algoritmo getblk.
Aspectos importantes:
- Todo acceso a un bloque de disco se realiza a través de bread()
tanto en lectura como en escritura: para escribir un bloque primero
debe leerse.
- Una vez llamado bread() sobre un bloque, el buffer queda
ocupado hasta que se llame a brelse(), que lo pasa a estado libre.
- getblk() busca el bloque deseado en BC; si lo encuentra informa
a bread(), si no lo encuentra busca y asigna un buffer libre al
bloque. En este último caso, si el buffer debe actualizarse a disco
llama a bwrite() para que lo realice a través del DD
correspondiente.
11
SISTEMA DE FICHEROS UNIX
J. Santos
ALGORITMO getblk ()
Algoritmo getblk ()
entrada: número de bloque, número de dispositivo (S. de F.)
salida: dirección del buffer con el bloque (datos válidos o no)
{
while (no se encuentre buffer)
{
if (bloque está en cola hash)
{
if (buffer ocupado)
/* ESCENARIO 5 */
{
sleep (evento: buffer libre);
continue;
}
marcar buffer como ocupado; /* ESCENARIO 1 */
sacar buffer de lista de libres;
return(buffer);
}
else
{
if (no hay buffers en lista de libres) /* ESCENARIO 4 */
{
sleep(evento: algún buffer libre);
continue;
}
sacar buffer de lista de libres;
if (buffer marcado de escritura retardada) /* ESCENARIO 3 */
{
escritura asíncrona del buffer a disco (bwrite);
continue;
}
cambiar al buffer de cola hash según nuevo bloque; /* ESCENARIO 2 */
return (buffer);
}
}
}
12
SISTEMA DE FICHEROS UNIX
J. Santos
1er Escenario
Escenario 1: Se requiere un bloque de datos y ya está en su correspondiente cola hash.
’
Se quita el buffer de la lista de libres.
’
Se marca bloqueado y se retorna.
13
SISTEMA DE FICHEROS UNIX
J. Santos
2º Escenario
Escenario 2: Se requiere un bloque de datos y no está en la cache.
14
’
Se quita buffer de la lista de libres.
’
Se resitúa en su cola hash.
’
Se retorna bloqueado.
SISTEMA DE FICHEROS UNIX
J. Santos
3er Escenario
Escenario 3: El bloque elegido de la lista de libres está marcado como de
“escritura retardada”.
’
Se quita buffer de la lista de libres.
’
Se inicia escritura asíncrona a disco.
’
Se chequea de nuevo la cache.
15
SISTEMA DE FICHEROS UNIX
J. Santos
4º Escenario
Escenario 4: la lista de libres está vacía.
’
’
16
El proceso se queda en espera de un buffer libre.
Al recuperar el procesador chequea de nuevo la
cache.
SISTEMA DE FICHEROS UNIX
J. Santos
Ejemplo de concurrencia en la competición por un buffer libre.
17
SISTEMA DE FICHEROS UNIX
J. Santos
5º Escenario
Escenario 5: bloque en cache, pero ocupado.
’
’
18
El proceso se queda en espera de que se libere
ese buffer.
Al recuperar el procesador chequea de nuevo la
cache.
SISTEMA DE FICHEROS UNIX
J. Santos
Ejemplo de concurrencia en la competición por un buffer en el escenario nº 5.
19
SISTEMA DE FICHEROS UNIX
J. Santos
ALGORITMO bread()
Algoritmo bread ()
entrada: número de bloque, número de dispositivo (S. de F.)
salida: dirección del buffer con el bloque
{
tomar buffer para el bloque (getblk ());
if (datos válidos en buffer)
return (buffer);
iniciar lectura de disco (llamada al DD);
sleep (evento: completada la lectura de disco);
return (buffer);
}
Algoritmo breada ()
equivalente a bread, pero adelanta la lectura de un segundo bloque
de forma asíncrona (sin esperar a que llegue a BC)
El algoritmo bread lee un determinado bloque de un disco concreto. Realiza
una llamada al anterior algoritmo para determinar si la información que requiere
leer está actualmente en la cache. Si no es así inicia una lectura síncrona sobre
disco, es decir, se queda en espera hasta que la operación de entrada-salida
termina.
Existe una variante de este algoritmo, breada, que en accesos secuenciales a
un fichero adelanta la lectura del bloque siguiente al actualmente requerido, de
modo asíncrono, de forma que probablemente ya estará en la cache cuando se
requieran sus datos. El buffer asociado al bloque que se lee de modo síncrono
pasará a la lista de libres cuando se termine el segundo trasvase necesario
desde la cache al espacio de usuario. Esto lo realizará el subsistema de
ficheros invocando al algoritmo brelse.
20
SISTEMA DE FICHEROS UNIX
J. Santos
ALGORITMO bread()
ALGORITMO breada()
21
SISTEMA DE FICHEROS UNIX
J. Santos
ALGORITMO bwrite()
Algoritmo bwrite ()
entrada: buffer
salida: nada
{
iniciar escritura a disco; /* llamada a DD */
if (E/S síncrona)
{
sleep (evento: E/S completada);
liberar buffer (brelse);
}
else if (buffer de escritura retardada)
marcar buffer como viejo; /* llamada a brelse desde el DD,
al terminar */
}
El
algoritmo
encargado
de
bwrite
es
actualizar
el
los
contenidos de un buffer de la
cache
en
disco
cuando
es
necesario. Se invoca por parte del
algoritmo getblk cuando se da
esta situación y además ese
buffer fue elegido en el orden LRU
del uso de la lista de libres para
ser reasignado a otro bloque de
datos diferente. Esta operación de
escritura es asíncrona de modo que el algoritmo continúa su ejecución al
mismo tiempo que se realiza la actualización en disco. Es el controlador del
hardware el que en esta ocasión invoca al algoritmo brelse, cuando termina la
escritura, para pasar el buffer de la cache a la lista de libres.
22
SISTEMA DE FICHEROS UNIX
J. Santos
ALGORITMO brelse()
El algoritmo de liberación de un buffer, brelse, despierta aquellos procesos que
se habían bloqueado a la espera de un buffer libre o bien a la espera del
desbloqueo de un buffer concreto. Al liberar un buffer y para mantener el orden
LRU de uso de los libres lo coloca al final de la lista. El caso particular sucede
cuando es elegido un buffer que no tenía actualizados sus datos en disco. En
este caso se actualiza previamente esa información (escritura asíncrona), el
buffer todavía no se reasigna a otro bloque diferente hasta terminar la escritura,
y cuando ésta termina se libera el buffer pero se sitúa en la cabecera de la lista
de libres para mantener el orden LRU de uso de esos buffers libres.
23
SISTEMA DE FICHEROS UNIX
J. Santos
Como se puede dar la situación de que varios
controladores de disco liberen al mismo tiempo un
buffer, la lista de libres debe ser protegida como
sección crítica. Un método sencillo para ello, válido en
entornos
monoprocesador,
es
bloquear
las
interrupciones provenientes de los controladores, y
habilitarlas al final del manejo de la sección crítica.
Algoritmo brelse ()
entrada: buffer ocupado;
salida: nada
{
wakeup(evento: esperando por algún buffer libre);
wakeup(evento: esperando por este buffer en concreto);
bloquear interrupciones;
if (buffer con datos válidos y buffer no viejo) /* antiguo escritura retardada */
poner buffer al final de lista de libres;
else
poner buffer al principio de lista de libres;
habilitar interrupciones;
marcar buffer como libre;
}
24
SISTEMA DE FICHEROS UNIX
J. Santos
PROBLEMA DE BC EN SISTEMAS DISTRIBUIDOS
Estructura de capas en NFS.
25
SISTEMA DE FICHEROS UNIX
J. Santos
Problema de coherencia de cache.
La introducción de una cache de bloques introduce ese problema potencial de
coherencia de la información en sistemas de ficheros distribuidos que
mantienen una cache en el lado de los clientes.
26
SISTEMA DE FICHEROS UNIX
J. Santos
VENTAJAS DE BUFFER CACHE
’
Reducción del tráfico de acceso a disco: incremento en
productividad y disminución del tiempo de respuesta del
sistema.
’
Seguridad en el Sistema de Ficheros y acceso directo a disco
(DD bloque): una sola imagen de cada bloque y getblk
protege contra sección crítica en acceso simultáneo.
’
Diseño del sistema más simple: acceso al disco uniforme vía
BC, modularidad.
’
No hay necesidad de consideraciones sobre el hardware para
el acceso a disco: los problemas de alineación de datos para
E/S se tratan en el BC, lo que redunda en portabilidad y
sencillez.
DESVENTAJAS DE BUFFER CACHE
’
Sistema más vulnerable a pérdidas de control y situaciones
catastróficas: muchos bloques del disco no están realmente
actualizados.
’
Doble copia de los datos: del disco a BC y de BC al espacio
del proceso y viceversa. Si los datos transmitidos son muchos
(distintos bloques) la copia extra hace que el sistema sea más
lento que sin BC.
27

Documentos relacionados