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
Descargar

Ejercicios de E/S (Tomados del libro de Tanenbaum) Una red de