Hice este apunte porque curse con Casas y cuando termine no sabia hacer ningún ejercicio, y aprendí de los resueltos, pero me volvía loca buscando aquellos con ej parecidos a los que tenia que hacer Se agradecen sugerencias/comentarios a [email protected] Agradezco por su colaboración a Fernando Burruso ([email protected]) que colaboro para terminarlo Las definiciones son solo para entender los ejercicios, no para contestar teoría Próximamente colgare el de procesadores Ejercicios de Disco Los discos constan de varios platos, cada plato tiene dos cabezas de lectura/escritura (arriba y abajo). Esto quiere decir que el plato contiene información de ambos lados. A cada uno de los dos lados de los platos se lo denomina superficie. Cada plato posee pistas, que son círculos concéntricos que lo dividen. Un cilindro es el conjunto de todas las pistas en la misma posición de todos los platos. Las cabezas se mueven perpendiculares a los platos, pasando de pista a pista o de cilindro en cilindro, es indistinto. Las pistas están divididas en sectores, que son bloques de información del mismo tamaño. Cabezas de lectura/e scritura Cilindro Lo que tarda la cabeza en pasar de cilindro a cilindro o de pista a pista se denomina tiempo de búsqueda. Pistas Cabeza l Sentidos del movimientos de la cabezal de lectura/escritura Lo que tarda en pasar de sector a sector se llama: Tiempo rotacional. Sector 4 Cabeza l Sector 2 Sector 0 Sentido de rotación del disco Los ejercicios normalmente nos dan las r.p.m (revoluciones por minuto) a las que gira el disco. Al dar una vuelta la cabeza pasa por sobre toda una pista. Ej. Un disco con: 2 platos => 4 cabezas 100 cilindros => 100 pistas/superficie 10 sectores por pista Tiempo que tarda entre cilindros: 4 ms = Tiempo de búsqueda Velocidad de Giro: 50 r.p.s Pedidos: 142 - 623 (aunque nunca lo diga, están dados en número de sector) Para atender el pedido, primero la cabeza tiene que pararse en el cilindro adecuado y después ubicar el sector. Calculemos el tiempo rotacional: 50 vueltas……………………….. 1 seg (este está en r.p.s; si estuviera en r.p.m serían 60 seg) 1 vuelta…………………………..X= 0.02 seg = 20 ms 10 sectores ………………………… 20 ms 1 sector……………………………….X= 2 ms Para saber en que cilindro me encuentro debo averiguar la cantidad de sectores por cilindro, que se calcula como: Cantidad de cabezas * cantidad de sectores/pista = 4 * 10 = 40 Si dividimos nuestros pedidos por este número nos dará en que cilindro se encuentra cada pedido: 142 / 40 = 3 623 / 40 = 15 Ahora tendríamos que ver en que cabeza está el pedido, y para hacer eso dividimos el resto de la división anterior por la cantidad de sectores por pista: 22 / 10 = 2 23 / 10 = 2 Para conocer el sector, usamos el resto de esta última división: R=2 R=3 Si el ejercicio dice que los sectores están numerados en el rango 0..99, los dejamos como están. Si los sectores están numerados en el rango 1..10, a este resto hay que sumarle 1 (porque los restos de dividir a un número por 10 dan de 0 a 9) R=2+1 R=3+1 Las direcciones físicas quedan de la siguiente manera. (elijo la numeración de 0 a 9) Dirección lógica 142 623 Cilindro 3 15 Cabeza 2 2 Sector 2 3 Para calcular el tiempo que pasó de un pedido al otro tengo que ver dos cosas: En este caso, me tengo que mover 12 cilindros (|15 – 3|): 4 ms * 12 = 48 ms (tiempo de cilindro a cilindro * cantidad de cilindros atravesados) El disco mientras el cabezal va al cilindro correspondiente sigue girando y avanza sectores. Lo que tenemos que ver entonces es cuantos sectores se han recorrido en el lapso que duró la traslación de esos 12 cilindros Tiempo de sector a sector: 2 ms. (se calculó antes) => cantidad de sectores atravesados = 48 ms / 2 ms/sector = 24 sectores Si estaba en el sector 2 (ver tabla anterior), ahora “estaría” en el 26. Pero como hay 10 sectores por pista, si pasamos 24, sería como haber dado 2 vueltas enteras + 4 sectores => estamos en el sector 6. Ahora tenemos que ir al sector 3. Como nos pasamos, para llegar al 3 hay que completar la vuelta y movernos 3 más. Sector 6 al sector 0 => 2ms * 4 sectores = 8 ms + Sector 0 al 2 => 4 ms 12 ms Por lo tanto, el tiempo total para cumplir el pedido es de: 48 ms + 12 ms = 60 ms + 2 ms * * Aunque el ejercicio muchas veces no lo diga, se supone que al atender el pedido se lee un sector. Si no hay datos acerca de cantidad de sectores a leer, tamaño del sector, etc., se toma al tiempo de lectura como lo que se tarda en recorrer un sector. El tiempo de transferencia esta explicado más adelante. Sigamos con otro pedido: Dirección lógica Cilindro Cabeza Sector 623 497 15 12 2 1 4* 7 * Nos movimos un sector 3 cilindros (|12 – 15|) * 4 ms = 12 ms. En 12 ms nos movimos 6 sectores (12 ms / 2 ms). Estamos en 4 + 6 = 10, que equivale al sector 0 (estamos en la numeración de 0..9) Para llegar al 7 desde el cero tardamos 7 * 2 ms = 14 ms Total = 12 ms + 14 ms + 2 ms (nuevamente de lectura) Tiempo de transferencia T=b/r*N b = cantidad de bytes a transferir r = r.p.s. (revoluciones por segundo) N = cantidad de bytes por pista Algoritmos 1 Planificación SCAN En el algoritmo SCAN, el brazo del disco parte de un extremo del disco y se mueve hacia el otro, atendiendo las solicitudes a medida que llega a cada cilindro, hasta llegar al otro extremo del disco. Ahí, la dirección de movimiento de la cabeza se invierte, y continúa la atención. La cabeza barre continuamente el disco de un lado a otro. El algoritmo SCAN también se conoce como algoritmo de elevador, ya que el brazo del disco se comporta igual que el elevador de un edificio, que atiende primero todas las solicitudes para subir y luego cambia de dirección para atender las solicitudes de abajo. Pistas 100 Pedido 2 Planificación C-SCAN La planificación SCAN circular (C-SCAN) es una variante de SCAN diseñada para dar un tiempo de espera más uniforme. Al igual que SCAN, C-SCAN mueve la cabeza de un extremo del disco al otro, atendiendo las solicitudes en el camino, sólo que ahora, cuando la cabeza llega al otro extremo, regresa de inmediato al principio del disco sin atender solicitudes. En la estrategia C-SCAN, el brazo se mueve del cilindro exterior al interior, sirviendo a las peticiones con menor tiempo de búsqueda. Cuando el brazo ha completado su recorrido hacia adentro, salta al principio del disco y a continuación reanuda su recorrido hacia adentro procesando peticiones. Pistas 100 Pedido Para resolver los ejercicios, hay que ver si la cabeza del disco esta subiendo o bajando, y respetar esa dirección. Se ordenan los pedidos en forma creciente desde la posición inicial hasta el ultimo o primer cilindro (depende de la dirección) y después atender el resto. Ej: Seguimos con los datos del ej anterior, 100 pistas y 10 sectores por pista Posición inicial: 500 (en sectores) y ascendiendo Pedidos: 10 – 642 – 811 – 800 – 254 – 798 – 685 Ordenando: 500 – 642 – 685 – 798 – 800 – 811 – 9XX* - 0 – 10 – 254 * Hay que llegar hasta el último cilindro y para después volver al primer cilindro, pero no interesa el sector dentro del cilindro que quedemos Si en el ejercicio tenemos que calcular los tiempos de atención de los pedidos, cuando llegamos al pedido más alto, tendríamos que calcular el tiempo que tarda hasta el ultimo cilindro Ej.: Supongamos que atendimos el pedido 811 y quedamos en el cilindro 8 sector 1. Nos tenemos que mover 1 cilindro. En el ejercicio anterior teníamos que tardaba 4 ms para pasar entre cilindros y 2 ms para pasar de sector a sector. Entonces para mover un cilindro son 4 ms y en ese tiempo la cabeza se movió 2 sectores. Estaríamos en el cilindro 9 sector 3 (1 + 2) Lo importante es que, como el tiempo de retorno al cilindro 0 se considera nulo, para calcular el siguiente pedido (10) tendríamos que considerar que estamos en el cilindro 0 sector 3 3 Scan n pasos Funciona igual que scan, pero utiliza 2 colas: - Una de tamaño n, donde guarda los pedidos que va a atender. Una cola de espera, donde acumula el resto de los pedidos. Suponiendo que tengo los pedidos que llegaron en el siguiente orden: 1000 – 642 – 811 – 800 – 254 – 798 – 685 y uso scan de 3 pasos. Las colas quedarian asi: Cola n = 1000 – 642 – 811 Cola espera = 800 – 254 – 798 – 685 Atenderia los pedidos de la cola n, en el siguiente orden (suponiendo que arranca del sector 0): 642 – 811 – 1000. Luego saca los 3 priomeros pedidos de la cola de espera, y los pasa a la cola n: Cola n = 800 – 254 – 798 Cola espera = 685 Y atiende esos pedidos en el siguiente orden (habiamos quedado en el sector 1000) : 800 – 798 – 254 Por ultimo atiende el pedido 685. Existe el F-Scan, que es un scan de n pasos, con n = 2. 4 Planificación LOOK El algoritmo look trabaja con la misma idea que Scan, con la diferencia que no va hasta la ultima pista antes de cambiar el sentido del recorrido, sino que va hasta la pista que tenga el ultimo pedido. Pistas 100 Pedido 5 Planificación C- LOOK Este algoritmo, como look, se mueve hasta los pedidos “extremos”, pero en un solo sentido. Pistas 100 Regla para acordarse Diferencias entre Scan, C-Scan, Look, C-Look - - Acuerdense que scan es “escanear” (que nivel que tengo de ingles!!!)…. Piensen como funciona la lucecita de un scanner…. Recorre TODO el scanner, por mas que le pongas una hoja oficio, a4, o la horrible foto 4x4 que tenes en el dni. Look es “mirar”, por lo tanto, cuando sube “mira” si hay pedidos arriba para seguir avanzando, si no hay, cambia de sentido.. (y mira abajo cuando bajas) Y tambien acuerdense que los algoritmos que tiene la C, “CORTAN” cuando llegan a un extremo, y vuelven a arrancar desde 0.