Las especificaciones del ejercicio 4 son:
- CPU con tres dispositivos de E/S (con tres direcciones ESTADO_1, ..._2 y ..._3) conectados a una misma línea INT.
- La CPU atiende por nivel.
- Cuando un dispositivo solicita interrumpir, se puede leer un 1 en la entrada de E/S correspondiente en el bit menos significativo.
- Para atender al n-ésimo dispositivo, disponemos de la rutina atencionDispositivoN(), donde .
Para la parte A del ejercicio, se pide implementar una rutina de interrupción en alto nivel capaz de atender a los tres dispositivos, considerando un esquema de prioridades fijas .
Se me ocurren dos posibles soluciones, que adjunto a continuación:
Si bien las diferencias son sutiles, me surge una duda importante.
En la solución rosada, entiendo que si los tres dispositivos solicitan atención, entonces en una única "invocación" de la rutina, se atiende a los tres. Además, por como está estructurado, primero se atiende al 1, luego al 2, luego al 3. A priori, esto cumple con lo solicitado en la parte A.
No obstante, ¿Qué comportamiento debería tener una rutina de este estilo en caso de que tras atender al dispositivo 1, en seguida vuelva a solicitar atención? ¿Debería continuar atendiendo al resto y luego atender al 1, o debería atender nuevamente al 1?
En este último caso, entiendo que la mejor solución es la solución azul, porque por cada llamada a la rutina de atención, siempre atiende a uno y solo a uno de los dispositivos, siempre preguntando primero por el que más prioridad tiene.
Me gustaría conocer que opinan respecto a esto. Muchas gracias de antemano. Saludos.