Estoy leyendo sobre el manejo de interrupciones y tengo una duda que quisas me puedan ayudar.
Se que para atender una solicitud de interrupción la CPU realiza una serie de pasos:
1) Termina de ejecutar la instrucción actual.
2) Salva el valor actual del puntero de instrucción (IP o PC).
3) Identifica el controlador de E/S que realizó el pedido de interrupción.
Luego viene el paso que no entiendo que dice en mis notas de teórico lo siguiente:
4) Obtiene la dirección de la rutina de servicio de la interrupción correspondiente al controlador identificado. También hay distintas formas de implementar esto, aunque la mayoría son variaciones sobre el concepto de vector de interrupciones.
- la arquitectura Intel x86 utiliza un identificador de 8 bits del pedido de interrupción como índice a una tabla (el vector de interrupciones) que en cada entrada tiene la dirección absoluta de la rutina de interrupción asociada, formada por el segmento (valor a cargar en el registro de segmento de código) y el desplazamiento dentro del segmento (valor a cargar en el puntero de instrucción) de la dirección de memoria de la primer instrucción de la rutina de interrupción.
- la arquitectura SPARC utiliza también un identificador de 8 bits para el pedido de interrupción, el cuál multiplica por 16 antes de sumarle el valor contenido en un registro especial (el Trap Base Register, ó registro base de "traps", nombre que le da SPARC a las interrupciones) para formar la dirección a la cuál se va a pasar el control. De esta forma tenemos una especie de tabla que almacena las primeras 4 instrucciones (SPARC tiene instrucciones de largo fijo de 4 bytes) de cada rutina de interrupción.
Cuando dice "Obtiene la dirección de la rutina de servicio de la interrupción correspondiente al controlador identificado" ¿se refiere a que dicha rutina se encuentra en una posición de memoria del sistema? Es decir la CPU mantiene un puntero de instrucción (IP o PC) que va incrementando a medida que se van ejecutando las instrucciónes entonces si se está ejecutando una instrucción se procede como antes y obteniendo la dirección antes mensionada "saltaría" a otra posición de memoria y ejecutaría las instrucciones a partir de esa dirección? a eso se refiere ¿no? y no puedo entender las descripciones que están a continuación ya que hablan de un identificador de 8 bits para el pedido de interrupción cuando en un principio habla de que cada controlador de E/S tiene una salida que en mi caso la llaman INT que se pone a 1 cuando el controlador de E/S interrumpe y que la CPU también tiene una señal (que puede llamarse también INT) que es una señal de entrada que sirve para que la CPU pueda identificar un pedido de interrupción de algún controlador de E/S.
Si alguien puede explicarme esas descripciones le estoy eternamente agradecido ya que estoy bastante perdido con este tema.
Desde ya muchas gracias!
Se que para atender una solicitud de interrupción la CPU realiza una serie de pasos:
1) Termina de ejecutar la instrucción actual.
2) Salva el valor actual del puntero de instrucción (IP o PC).
3) Identifica el controlador de E/S que realizó el pedido de interrupción.
Luego viene el paso que no entiendo que dice en mis notas de teórico lo siguiente:
4) Obtiene la dirección de la rutina de servicio de la interrupción correspondiente al controlador identificado. También hay distintas formas de implementar esto, aunque la mayoría son variaciones sobre el concepto de vector de interrupciones.
- la arquitectura Intel x86 utiliza un identificador de 8 bits del pedido de interrupción como índice a una tabla (el vector de interrupciones) que en cada entrada tiene la dirección absoluta de la rutina de interrupción asociada, formada por el segmento (valor a cargar en el registro de segmento de código) y el desplazamiento dentro del segmento (valor a cargar en el puntero de instrucción) de la dirección de memoria de la primer instrucción de la rutina de interrupción.
- la arquitectura SPARC utiliza también un identificador de 8 bits para el pedido de interrupción, el cuál multiplica por 16 antes de sumarle el valor contenido en un registro especial (el Trap Base Register, ó registro base de "traps", nombre que le da SPARC a las interrupciones) para formar la dirección a la cuál se va a pasar el control. De esta forma tenemos una especie de tabla que almacena las primeras 4 instrucciones (SPARC tiene instrucciones de largo fijo de 4 bytes) de cada rutina de interrupción.
Cuando dice "Obtiene la dirección de la rutina de servicio de la interrupción correspondiente al controlador identificado" ¿se refiere a que dicha rutina se encuentra en una posición de memoria del sistema? Es decir la CPU mantiene un puntero de instrucción (IP o PC) que va incrementando a medida que se van ejecutando las instrucciónes entonces si se está ejecutando una instrucción se procede como antes y obteniendo la dirección antes mensionada "saltaría" a otra posición de memoria y ejecutaría las instrucciones a partir de esa dirección? a eso se refiere ¿no? y no puedo entender las descripciones que están a continuación ya que hablan de un identificador de 8 bits para el pedido de interrupción cuando en un principio habla de que cada controlador de E/S tiene una salida que en mi caso la llaman INT que se pone a 1 cuando el controlador de E/S interrumpe y que la CPU también tiene una señal (que puede llamarse también INT) que es una señal de entrada que sirve para que la CPU pueda identificar un pedido de interrupción de algún controlador de E/S.
Si alguien puede explicarme esas descripciones le estoy eternamente agradecido ya que estoy bastante perdido con este tema.
Desde ya muchas gracias!