1 Sea un computador de 32 bits con un periodo de reloj de 2

Anuncio
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.
Descargar