sep. 2006 1 1 Sea un computador de 32 bits con un periodo de reloj de 2 ns. Todas las instrucciones se ejecutan en 1 ciclo de reloj, excepto las que acceden a la zona de memoria reservada para almacenar informaci ón de E/S y las de E/S que lo hacen en 10 ciclos. El mecanismo de gestión de interrupciones utiliza vectorizaci ón con direccionamiento indirecto (i.e., la dirección de la rutina de tratamiento de interrupci ón es el contenido de la dirección de memoria identificada por el vector suministrado por el periférico). En el funcionamiento mediante DMA, la transferencia de cada palabra tarda 10 ciclos y el mecanismo de concesión/liberación de buses consume 2 ciclos adicionales. A este computador se le conecta una unidad de disco que tiene, entre otras, las siguientes caracterı́sticas: • • • • Tiempo de acceso: 5 ms. Velocidad de transferencia 4×106 bytes/s. Ancho de palabra: 4 bytes. Tamaño de los bloques: 1.000 bytes. Los registros del módulo de E/S de este periférico tienen las siguientes direcciones: Registro de Datos Registro de Control Registro de Parámetros Registro de Estado Registro de Vector de Interrupción Dir Dir Dir Dir Dir P P P P P Datos Control Parámetros Estado Vector Las órdenes o mandatos que ordenan la lectura de un bloque de datos mediante interrupciones o mediante DMA son: #LEER BLOQUE INT #LEER BLOQUE DMA El número de bloque se indica a través del registro de parámetros. a) Suponga que el módulo de E/S funciona mediante interrupciones, con una interrupci ón por cada palabra. a.1) Haga una estimación razonada de la duración de la secuencia de reconocimiento de interrupción, SRI, de acuerdo con los datos que se conocen. a.2) Programe en ensamblador el fragmento de c ódigo que inicia la operación de lectura del bloque H’345 desde el periférico mediante interrupciones suponiendo los siguientes datos: Dirección de comienzo de la zona de almacenamiento: H’1000 Dirección de la RTI: H’F000 Nota: suponga y elija arbitrariamente las direcciones de memoria adicionales que estime necesarias. a.3) Programe en ensamblador el código de la rutina de interrupción, RTI. a.4) Calcule la duración de dicha RTI. a.5) Calcule la duración total de la operación de transferencia de un bloque a memoria suponiendo que la interrupción de Finalización dura 200 ciclos. a.6) Calcule el porcentaje de tiempo de CPU disponible para otras operaciones distintas de la de E/S durante la fase de transferencia (i.e., una vez transcurrido el tiempo de acceso). b) Suponga ahora que se trabaja por DMA con robo de ciclo aislado y que el c ódigo de inicialización dura 5 ciclos y el de la RTI de finalizaci ón 200 ciclos. Resuelva las cuestiones a.5) y a.6) para este modo de funcionamiento. c) Suponga que se añade al periférico un buffer de 100 palabras. c.1) Modifique el código de la RTI para el funcionamiento por interrupciones. Suponga que las 100 palabras del buffer se obtienen a través de la misma dirección del registro de datos en accesos consecutivos. Indique en qué medida afecta esta nueva duración de la RTI a los apartados a.4) y a.6). c.2) En el caso del DMA, describa cómo afectará el uso del buffer a los valores calculados en el apartado b). sep. 2006 2 SOLUCIÓN a) Funcionamiento mediante interrupciones, con una interrupción por cada palabra: a.1) Un posible modo de estimar lo que dura la Secuencia de Reconocimiento de Interrupción según los datos que se conocen es considerar los accesos que ésta realiza a memoria y a E/S: los apilamientos del Registro de Estado (SR)y del Contador de Programa (PC), la Secuencia de Bus de Reconocimiento de de Interrupción para la obtención del Vector de Interrupción y el acceso a la dirección de la RTI. Suponiendo una duración de 1 ciclo para los accesos a memoria –no correspondientes a almacenamiento de E/S– y 10 ciclos para los accesos a E/S se obtiene la siguiente duración del SRI: tSRI = 3 × 1 ciclo + 1 × 10 ciclos = 13 ciclos = 26 ns a.2) La programación de la operación consta de dos partes: • • En la primera se establecen los parámetros necesarios para la RTI tales como el contador de datos del bloque pendientes de transmitir, el puntero a la posición de la zona de almacenamiento y la dirección de comienzo de la RTI. Estos parámetros se almacenan en direcciones de memoria elegidas de manera arbitraria: Dir M Contador, Dir M Puntero y Dir M Rut Int, respectivamente. Ya que el mecanismo de vectorización de este procesador utiliza direccionamiento indirecto, Dir M Rut Int será el vector de interrupción del periférico. En la segunda, se programa el periférico, especificando en su registro de control la operación que se desea realizar, el bloque de que se trata y el vector de interrupción, que es la dirección antes señalada: ST ST ST #D’250, /Dir_M_Contador #H’1000, /Dir_M_Puntero #H’F000, /Dir_M_Rut_Int OUT #H’345, /Dir_P_Parámetros OUT #Dir_M_Rut_Int, /Dir_P_Vector OUT #LEER_BLOQUE_INT, /Dir_P_Control ;Número de palabras ;Zona de almacenamiento ;Dirección de la RTI ;Número de bloque ;Vector de interrupción ;Orden de lectura Según este código, la programación de la operación incluye 3 instrucciones de E/S y 3 ordinarias que acceden a memoria: t prog = 3 × 1 ciclo + 3 × 10 ciclos = 33 ciclos = 66 ns a.3) Un posible código para la RTI es el siguiente: PUSH PUSH PUSH LD LD IN ST INC DEC CALLZ ST ST POP POP POP RETI .R1 .R2 .R3 .R2, /Dir_M_Puntero .R3, /Dir_M_Contador .R1, /Dir_P_Datos .R1, [.R2] .R2 .R3 $FINALIZAR .R3, /Dir_M_Contador .R2, /Dir_M_Puntero .R3 .R2 .R1 ;Salvaguarda de regs. ;Paso de parámetros ;Lectura del dato ;Almac. en memoria ;Actual. de paráms. ;Recup. de regs. Según este código, grosso modo, la Rutina de Interrupción incluye 13 instrucciones ordinarias, una de E/S y una que accede a memoria de almacenamiento de E/S: tRT I = 13 × 1 ciclo + 2 × 10 ciclos = 33 ciclos = 66 ns a.4) La duración total de la operación es la suma de las fases de programación, tiempo de acceso, tiempo de transferencia del bloque de los 1.000 bytes y el tiempo de la última interrupción, que podemos suponer sep. 2006 3 que incluye la duración de la SRI: tacc = 5 × 106 ns 1.000 bytes ttrans f = = 250 × 103 ns 4 × 106 bytes/s tIntF inal = (200 ciclos) × 2 ns/ciclo = 400 ns ttotal = t prog + tacc + ttrans f + tInt = = 66 ns + 5 × 106 ns + 250 × 103 ns + 400 ns = 5.250.466 ns ≈ 5, 25 ms a.5) Durante la fase de transferencia, el periférico proporciona una palabra cada 4 bytes/4 × 106 bytes/s = 1 µ s, de los cuales la CPU está ocupada el tiempo correspondiente a la interrupción que se produce por cada palabra, es decir: tInt = tSRI + tRT I = 13 ciclos + 33 ciclos = 46 ciclos = 92 ns Por lo tanto, queda disponible un tiempo de 908 ns para otros procesos, lo que representa un porcentaje del 90,8 %. b) Funcionamiento mediante DMA, con un robo de ciclo aislado por cada palabra: b.1) La duración total de la operación es la suma del tiempo empleado en la fase de programación, el tiempo de acceso, el tiempo de transferencia del bloque, el tiempo del último robo de ciclo y el tiempo de procesar la única interrupción final que indica el fin de operación de DMA. Hay que tener en cuenta que cada robo dura (2 + 10) ciclos de reloj, ya que se accede a la zona de memoria reservada para almacenar información de E/S. t prog tIntF inal tDMA ttotal = = = = 5 ciclos × 2 ns/ciclo = 10 ns (13 ciclos + 200 ciclos) × 2 ns/ciclo = 426 ns (2 + 10) ciclos × 2 ns/ciclo = 24 ns t prog + tacc + ttrans f + tDMA + tRT I = = 10 ns + 5 × 106 ns + 250 × 103 ns + 24 ns + 426 ns = 5.250.460 ns ≈ ≈ 5, 25 ms donde el tiempo de transferencia, t transf , sigue siendo el mismo ya que solo depende de las caracterı́sticas del periférico. El resultado es casi idéntico al del apartado a.5). b.2) Durante la fase de transferencia, el periférico devuelve igualmente una palabra cada 1.000 ns, de los cuales la CPU se detiene el tiempo correspondiente a cada robo de ciclo, es decir, 24 ns. Por lo tanto, aproximadamente, queda disponible un tiempo de 976 ns para otros procesos, lo que representa un porcentaje del 97,6 %. c) La incorporación del buffer significa que el periférico solo solicita interrupciones o acceso mediante DMA cada vez que este se llene. Al ser su capacidad de 100 palabras, solicita un total de 3 interrupciones o de robos de buses para DMA, en las cuales la última interrupción o ráfaga sólo transferirá 50 palabras. Por simplicidad, y éste es el criterio empleado en la corrección del ejercicio, se ha programado la rutina sin considerar el caso particular de esta última interrupción (el empleo de un buffer de 100 bytes en lugar de 100 palabras era la intención original del enunciado). c.1) Una posible nueva rutina de interrupción debe transferir 100 palabras a memoria, en lugar de 1 palabra, como se hacı́a en la situación original. Por lo tanto, la rutina añade 99 accesos a la zona de memoria reservada para almacenar información de E/S y 99 accesos al registro de datos del módulo de E/S (un total de 198×10 ciclos más). Se añaden otras instrucciones que sólo se ejecutan una vez, y cuya duración no es significativa en el cómputo total, más 100 veces la instrucción condicional de cierre del bucle y las de incremento y decremento presentes en el cuerpo del bucle. Con esta estimación, grosso modo, la rutina de interrupción aumenta la duración original en (99×(10 + 10)+ 99×(1 + 1 + 1)) ciclos, es decir, un total de 2.277 ciclos. PUSH PUSH PUSH LD .R1 .R2 .R3 .R2, /Dir_M_Puntero sep. 2006 BUCLE: 4 LD IN ST INC DEC BNZ LD SUB CALLZ ST ST POP POP POP RETI .R3, #D’100 .R1, /Dir_P_Datos .R1, [.R2] .R2 .R3 $BUCLE .R1, /DIR_M_Contador .R1, #D’100 $FINALIZAR .R1, /Dir_M_Contador .R2, /Dir_M_Puntero .R3 .R2 .R1 ;Bucle para 100 pals. En la duración global de la operación podemos suponer, por simplicidad, que la última interrupción, que sustituye a la original de 200 ciclos, sólo cambia el tiempo de la última interrupción, que será aproximadamente 1.127 ciclos más larga, si se considera su duración real por las 50 últimas palabras. Con idénticas consideraciones, en lo que se refiere a la ocupación de la CPU, ahora se producen sólo 2 interrupciones en cada una de las cuales se consumen (46 + 2.277) ciclos y una en la que se emplean (46 + 1.127) ciclos lo que se traduce en una ocupación aproximada del 4,61 % y un tiempo disponible del 95,39 %. c.2) En el funcionamiento por DMA serı́a lógico en modo ráfaga, donde en cada petición de buses se envı́an a memoria 100 palabras, con un tiempo total de (2 + 100×10) ciclos. Consecuentemente, el tiempo de ocupación de la CPU será ligeramente menor, al ahorrarse en 99 de cada 100 palabras, los 2 ciclos del protocolo de petición/liberación . El tiempo total de la operación aumenta ligeramente en 99×10 ciclos, correspondientes a la última ráfaga, frente a la transferencia de la palabra aislada original. La duración de la rutina de interrupción final podemos suponer que permanece sin cambios.