|
Interrupciones: Esas grandes desconocidas |
|
|
|
Interrupciones: Esas grandes desconocidas
Seguramente la mayoria de nosotros no las conocia aunque se produzcan una vez cada 30 milisegundos en nuestro ordenador. Desde fallos del sistema a procesos nuevos que encargamos al procesador... ¡ De todo esto se encargan ellas !
Interrupciones
Una interrupción determina el estado en el cual es procesador suspende la ejecución de un programa para pasar a ejecutar otro a fin de atender una situación especial. Es decir, “interrumpe” lo que esta haciendo la maquina para que esta haga algo “mas importante” o que se necesite hacer lo antes posible. Las interrupciones se dan lugar por diversas causas.
• Fallos de Hardware
• Fallos de alimentación
• Entradas o salidas de periféricos
• Instrucciones inexistentes
• Fin de tiempo dedicado a un proceso
• Violación del acceso a la memoria de otro proceso
• Violación del espacio dedicado a la pila
Las interrupciones son muy frecuentes durante el funcionamiento de la CPU, (aproximadamente 1 cada 30-90 ms. Existen varios tipos de interrupciones. Según el origen pueden clasificarse en internas o externas.
• Externas: Se producen por los controladores de dispositivos externos a la CPU: Bien por anomalías en hardware, por un fallo de alimentación, directamente llamadas por los programas o peticiones de entrada o salida.
• Internas: Son situaciones extraordinarias producidas por los componentes de la CPU: en una división por cero, una violación de memoria o un desbordamiento de la pila.
Algunas interrupciones son más importantes que otras, por eso existe una jerarquía de interrupciones. De hecho, algunos procesadores pueden inhibir interrupciones; esto es, ignorarlas aunque estas se produzcan.
• Enmascarables: Son interrupciones que se pueden ignorar.
• No enmascarables: El procesador no puede ignorarlas porque se entiende que puede ser peligroso para el sistema.
Los programadores indican cuando la CPU debe ignorar o no las interrupciones.
Proceso de ejecución:
• Generación de la interrupción
• Reconocimiento de la interrupción por parte de la CPU
• Finalización de la instrucción actual
• Almacenamiento del proceso en ejecución
• Identificación de la interrupción
• Atención de la interrupción
• Restauración del proceso interrumpido
Para ejecutar una interrupción el sistema necesita:
1. Identificar el dispositivo que produjo la interrupción
2. Seleccionar la rutina de servicio
3. Mecanismos de enmascaramiento
4. Mecanismo de prioridades: Interrupciones simultaneas, interrupciones durante la ejecución de otra interrupción
Una interrupción (interna o externa) modifica el registro de estado de la cpu. Las interrupciones externas llegan a la CPU mediante los conectores de la CPU. Las interrupciones cambian directamente el valor del registro de estado. Una vez obtenida la interrupción se realiza un salto a la dirección de la rutina de servicio de la interrupción.
Para obtener la dirección de la rutina de servicio de la interrupción existen varias opciones:
• Codificación por hardware: Salto a la dirección prefijada. Obviamente esta dirección no es modificable y se usa sobre todo en las interrupciones internas
• Codificación por software: el dispositivo informa a la CPU de la dirección. Necesita un dialogo con la CPU, pero es mas flexible.
• Codificación Mixta: Algunos sistemas permiten una codificación mixta. Parte de la dirección la proporciona el dispositivo. El resto esta codificado por hardware. Por ejemplo, en direcciones de 8 bits, es habitual que 5 sean aportados por el dispositivo y 3 fijos por hardware. Esto proporciona un total de 32 interrupciones diferentes.
Durante la ejecución del código de servicio C de una interrupción I, pueden producirse de nuevo la interrupción I, lo que ocasionaría un bucle infinito. Por eso normalmente cuando se ejecuta una interrupción, esta se enmascara, para evitar este problema. Existe un registro en el que cada BIT representa el estado de inhibición de cada interrupción enmascarable.
Cuando se recibe una interrupción, el proceso en ejecución se suspende hasta que se ejecuta el código asociado a una interrupción o rutina de servicio de la interrupción. La información necesaria para que un proceso pueda continuar su ejecución después de un a interrupción se denomina PCB (Bloque de control de procesos). Este contiene el contador de programa. Todos los registros de la CPU y el registro de estado. Antes de la ejecución de la rutina es necesario almacenar la información de estado de la CPU. Después de la ejecución de la rutina es necesario recuperar el estado de la CPU guardado.
Reconocimiento de la Interrupción:
• Reconocimiento multinivel: Cada dispositivo esta conectado a una línea de interrupción propia. Es técnicamente sencilla, es cara y raramente usada. Cada línea tiene diferente prioridad.
• línea de interrupción única: Todos los dispositivos comparten la línea de interrupción. Solo se puede bifurcar a una dirección por lo que solo puede haber una rutina de servicio para todo. Es necesario un mecanismo de prioridades para la selección si hay varias interrupciones simultáneas. Cuando se recibe la interrupción la CPU debe averiguar que dispositivo la produjo.
|