Arquitectura de Von Neumann
El procesador está compuesto:
a) Unidad de Control
b) Unidad Lógica Aritmética (ULA/ALU)
c) Tres registros básicos (puede tener muchos más):
Registro de Instrucción
Registro de direcciones o Contador de Programa
(PC)
Acumulador
Ciclo de Instrucción
La ejecución de una Instrucción puede ser dividida en
cinco partes:
• Ciclo de lectura.
• Ciclo de decodificación.
• Ciclo de cálculo de direcciones (de los operandos).
• Ciclo de Ejecución.
• Ciclo de Escritura .
Ciclo de Lectura
En el ciclo de lectura el procesador realiza las siguientes tareas:
•La Unidad de Control calcula la dirección de la próxima instrucción (la
que va ser ejecutada) y la coloca en el PC.
•La unidad de control coloca el contenido del PC en el bus de direcciones.
•La Unidad de control envía una señal de control (por el bus de control)
informando que la operación es de lectura a la memoria.
•Se hace la lectura de la memoria y se coloca el contenido de la palabra
solicitada en el bus de datos.
•la memoria envía una señal de control (por el bus de control) informando
que la información ya esta en el bus de datos.
•La unidad de control carga la información que se encuentra en el bus de
datos en el registro de instrucción.
•En este punto termina el ciclo de lectura
Ciclo de Decodificación
Decodificar significa interpretar o determinar la semántica de la
instrucción.
•La unidad de control debe interpretar la instrucción que se encuentra
en el registro de instrucción.
•En este sentido, debe conocer la semántica de cada instrucción de todo
el conjunto de instrucciones ofrecido por la arquitectura
•El diseñador coloca el conocimiento sobre la semántica de las
instrucciones en la unidad de control.
•De la misma manera, el diseñador coloca la unidad de control el
conocimiento de como una instrucción debe ser ejecutada.
•En la verdad, lo que es decodificado (o interpretado) es el OPCODE de
la instrucción.
•En la ejecución de una instrucción, la unidad de control envía las
señales de control necesarias (y en orden correcto) para que la
instrucción sea ejecutada correctamente.
Ciclo de Cálculo de dirección
La unidad de control necesita saber donde están los operandos que
serán usados en la ejecución de la instrucción.
•En el caso de la instrucción SUM #13, el primer operando está en el
acumulador y el segundo está en el byte que sigue a la instrucción.
•Este operado requiere ser traído para el procesador mediante una
operación de lectura.
•El cálculo de las direcciones depende de la arquitectura y del modo
de direccionamiento del conjunto de instrucciones.
Ciclo de Ejecución
Tomemos el caso del ciclo de ejecución para la instrucción siguiente:
SUM A, #13
Semántica: sumar al contenido del acumulador el valor especificado
en el segundo byte de la instrucción (en este caso: 13)
•El procesador carga el contenido del acumulador en una de las
entradas de la ULA.
•El procesador carga el valor de 13 (en binario) en la otra entrada de la
ULA
•El procesador indica a ULA que la operación va ser la suma
•La ULA realiza la operación y la unidad de control direcciona el
resultado para el acumulador.
Ciclo de Escritura
En el ciclo de escritura la Unidad de Control ejecuta las siguientes
tareas:
•La Unidad de Control calcula la dirección (si fuera necesario) de la
posición de la memoria donde será copiado el resultado de la
instrucción.
•La dirección es cargada en el bus de direcciones.
•La Unidad de Control coloca la información del resultado en el bus
de datos
•La Unidad de Control envía una señal de control indicando que la
operación es de escritura.
•La memoria realiza la operación de escritura en la posición
respectiva de memoria.
Unidad de
Control
ULA Registradores
Bus de direcciones
Bus de
Datos
Bus de Control
Recapitulando…
La arquitectura está formada por el procesador, memoria, buses y por el
Conjunto de Instrucciones, y este es determinado por el diseñador !
Unidad de
Controle
ULA
Registradores
Bus de direcciones
Bus de
Datos
Bus de Control
Toda Instrucción tiene un código en binario. Ejemplo:
SUM = 10101101 (código de la instrucción en binario)
El código de la instrucción en binario es denominado OPCODE (Código de
operación). En este caso, el OPCODE ocupa un byte y el operando ocupa otro o
byte. La instrucción completa ocupa dos bytes
SUM
13
Modos de direccionamiento
En la instrucción SUM #13 un operando es el contenido del
acumulador y el otro operando está incluido en la propia instrucción
•En este caso, el segundo byte de la instrucción contiene el
segundo operando de la instrucción.
•Observe que el primer operando ya está en el acumulador y solo
requiere ser cargado en este registrador para la ULA
•El segundo operando está en la memoria (luego debe ser traído
mediante una operación típica de lectura)
•La manera como son obtenidos los operandos de una instrucción
es denominada el Modo de direccionamiento.
•Está instrucción tiene un modo de direccionamiento para el primer
operando y otro modo para el segundo operando.
Modos más comunes de Direccionamiento
Modo de
direccionamie
nto
Ejemplo de
instrucción
Semántica En que caso es usado
Registro Add Acc, B Acc Acc + B cuando un valor está en un
registro. En este caso, el
acumulador (Acc) recibe
su valor actual mas el
contenido del registrador B
Inmediato Add Acc, #3 Acc Acc + 3 Para constantes
Directo o
absoluto
Add B, (1001) B B+ Mem[1001] Usado para acesar datos
estáticos; la constante de
endereccionamiento
puede requerir ser grande.
En este caso, el registrador
Brecibe su valor actual
pero el contenido de la
posiçión de memoria 1001
Indirecto de
memoria
Add B, @
(1000) B B+
Mem[Mem[1000]]
Si 1000 es la dirección de
un puntero p, entonces este
Unidade de
Controle
ULA
Registradores
Bus de direcciones
Bus de
Datos
Bus de Control
13
SUM
Limitaciones del Modelo de Von Neumann
“El embotellamiento de Von Neumann !”
El problema del
tráfico en le bus de
datos
Aún no hemos hablado sobre el problema de las
limitaciones del Modelo de Von Neumann !
• Los buses pueden ser vistos como canales de comunicación.
•Específicamente, el bus de datos soporta el transito de las
instrucciones y de los datos.
•Además, el bus de datos es bidireccional
• que sucede en una avenida donde se duplica el flujo de
carros por unidad de tiempo ?.
Limitaciones del Modelo de Von Neumann
• Debe ser observado que esto es una limitación del modelo
computacional.
• Podemos mejorar el canal:
•
eje: aumentando el ancho de banda (por ejemplo,
pasando de 32 bits a 64 bits)
Limitaciones del Modelo de Von Neumann
Entretanto, el nuevo canal volverá a tene una limitación de
la misma naturaleza!!!
“Embotellamiento de Von Neumann”
• La expresión embotellamiento de Von Neumann parece
haber sido usada por primera vez por Backus (1978), en 1977
• Sucedió cuando daba una conferencia cuando recibió el
primio Turing de la ACM, intitulada “Can programming be
liberated from the von Neumann style? A functionl style and íts
algebra of proqrams”
• Backus critica el hecho de que más de 30 años después de la
la introducción de las arquitecturas de Von Neumann aún son
dominantes
“Embotellamiento de Von Neumann”
• Podemos resumir el problema del embotellamiento de Von
Neumann en dos dos términos
a) el canal de comunicación (bus) entre el procesador
y la memoria tiene capacidad limitada
b) ejecución del programa es secuencial !
Como resolver el problema?
• en la verdad, solo podemos “aliviar” el problema del
embotellamiento de Von Neumann
• Esto sucede, debido a que son limitaciones intrínsecas del
modelo
• En el primer punto, podemos aumentar el ancho de la
banda del canal.
Estas ha sido las tendencias en desarrollo de los procesadores !
a) aumentando el tamaño (en bits) del bus
b) usando fibras ópticas para implementar el bus.
Como resolver el problema?
En el segundo punto podemos usar Paralelismo
Podemos dividir el programa en vários subprogramas
Estos subprogramas deben ser independientes entre sí
Desta manera, pueden ser ejecutados en paralelo (en
processadores independientes)
Desafortunademente no siempre se puede usar
paralelismo!!! Los programas tienen un grado de
paralelismo....
Esta ha sido otra tendencia en desarrollo de los computadores….
El problema de usar paralelismo !
•Supongamos este trecho de programa:
1a instrucción: a = b + c
2a instrucción: d = a * d
3a instrucción: z = a + d
• Si tuvieramos 3 procesadores, solo uno podrá trabajar !
• Los otros 2 procesadores quedarán de “brazos cruzados”
• Esto sucede por la denominada “Dependencia de Datos !”
• Este programa solo puede ser ejecutado secuencialmente!!!
El problema de usar paralelismo
• Un programa ejecutado en paralelo (usando vários
procesadores) debe dar el mismo resultado que si es ejecutado
secuencialmente !
• Esto es, la integridad secuencial del programa debe ser
mantenida cuando es ejecutado usando varios procesadores !