Ejercicios de E/S (Tomados del libro de Tanenbaum) 12. Una red de área local se utiliza de la siguiente manera. El usuario realiza una llamada al sistema para enviar un paquete de datos a través de la red. Acto seguido, el sistema operativo copia los datos a un búfer del núcleo. Luego el sistema operativo copia los datos a la tarjeta controladora de red. Cuando todos los bytes están a salvo dentro del controlador, se procede a enviarlos a través de la red a una velocidad de 10 megabits/seg. El controlador de red de destino almacena cada bit un microsegundo después de que se halla enviado. Cuando llega el último bit, se interrumpe a la CPU de destino y el núcleo copia el paquete que acaba de llegar a un búfer del núcleo para inspeccionarlo. Una vez que determina el usuario al cual va dirigido el paquete, el núcleo copia los datos al espacio del usuario. Si suponemos que cada interrupción y su procesamiento asociado requieren 1 milisegundo, que los paquetes son de 1024 bytes (ignórense las cabeceras), y que la copia de cada byte requiere 1 microsegundo, ¿cuál es la velocidad máxima a la cual los procesos pueden enviarse datos unos a otros por la red? Supóngase que el remitente se bloquea hasta que se termina el trabajo en el lado del receptor, esperando el acuse de la recepción del paquete. Por simplicidad, supóngase que el tiempo para obtener el acuse de vuelta es tan pequeño que puede ignorarse. T1 T5 T2 T4 Tinterrupción T3 ¿ Velocidad máxima de envío de datos ? Vamos a calcular primero el tiempo que tarda en llegar al destinatario un paquete de datos de 1024 bytes: T = T1 + T2 + T3 + T4 + T5 + Tinterrupción Comenzamos calculando el tiempo T1 que se tarda en copiar el paquete del espacio del usuario al búfer del núcleo (sabemos que la copia de cada byte requiere 1 microsegundo): T1 = 1024 Bytes 1 segs/Byte = 1024 segs 1 T2, T4 y T5 corresponden también a la copia de 1024 bytes, por lo que coinciden con T1. Sólo nos falta por calcular el tiempo T3 que tarda en transmitirse el paquete desde la tarjeta de red origen a la destino. Puesto que la red transmite a 10 megabits/seg, eso significa que la red acepta 10 millones de bits por segundo, y por tanto envía 1 bit cada 1/10000000 segundos = 0,1 microsegundos. El tiempo necesario para enviar por la red todos los bits del paquete es 1024 8 bits 0,1 segs/bit + = 819,2 segs No obstante hay que tener en cuenta que el último bit (igual que todos) termina de almacenarse 1 microsegundo después de su envío. Por tanto hay que añadir el tiempo que va desde que se recibe el último bit (0,1 microsegundos después de su envío) hasta que termina de almacenarse: 1 0,1 segs = 0,9 segs En consecuencia T3 = 819,2 segs + 0,9 segs = 820,1 segs Totalizando, el tiempo necesario para enviar un paquete de 1024 bytes es: T = 4 T1 + T3 + Tinterrupción = 4 1024 segs + 820,1 segs + 1 segs = = (4096 + 821,1) segs = 4917,1 segs Lo que representa una velocidad de transferencia de datos máxima de Vmax = (1024/4917,1) bytes/segs = 106/4917,1 KBytes/seg = 203,37 KBytes/seg 14. ¿Cuánto sesgo (skew) de cilindro es necesario para un disco de 7200 rpm con un tiempo de posicionamiento entre pistas de 1 milisegundo? El disco tiene en cada pista 200 sectores de 512 bytes. Vamos a calcular cuántos sectores del disco pasan por debajo de la cabeza de lectura en el tiempo correspondiente a un posicionamiento (1 mseg). Sabemos que el disco da 7200 vueltas en 60 segundos. En cada vuelta pasan 200 sectores, por tanto los sectores pasan por debajo de la cabeza a una velocidad de 7200 rpm = 7200 60 200 sectores/seg = 86400000 sectores/seg = 86,4 sectores/milisegundo Luego la solución es que es necesario un sesgo de cilindro de 87 sectores. 2 20. Un disquete está doblemente intercalado, como en la Figura 5-26(c). Tiene 8 sectores de 512 bytes por pista, y una velocidad de rotación de 300 rpm. ¿Cuánto tiempo se necesita para leer todos los sectores de una pista en orden, suponiendo que el brazo está anteriormente correctamente posicionado, y que es necesaria media rotación para que el sector 0 quede bajo la cabeza de lectura/escritura? ¿Cuál es la velocidad de acceso a los datos? Repetir ahora los cálculos para un disco sin intercalamiento con las mismas características. ¿Cuánto se degrada la velocidad de acceso a los datos a consecuencia del intercalamiento? Figura 5-26. (a) Sin intercalamiento. (b) Intercalamiento sencillo. (c) Intercalamiento doble. Comenzamos calculando el tiempo necesario para una rotación. Ya que la velocidad de rotación es de 300 rpm, cada 60 segundos tienen lugar 300 rotaciones. Por tanto: TRotación = 60/300 segs = 0,2 segs Independientemente del intercalamiento hay que esperar media vuelta hasta que el sector 0 pase por debajo de la cabeza de lectura, es decir 0,1 segundos. Disquete doblemente intercalado: Hay que leer por orden los sectores 0, 1, 2, 3, 4, 5, 6 y 7. En la primera vuelta se leen los sectores 0, 1 y 2. En la segunda vuelta se leen los sectores 3, 4 y 5. Para leer los sectores 6 y 7 restantes es necesario dar 3/4 de vuelta adicionales. Tenemos 2,75 vueltas a las que hay que añadir la primera media vuelta de latencia rotacional para esperar a que el sector 0 pase por debajo de la cabeza. En total resultan 3,25 vueltas, de manera que el tiempo total necesario para leer todos los bloques en orden es: T = 3,25 0,2 segs = 0,65 segs La velocidad de acceso a los datos se obtiene teniendo en cuenta que cada uno de los 8 sectores leídos tiene 512 bytes. V = (8 512)/0,65 bytes/seg = 4/0,65 KBytes/seg = 6,15 KBytes/seg 3 Disquete sin intercalamiento “con las mismas características”: Hay cierta ambigüedad en la pregunta, ya que si antes suponíamos que el disquete estaba doblemente intercalado, eso se debía a que la unidad de disquete no era capaz de leer un nuevo sector hasta que no pasaran dos sectores por debajo de la cabeza. Si esa característica de la unidad de disquete se mantuviese y el disquete no tuviera ningún intercalamiento, resultaría que el sector 0 podría leerse tras la media vuelta inicial; el sector 1 no podría leerse en esa vuelta, sino en la siguiente, y lo mismo le sucedería a los sectores restantes 2, 3, 4, 5, 6 y 7, obteniéndose un total (con la media vuelta inicial incluida) de 8,5 vueltas, T = 8,5 0,2 = 1,7 segs y V = (8 512)/1,7 Bytes/seg = 4/1,7 KBytes/seg = 2,35 KBytes/seg. Estos resultados muestran que prescindir del doble intercalamiento del disquete cuando éste es necesario para la unidad ocasionaría el peor de los rendimientos posibles. No obstante, por la forma de la pregunta, parece que el resultado obtenido debería ser mejor que cuando había intercalamiento, lo que nos conduce a presumir que la unidad de disquete es tal que no necesita intercalamiento, es decir es capaz de leer un sector detrás de otro sin ningún problema. En ese caso se podrían leer los 8 sectores en una única vuelta además de la media vuelta inicial de latencia, es decir en total bastaría con 1,5 vueltas. Entonces T = 1,5 0,2 = 0,3 segs V = (8 512)/0,3 bytes/seg = 4/0,3 KBytes/seg = 13,33 KBytes/seg Por tanto la degradación de la velocidad de acceso a los datos debida a la necesidad del intercalamiento es: (13,33 – 6,15) KBytes/seg = 7,18 KBytes/seg En términos relativos, la degradación es de un 7,18/13,33 = 53,86 % 4 24. Llegan al driver del disco las siguientes peticiones de sectores del disco para los cilindros 10, 22, 20, 2, 40, 6 y 38, en ese orden. Un posicionamiento requiere 6 milisegundos por cilindro atravesado. Cuánto tiempo de posicionamiento es necesario en total con cada uno de los siguientes algoritmos de planificación del disco: (a) First-come, first served (FCFS). (b) Closest cylinder next (SSF). (c) Algoritmo del ascensor (SCAN) (moviéndose inicialmente hacia ARRIBA). En todos los casos, el brazo del disco está situado inicialmente en el cilindro 20. Caso (a) FCFS: 20 10, 10 22, 22 20, 20 2, 2 40, 40 6, 6 38 Luego el número de sectores atravesados es: (20 – 10) + (22 – 10) + (22 – 20) + (20 – 2) + (40 – 2) + (40 – 6) + (38 – 6) = = 10 + 12 + 2 + 18 + 38 + 34 + 32 = 166 sectores tiempo de posicionamiento total = 166 6 milisegs = 996 milisegs Caso (b) SSF: 20 20, 20 22, 22 10, 10 6, 6 2, 2 38, 38 40 Número de sectores atravesados: (20 – 20) + (22 – 20) + (22 – 10) + (10 – 6) + (6 – 2) + (38 – 2) + (40 – 38) = = 0 + 2 + 12 + 4 + 4 + 36 + 2 = 60 sectores tiempo de posicionamiento total = 60 6 milisegs = 360 milisegs Caso (c) SCAN: ARRIBA ABAJO 20 20, 20 22, 22 38, 38 40, 40 10, 10 6, 6 2 Número de sectores atravesados: (20 – 20) + (22 – 20) + (38 – 22) + (40 – 38) + (40 – 10) + (10 – 6) + (6 – 2) = = 0 + 2 + 16 + 2 + 30 + 4 + 4 = 58 sectores tiempo de posicionamiento total = 58 6 milisegs = 348 milisegs 5 25. Un vendedor de ordenadores personales visita una universidad en el suroeste de Amsterdam. El vendedor comenta durante la presentación de sus productos que su compañía ha dedicado un gran esfuerzo a hacer mucho más rápidas sus versiones de UNIX. Como ejemplo, destaca que el driver de disco utiliza el algoritmo del ascensor y también encola múltiples peticiones dentro de un cilindro siguiendo el orden de los sectores. Un estudiante, Harry Hacker, quedando impresionado por la afirmación del vendedor, decide comprar uno de esos ordenadores. Ya en casa, Harry escribe un programa para leer aleatoriamente 10.000 bloques repartidos por todo el disco. Para su asombro, el rendimiento obtenido fue idéntico al que podría esperarse del algoritmo First-Come, First-Served. ¿Mintió el vendedor? El algoritmo del ascensor (SCAN) se comporta en la mayoría de los casos mucho mejor que el algoritmo FCFS, por lo que hay motivos para estar asombrados al respecto, y todavía más si las peticiones de sectores de cada cilindro se ordenan por número de sector. No obstante, lo que el vendedor afirmó es simplemente que “el driver de disco utiliza el algoritmo del ascensor y también encola múltiples peticiones dentro de un cilindro siguiendo el orden de los sectores”. Fijémonos en que esa afirmación se refiere tan solo al software de E/S sin tener para nada en cuenta el hardware. Si tenemos en cuenta el hardware (el disco duro instalado en el ordenador) puede estar sucediendo que la geometría física del disco no coincida con la geometría lógica del disco que utiliza el driver del sistema operativo, de manera que cuando el sistema operativo escoge mover el brazo hacia el siguiente cilindro más próximo en el sentido del movimiento, físicamente ese cilindro puede estar localizado a un número de cilindros diferente del esperado por el sistema operativo, e incluso en el sentido contrario del movimiento. En consecuencia a nivel físico puede estar sucediendo que el brazo esté atendiendo las peticiones de disco de una forma muy diferente a la correspondiente al algoritmo del ascensor, por lo que el rendimiento obtenido ha resultado ser muy pobre y similar al del algoritmo FCFS. En consecuencia, estrictamente hablando, el vendedor podría no estar mintiendo, puesto que el driver puede efectivamente tener implementado el algoritmo del ascensor mejorado que mencionó. Eso no quita que si Harry Hacker decide ir a la organización de consumidores y usuarios y se busca un buen abogado es muy posible que se condene a la compañía del vendedor por hacer publicidad fraudulenta de sus productos. 6