Arquitectura de Computadores: Interrupciones y Modos de Direccionamiento en la CPU

Clasificado en Informática

Escrito el en español con un tamaño de 9,05 KB

1. ¿Qué es una interrupción y para qué se utiliza?

(Referencia original: 135*615)

Una **interrupción** es la **capacidad del CPU** de dejar a un lado la **ejecución de un programa** (programa A), ejecutar otro (programa B, que es la rutina de atención a la interrupción) y después volver al programa anterior (programa A) para terminar su ejecución. Este mecanismo es fundamental para la gestión eficiente de recursos y eventos en un sistema informático.

2. Tipos de interrupciones en un computador

Existen principalmente dos tipos de interrupciones:

Interrupciones de Software

Son **generadas por los programas en ejecución** para indicar alguna **condición de error** o evento especial. Por ejemplo:

  • Intento de **dividir entre 0**.
  • **Acceso a memoria no permitido**.
  • Intento de ejecutar alguna **instrucción errónea**.

Interrupciones de Hardware

Son **generadas por componentes de hardware** debido a **errores de hardware** o como señalizadores de **eventos externas**, como la **finalización de operaciones de E/S** (Entrada/Salida).

3. Proceso de una interrupción en la CPU

Cuando la **CPU** recibe una señal de interrupción, ocurre lo siguiente:

  1. La CPU **deja de ejecutar el programa** actual (programa en curso).
  2. El **estado actual del programa** (registros, contador de programa, etc.) se **guarda en memoria** (generalmente en la pila del sistema).
  3. La CPU comienza a **procesar la interrupción**, saltando a una rutina de servicio de interrupción específica.
  4. Una vez que la rutina de servicio de interrupción termina su ejecución, la CPU **recupera desde memoria el estado del programa** que estaba ejecutando antes de la interrupción.
  5. Finalmente, la CPU **reprende la ejecución del programa original** desde el punto donde fue interrumpido.

4. ¿Qué es un gestor de interrupciones?

Un **gestor de interrupciones** es un **programa** o una **serie de instrucciones** diseñado para que la **interrupción sea atendida** de manera adecuada. Es la rutina de servicio que se ejecuta cuando ocurre una interrupción específica.

5. Procesamiento de interrupciones múltiples

Cuando ocurren **interrupciones múltiples** de forma consecutiva, la CPU las gestiona de manera jerárquica o prioritaria, a menudo utilizando un mecanismo de pila para guardar los estados de los programas interrumpidos. El proceso sería el siguiente:

  1. Si ocurre una interrupción (interrupción B) mientras se ejecuta el programa A, el **programa A se guarda en memoria**.
  2. Se comienza a ejecutar el programa B (la rutina de atención a la interrupción).
  3. Si ocurre otra interrupción (interrupción C) mientras se ejecuta el programa B, el **programa B se guarda en memoria**.
  4. Se comienza a ejecutar la interrupción C.
  5. Una vez que la interrupción C termina de ejecutarse, se **recupera desde memoria el programa B**.
  6. Cuando el programa B termina, se **recupera desde memoria el programa A**.
  7. Finalmente, el programa A continúa su ejecución.

6. Diagrama de estados del ciclo de instrucciones

El ciclo de instrucciones describe los pasos que la CPU sigue para ejecutar una instrucción. A continuación, se presenta un esquema de los estados, indicando cuáles ocurren dentro de la CPU y cuáles requieren acceso a memoria:

  • Fase de Captura (Fetch)

    • **Obtener dirección de instrucción:** (Dentro de la CPU, pero la dirección apunta a memoria)
    • **Leer instrucción:** (Requiere **acceso a memoria**)
  • Fase de Decodificación (Decode)

    • **Decodificar la instrucción:** (Dentro de la CPU)
    • **Obtener la dirección del operando:** (Dentro de la CPU, pero la dirección puede apuntar a memoria)
  • Fase de Ejecución (Execute)

    • **Realizar operación ALU:** (Dentro de la CPU, en la Unidad Aritmético Lógica)
  • Fase de Almacenamiento (Store)

    • **Almacenar resultado:** (Puede requerir **acceso a memoria** o a registros internos de la CPU)
    • **Almacenar registro en pila:** (Requiere **acceso a memoria**)
    • **Obtener la dirección del resultado:** (Dentro de la CPU, pero la dirección puede apuntar a memoria)
  • Control/Verificación

    • **Comprobar si hay interrupción:** (Dentro de la CPU, al final de cada ciclo)

7. Influencia del número de direcciones en el formato de instrucciones en la velocidad de ejecución del programa y espacio que ocupa dentro de memoria

La **velocidad de ejecución** de un programa depende directamente del **número de accesos a memoria** que debe realizar la **CPU**. Un formato de instrucción con un mayor número de direcciones puede implicar más accesos a memoria para obtener operandos o almacenar resultados, lo que puede **ralentizar la ejecución**. Aunque la longitud total del programa (en términos de instrucciones) puede variar, la velocidad de procesamiento se ve fundamentalmente influenciada por la eficiencia y cantidad de estos accesos a memoria. En cuanto al **espacio que ocupa dentro de memoria**, un formato de instrucción con más direcciones generalmente requiere más bits para codificar cada instrucción, lo que aumenta el tamaño del código del programa en memoria.

8. ¿Qué es un modo de direccionamiento?

Un **modo de direccionamiento** es la **forma de especificar las direcciones de los operandos** en el **formato de instrucciones** de una CPU. Define cómo se calcula la dirección efectiva de un operando.

9. Descripción de modos de direccionamiento (Ventajas y Desventajas)

1. Direccionamiento Directo

  • Ventajas:

    Implementación **sencilla** por parte de la **CPU**.

  • Desventajas:

    El **espacio de memoria que se puede direccionar está restringido** por la longitud del campo de dirección en el formato de instrucción.

2. Direccionamiento Indirecto

  • Ventajas:

    **Amplio espacio de direcciones de memoria** para referenciar a operandos.

  • Desventajas:

    **Mayor complejidad** en la implementación y la necesidad de **dos accesos a memoria por cada operando** (uno para la dirección y otro para el dato).

3. Direccionamiento Inmediato

  • Ventajas:

    La lectura de **operandos no requiere acceso a la memoria** principal, ya que el dato está incluido directamente en la instrucción.

  • Desventajas:

    El **rango de valores de números enteros está restringido** a la longitud del campo de direcciones dentro de la instrucción.

4. Direccionamiento con Registro

  • Ventajas:

    Se necesitan **pocos bits** dentro del formato de instrucción para direccionar **registros**, lo que resulta en instrucciones más compactas y rápidas.

  • Desventajas:

    Es necesario incluir en los programas las **instrucciones de copia de operando desde memoria hasta la CPU** (o viceversa) si el dato no está ya en un registro.

5. Direccionamiento Indirecto con Registro

  • Ventajas:

    Se requiere un **solo acceso a memoria por cada operando** una vez que la dirección base está en el registro.

  • Desventajas:

    **Difícilmente se aplica en la práctica** tal como está definido, pues no se puede saber con anticipación qué direcciones están cargadas en los registros sin un contexto de ejecución dinámico.

10. Determinación del modo de direccionamiento por la CPU

La **CPU** determina cuál **MD** (Modo de Direccionamiento) se utiliza en una instrucción mediante dos métodos principales:

Método 1: Modo de Direccionamiento Implícito por Instrucción

Cada instrucción puede utilizar un modo de direccionamiento predefinido o implícito. Por ejemplo:

  • LOAD - Direccionamiento Indirecto (implica que siempre carga de forma indirecta)
  • ADD - Direccionamiento Directo (implica que siempre suma con un operando directo)

En este método, el modo de direccionamiento está intrínsecamente ligado al código de operación de la instrucción.

Método 2: Campo de Modo de Direccionamiento Explícito

Cada instrucción de la **CPU** puede utilizar cualquier modo de direccionamiento. Para ello, a cada modo se le asigna un **número específico**, y dentro del formato de instrucción se asigna un **campo dedicado** con el dígito de este modo de direccionamiento. Por esto, el **MD se decodifica antes que el CO** (Código de Operación).

Por ejemplo, para una instrucción ADD, el campo de MD podría indicar:

  • ADD (MD Directo): 00
  • ADD (MD Indirecto): 01
  • ADD (MD con Registro): 10

Esto permite una mayor flexibilidad en el diseño del conjunto de instrucciones.

Entradas relacionadas: