Ejercicios resueltos

Anuncio
E/S: Polling e Interrupciones
Organización del Computador 1
Ejercicio 1
ciclo:
llegoPersona:
MOV R0, 0x0000
CMP [0xFFF0], 0x0001
JE llegoPersona
JMP ciclo
ADD R0, 0x0001
MOV [0xFFF0], 0x0000
JMP ciclo
Ejercicio 2
Una nueva señal de entrada INTR de solicitud de interrupción.
Una nueva señal de salida INTA de reconocmiento de interrupción.
Un nuevo Flag I que indica:
• 1 el procesador puede ser interrumpido.
• 0 el procesado no puede ser interrumpido.
Se reserva la dirección de memoria 0x0000 para almacenar la dirección de la RAI del dispositivo.
Se agregan 4 nuevas instrucciones al procesador:
• CLI: Coloca I en 0.
• STI: Coloca I en 1.
• Push Ri: [SP ] = Ri y luego SP = SP − 1
• Pop Ri: SP = SP + 1 y luego Ri = [SP ]
Ejercicio 3
a) Mapeo de registros.
TEMP STATUS 7→ 0xFFF0
ATM STATUS 7→ 0xFFF1
WIND SPEED 7→ 0xFFF2
sensar: CMP [0xFFF0], MAX_TEMP ;alcanzó temperatura máxima?
JG alarma
CMP [0xFFF1], MAX_ATM ;alcanzó presión atmosférica máxima?
JG alarma
CMP [0xFFF2], MAX_WIND_SPEED ;alcanzó velocidad máxima?
JG alarma
JMP sensar
alarma: CALL sonarAlarma ;invoca rutina de alarma
JMP sensar
b) Si no se alcanzan los valores máximos, cada iteración ejecuta 7 instrucciones. Por lo tanto, podemos concluir
que cada iteración tarda 7 ∗ t sg. Como podemos realizar una única lectura por iteración, se lee la señal
1
cada 7 ∗ t sg. En conclusión, la frecuencia de muestreo es 7∗t
Hz.
c)
i. sensar: CMP [0xFFF1], MAX_ATM ;alcanzó presión atmosférica máxima?
JG alarma
CMP [0xFFF2], MAX_WIND_SPEED ;alcanzó velocidad máxima?
JG alarma
JMP sensar
1
E/S: Polling e Interrupciones
Organización del Computador 1
alarma: CALL sonarAlarma ;invoca rutina de alarma
JMP sensar
Cada iteración ejecuta 5 instrucciones. Por lo tanto, podemos concluir que cada iteración tarda 5 ∗ t
sg. Como podemos realizar una única lectura por iteración, se lee la señal cada 5 ∗ t sg. En conclusión,
1
1
la frecuencia de muestreo es 5∗t
> 7∗t
Hz.
ii. sensar: CALL sonarAlarma ;invoca rutina de alarma
IRET
Ejercicio 4
a)
Registros:
• IMR: Registro mascara.
• IRR: Registro de solicitudes.
Memoria:
• 0x0000: Dirección RAI Detector.
• 0x0002: Dirección RAI Radio.
• 0x0004: Dirección RAI Actualizador.
Lı́neas de interrupción:
• IR0: Componente detector.
• IR1: Componente radio.
• IR2: Componente actualizador.
Configuración Normal:
• I=1
• IMR = (0000 0111)
b)
a) Detector levanta IR0
b) CI (8259A) estima si corresponde enviar solicitud de int. al CPU (INTR)
c) CPU termina ciclo
d ) Si I=1 entonces (atómicamente)
1)
2)
3)
4)
Apila PSW
Apila PC
responde INTA
Obtiene ID del dipositivo y coloca P C = InicioV ector + ID
c)
RAI\_Radio:
CLI
;Inhabilitar interrupciones
;Guardar la mascara actual
PUSH R0
;Apilar el registro R0
MOV R0, [0xFFFA] ;Mascara Actual -> R0
PUSH R0
;Apilar la máscara actual
;Setear nueva mascara
MOV R0, 0x0001
;Nueva Mascara en R0
MOV [0xFFFA], R0 ;R0 -> Mascara
STI
;Habilitar interrupciones
CALL TratarMensajeRadial
;Restaurar mascara
CLI
;Inhabilitar interrupciones
POP R0
;Restauro mascara y el registro R0
MOV [0xFFFA], R0
POP R0
STI
;Habilitar interrupciones
IRET
;Volver de la interrupción
2
Descargar