Entrada/Salida - Polling e Interrupciones

Anuncio
Entrada/Salida
Polling e Interrupciones
Mariano Moscato
Organización del Computador 1
Verano de 2011
El GuidoBot
Robot docente
Basado en tecnologı́a ORGA1
tiene un procesador y una memoria ORGA1
Sus dispositivos principales son:
motor un motor que controla su desplazamiento
visión un sistema de visión
El motor del GuidoBot
El motor del GuidoBot tiene dos registros:
PotenciaActual (de lectura) indica la potencia actual del motor
PotenciaRequerida (de escritura) en él se debe escribir la potencia
que se desea dar al motor del GuidoBot
Los registros de los dispositivos son su medio de comunicación más
común con el resto de los componentes del sistema.
Registros de los dispositivos de E/S
Pueden ser leı́dos o escritos por un tercero (por ej.: el CPU)
de lectura su contenido no puede ser modificado desde fuera
de escritura sólo se puede escribir en ellos
de lectura y escritura se pueden leer y escribir
Dependiendo de la arquitectura:
espacio de direcciones especı́fico de E/S
a través de instrucciones especı́ficas (IN, OUT)
utilizando algunas direcciones de memoria
direcciones mapeadas en memoria
ORGA1 usa las direcciones de memoria FFF0h a FFFFh para E/S.
El motor del GuidoBot
Recordando que el motor del GuidoBot tiene dos registros:
PotenciaActual (de lectura) indica la potencia actual del motor
PotenciaRequerida (de escritura) en él se debe escribir la potencia
que se desea dar al motor del GuidoBot
Sus valores son números en complemento a 2 de 16 bits.
Asumiendo que se les asignan las siguientes direcciones:
PotenciaActual 0xFFF0
PotenciaRequerida 0xFFF1
Ejercicio
Escribir un programa para la ORGA1 que mueva al GuidoBot a
toda velocidad hacia adelante.
El motor del GuidoBot
Unas preguntitas
Luego de ejercutar el programa, ¿Que contiene la posición de
memoria 0xFFF1?
Si en lugar de tener direcciones mapeadas a memoria,
tuviéramos un espacio de direcciones distinto para E/S,
¿cómo cambiarı́a el programa?
El sistema de visión del GuidoBot
El sistema de visión es un dispositivo avanzado
Sugiere movimientos periódicamente
basado en los datos que registran sus cámaras
Cuenta con un registro de lectura SugerenciaLista,
que toma los valores:
0x0000 mientras se realiza el cálculo de la sugerencia
0x0001 si sugiere detener el robot
0x0002 si sugiere avanzar
Ejercicio: rutina principal del GuidoBot
Escribir la rutina principal del GuidoBot, que lo mueve de acuerdo
a la sugerencia de su sistema de visión.
Una mejora al GuidoBot
Se desea agregar al GuidoBot un dispositivo receptor de correos
electrónicos, para que pueda responder consultas por email.
Recibido
LECTURA
Próximo
LECTURA
contiene un 1 cuando se recibe un mail
0x0000 si se está buscando la siguiente palabra
0x0001 si el registro Dato contiene la próxima palabra del mensaje
0x0002 si el mensaje concluyó (no hay más palabras)
Dato
Siguiente
LECTURA
contiene una palabra del mensaje
ESCRITURA
se escribe un 1 para pedir la próxima palabra
Ejercicio: modificar la rutina principal del GuidoBot
Modificar la rutina anterior para que el GuidoBot revise si hay un
mail y lo copie a memoria (a partir de la dirección 0xA000).
Una mejora al GuidoBot
Unas preguntitas
¿Qué tipo de esquema de E/S estamos usando?
Marcar las partes del código donde se materializa este
esquema.
Problemas prácticos
Pero...
Si cada transferencia desde o hacia memoria tarda 10 ms
y cada mail de consulta suele medir unos 5000 Bytes
¿Cuánto tiempo está el GuidoBot sin prestar atención a su
sistema de visión?
¿Y ahora?
¿Tiramos el GuidoBot a la basura?
Interrupciones
Ejercicio: modificando el GuidoBot
Modificar la arquitectura de ORGA1 para dotarla de la capacidad
de atender la interrupción de un único dispositivo de E/S.
Indicar claramente qué cosas son responsabilidad del hardware y
qué del software.
Modificar la rutina para adaptarla a la nueva arquitectura.
Interrupciones: Ejercicio 2
Solución
Se agregan:
Señal de entrada INTR y de salida INTA.
Flag IF
1 el procesador puede ser interrumpido
0 el procesador no puede ser interrumpido
Se reserva la posición de memoria 0000 para almacenar la
dirección de la RAI del dispositivo.
Se proveen cuatro instrucciones nuevas:
CLI que pone en cero el flag IF
STI que pone en uno el flag IF
PUSH Ri apila el registro Ri ([SP]=Ri y SP=SP-1)
POP Ri desapila en el registro Ri (SP=SP+1 y Ri =[SP])
Otra mejora al GuidoBot
Se desea agregar al GuidoBot un dispositivo radio receptor,
para poder comunicarle modificaciones de último momento
(cambios en el calendario, criterios de correción de parciales, etc.).
Emite una interrupción cuando llega un mesaje por radio
Sus registros son:
Próximo
LECTURA
0x0000 si se está buscando la siguiente palabra
0x0001 si el registro Dato contiene la próxima palabra del mensaje
0x0002 si el mensaje concluyó (no hay más palabras)
Dato
Siguiente
LECTURA
contiene una palabra del mensaje
ESCRITURA
se escribe un 1 para pedir la próxima palabra
¿Y ahora cómo hacemos para implementar esta mejora?
Le agregamos un Controlador de Interrupciones
Es un dispositivo de E/S cuyo objetivo es gestionar la
entrada/salida para el procesador.
El controlador recibe un conjunto de señales de los distintos
dispositivos, toma la decisión cual es la más prioritaria y envı́a
una señal al procesador.
Estructura del controlador
Tiene cuatro entradas para solicitudes de interrupción (IR0 a IR3)
y una salida para solicitar interrupción al CPU (INTR) y una
entrada para reconocimiento de atención (INTA).
Sus registros internos son:
IRR (Interrupt Request Register) Cuando se activan una o varias
de las entradas IR, estas quedan reflejadas en los bits
correspondientes del IRR.
ISR (Interrupt Service Register) De aquellos bits activados en el
IRR, el más prioritario queda reflejado en el ISR.
IMR (Interrupt Mask Register) El programador puede enmascarar
algunas interrupciones de manera que si se activase la IR
correspondiente, el controlador la ignorará.
Ciclo de reconocimiento de interrupción
1
Tras la activación de una lı́nea IR, el controlador activa la
salida INTR señalándole a la CPU la existencia de una
interrupción activada.
2
Al recibir la señal, el procesador da un pulso en su salida
INTA indicando que comienza un ciclo de reconocimiento de
interrupción.
3
Al recibir el controlador el pulso por su entrada INTA
comienza a arbitrar las interrupciones recibidas y selecciona la
más prioritaria.
4
El controlador indica en su registro ISR qué dispositivo debe
ser atendido (la interrupción de mayor prioridad).
5
El procesador almacena los flags y el PC, y salta a la
dirección 0.
Interrupciones
Suponiendo que se utiliza un controlador de interrupciones, con sus
registros asignados a las siguientes direcciones de memoria:
ISR 0xFFFB
IRR 0xFFFC
IMR 0xFFFA
y que se cuenta con la rutina AtenderMensajeRadial.
Enunciado
a) Describa la configuración inicial del sistema.
b) ¿Qué acciones se llevan a cabo (tanto desde el hardware como desde
el software) en el sistema cuando el componente de visión solicita una
interrupción?
c) Escriba la rutina de atención de interrupción del radio receptor.
Interrupciones
Solución b)
1. El dispositivo de visión levanta la IRQ0
2. El CI evalúa si corresponde enviar la solicitud de interrupción al
CPU (INTR)
3. Cuando el CPU termina el ciclo de ejecución, si IF=1:
a.
b.
c.
d.
Apila PSW
Apila PC
Levanta la INTA
Asigna PC ← 0
4. La RAI lee el ID del dipositivo (registro ISR del CI) y salta a la
RAI especı́fica del dispositivo de visión.
Interrupciones
Solución c)
RAI Radio:
CLI
; Guarda la máscara actual
PUSH R0
MOV R0, [0xFFFA]
PUSH R0
; Setear nueva máscara
MOV R0 , 0x0001
MOV [0xFFFA], R0
STI
; guarda el registro R0 en la pila
; copia el contenido del reg. de ES IMR en R0
; apila la máscara actual
;copia el contenido de R0 en el reg. de ES IMR
CALL TratarMensajeRadial
CLI
POP R0
MOV [0xFFFA], R0
POP R0
STI
IRET
; Restauro la máscara y el registro R0
; volver de la interrupción
Repaso
Hoy vimos
Espacio de direcciones de E/S
Independiente instrucciones especı́ficas
Mapeadas a memoria usamos algunas direcciones de memoria para E/S
Ejemplos de esquemas de entrada y salida:
Polling e Interrupciones
Esquemas de E/S
E/S por encuesta (Polling) o Programada:
Utilizado en las primeras computadoras (Apple II) o en algunos
sistemas embebidos.
La CPU sondea periódicamente al dispositivo para ver cuál es
su estado.
Sencillo pero claramente ineficiente.
E/S por interrupciones:
Es el dispositivo quien establece el momento en que se
realizará la transferencia de datos.
Cuando la CPU recibe notificación de la interrupción detiene el
programa en ejecución, ejecuta la RAI y finalmente devuelve el
control al programa.
¿Preguntas?
GuidoBot: “Pueden hacer toda la primer parte de la práctica 6.”
Homero: “¿Lo qué?”
Descargar