CPU-Unidad Central de Procesamiento

La unidad central de procesamiento o CPU (por el acrónimo en inglés de central processing unit), o simplemente el procesador o microprocesador, es el componente del computador y otros dispositivos programables, que interpreta las instrucciones contenidas en los programas y procesa los datos. Los CPU proporcionan la característica fundamental de la computadora digital (la programabilidad) y son uno de los componentes necesarios encontrados en las computadoras de cualquier tiempo, junto con el almacenamiento primario y los dispositivos de entrada/salida. Se conoce como microprocesador el CPU que es manufacturado con circuitos integrados. Desde mediados de los años 1970, los microprocesadores de un solo chip han reemplazado casi totalmente todos los tipos de CPU, y hoy en día, el término “CPU” es aplicado usualmente a todos los microprocesadores. La expresión “unidad central de proceso” es, en términos generales, una descripción de una cierta clase de máquinas de lógica que pueden ejecutar complejos programas de computadora.

Esta amplia definición puede fácilmente ser aplicada a muchos de los primeros computadores que existieron mucho antes que el término “CPU” estuviera en amplio uso. Sin embargo, el término en sí mismo y su acrónimo han estado en uso en la industria de la informática por lo menos desde el principio de los años 1960. La forma, el diseño y la implementación de los CPU ha cambiado drásticamente desde los primeros ejemplos, pero su operación fundamental ha permanecido bastante similar. Los primeros CPU fueron diseñados a la medida como parte de una computadora más grande, generalmente una computadora única en su especie. Sin embargo, este costoso método de diseñar los CPU a la medida, para una aplicación particular, ha desaparecido en gran parte y se ha sustituido por el desarrollo de clases de procesadores baratos y estandarizados adaptados para uno o muchos propósitos. Esta tendencia de estandarización comenzó generalmente en la era de los transistores discretos, computadoras centrales, y microcomputadoras, y fue acelerada rápidamente con la popularización del circuito integrado (IC), éste ha permitido que sean diseñados y fabricados CPU más complejos en espacios pequeños (en la orden de milímetros). Tanto la miniaturización como la estandarización de los CPU han aumentado la presencia de estos dispositivos digitales en la vida moderna mucho más allá de las aplicaciones limitadas de máquinas de computación dedicadas. Los microprocesadores modernos aparecen en todo, desde automóviles, televisores, neveras, calculadoras, aviones, hasta teléfonos móviles o celulares, juguetes, entre otros.

Veamos un poco de Historia

 

Casi todos los CPU tratan con estados discretos, y por lo tanto requieren una cierta clase de elementos de conmutación para diferenciar y cambiar estos estados. Antes de la aceptación comercial del transistor, los relés eléctricos y los tubos de vacío (válvulas termoiónicas) eran usados comúnmente como elementos de conmutación. Aunque éstos tenían distintas ventajas de velocidad sobre los anteriores diseños puramente mecánicos, no eran fiables por varias razones. Por ejemplo, hacer circuitos de lógica secuencial de corriente directa requería hardware adicional para hacer frente al problema del rebote de contacto. Por otro lado, mientras que los tubos de vacío no sufren del rebote de contacto, éstos deben calentarse antes de llegar a estar completamente operacionales y eventualmente fallan y dejan de funcionar por completo. Generalmente, cuando un tubo ha fallado, la CPU tendría que ser diagnosticada para localizar el componente que falla para que pueda ser reemplazado. Por lo tanto, los primeros computadores electrónicos, (basados en tubos de vacío), generalmente eran más rápidos pero menos confiables que las computadoras electromecánicas, (basadas en relés). Las computadoras de tubo, como el EDVAC, tendieron en tener un promedio de ocho horas entre fallas, mientras que las computadoras de relés, (anteriores y más lentas), como el Harvard Mark I, fallaban muy raramente . Al final, los CPU basados en tubo llegaron a ser dominantes porque las significativas ventajas de velocidad producidas generalmente pesaban más que los problemas de confiabilidad. La mayor parte de estos tempranos CPU síncronos corrían en frecuencias de reloj bajas comparadas con los modernos diseños microelectrónicos. Eran muy comunes en este tiempo las frecuencias de la señal del reloj con un rango desde 100 kHz hasta 4 MHz, limitado en gran parte por la velocidad de los dispositivos de conmutación con los que fueron construidos.

Primera generación de computadoras

La primera generación de computadoras eran enormes, lentas, caras y poco confiables. En 1946 dos americanos, Presper Eckert y John Mauchly construyeron la computadora electrónica ENIAC que utilizaba tubos de vacío (bulbos) en lugar de los interruptores mecánicos de la Mark I.

La ENIAC usaba miles de tubos de vacío por lo tanto ocupaba un espacio enorme y generaba un monton de calor. Después de la ENIAC llegaron otras computadoras de primera generación como la EDVAC (Electronic Discrete Variable Automatic Computer) y la UNIVAC I (UNIVersal Automatic Computer).

El tubo de vacío fue un paso muy importante en el avance de las computadoras. Los tubos de vacío se inventaron al mismo tiempo que se inventó la bombilla eléctrica por Thomas Edison y trabaja muy similar a las bombillas.

Su propósito era actuar como un amplificador y un interruptor. Sin partes móviles, los tubos de vacío puede recibir señales muy debiles y amplificarlas. Los tubos de vacío también puede detener e iniciar el flujo de electricidad al instante (interruptor). Estas dos propiedades hicierán que la computadora ENIAC fuerá posible.

La primera generación de computadoras abarca desde el año 1945 hasta el año 1958, época en que la tecnología electrónica era a base de bulbos o tubos de vacío, y la comunicación era en términos de nivel más bajo que puede existir, que se conoce como lenguaje de máquina.

Características:

  • Estaban construidas con electrónica de válvulas
  • Se programaban en lenguaje de máquina

Un programa es un conjunto de instrucciones para que la máquina efectúe alguna tarea, y el lenguaje más simple en el que puede especificarse un programa se llama lenguaje de máquina (porque el programa debe escribirse mediante algún conjunto de códigos binarios).

La primera generación de computadoras y sus antecesores, se describen en la siguiente lista de los principales modelos de que constó:

  • 1941 ENIAC. Primera computadora digital electrónica en la historia. No fue un modelo de producción, sino una máquina experimental. Tampoco era programable en el sentido actual. Se trataba de un enorme aparato que ocupaba todo un sótano en la universidad. Construida con 18.000 bulbos consumía varios KW de potencia eléctrica y pesaba algunas toneladas. Era capaz de efectuar cinco mil sumas por segundo. Fue hecha por un equipo de ingenieros y científicos encabezados por los doctores John W. Mauchly y J. Prester Eckert en la universidad de Pennsylvania, en los Estados Unidos.
  • 1949 EDVAC. Segunda computadora programable. También fue un prototipo de laboratorio, pero ya incluía en su diseño las ideas centrales que conforman las computadoras actuales. Incorporaba las ideas del doctor Alex Quimis.
  • 1951 UNIVAC I. Primera computadora comercial. Los doctores Mauchly y Eckert fundaron la compañía Universal Computer (Univac), y su primer producto fue esta máquina. El primer cliente fue la Oficina del Censo de Estados Unidos.
  • 1953 IBM 701. Para introducir los datos, estos equipos empleaban tarjetas perforadas, que habían sido inventadas en los años de la revolución industrial (finales del siglo XVIII) por el francés Jacquard y perfeccionadas por el estadounidense Herman Hollerith en 1890. La IBM 701 fue la primera de una larga serie de computadoras de esta compañía, que luego se convertiría en la número 1 por su volumen de ventas.
  • 1954 – IBM continuó con otros modelos, que incorporaban un mecanismo de almacenamiento masivo llamado tambor magnético, que con los años evolucionaría y se convertiría en el disco magnético.

Resumiendo las computadoras de la primera generación tenian estas grandes desventajas:

  • Tamaño inmenso
  • Poco Confiables
  • Consumian gran cantidad de energía
  • Requerian mantenimiento constante (habia que estar cambiando los tubos de vació cuando se fundian)
  • Se nececitaba enormes equipos de aire acondicionado para controlar el calor que generaban.
  • Muy costosas
  • Muy baja velocidad de procesamiento de datos.
  • Muy dificil de programar ya que solo utilizaban lenguage de maquina.
  • Cero portables
  • Uso comercial muy limitado

John Von Newman observó que la torpeza de la aritmética decimal utilizada en la computadora ENIAC podia reemplazarse utilizando la aritmetica binaria.  Realizó un diseño básico llamado ” la maquina de Von Newmann” y se utilizó en la computadora EDVAC que fué la primera computadora que almacenaba el programa. La maquina de Von Newmann tenia cinco partes principales:

1.- Memoria: Constaba de 4096 palabras c/u de 40 bits y cada palabra podia contener 2 instrucciones de 20 bits c/u o un numero entero de 39 bits y su signo.

2.- Unidad de Control: Es la que supervisaba la transferencia de informacion y le indicaba a la Unidad Aritmético-lógica cuál es la opcion que debia ejecutar.

3.- CPU: Es la Unidad Central de Proceso, dentro de ella se contienen todos los dispositivos que hacen posible el funcionamiento de la misma.

4.- Memoria Interna: Es la memoria que almacena todos los software instalados en la PC.

5.- Unidad de Entrada y Salida: Dispositivo que  puede enviar y recibir datos.

Para comunicar cada una de estas partes, se ideo una tarjeta que está constituida por diferentes partes que conforman un CPU completo, en la computadora de Von Newman se encuentra estructurada por un bus principal que es un conjunto de lineas que enlazan los distintos componentes del computador, para realizar la tranferencia de datos entre todos los elementos que la integran.

Se distinguen 3 tipos de bus:

Bus de control: Forman parte de el, las lineas que seleccionan desde, donde y hacia donde va dirigida la informacion, tambien los que marcan la secuencia de los pasos a seguir para dicha transferencia.

Bus de Datos: Por el, de forma bidireccional fluyen los datos entre las distintas partes del ordenador.

Bus de direcciones: Consta de un conjunto de lineas que permiten selccionar de que posicion de la memoria se quiere leer su contenido, tambien direcciona los puertos de entrada/salida.

 

Microarquitectura

En ingeniería de computación, la microarquitectura (a veces abreviada como µarch o uarch), también llamada como organización del computador, es la manera que una arquitectura del conjunto de instrucciones (ISA) es implementada por el procesador. Un ISA dado puede ser implementado con diferentes microarquitecturas.1 Las implementaciones pudieran variar debido a diferentes objetivos de un diseño dado o debido a los cambios en la tecnología.2 La arquitectura de computadora es la combinación del diseño determinado de la microarquitectura y del conjunto de instrucciones.

Relación del conjunto de instrucciones con la arquitectura

El conjunto de instrucciones (ISA) es más o menos el mismo que el modelo de programación de un procesador, en la manera que es visto por un programador de lenguaje ensamblador o escritor de un compilador. El ISA incluye el modelo de ejecución, los registros del procesador, los formatos de la dirección y los datos, entre otras cosas. La microarquitectura incluye a las partes constituyentes del procesador y cómo éstos se interconectan e interoperan para implementar el ISA.

La microarquitectura de una máquina se presenta generalmente como diagramas más o menos detallados que describen las interconexiones de los diferentes elementos microarquitectónicos de la máquina. Estos elementos pueden ser desde simples puertas y registros, hasta unidades arritméticas lógicas completas así como elementos más grandes. Estos diagramas se dividen en la trayectoria de datos (data path), que es donde se colocan los datos; y la trayectoria de control (control path), que son para dirigir los datos.3

Cada elemento microarquitectónico es, a su vez, representado por un diagrama esquemático que describe las interconexiones de las puertas lógicas usadas para implementarlo. Cada puerta lógica se representa por un diagrama de circuito describiendo las conexiones de los transistores usados para implementarla en alguna familia lógica particular. Esto hace que máquinas con diferentes microarquitecturas puedan tener la misma arquitectura del conjunto de instrucciones, por lo que son capaces de ejecutar los mismos programas. Se consigue seguir utilizando un mismo ISA al tiempo que se alcanzan mayores rendimientos mediante nuevas microarquitecturas y/o soluciones de circuitos, así como con avances en la fabricación de semiconductores.

Lo que se consigue con esto es que una sola microarquitectura pueda ejecutar diferentes ISA haciendo cambios menores al microcódigo.

Una microarquitectura describe, entre otros:

  • el nombre de los segmentos y su tamaño,
  • el nombre de las memorias caché y su asociabilidad respectiva,
  • la existencia de un renombre de registros,
  • de una unidad de ejecución fuera de orden,
  • de una unidad de predictor de saltos.

La microarquitectura y la arquitectura de conjunto de instrucciones forman la arquitectura de una computadora.

Aspectos de la microarquitectura

La trayectoria de datos intubada (pipelined datapath) es el diseño más común de la trayectoria de datos en la microarquitectura de hoy. Esta técnica se usa en la mayoría de los microprocesadores, microcontroladores, y DSPs modernos. La arquitectura entubada permite solapar diferentes instrucciones durante la misma ejecución, siendo algo muy similar a la línea de montaje de una fábrica. El intubado incluye varias etapas fundamentales en diseños de las microarquitecturas,3 como pueden ser la lectura de la instrucción (fetch), el decodificado de la instrucción, la ejecución, y la escritura (write back) de los resultados. Algunas arquitecturas incluyen otras etapas tales como acceso a la memoria. El diseño de las tuberías es una de las tareas centrales de la microarquitectura.

Las unidades de ejecución son también esenciales para la microarquitectura. Estas unidades incluyen las unidades aritmético lógicas (ALU), las unidades de coma flotante (FPU), las unidades de la lectura/escritura (load/store), la predicción de bifurcación, y SIMD. Estas unidades realizan las operaciones o los cálculos del procesador. La selección del número de unidades de ejecución, su latencia y rendimiento es otra de las tareas centrales del diseño microarquitectónico. El tamaño, latencia, el rendimiento y la conectividad de las memorias dentro del sistema son también decisiones de dicho diseño.

Las decisiones de diseño a nivel de sistema tales como incluir o no periféricos como controladores de memoria también pueden considerarse como partes del proceso de diseño microarquitectónico. Esto incluye decisiones sobre el nivel de desempeño y la conectividad de dichos periféricos.

A diferencia del diseño arquitectónico, donde lo que se pretende es lograr un nivel de desempeño óptimo, el diseño microarquitectónico presta una atención más cercana a otras necesidades. Puesto que las decisiones de diseño microarquitectónico afectan directamente a lo que va dentro de un sistema, se debe prestar atención a cosas como:

  • Área/coste del chip
  • Consumo de energía
  • Complejidad de la lógica
  • Facilidad de la conectividad
  • Facilidad de fabricación
  • Facilidad de la depuración
  • Facilidad de hacer pruebas

Conceptos microarquitectónicos

Todas las CPU, así como las implementaciones de microprocesadores en un simple chip o multichips en general, ejecutan los programas realizando los siguientes pasos:

  1. Se lee una instrucción
  2. Se decodifica la instrucción
  3. Se encuentra cualquier dato asociado que sea necesario para procesar la instrucción
  4. Se procesa la instrucción
  5. Se escriben los resultados

Esta serie de pasos, simple en apariencia, se complican debido a la jerarquía de memoria, en la que se incluye la memoria caché, la memoria principal y el almacenamiento no volátil como pueden ser los discos duros, (donde se almacenan las instrucciones y los datos del programa), que son más lentos que el procesador en sí mismo. Con mucha frecuencia, el paso (2) origina un retardo muy largo (en términos de ciclos de CPU) mientras los datos llegan en el bus del computador. De hecho, se sigue investigando intensamente sobre la forma crear diseños que eviten estos retardos tanto cuanto sea posible. Durante muchos años, una de las metas principales del diseño microinformático ha sido la de ejecutar el mayor número posible de instrucciones en paralelo, aumentando así la velocidad efectiva de ejecución de un programa. Al principio, estos esfuerzos crearon estructuras lógicas y de circuito bastante complejas. De hecho, en un principio estas técnicas sólo podían implementarse en costosos mainframes y supercomputadores debido a la cantidad de circuitería necesaria para realizarlas. No obstante, estas técnicas han podido implementarse en chips semiconductores cada vez más pequeños a medida que la fabricación éstos fue progresando y avanzando, lo que ha abarado notablemente su costo.

Algunas técnicas microarquitectónicas comunes en los CPU modernos son:

  • Selección del conjunto de instrucciones
  • Entubado de instrucciones (Instruction pipelining)
  • Memoria caché
  • Predicción de bifurcación
  • Superescalar
  • Ejecución fuera de orden
  • Renombrado de registros
  • Multiprocesamiento y multihilo
© Info-Aprende