Tiempos en discos sectorizados

En este tipo de discos los conceptos de tseek y tsearch son los mismos que en discos no sectorizados. La forma de calcularlos es la misma, la única diferencia es que en discos sectorizados se hace un acceso por cada cluster en lectura random y un acceso por cada pista del archivo en lectura secuencial. (con algunas salvedades como veremos)

Variación del tamaño del Cluster

Como se pudo ver, un cluster de mayor tamaño tiende a generar una mayor fragmentación, pero permite mejorar los tiempos por ser necesarios menos accesos al disco. Un cluster de menor tamaño reduce notablemente la fragmentación pero requiere muchos accesos al disco. En general para archivos grandes convienen clusters grandes y para archivos chicos convienen clusters chicos. Lamentablemente en general el tamaño del cluster es fijo y no se puede variar. Algunas versiones de Unix (BSD) permiten fragmentar los clusters de forma tal de que más de un archivo chico este guardado en el mismo cluster. Para este apunte vamos a considerar que en un cluster NUNCA pueden coexistir dos archivos distintos.

Lectura Secuencial vs Lectura Random

En discos no sectorizados supusimos que existía un acceso por cada registro físico suponiendo un ambiente de multiprogramación. En general ese tipo de discos se utiliza en máquinas grandes por lo que la suposición es acertada. Los discos sectorizados en cambio, suelen utilizarse por ejemplo en PCs en las cuales la multiprogramación no es habitual. En ambientes sin multiprogramación tenemos dos formas de leer un conjunto de registros:

En forma random: (no se sabe el orden de los registros a leer)

En forma secuencial: (se lee el R1, luego R2 etc.)

En el primer caso tendremos un acceso por cada cluster, pues será necesario ir a buscar los clusters a distintos lugares del disco. En el segundo caso en cambio tenemos un acceso POR PISTA pues una vez que accedemos a una pista podemos leer todos los clusters que se encuentren en ella sin necesidad de mover las cabezas. Y podríamos ir aún más allá y decir que solo necesitamos un acceso inicial a la primer pista si suponemos que el archivo está grabado en pistas contiguas en donde el salto entre pista sería despreciable.

Aquí hay que hacer una aclaración importante. El DOS no asegura que si se graban 20 clusters en forma secuencial de un cierto archivo estos sean grabados en forma consecutiva en el disco. En general los archivos se encuentran FRAGMENTADOS, es decir, que los clusters que componen el archivo se encuentran distribuidos por distintas partes del disco. Existen utilidades como el defrag, diskfix, speed disk, KDD etc. que permiten de-fragmentar un disco. Lo que hacen estos programas es re-acomodar los archivos en el disco de forma tal que todos los clusters de un cierto archivo se encuentren uno a continuación del otro. Solo si el disco está de-fragmentado tiene sentido hablar de lectura secuencial y de un acceso por pista. En discos muy fragmentados la lectura secuencial y la lectura random son prácticamente equivalentes. A este factor se lo suele llamar fragmentación del disco (FRD) y suele expresarse como un porcentaje. También puede medirse la fragmentación de un archivo (cuan disperso está).

Ejemplo:

Sea un archivo que ocupa 8000 clusters, se quiere grabar el archivo en discos sectorizados de 48 clusters por pista de 4096 bytes cada uno con Tseek=21ms y Tsearch=8.3ms. Calcular el tiempo de lectura en forma random y secuencial. Suponer FRD= 0%.

Lectura Random: una lectura por cluster implica:

8000 x ( Tseek + Tsearch + (16.6/48) ) = 237166 ms = 237s = 4 minutos (aprox)

Nota: El tiempo de transferencia se calcula a partir del Tsearch. Si Tsearch = 8,3 entonces da una vuelta completa en 16,6 ms. Habiendo 48 clusters por pista el tiempo de transferencia de un cluster es 16.6/48.

Lectura Secuencial: Si hay 48 clusters por pista necesito entonces 8000/48 = 167 pistas. Si suponemos que hay un acceso por pista el tiempo es:

167 x (Tseek + Tsearch + 16.6) = 7665 ms = 8 segundos (aprox)

Si ahora además suponemos que las 167 pistas están contiguas tendremos un solo acceso al inicio de la primer pista y el tiempo es:

Tseek + Tsearch + 167 x 16.6 = 21 + 8.3 + 2772.2 ms = 2801.5 ms = 2.8 segundos (aprox)

Como puede verse la lectura secuencial es notablemente más veloz que la lectura random. En este caso estamos suponiendo que hay 167 pistas completamente vacías donde grabar el archivo. Si este no fuera el caso necesitaríamos más pistas y más accesos. De todos modos siempre es más rápido leer un archivo secuencialmente que en forma aleatoria.

Análogamente es muy distinto el rendimiento en lectura secuencial de un disco fragmentado y de uno no-fragmentado.

Ejemplo Práctico:

A modo de ejemplificación de los efectos de la fragmentación en un disco, se hizo un pequeño experimento que cualquiera puede realizar en su casa. Primero formateamos un diskette común de 1.44Mb y lo llenamos de archivos chicos, por ejemplo de archivitos de 1Kb. Una vez que el disco esta lleno borramos archivos en forma aleatoria de forma tal que queden libres en el disco unos 400Kb. Esto se hace para lograr que el espacio libre quede distribuido por todo el disco. A continuación copiamos al disco un archivo de unos 350Kb. (el que teníamos más cerca) Este archivo se grabará en los clusters libres distribuyéndose por todo el disco. Por último borramos todos los archivos del disco a excepción del archivo de 350Kb con lo cual el disco queda grabado con un único archivo de 350Kb desparramado por todos lados. Este es el mapa de nuestro disco hasta el momento:

Referencias:

- Espacio libre.

O Espacio ocupado.

Cada bloque equivale a tres clusters.

fragmentación en un disco

Como se ve en el dibujo los caracteres "O" muestran los lugares del disco en los cuales hay datos de nuestro archivo.

Se hicieron mediciones del tiempo necesario para leer el archivo en forma secuencial. El promedio fue de: 26 segundos y centésimas.

A continuación de-fragmentamos el disco, corrimos un programa que "juntó" a todo el archivo al principio del disco y al espacio libre al final. El mapa del disco luego de la operación fue:

fragmentación en un disco

Y repetimos las mediciones de tiempo, el promedio resulto ser:

16 segundos y centésimos.

Geometría de discos

Se denomina geometría de un disco a la descripción de la estructura física del mismo. Comprende número de cilindros, número de cabezas, número de sectores por cilindro, número de pistas por cilindro, y número de sectores por pista.

En general estos datos se obtienen únicamente del fabricante. En las configuraciones de la mayoría de los discos para PCs suelen utilizarse geometrías ficticias que se adaptan al disco en cuestión, por ejemplo un disco de 2048 cilindros con 10 cabezas podría configurarse como un disco de 1024 cilindros y 20 cabezas.

Lun, 09/10/2006 - 15:30