2010-08-06 29 views
9

Al ingresar un manejador de inteerupt, primero "deshabilitamos las interrupciones" en esa CPU (usando algo así como la instrucción cli en x86). Durante el tiempo que las interrupciones están deshabilitadas, supongamos que el usuario presionó la letra 'a' en el teclado que normalmente causaría una interrupción. Pero dado que las interrupciones están deshabilitadas, ¿quiere decir que:¿Qué se entiende por deshabilitar las interrupciones?

  1. el manejador de interrupciones para 'a' nunca ser invocada, ya que las interrupciones están deshabilitadas en la sección crítica o
  2. la interrupción será manejada por el sistema operativo, pero retrasado, hasta que las interrupciones vuelvan a habilitarse. Específicamente, ¿el usuario tendrá que presionar 'a' otra vez, si la primera vez que presionó 'a' fue en un momento en que las interrupciones fueron deshabilitadas?

Respuesta

5

A menudo, una interrupción es "en cola" por hardware.

[Una interrupción a menudo es solo una puerta lógica que se puede pegar; una vez que está encendido, permanece encendido durante un tiempo.]

Si el usuario pulsa 'a' solo una vez durante el intervalo cuando las interrupciones se desactivaron, se registraría como una interrupción cuando se vuelvan a habilitar.

Si el usuario de alguna manera logró presionar 'a' dos veces durante el intervalo cuando las interrupciones fueron deshabilitadas, una se registraría como una interrupción cuando se habilitaran. Si fue el primero o el segundo depende de la configuración de puerta lógica exacta.

+1

por lo que significa que si pudiera escribir dos letras del teclado más rápido que el tiempo que toma la CPU para manejar la interrupción, ¿se perdería? Lo siento por hacer que este tema en vivo otra vez – Juan

+0

@Juan Eso dependería del teclado. Los teclados modernos tienen un pequeño búfer que guardará los eventos del teclado mientras su computadora los está procesando. La mayoría de los teclados asignan las teclas de caracteres una posición (X + Y) para ahorrar ancho de banda y dinero, a costa de evitar que algunas combinaciones de teclas se registren correctamente en condiciones extremas donde la CPU no puede mantener el ritmo, pero algunos teclados también envían claves específicas individualmente. La mayoría de los teclados enviarán eventos de teclas modificadoras por separado, por ejemplo, y algunos teclados de juegos hacen lo mismo para el 'WASD' y las teclas de flecha. – YoYoYonnY

5

La respuesta es que depende de si ya estaba manejando una interrupción del teclado.

La mayoría de las rutinas de servicio de interrupción (ISR) tienen un código al final de ellas que informa al hardware que se ha "reparado". En el caso del controlador de teclado, los comandos se escriben reconociendo los bytes recibidos. Es en el momento del reconocimiento que el hardware del controlador de teclado deja de usar electricidad para señalar una condición de interrupción.

Si está manejando una interrupción que no es del teclado, digamos que la alarma de incendio interrumpe, entonces el hardware del teclado que afirma eléctricamente la interrupción se disparará cuando se presione la tecla. La señal eléctrica se ignora hasta que la CPU tiene interrupciones habilitadas de nuevo. Al final del servicio de la alarma de alarma de incendio, la alarma contra incendios ISR confirma cualquier dato y reactiva las interrupciones en la CPU. Inmediatamente, la CPU entra en una interrupción porque el controlador del teclado todavía está señalizando eléctricamente una condición de interrupción.

Si usted está manejando una interrupción del teclado, y el usuario de forma rápida tipos una segunda pulsación de teclas durante la ejecución de su ISR teclado, entonces hay una posibilidad de perder los datos de la segunda pulsación de tecla, o de recibir más tarde si en absoluto. En particular, si el ISR restablece el controlador de teclado a través de un acuse de recibo, pero el ISR no ha recibido todos los bytes disponibles del controlador de teclado, entonces eso es un problema.

A menudo, un ISR gestionará primero la interrupción que desencadenó su activación, luego de confirmar la interrupción, sondeará el dispositivo para ver si ha recibido más datos desde la primera interrupción. Si es así, genere una interrupción de software para volver a ingresar al ISR y dar servicio al dispositivo.

0

Sería físicamente imposible para un usuario presionar "a" dos veces durante el procesamiento normal de una interrupción. Sería terriblemente improbable incluso si presionara dos teclas a la vez, pero el hardware debería contener al menos una tecla hasta que la CPU esté lista para recibirlo.

En PC - esto está llegando de MANERA a los días de mi PCXT - el subsistema de teclado puede mantenerse en el área de 13 pulsaciones de teclas para la CPU.

1

La respuesta simple es que una interrupción desactiva automáticamente otras interrupciones. Las interrupciones deben estar desactivadas solo por el tiempo más breve. La primera instrucción en el ISR del teclado AT BIOS original fue STI para habilitar las interrupciones.

La respuesta feliz es que el PIC da prioridad a las interrupciones de hardware e incluso con las interrupciones habilitadas sólo la interrupción IRQ 0 temporizador puede interrumpir el ISR teclado. Por supuesto, un NMI puede ocurrir de cualquier manera pero felizmente esto nunca ocurre en una PC actual.

-2

Desactivar interupt tienen una prueba diferente. 1. Error de hardware 2.excepciones {por ejemplo: Dividir por cero} y ect.

  1. cuando se produce una falla de hardware, el sistema operativo debe operar mezcla.
  2. cuando se produce la excepción, el sistema debe cambiarse y conmutar otro proceso para manejar la interrupción.

O por ejemplo: para dispositivo de E/S. si la interupción no fue, ¡la computadora no era eficiente!

Cuestiones relacionadas