lógica de las interrupciones

lógica de las interrupciones

de Ignacio Cabrera -
Número de respuestas: 3

Buenas, quisiera saber cuándo es conveniente usar cada una de las 3 variantes de programación en caso de una máquina dedicada.

Muchas gracias desde ya!


En respuesta a Ignacio Cabrera

Re: lógica de las interrupciones

de Federico Rivero -

Estimado,

A priori no hay un método. Sergio explica durante las clases que es un poco a gusto del consumidor. Sí hay que tener en cuenta algunas cosas, por ejemplo, que el código que se coloque en el while (true) del main, tendrá una capacidad de responder ante eventos externos casi instantánea (ejemplo: cambia algún bit en la E/S, y la CPU puede enterarse inmediatamente, en la siguiente iteración del loop), mientras que si la consulta se realiza durante (por ejemplo), la interrupción del timer, bueno, esa consulta demorará tanto como el período de la interrupción. Hay casos donde esta espera es inaceptable, pero depende del ejercicio. Otra cosa a tener en cuenta, que es muy importante, es que al ingresar a una interrupción, las futuras interrupciones se encuentran enmascaradas. Por lo tanto, si el programa en una interrupción, realiza un loop esperando por otra interrupción, y no se realiza un enable() explícito, el programa quedará trancado. Trabajar en el main es un poco más seguro, por esta razón.

Fuera de eso, no se me ocurre mucha mayor diferencia. Es decir, en la mayoría de los ejercicios, la resolución puede encararse ubicando el código en las interrupciones, en el main, o en una combinación de ambas.

Saludos,

        Federico

En respuesta a Federico Rivero

Re: lógica de las interrupciones

de Martin Vigliarolo Oyarzabal -

Buenas, una duda sobre esto. Suponiendo que se quiere hacer la lógica casi en su totalidad en las interrupciones. Como tu dijiste, si ocurre el caso que una de las rutinas necesita esperar un resultado que esta en otra rutina, hay que colocar un enable() para poder desenmascarar las interrupciones. Este enable(), es incorrecto colocarlo para toda la rutina? Es decir, si se necesitan las interrupciones desenmascaradas solo para una sección de código (una linea, por ejemplo), se tiene que poner el enable() previo a esa sección de código o para todo el código de la interrupción?

Sumado a esto, si se pone un enable(), habrá que colocar un disable() para volver a enmascarar las interrupciones antes de terminar la rutina o este enmascaramiento se hace solo al salir de la rutina?

En respuesta a Martin Vigliarolo Oyarzabal

Re: lógica de las interrupciones

de Juan Ramirez -
The cuento cómo le entiendo yo a ver si sirve:



Que las interrupciones estén enmascardas te da la tranquilidad de que nadie

te va tocar las variables globales que estés usando.



Dicho esto, lo mejor sería que llames a enable() cuando lo necesites, es

decir, justo antes del busy wait que vas a hacer esperando a que el handler

de la otra interrupción se ejecute (se supone que este es el objetivo: que

se ejecute otro handler para actualizar alguna variable compartida).



Sobre el disable(), acordate que el CPU deshabilita las interrupciones

antes de llamar al manejador de una interrupción, por lo que no es

necesario que lo hagas (a no ser algún caso loco en que la espera sea con

timeout y el manejador de la interrupción que estás esperando no se ejecute

nunca).



--

Sent from my Communicator



On Wed, Dec 18, 2019, 8:43 PM Martin Vigliarolo Oyarzabal (via FING) <