Por lo general los
archivos se almacenan en disco, así que la administración del espacio en disco
es una cuestión importante para los diseñadores de sistemas de archivos.
Hay dos estrategias
generales posibles para almacenar un archivo de n bytes: se asignan n
bytes consecutivos de espacio en disco el archivo se divide en varios
bloques (no necesariamente) contiguos.
Almacenar un archivo
como una secuencia contigua de bytes tiene el problema obvio de que si un
archivo crece, probablemente tendrá que moverse en el disco.
El mismo problema se
aplica a los segmentos en memoria, excepto que la operación de mover un
segmento en memoria es rápida, en comparación con la operación de mover un
archivo de una posición en el disco a otra.
Tamaño de bloque
Dada la forma en que
están organizados los discos, el sector, la pista y el cilindro son candidatos
obvios para la unidad de asignación En un sistema de paginación, el tamaño de
la página también es uno de los principales contendientes.
En un sistema de
paginación, el tamaño de la página también es uno de los principales
contendientes.

Donde para cada
tamaño de archivo de una potencia de dos, se lista el porcentaje de todos los
archivos menores o iguales a éste para cada uno de los tres conjuntos de datos.
Por ejemplo, en el 2005 el 59.13% de todos los archivos en la VU eran de 4 KB o
menores y el 90.84% de todos los archivos eran de 64 KB o menores.
Por una parte, con un
tamaño de bloque de 1 KB sólo entre 30 y 50% de todos los archivos caben en un
solo bloque, mientras que con un bloque de 4 KB, el porcentaje de archivos que
caben en un bloque aumenta hasta el rango entre 60 y 70%. Los demás datos en el
artículo muestran que con un bloque de 4 KB, 93% de los bloques de disco son
utilizados por 10% de los archivos más grandes.
Utilizar un bloque
pequeño significa que cada archivo consistirá de muchos bloques. Cada bloque
normalmente se requiere una búsqueda y un retraso rotacional, por lo que la
acción de leer un archivo que consista de muchos bloques pequeños será lenta.
Como ejemplo, considere
un disco con 1 MB por pista, un tiempo de rotación de 8.33 mseg y un tiempo de
búsqueda promedio de 5 mseg. El tiempo en milisegundos para leer un bloque de k
bytes es entonces la suma de los tiempos de búsqueda, de retraso rotacional y
de transferencia:
5 + 4.165
+ (k/1000000) =8.33
Los bloques pequeños
son malos para el rendimiento pero buenos para el uso del espacio en el disco.
Cuando
escribimos unos cuantos caracteres en el editor de texto bloc de notas
(notepad), al guardar esto a un archivo se activarán 26 llamadas al sistema,
incluyendo 3 intentos de apertura fallidos, 1 sobrescritura de archivo y 4
secuencias adicionales de abrir y cerrar.
Registro de bloques libres

Hay dos métodos
utilizados ampliamente:
1.
Lista
enlazada de bloques de disco.
2.
El
mapa de bits.
1.- Cada bloque
contiene tantos números de bloques de disco libres como pueda. Con un bloque de
1 KB y un número de bloque de disco de 32 bits, cada bloque en la lista de
bloques libres contiene los números de 255 bloques libres considere un disco de
500 GB, que tiene aproximadamente 488 millones de bloques de disco. Para
almacenar todas estas direcciones a 255 por bloque, se requiere una cantidad
aproximada de 1.9 millones de bloques.


No es sorpresa que el
mapa de bits requiera menos espacio, ya que utiliza 1 bit por bloque, en
comparación con 32 bits en el modelo de la lista enlazada.
Se crea un mapa donde
se representa a cada bloque disponible con 1 bit.
Es muy eficiente en
espacio, al emplear 1 bit en lugar de una palabra, excepto cuando el disco está
lleno, caso en el cual la lista es más pequeña.
Al igual que la
lista, se puede dejar solo una porción del mapa en memoria y el resto en disco.
Sólo si el disco está
casi lleno (es decir, que tenga pocos bloques libres) es cuando el esquema de
la lista enlazada requiere menos bloques que el mapa de bits.
Cuotas de disco.
Una cuota de disco es un límite establecido por el administrador del sistema
que restringe ciertos aspectos del uso del sistema de archivos en los sistemas operativos modernos. El objetivo de la utilización de las cuotas de
disco es limitar la asignación de espacio en el disco
duro de una manera razonable.
Tipos de cuotas
Hay dos tipos básicos
de las cuotas de disco. La primera, conocida como cuota de uso o cuota de
bloques, limita la cantidad de espacio en disco que puede ser utilizado. La
segunda, conocida como cuota de archivo o de inodo, limita el número de
archivos y directorios que se pueden crear.
Además, los
administradores suelen definir un nivel de advertencia, o cuota blanda, en la
que se informa al usuario que se están acercando a su límite, que es menor que
el límite efectivo, o cuota dura. También puede haber un intervalo de gracia
pequeño, lo que permite a los usuarios violar temporalmente sus cuotas en
ciertas cantidades, si es necesario. Cuando una cuota blanda es violada, el
sistema envía normalmente al usuario (y en ocasiones al administrador también)
algún tipo de mensaje.
Respaldos del sistema
operativo
Si el sistema de
archivos de una computadora se pierde de manera irrevocable, ya sea debido a hardware
o software, será difícil restaurar toda la información, llevará mucho tiempo y
en muchos casos, podrá ser imposible.
Por lo general se
realizan respaldos en cinta para manejar uno de dos problemas potenciales:
1. Recuperarse de un
desastre.
2. Recuperarse de la
estupidez.
El primer problema
trata acerca de cómo hacer que la computadora vuelva a funcionar después de una
falla general en el disco, un incendio, una inundación o cualquier otra
catástrofe natural. En la práctica estas cosas no ocurren muy a menudo, razón
por la cual muchas personas no se preocupan por realizar respaldos. Estas
personas además tienden a no tener seguros contra incendios en sus hogares por
la misma razón.
La segunda razón es
que a menudo los usuarios remueven de manera accidental archivos, que más tarde
vuelven a necesitar. Este problema ocurre con tanta frecuencia que cuando se
“elimina” un archivo en Windows, no se elimina del todo, sino que sólo se mueve
a un directorio especial, conocido como Papelera
de reciclaje, para que pueda restaurarse con facilidad en un momento
posterior.
Los respaldos llevan
este principio más allá y permiten que los archivos que se removieron hace
días, o incluso semanas, se restauren desde las cintas de respaldo antiguas.
Los respaldos llevan
este principio más allá y permiten que los archivos que se removieron hace
días, o incluso semanas, se restauren desde las cintas de respaldo antiguas. Para
realizar un respaldo se requiere mucho tiempo y se ocupa una gran cantidad de
espacio, por lo que es importante hacerlo con eficiencia y conveniencia. Estas
consideraciones dan pie a las siguientes cuestiones. En primer lugar, ¿debe
respaldarse el sistema completo o sólo parte de él? en muchas instalaciones,
los programas ejecutables (binarios) se mantienen en una parte limitada del árbol
del sistema de archivos. No es necesario respaldar esos archivos si pueden
volver a instalarse de los CD-ROM de los fabricantes. Además, la mayoría de los
sistemas tienen un directorio para los archivos temporales. Por lo general no
hay razón para respaldarlos tampoco. En UNIX, todos los archivos especiales
(dispositivos de E/S) se mantienen en un directorio /dev. No sólo es
innecesario respaldar este directorio, sino que es bastante peligroso debido a
que el programa de respaldo se quedaría paralizado para siempre si tratara de
leer cada uno de estos archivos hasta que se completaran.
En resumen, por lo
general es conveniente respaldar sólo directorios específicos y todo lo que
contengan, en vez de respaldar todo el sistema de archivos.
Las densidades de las cintas no están mejorando con tanta
rapidez como las densidades de los discos. Esto conlleva gradualmente a una
situación en la que tal vez el respaldo de un disco muy grande requiera de
varias cintas. Aunque hay robots disponibles para cambiar las cintas de
manera automática, si esta tendencia
continúa, en un momento dado las cintas serán demasiado pequeñas como para
utilizarlas como medio de respaldo. En ese caso, la única forma de respaldar un
disco será en otro disco. Aunque utilizar el método de reflejar cada disco con un
repuesto es una posibilidad, en el capítulo 5 analizaremos esquemas más
sofisticados, conocidos como RAIDs.
Consistencia
de sistemas de archivo
Muchos sistemas de archivos
leen bloques, los modifican y los escriben posteriormente. Si el sistema falla
antes de escribir todos los bloques modificados, el sistema de archivos puede
quedar en un estado inconsistente. Este problema es muy crítico si algunos de
los bloques que no se han escrito son bloques de nodos-i, bloques de
directorios o bloques que contienen la lista de bloques libres.
Se pueden realizar dos tipos
de verificaciones de consistencia: archivos y bloques. Para comprobarla
consistencia de los bloques, el programa crea dos tablas, cada una de las
cuales contiene un contador para cada bloque, que al principio se establece en
0. Los contadores en la primera tabla llevan el registro de cuántas veces está
presente cada bloque en un archivo; los contadores en la segunda tabla registran
con qué frecuencia está presente cada bloque en la lista de bloques libres (o en
el mapa de bits de bloques libres).
Además de verificar que cada
bloque se haya contabilizado apropiadamente, el verificador del sistema de
archivos también verifica el sistema de directorios. Utiliza también una tabla
de contadores, pero éstos son por archivo, no por bloque. Empieza en el
directorio raíz y desciende recursivamente por el árbol, inspeccionando cada
directorio en el sistema de archivos. Para cada nodo-i en cada directorio,
incrementa un contador para la cuenta de uso de ese archivo.
Cuando el verificador
termina, tiene una lista indexada por número de nodo-i, que indica cuántos directorios
contienen cada archivo. Después compara estos números con las cuentas de
vínculos almacenadas en los mismos nodos-i.
En un sistema de archivos
consistentes, ambas cuentas concordarán. Sin embargo, pueden ocurrir dos tipos
de errores: que la cuenta de vínculos en el nodo-i sea demasiado alta o
demasiado baja.
Si la cuenta de vínculos es
mayor que el número de entradas en el directorio, entonces aun si se remueven
todos los archivos de los directorios, la cuenta seguirá siendo distinta de
cero y el nodo-i no se removerá. No es grave, pero desperdicia
espacio en el disco con archivos que no están en ningún directorio.
El otro error es
potencialmente catastrófico. Si dos entradas en el directorio están vinculados
a un archivo, pero el nodo-i dice que sólo hay una, cuando se elimine una de
las dos entradas del directorio, la cuenta de nodos-i será cero. Cuando una
cuenta de nodos-i queda en cero, el sistema de archivos la marca como no
utilizada y libera todos sus bloques. Esta acción hará que uno de los
directorios apunte ahora a un nodo-i sin utilizar, cuyos bloques pueden
asignarse pronto a otros archivos.
Rendimiento del sistema de
archivos
El acceso al disco es mucho
más lento que el acceso a la memoria. Para leer una palabra de memoria de 32
bits se podrían requerir 10 nseg. La lectura de un disco duro se podría
realizar a 100 MB/seg, que es cuatro veces más lenta que la de la palabra de 32
bits, pero a esto se le debe agregar de 5 a 10 mseg para realizar una búsqueda
hasta la pista y después esperar a que se coloque el sector deseado bajo la
cabeza de lectura.
Uso de
caché
La técnica más común utilizada para
reducir los accesos al disco es la caché de bloques o caché de búfer (caché se
deriva del francés cacher, que significa ocultar). En este contexto, una caché es
una colección de bloques que pertenecen lógicamente al disco, pero se mantienen
en memoria por cuestiones de rendimiento. Un algoritmo común es verificar todas
las peticiones de lectura para ver si el bloque necesario está en la caché. Si
está, la petición de lectura se puede satisfacer sin necesidad de acceder al
disco. Si el bloque no está en la caché, primero se lee en la caché y después
se copia a donde sea necesario. Las peticiones posteriores de ese mismo bloque
se pueden satisfacer desde la caché. Como hay muchos bloques (a menudo miles) en
la caché, se necesita cierta forma de determinar con rapidez si cierto bloque
está presente. La forma usual es codificar en hash la dirección de dispositivo
y de disco, buscando el resultado en una tabla de hash. Todos los bloques con
el mismo valor de hash se encadenan en una lista enlazada, de manera que se
pueda seguir la cadena de colisiones.
Lectura
adelantada por bloque
Una segunda técnica para mejorar el
rendimiento percibido por el sistema de archivos es tratar de colocar bloques
en la caché antes de que se necesiten, para incrementar la proporción de aciertos.
En especial, muchos archivos se leen
en forma secuencial.
Desde luego que esta estrategia de
lectura adelantada sólo funciona para los archivos que se leen en forma
secuencial. Si se accede a un archivo en forma aleatoria, la lectura adelantada
no ayuda. De hecho afecta, ya que ocupa ancho de banda del disco al leer
bloques inútiles y eliminar bloques potencialmente útiles de la caché
Reducción
del movimiento del brazo del disco.
El uso de caché y la lectura
adelantada no son las únicas formas de incrementar el rendimiento del sistema
de archivos. Otra técnica importante es reducir la cantidad de movimiento del
brazo del disco, al colocar los bloques que tengan una buena probabilidad de
utilizarse en secuencia cerca unos de otros, de preferencia en el mismo
cilindro.
Una variación en el mismo tema es
tomar en cuenta el posicionamiento rotacional. Al asignar bloques, el sistema
intenta colocar bloques consecutivos en un archivo en el mismo cilindro.
Desfragmentación
de discos
Cuando el sistema operativo se instala
por primera vez, los programas y archivos que necesita se instalan en forma
consecutiva, empezando al principio del disco, cada uno siguiendo directamente del
anterior. Todo el espacio libre en el disco está en una sola unidad contigua
que va después de los archivos instalados. Sin embargo, a medida que transcurre
el tiempo se crean y eliminan archivos, generalmente el disco se fragmenta
mucho, con archivos y huecos esparcidos por todas partes
El rendimiento se puede restaurar
moviendo archivos para hacerlos contiguos y colocando todo el espacio libre (o
al menos la mayoría) en una o más regiones contiguas en el disco. Windows tiene
un programa llamado defrag, el cual realiza esto.
La desfragmentación funciona mejor en
los sistemas de archivos que tienen una buena cantidad de espacio libre en una
región continua al final de la partición. Este espacio permite al programa de
desfragmentación seleccionar archivos fragmentados cerca del inicio de la
partición, copiando todos sus bloques al espacio libre. Esta acción libera un
bloque contiguo de espacio cerca del inicio de la partición en la que se pueden
colocar los archivos originales u otros en forma contigua. Después, el proceso
se puede repetir con el siguiente pedazo de espacio en el disco y así en lo
sucesivo.
Algunos archivos no se pueden mover,
incluyendo el archivo de paginación, el de hibernación y el registro por
bitácora, ya que la administración requerida para ello es más problemática de
lo que ayuda.
En algunos sistemas, éstas son áreas
contiguas de tamaño fijo de todas formas, por lo que no se tienen que
desfragmentar. La única vez cuando su falta de movilidad representa un problema
es cuando se encuentran cerca del final de la partición y el usuario desea
reducir su tamaño Los sistemas de archivos de Linux (en especial ext2 y ext3)
por lo general sufren menos por la desfragmentación que los sistemas Windows
debido a la forma en que se seleccionan los bloques de disco, por lo que raras
veces se requiere una desfragmentación manual.
esta genial pero la musica es una basura arruina todo
ResponderEliminarMuchas gracias fue de gran ayuda
ResponderEliminarMuchas gracias fue de gran ayuda
ResponderEliminarBuena música!!
ResponderEliminarCreditos a Tanenbaum Sistemas Operativos modernos
ResponderEliminar3ra edición