Introducción
Un ordenador se compone
principalmente de un dispositivo de entrada como el teclado y el ratón, otros
de salida como la pantalla y un cuerpo central que contiene los periféricos
como los puertos USB, salida de
impresora, CDs o DVDs y su parte más
principal o central, la unidad central de procesamiento o CPU (Central Processing Unit) Esta parte principal del ordenador contiene los
controladores para todos estos dispositivos, los cuales todos se nutren o alimentan la CPU que es el núcleo
central del ordenador donde se procesa la información y saca el resultado para
su interpretación.
Aquí me voy a centrar en el
funcionamiento esquemático y básico de la CPU
y del único lenguaje se sabe interpretar (el código máquina) que
manejamos a través del lenguaje ensamblador.
La CPU consiste en el hardware fundamental de un ordenador o cualquier dispositivo programable basado en microprocesador.
Se compone fundamentalmente
de una unidad de control, una unidad aritmético-lógica ALU y la memoria.
La Unidad de Control se encarga de la interpretación y ejecución de las instrucciones y del control de todos los componentes del sistema.
La ALU está
dedicada a la realización de las operaciones aritméticas y lógicas bajo la
supervisión de la Unidad de Control.
La
Memoria es donde se almacena toda la información, incluyendo ésta, el
programa y los datos.
Estos tres elementos componen la CPU. La CPU tomada como un conjunto interpreta las instrucciones de un programa a través de la realización de operaciones básicas aritméticas, lógicas y de entrada/salida del sistema.
Un ordenador puede tener más
de una CPU; esto se llama multiprocesamiento. Todas las CPU modernas están
contenidas dentro de microprocesadores, es decir, las contiene un único
circuito integrado (o chip). Algunos circuitos integrados (ICs) pueden contener
varias CPUs en una única carcasa; estos IC son denominados procesadores
multi-núcleo.
Los componentes típicos de
una CPU son la unidad aritmético lógica (ALU), que como su nombre indica
realiza las operaciones aritméticas y lógicas, y la unidad de control (CU), que
es la que extrae instrucciones de la memoria, las decodifica y las ejecuta,
llamando a la ALU cuando sea necesario.
La operación fundamental de
la CPU es ejecutar una secuencia de instrucciones almacenadas en la memoria que
se llama "programa". El programa consiste en una serie de
instrucciones codificadas en números que se almacenan en la memoria.
La ejecución de dichas
instrucciones de programa se realiza a través de cuatro pasos fundamentales:
Fetch (Leer)
El primer paso, leer (fetch),
consiste en recuperar la instrucción de
la memoria de programa. La localización en la memoria de la instrucción a leer
en cada momento se determina por el
contador de programa (PC), que almacena un número que contiene la dirección de la siguiente instrucción que
se debe buscar. Una vez leída la instrucción, el PC se incrementa una o varias
unidades de memoria (dependiendo de lo que ocupara la instrucción leída) con el
objetivo de apuntar a la siguiente instrucción del programa.
Decode (Decodificar)
En el paso de decodificación,
la instrucción se divide en partes para ser interpretada por el hardware de la
CPU. La forma en que la instrucción se interpreta está definida por la
arquitectura del conjunto de instrucciones
de la CPU.
Normalmente la primera parte
de la instrucción (opcode) indica lo que se debe hacer y las partes restantes
suelen indicar direcciones de memoria operandos o registros en los que realizar
la operación especificada en primer término.
Execute (ejecución)
Diagrama de bloques de una CPU.
Aquí es donde las unidades de
la CPU se ponen en marcha para realizar la operación leída. Si, se solicita una
operación de adición, entonces los datos contenidos en determinados registros
pasan a través de la unidad aritmético lógica (ALU) la cual deposita el
resultado en un registro especial llamado acumulador (por que se suma el
resultado a contenido que tuviera). Dicha ALU solo puede sumar o realizar operaciones
lógicas de bits. Si la operación produce un resultado demasiado grande para el
tamaño del acumulador, activa una bit de
desbordamiento aritmético localizado en un registro de banderas (flags)
Writeback (escribir)
El paso final, la escritura
(writeback), simplemente "escribe" los resultados de la ejecución a
una o varias posiciones de memoria aunque a menudo, los resultados son escritos
en algún registro interno de la CPU para que tenga un acceso rápido por las
siguientes instrucciones.
Existen instrucciones que
manipulan el contador de programa. Éste tipo de instrucción se llama
"salto" (jumps) y se utilizan para generar comportamientos como
bucles (loops), o llamadas a subrutinas (pequeños programas completos que se
ejecutan cuando son llamados desde el programa principal).
Si la instrucción ejecutada
es un salto, el contador de programa será modificado para contener la dirección
de la instrucción a la cual saltó. Esto obliga a almacenar la dirección
siguiente de programa original en unos registros especiales llamados “pila”
stack que serán leídos cuando finalice la ejecución del subprograma o salto
para poder continuar por la dirección correspondiente del programa principal
Reloj
La mayoría de las CPU operan
en función de una señal de sincronización. Esta señal, se denomina señal de
reloj, y tiene la forma de una onda
cuadrada periódica. Toma un valor alto (una tensión eléctrica determinada)
durante un tiempo y luego cae bruscamente a cero donde se mantiene el mismo
tiempo hasta subir de nuevo al valor alto bruscamente.
El período que lleva el
cambio de la señal de reloj debe ser más largo que el tiempo que emplea una
señal en propagarse en el peor de los
casos.
La señal del reloj cambia
constantemente, provocando la conmutación de muchos componentes (cambio de
estado). Esta señal es la que utiliza la CPU para realizar todas sus
operaciones de lectura y escritura en memoria o en registros, ejecución, y cualquier otra operación de control de cualquier
dispositivo de la CPU.
La velocidad de un procesador
depende entre muchos otros factores de la velocidad del reloj (generalmente en
múltiplos de hertzio) y las instrucciones por ciclo de reloj (IPC), que juntos
son los factores que determinan el número de instrucciones por segundo (IPS) que
la CPU puede ejecutar.
Unidad Aritmético Lógica (ALU)
Un típico símbolo esquemático
para una ALU: En el acumulador y el registro
actúan como operandos; La salida se graba en el acumulador; A es la
entrada de la unidad de control; B es un estado de la salida.
La unidad aritmético lógica,
conocida como ALU (arithmetic logic unit), es el circuito digital central de la
CPU y su objetivo es realizar las operaciones aritméticas suma y operaciones
lógicas entre dos números.
Los grandes ordenadores o
mainframes modernos continenen multitud de
microprocesadores a su vez con múltiples núcleos, y cada núcleo con
múltiples unidades de ejecución, cada una de ellas con múltiples ALU.
Muchos otros circuitos pueden
contener en el interior una unidad aritmético lógica.
Esquema simplificado.
Imagen tomada de Wikipedia. |
Una ALU simple de 2 bits que
hace operaciones de AND, OR, XOR y adición (ver explicación en el texto).
La ALU se compone básicamente
de un Circuito Operacional, Registros de Entradas, un acumulador que como se ha
dicho anteriormente es un registro especial donde se deposita la salida de la ALU y un Registro de Estados.
La mayoría de las acciones de
un ordenador son realizadas por la ALU.
Una unidad de control
controla la ALU, al ajustar los circuitos que le indican qué operaciones
realizar.
Descripción del esquema
simplificado.
En la imagen se muestra una
ALU de 2 bits con dos registros de entrada (operandos) llamadas A y B: A0 y B0
corresponden al bit menos significativo y A1 y B] corresponden al bit más
significativo.
Cada bit de la ALU se procesa
de manera idéntica, con la excepción del direccionamiento del bit de acarreo.
Las entradas A y B van hacia
las puertas lógicas de la izquierda, de arriba a abajo, XOR, AND, OR. Las tres
primeras puertas realizan las operaciones XOR, AND, y OR sobre los datos A y B.
La última puerta XOR es la puerta inicial de un sumador completo.
El paso final de las
operaciones sobre cada bit es la multiplexación de los datos. La entrada OP de
3 bits, OP[0], OP[1] y OP[2] (desde la unidad de control) determina que función se va a realizar:
OP =
000 → XOR
OP =
001 → AND
OP =
010 → OR
OP = 011
→ Adición
El resto de entradas del
multiplexor está libre para otras operaciones (resta, multiplicación, división,
NOT A, NOT B, etc.) Aunque OP[2] actualmente no es utilizada en este montaje (a
pesar de estar conectada), sería usada para realizar otras operaciones aparte
de las 4 operaciones ya comentadas.
Los datos de acarreo de entrada y acarreo de salida, llamados flags (banderas), son típicamente conectados a algún tipo de registro de estado.
Entradas y salidas
Las entradas a la ALU son los
datos sobre los cuales se realizarán las operaciones (operandos) y un código
desde la unidad de control que indica
qué operación se realizará. Su salida es el resultado de la operación.
La ALU también lee o genera
un conjunto de códigos de condición desde o hacia un registro de estado. Estos
códigos se utilizan para indicar casos como acarreo entrante o saliente,
desbordamiento , división por cero, etc.
ALU y FPU
Una unidad de coma
flotante, FPU (Floating Point Unit ),
realiza operaciones aritméticas entre dos valores igual que la ALU, pero esta
lo realiza para números en representados en formato de coma flotante, que es
mucho más compleja que la usada en una ALU. Para hacer estos cálculos, la FPU
lleva varios circuitos complejos, incluyendo ALUs internas.
No hay comentarios:
Publicar un comentario