Org. de computadoras

Clasificado en Otras materias

Escrito el en español con un tamaño de 26,03 KB

org
3.7 FUNCIÓN DEL REGISTRO DE INSTRUCCIÓN

El registro de instrucción (IR) contiene la instrucción que se está ejecutando en cada momento. Esta instrucción llevará consigo el código de operación (CO) y en su caso los operandos o las direcciones de memoria de los mismos.

En los procesadores simples cada instrucción a ser ejecutada es cargada en el registro de la instrucción que la contiene mientras se es decodificada, preparada y al final ejecutada, un proceso que puede tomar varios pasos.

Su formato es:

El registro de instrucciones y un decodificador de instrucciones que son responsables del control de todos los componentes del procesador ya que en el momento de la decodificación se tiene que tomar la decisión de si se envían a los registros a la ALU o a la memoria externa.

Decodificar el código de operación en el registro de instrucción incluye la determinación de la instrucción, también determinar donde están sus operandos en memoria, leer los operandos desde la memoria, asignar recursos del procesador para ejecutar el comando (en procesadores superscalares), etc.

Los procesadores más complejos usan una tubería de registros de instrucción donde cada etapa de la tubería hace parte del trabajo, decodificación, preparación, o ejecución, y después pasa el resultado a la siguiente etapa para realizar el siguiente paso hasta que la instrucción es procesada totalmente. Esto funciona como una línea de ensamblaje en donde en cada etapa se hace un trabajo parcial, y luego se pasa a la siguiente etapa para continuar con la fabricación del producto. Los procesadores modernos pueden incluso hacer algunos de los pasos de fuera de orden ya que la decodificación de varias instrucciones se hace en paralelo.

3.6 EL PAPEL DEL CONTADOR DEL PROGRAMA  
Los contadores son circuitos secuenciales cuya salida representa el número de impulsos que se la aplica a la entrada de reloj. Está formado básicamente por biestables interconectados. Pueden contar de forma ascendente si su contenido se incrementa con cada impulso o si decrementa, aunque por lo general los contadores pueden realizar esta función de ambas maneras según el estado de una entrada.

La unidad de control, cuenta con un contador, denominado contador de programa (en inglés Program Counter o PC). El contador de programa es un registro interno de la computadora en el que se almacena la dirección de la última instrucción leída. De esta manera la computadora puede saber cuál es la siguiente instrucción que debe ejecutar.

El PC va incrementándose en una unidad (una instrucción, que según la arquitectura de los computadores que lo alberguen, puede constar de un byte, 2, o más, según el tamaño de palabra usado en el formato del juego de instrucciones).

El contador de programa es incrementado automáticamente en cada ciclo de instrucción de tal manera que las instrucciones son leídas en secuencia desde la memoria. Ciertas instrucciones, tales como las bifurcaciones y las llamadas y retornos de subrutinas, interrumpen la secuencia al colocar un nuevo valor en el contador de programa.

En la mayoría de los procesadores, el puntero de instrucciones es incrementado inmediatamente después de leer (fetch) una instrucción de programa; esto significa que la dirección a la que apunta una instrucción de bifurcación es obtenida agregando el operando de la instrucción de bifurcación a la dirección de la instrucción siguiente (byte o word, dependiendo del tipo de la computador) después de la instrucción de bifurcación. La dirección de la siguiente instrucción a ser ejecutada siempre se encuentra en el contador de instrucción.

Ciclo de Fetch (Captura)
1. El contador del programa (PC) tiene la dirección de la siguiente instrucción a extraer
2. El procesador extrae la instrucción de la dirección de memoria apuntada por PC
3. Incrementa PC
o Al menos que se le indique otra cosa
4. La instrucción se carga en el registro de instrucción (IR)
5. El procesador interpreta la instrucción y ejecuta las acciones requeridas

3.5 DECODIFICACIÓN DE UNA INSTRUCCIÓN
Una instrucción está compuesta de un código de operación y de un operando. Cuando se pretende ejecutar cualquier instrucción el microprocesador realiza ciclos con la siguiente secuencia:
· Búsqueda
· Decodificación
· Ejecución
Durante la etapa de búsqueda el código de operación se almacena en el registro de instrucciones. El código de operación es entonces decodificado por el decodificador de instrucciones, que genera las señales necesarias para el control del resto de los elementos del sistema.
Dentro del CPU existe un decodificador, llamado el Instruction Decoder (Decodificador de Instrucciones) el cual funciona de forma conjunta con el Instruction Register (Registro de Instrucciones) de la CPU.
El decodificador se encarga de extraer el código de operación de la instrucción en curso (que está en el registro de instrucción), lo analiza y emite las señales necesarias al resto de elementos para su ejecución a través del secuenciador.

3.4 TIEMPO DE EJECUCIÓN Y CICLOS DE ESPERA
La UC no emite todas las órdenes a la vez, sino siguiendo una determinada secuencia. Para ello utiliza un elemento que le va indicando el instante en que debe ejecutar una determinada fase de la instrucción. A este elemento se le denomina Reloj, y sincroniza las acciones de la UC; cuanto más rápido marque el tiempo, más rápida será la ejecución de la instrucción. Sin embargo, hay un límite, ya que, si marca excesivamente rápido, es posible que no puedan cumplir adecuadamente las órdenes de los diferentes elementos, por lo que se producirán errores.

Cada microinstrucción requerirá un tiempo para ejecutar, en ese tiempo se llevara a cabo todas las microoperaciones. Cada ciclo de instrucción puede considerarse compuesto por varias pequeñas unidades (vistas anteriormente).

Un ciclo de reloj es la unidad de tiempo para la ejecución de las operaciones dentro del procesador. Las operaciones se realizan dentro del ciclo de reloj o en múltiplos enteros de ciclos de reloj.

Cada ciclo de reloj está dividido en diferentes tiempos, o fases, los cuales indican el momento en que se efectúan las microoperaciones, dentro de cada ciclo.

Una microoperación corresponde a acciones como: desplazamiento de un registro, transferencia de un registro a un bus, complementar un registro, etc.

La unidad de control comanda el registro que contiene la dirección de la instrucción que se está ejecutando o de la próxima instrucción a ejecutar, esto depende del estado de avance en el tiempo de ejecución de la instrucción

El tiempo de ejecución de una instrucción se puede disminuir si la secuencia de operaciones está organizada de forma que se pueda realizar otra función útil dentro del CPU mientras espera que la memoria responda.

El ciclo de reloj, también denominado ciclos por segundo o frecuencia, hace referencia a la velocidad del procesador incorporado en el CPU de la computadora, y se mide en megahercios (MHz). A mayor índice de frecuencia, más rápido es el procesador y, en consecuencia, la computadora.

Reglas para agrupar ciclos de reloj
· Debe seguirse la secuencia correcta de eventos
MAR <- (PC) debe preceder MBR <- (memoria)
· Deben evitarse conflictos
No se debe leer y escribir el mismo registro al mismo tiempo
MBR <- (memoria) e IR <- (MBR) no deben de estar en el mismo ciclo

· También: PC <- (PC) +1 es una suma
Usa la ALU
Puede necesitar microoperaciones adicionales
 

3.3 MICROOPERACIONES Y EL CICLO FUNDAMENTAL DE EJECUCIÓN DE UNA INSTRUCCIÓN
Las microoperaciones son las operaciones funcionales o atómicas de la CPU y la unidad de control, controla el funcionamiento de la CPU.
La ejecución de un programa consiste en realizar una secuencia de ciclos de instrucción, con una instrucción de máquina por ciclo. Cada ciclo de instrucción se puede considerar formado por varias unidades pequeñas. Una subdivisión práctica es captación, ciclo indirecto, ejecución, e interrupción. Los que aparecen siempre son los de captación y de ejecución. Cada subciclo de una instrucción involucra una serie de pasos, cada uno de los cuales requiere del uso de los registros del CPU. Cada uno de los ciclos pequeños implica una serie de pasos y el uso de registros del CPU (microoperaciones).

     
El ciclo de captación
Las instrucciones que forman un programa se almacenan en forma secuencial en la memoria. Para ejecutarlo el CPU trae una instrucción a la vez y realiza las funciones especificadas. A este proceso se le conoce como ciclo de captación y se realiza al principio de cada ciclo de instrucción.

Primer paso. Traer la dirección de la instrucción a ejecutar.

     Segundo paso. Traer la instrucción a ejecutar.
     
El CPU espera una respuesta de que la operación ha sido concluida. Esto se logra por medio de otra señal de control del bus de memoria:
MFC (Memory Function Complete).

     



En este paso también debe actualizarse el contenido de PC para que contenga la dirección de la siguiente instrucción a ejecutar.

    Tercer paso. Transferir el dato almacenado en MBR al registro de instrucción IR liberando el MBR para su uso durante un posible ciclo indirecto.
     


Por cuestiones de practicidad, los distintos registros se suelen abreviar como sigue:


 



El ciclo de captación consta de tres pasos (de transferencia) y cuatro microoperaciones. Cada microoperación involucra la transferencia de datos hacia dentro o hacia fuera de un registro. La secuencia se puede representar como:

t1: MAR <-- (PC)
t2: MBR <-- (Memoria)
PC <-- (PC)+1
t3: IR <-- (MBR)

La tercera operación esta agrupada con la segunda, aunque también puede agruparse con la cuarta sin problema. Los agrupamientos de microoperaciones deben cumplir:
· Seguir la secuencia correcta de eventos.
· Evitar los conflictos.

El ciclo indirecto
Una vez que se tiene la microinstrucción, el siguiente paso consiste en captar los operandos fuente. El formato de instrucción requiere de un direccionamiento directo o indirecto. Es un direccionamiento directo cuando los operandos fuente vienen dentro de la instrucción. Si la instrucción especifica un direccionamiento indirecto, entonces se debe realizar un ciclo indirecto antes del ciclo de ejecución. El direccionamiento indirecto consiste en obtener la dirección almacenada en otra localidad de la memoria. Las microoperaciones involucrados son:

t1: MAR <-- (IR (Dirección)
t2: MBR <-- Memoria
t3: IR <-- (MBR (Dirección))

El ciclo de interrupción
Cuando termina el ciclo de ejecución, se realiza una comprobación para determinar si se ha habilitado alguna interrupción. Si es así, tiene lugar un ciclo de interrupción. De una maquina a otra varía, mas una secuencia simple de eventos es:
t1: MBR <-- (PC)
t2: MAR <-- Dirección de respaldo
PC <-- Dirección de la rutina
t3: Memoria <-- (MBR)

El ciclo de Ejecución
En una maquina con N códigos de operación diferentes, pueden ocurrir N secuencias diferentes de microoperaciones.

Almacenamiento de una palabra en memoria.- El procedimiento de escritura de una palabra es similar al de lectura. La diferencia es que la palabra a escribir se carga en el MDR antes de que se emita el comando de escritura.

Ejemplo: Considérese que la palabra a escribir está en el registro R2, y que la dirección está en el registro R1. La secuencia de microoperaciones es:

t1: MAR <-- [R1]
t2: MDR <--[R2]
t3: La UC envía la señal de Escribir
t4: Esperar la señal de MFC

Transferencia entre registros.- Para permitir la transferencia de datos entre varios registros conectados al bus común, se usa el manejo de entrada y salida por compuerta.
     Ejemplo: Transferencia del contenido del registro R1 al R4. La secuencia de operaciones es:
- Habilitar la compuerta de salida del registro R1 poniendo R1salida en 1. Esto coloca el contenido de R1 en el bus de la CPU.
- Habilitar la compuerta de entrada del registro R4 poniendo R4entrada en 1. Esto carga los datos provenientes del bus en el registro R4.
Ejecución de una operación aritmética.- Al realizarse una operación aritmética o lógica, debe recordarse que el ALU es en sí un circuito combinatorio que no tiene almacenamiento interno. El registro Y se utiliza para contener uno de los operandos y el otro se maneja por compuerta hacia el bus. El resultado se almacena de forma temporal en el registro Z.

Ejemplo: Sumar el contenido del registro R1 con el del registro R2 y almacenar el resultado en R3. La secuencia de operaciones es:
t1: R1 salida , Y entrada
t2: R2 salida , Add, Z entrada
t3: Z salida , R3 entrada
Diagrama de flujo del ciclo de instrucción 

    


3.2 FORMATO DE INSTRUCCIONES
Son un conjunto de datos insertados en una secuencia estructurada o especifica que el procesador interpreta y ejecuta.

En Informática, una instrucción normalmente se refiere a una operación simple que se le da a un procesador y que este llevará a cabo. Una acción compleja deberá codificarse como una secuencia de instrucciones máquina en lo que se denomina un programa.

El tamaño o largo de la instrucción depende de cada arquitectura, pudiendo variar de 4 hasta 128 bits.

La instrucción debe almacenarse temporalmente (en el registro de instrucción, RI) para que la CPU analice su contenido y extraiga los datos que la forman. A este paso se le llama decodificación.


Tipos de Instrucciones

Los tipos de instrucción permitidos están definidos y determinados dentro de cada plataforma en la arquitectura del repertorio de instrucciones (ISA, instruction set architecture), que también determina los registros de origen y destino de la CPU, y en ocasiones un dato inmediato.

Instrucciones de Transferencia de Datos: en este tipo de instrucciones, se transfieren datos desde una localización a otra. Los pasos que se siguen para realizarlo son:

1) Determinación de las direcciones de origen y destino de memoria.
2) Realización de la transformación de memoria virtual a memoria real.
3) Comprobación de la caché.
4) Inicio del proceso de lectura/escritura en la memoria.

Instrucciones Aritméticas: pueden implicar transferencia de datos antes y/o después. Realizan operaciones aritméticas de las que se encarga la ALU.

Instrucciones Lógicas: al igual que las aritméticas, la ALU se encarga de realizar estas operaciones, que en este caso son de tipo lógico.

Instrucciones de Conversión: similares a las aritméticas y lógicas. Pueden implicar lógica especial para realizar la conversión.

Instrucciones de Transferencia de Control: actualizan el contador de programa (PC). Administran las llamadas/retornos a las subrutinas, el paso de parámetros y el enlazado.

Instrucciones de I/O (entrada/salida): administran los comandos de entrada/salida. Si hay un mapa de memoria de entrada/salida, determina la dirección de este mapa de memoria.

Formato
El formato de las instrucciones es un conjunto de especificaciones que indican como debe ser interpretado el patrón de bits de una instrucción de máquina para logra su ejecución dentro de la computadora.
El formato de la instrucción nos indica cual es el código de operación y cuales los operandos que la instrucción especifica, tanto explícita como implícitamente.

En general, una instrucción codifica una operación básica que la computadora realiza sobre unos datos ubicados en la memoria o en los registros de la máquina y a los que accede utilizando un modo de direccionamiento.

Por consiguiente, la arquitectura ISA de un procesador viene determinada por los siguientes factores:
· Tipos de datos y formatos que pueden manejar las instrucciones: naturales, enteros, reales, caracteres, etc.
· Modos de direccionamiento de los datos en memoria: inmediato, directo, indirecto, etc. Estos dos factores son determinantes para la implementación eficiente de las estructuras complejas de datos de un lenguaje de alto nivel.
· Conjunto básico de operaciones que se pueden realizar sobre los datos: suma, resta, etc.
Las informaciones relativas a los tres factores anteriores se codifican en cada una de las instrucciones siguiendo un formato preestablecido. El formato determinará la longitud en bits de las instrucciones y los campos que codifican el valor de los factores citados.
En general una instrucción se compone de los siguientes campos:
·
Código de operación (CO). Especifica la operación a realizar (suma,resta, E/S, etc.), la operación se indica mediante un código binario.
·
Referencia a operandos fuente (OP1, OP2,...): La operación puede involucrar a uno o más operandos fuentes, es decir, operandos que son entradas para la instrucción (Lo normal es que el número de operandos fuente de un repertorio no pase de 2).
·
Referencia al operando resultado (OPd). La operación puede producir un resultado.
·
Referencia a la siguiente instrucción (IS). Le indica al CPU de donde va a captar la siguiente instrucción tras completarse la ejecución de la instrucción actual. La siguiente instrucción a captar esta en memoria principal. En la mayoría de los casos, la siguiente instrucción sigue inmediatamente a la instrucción en ejecución. En tales casos no hay referencia explícita a la siguiente instrucción. Cuando sea necesaria una referencia explícita, se debe suministrar la dirección de memoria.


     

3.1 FUNCIONES DE LA UNIDAD DE CONTROL DURANTE LA EJECUCIÓN DE UNA INSTRUCCIÓN
La unidad de control es la parte del CPU que se encarga de que las cosas sucedan, ya que emite señales de control externas al CPU para producir el intercambio de datos con la memoria y los módulos de E/S. También emite señales de control internas para transferir datos entre registros, hacer que la ALU ejecute una función y otras operaciones internas. La entrada a la unidad de control está compuesta por el registro de instrucción, los indicadores, y señales de control.

La responsabilidad principal de la unidad de control es hacer que se produzca una secuencia de operaciones elementales, llamadas microoperaciones, durante el desarrollo de un ciclo de instrucción.

La función principal de la unidad de control de la UCP es dirigir la secuencia de pasos de modo que la computadora lleve a cabo un ciclo completo de ejecución de una instrucción, y hacer esto con todas las instrucciones de que conste el programa.

A raíz de la interpretación de las instrucciones que integran el programa esta unidad genera el conjunto de órdenes elementales necesarias para que se realice la tarea necesitada.

Para realizar su función, la unidad de control consta de los siguientes elementos:

·
Contador de programa. Contiene permanentemente la dirección de memoria de la siguiente instrucción a ejecutar. Al iniciar la ejecución de un programa toma la dirección de su primera instrucción. Incrementa su valor en uno, de forma automática, cada vez que se concluye una instrucción, salvo si la instrucción que se está ejecutando es de salto o de ruptura de secuencia, en cuyo caso el contador de programa tomará la dirección de la instrucción que se tenga que ejecutar a continuación; esta dirección está en la propia instrucción en curso.
·
Registro de instrucción. Contiene la instrucción que se está ejecutando en cada momento. Esta instrucción llevará consigo el código de operación (un código que indica qué tipo de operación se va a realizar, por ejemplo una suma) y en su caso los operandos (datos sobre los que actúa la instrucción, por ejemplo los números a sumar) o las direcciones de memoria de estos operandos.
·
Decodificador. Se encarga de extraer el código de operación de la instrucción en curso (que está en el registro de instrucción), lo analiza y emite las señales necesarias al resto de elementos para su ejecución a través del secuenciador.
·
Reloj. Proporciona una sucesión de impulsos eléctricos o ciclos a intervalos constantes (frecuencia constante), que marcan los instantes en que han de comenzar los distintos pasos de que consta cada instrucción.
·
Secuenciador. En este dispositivo se generan órdenes muy elementales (microórdenes) que, sincronizadas por los impulsos de reloj, hacen que se vaya ejecutando poco a poco la instrucción que está cargada en el registro de instrucción.

 
La unidad de control realiza dos tareas básicas:
·
Secuenciamiento. La unidad de control hace que el CPU avance a través de una serie de micro operaciones en la secuencia oportuna, basada en el programa que se está ejecutando.
·
Ejecución. La unidad de control hace que se ejecute cada microoperación.
La clave de cómo funciona la unidad de control es mediante el uso de señales de control.
Señales de control
Las entradas son:
·
Reloj. La unidad de control hace que se ejecute una microoperación (o un conjunto) en cada pulso de reloj.
·
Registro de instrucción. Determina que microoperación se debe realizar.
·
Indicadores. Usado para determinar el estado del CPU y el resultado de operaciones anteriores de la ALU.
·
Señales de control del bus de control. Señales de control desde el bus del sistema.
Las salidas son:
·
Señales de control internas del CPU.- Para transferir datos de un registro a otro y para activar funciones específicas de la ALU.
·
Señales de control hacia el bus de control.- Señales de control de la memoria y señales de control de los módulos de E/S.

     
Los pasos para ejecutar una instrucción cualquiera son los siguientes:

1) Se extrae de la memoria principal la instrucción a ejecutar esa información es almacenada en el contador de instrucciones, la información que se almacena es la próxima instrucción a ejecutar en el registro de instrucción propiamente dicha. Este paso se llama ciclo de fetch en la literatura computacional (to fetch significa traer, ir por).

2) Una vez conocido el código de la operación la unidad de control ya sabe que circuitos de la UAL deben de intervenir pueden establecerse las conexiones eléctricas necesarias a través del secuenciador.

3) Extrae de la memoria principal los datos necesarios para ejecutar la instrucción en proceso.

4) Ordena la AUL que efectúa las operaciones el resultado de este es depositado en el acumulador de la AUL.

5) Si la instrucción a proporcionado nuevos datos estos son almacenados en la memoria principal.

6) Incrementa en una unidad el contenido del contador de instrucciones a ejecutar.
 
La unidad de control ejecutara varias veces este ciclo de a una enorme velocidad.
Estas instrucciones no residen en memoria, ni fueron escritas por ningún programador, sino que la maquina las ejecuta directamente por medios electrónicos, y lo hará mientras esté funcionando (mientras este encendida) en una computadora es a razón de cientos de miles (o incluso millones) de veces por segundo.

Entradas relacionadas: