Equipos de almacenamiento masivo El sistema de archivo puede verse, desde el punto vista lógico, formado por tres partes: la primera es la interfase que le presenta el sistema a usuarios y programadores, la segunda está constituida por las estructuras de datos y algoritmos que usa el SO para implementar la interfase anterior, la tercera tiene que ver con la parte de más bajo nivel del sistema de archivo que está formada por los equipos que almacenan la información en sí, así como el conjunto de algoritmos que se asocian a ellos. Este documento está dedicado a la tercera parte. Discos magnéticos Discos duros La figura 1 presenta una imagen, esquematizada, de la estructura interna de un disco magnético. El disco está formado por un conjunto de platos (platter) con superficies regrabables arriba y abajo, cada plato se divide, lógicamente, en pistas (track), las cuales a la vez se dividen en sectores. Debe observarse el brazo (arm assembly) que soporta los cabezales de lectura y escritura (readwrite head), uno por cada superficie, esos cabezales no descansan sobre el disco ya que “flotan” a unos micrones de su superficie. Todos los platos están unidos a un eje central (splinde) que lo mueve el motor del disco. Figura 1. Imagen esquematizada de un disco magnético 1 Es bueno destacar que los cabezales de lectura/escritura se mueven todos a la vez (al moverse el brazo). Ese movimiento consume un tiempo determinado que se conoce como tiempo de búsqueda (seek time). El conjunto de pistas que quedan accesible por un seek time recibe el nombre de cilindro (cylinder) por su similitud con el concepto geométrico de cilindro. La información está grabada en los sectores, por ese motivo para leer el contenido de un sector específico serán necesarios dos movimientos mecánicos que tienen tiempos específicos: 1. Tiempo de búsqueda (seek time). Es el tiempo que se consume en llevar el brazo de lectura/escritura desde la posición actual hasta el cilindro en el que está el sector que se desea leer. 2. Tiempo de rotación (Rotacional time). Tiempo que tarda en rotar el disco para que el sector deseado quede debajo del cabezal de lectura/escritura. La suma de los dos tiempos anteriores recibe el nombre de tiempo de posicionamiento. Después de haber situado el cabezal en la posición deseada, el sistema consume un tiempo para transferir el dato que se conoce como tiempo de transferencia, de ahí que la velocidad de un disco estará dada por la siguiente ecuación: Vd = TP + TT donde: Vd es la velocidad del disco, TP es el tiempo de Posicionamiento que es igual a seek time + rotacional time, TT es el tiempo de transferencia. Discos desmontables Generalmente tienen un solo plato que está contenido dentro de una caja plástica, los disquetes o discos floppy son unos discos magnéticos muy baratos, aunque en realidad las últimas producciones son de muy mala calidad y su uso está en franco declive. En el caso de los disquetes, generalmente los cabezales descansan directamente sobre las superficies. 2 Forma de conexión Una torre de disco se une a la computadora por un conjunto de alambres denominado bus de entrada/salida y existen diversas tecnologías (unas mas actuales que otras): Enhanced Integrated Drive Electronics (EIDE), Advanced Technology Attachment (ATA), Serial ATA (SATA), Universal Serial BUS (USB) Fiber Channel (FC) y SCSI. La transferencia de datos sobre un bus la llevan a cabo procesadores especiales denominados controladores, el controlador de host está en la computadora y el controlador del disco viene con el disco. Para resolver una operación de entrada/salida, la computadora pone un comando en el controlador de host, el cual lo envía (como un mensaje) al controlador del disco el que a su vez opera el hardware de disco para ejecutar el comando. Los controladores de disco, típicamente, tienen una memoria cache interna y los datos se transfirieren entre la superficie del disco y esa memoria cache y de esta hacia el controlador del host. Cintas magnéticas Se usaron como medios de almacenamiento masivo en los primeros sistemas, su principal ventaja es la capacidad de almacenamiento, así como la larga permanencia de lo que sobre ella se graba, sin embargo son relativamente lentas con relación a la memoria principal y a los discos, además los accesos directos son muchos más lentos. Por todas las razones anteriores hoy en día se usan principalmente como medios para resguardar la información. Estructura de las torres de discos Hoy en día una torre de disco se ve como un arreglo de bloques lógicos, siendo el bloque lógico la unidad mínima de transferencia. La longitud de un bloque lógico es, típicamente, de 512 bytes aunque algunos discos se pueden formatear a bajo nivel para especificar la longitud de los bloques. El arreglo, de una sola dimensión, de bloques lógicos se mapean sobre los sectores del disco secuencialmente: el sector 0 es el primer sector de la primera pista sobre el cilindro mas externo del disco, el mapeo sigue en orden 3 por esa pista y después en el resto de las pistas del cilindro, para después continuar en el cilindro siguiente hasta arribar al cilindro mas interior del disco. Planificación de discos El sistema operativo debe usar el hardware eficientemente en este sentido la eficiencia está signada por la velocidad de acceso. Como ya se dijo, la velocidad de acceso de un disco está asociada a dos movimientos mecánicos que los nombramos seek time y rotacional time. Por otra parte se conoce como el ancho de banda del disco al total de bytes transferidos dividido entre el total de tiempo transcurrido entre la primera petición y la terminación de la última transferencia, la idea entonces es tratar de “optimizar” esos valores. Cada vez que un proceso necesita una E/S de disco deberá hacer una llamada al SO que especifica varias piezas de información: El tipo de operación (entrada o salida). La dirección del disco. La dirección de memoria. Cantidad de sectores a transferir. Obsérvese que el hecho de hacer una petición no significa que será atendida de inmediato debido a que el disco puede estar ocupado con peticiones anteriores y en ese caso la nueva petición deberá quedar en una cola que puede tener otras peticiones pendientes. A partir de esta realidad queda clara la necesidad de usar algún algoritmo para decidir cuál de las peticiones pendientes será la próxima a satisfacer cuando el disco termine la petición en curso. Algoritmo “el primero en llegar es el primero en ser servido” (First Come First Served -FCFS) Es el algoritmo más simple, como su nombre lo indica satisface las peticiones por el orden de llegada. Puede producir un movimiento para adelante y para atrás del brazo del disco sin tomar en cuenta ningún principio que le ayuda a minimizar esos movimientos. 4 El tiempo de búsqueda menor (Shortest Seek Time First-SSTF) En este caso se selecciona la siguiente petición que provoque el menor seek time. Aunque este algoritmo se porta mejor que FCFS, al tratar de minimizar los movimientos del cabezal, no es el más eficiente debido a que trata al mas cercano a la posición actual y no toma en cuenta si la petición más cercana es una petición asilada, siendo, en ese caso, mejor moverse a una petición que tenga muchos vecinos tratando de reducir los movimientos totales y no los locales. El algoritmo SSTF es discriminatorio al provocar inanición (starvation) sobre todo a las peticiones que estén en el inicio o final del disco. Algoritmo Explorador (Scan) En este caso el brazo comienza situándose en el cilindro más externo (o el más interno) del disco y se mueve hacia el extremo opuesto satisfaciendo todas las peticiones que se encuentra. Debido a la similitud del servicio que da un elevador en un edificio también recibe el nombre de algoritmo del elevador. Algoritmo C-Scan (Circular Scan) Es una variante de Scan que pretende tener mejores tiempos de respuesta, en este caso el “elevador” se mueve hacia una dirección y cuando llega al final no regresa dando servicios sino que retorna directamente al lugar de inicio (el final o el inicio del disco) para de esa forma no retardar tanto a las peticiones que llegaron cuando ya el brazo había pasado por el lugar que ocupan. En cualquiera de las dos variantes de Scan el cabezal se mueve al final o el inicio del disco lo cual, a todas luces, es innecesario de ahí que las implementaciones de este algoritmo lo que en realidad hacen es mover el cabezal hasta la petición mas externa de la dirección que van sin arribar al final del disco. Esas variantes se conocen como look. Seleccionar un algoritmo SSTF es un algoritmo que se usa con bastante amplitud porque tiene mejor rendimiento que FCFS, aunque provoca inanición (starvation). Scan y C-Scan 5 son menos proclives a la inanición y por eso se usan en sistemas que tienen una fuerte carga de trabajo con disco Las peticiones al disco están fuertemente relacionadas con el tipo de colocación o asignación del sistema de archivo, por ejemplo la asignación contigua tiende a que las peticiones no estén dispersas por el disco contrario a la indexada que si lo estarán con mayor probabilidad. También la localización de los directorios y de los bloques de índices juega un rol muy importante en la eficiencia de los algoritmos. Debido a todas esas complejidades los algoritmos de planificación de disco se escriben como un módulo independiente del SO de forma que puedan reemplazarse si se considera necesario. Se considera que SSTF o Look son adecuados para tenerlos como algoritmos por defecto. Manipulación de discos Formateo Para que un disco puede almacenar datos, es necesario dividirlo en sectores que el controlador de disco pueda leer y escribir, ese proceso se denomina formateo físico o de bajo nivel y consiste en llenar todos los sectores del disco con una estructura de datos especial que, típicamente, tiene tres partes: un encabezado, un área de datos (usualmente de 512 bytes), una cola El encabezado y la cola contienen información para el controlador de disco, se pueden citar: el número del sector, y un código de corrección de error o ECC (error correction code). Cuando el controlador escribe un sector de datos durante una operación normal de E/S se actualiza el ECC con un valor que se calcula a partir de todos los bytes del dato, cuando se lee el dato se recalcula el valor del ECC y si no coincide con el valor almacenado es una indicación de que el sector puede estar dañado. La mayoría de los discos duros vienen formateados a bajo nivel desde la fábrica Todo SO necesita una estructura de datos específica para poder almacenar archivos en los discos. El primer paso para hacer eso es dividir el disco en 6 varios grupos de cilindros contiguos de forma que el SO pueda tratar a cada partición como si fuera un disco diferente, después de hacer eso es necesario hacer un formateo lógico en el cual se crea el sistema de archivo, es en ese instante en que el SO almacena en el disco las estructuras de datos iniciales del sistema de archivo, las estructuras de datos pueden ser: un mapa de espacio libre y asignado, y un directorio vacío. El bloque boot Para que una computadora pueda iniciarse con el SO que tiene instalado necesita un cargador inicial que se encarga de cargar las partes iniciales del SO, las cuales a su vez deberán cargar las partes restantes, el cargador inicial debe ser sencillo y solo se ocupa de iniciar aspectos esenciales para el sistema. La mayoría de las computadoras tiene un cargador en memoria ROM que hace el trabajo inicial para después buscar un bloque especial del disco que contiene un cargador específico para el SO que se tiene instalado, ese cargador se localiza en un lugar especial del disco que se conoce como bloque boot. El disco que tiene ese cargador se denomina disco de sistema. Veamos un ejemplo generalizado. El código del bloque boot se sitúa en el primer sector del disco (se denomina Master Boot Record o MBR): 1. Cuando se enciende la computadora, el cargador de la ROM lee el código del MBR en el cual se encuentra un código de carga y una tabla con las particiones del disco (un campo de la tabla contiene una bandera que indica cuál es la partición del sistema o activa). 2. Una vez que se identifica la partición del sistema y se determina su localización, el cargador del MBR carga el cargador de la partición activa, que se encuentra en el primer sector de esa partición (se denomina boot sector). 3. El cargador del boot sector se encarga, en ese instante, de comenzar el proceso de carga del SO el cual puede ser complejo y tener varias partes. 7