Capítulo 1: El sistema informático. Software y hardware

Procesador

Ya hemos dicho antes que el procesador es una parte fundamental del hardware del ordenador, que se encarga de leer de memoria las instrucciones que debe ejecutar, las interpreta y las ejecuta.

Aunque la estructura interna de cualquier procesador actual es extremadamente compleja, a nivel lógico podemos decir que está formada por los siguientes elementos:

  • Una unidad aritmético-lógica o ALU (de Arithmetic-Logic Unit) que se encarga de realizar las operaciones de cálculo: Aritméticas (como las sumas), lógicas (como AND y OR) y comparativas (que permiten saber, por ejemplo si un valor es mayor que otro).
  • Una unidad de control, que obtiene de la memoria la siguiente instrucción a ejecutar, la interpreta, vuelve a la memoria para obtener los datos implicados en la operación, los sitúa en la ALU y, una vez obtenido el resultado, lo devuelve a la posición adecuada de la memoria.
  • Una serie de registros de memoria que almacenan temporalmente información relacionada con el proceso de datos que se está realizando. Algunos de los registros que suelen estar presentes en el diseño de los procesadores son:
    • Contador de programa: Que guarda la dirección de memoria de la instrucción que se ejecutará a continuación de la actual
    • Registro Acumulador: Guarda los resultados temporales de una operación cíclica que se encuentre en curso en la ALU.
    • Registro de instrucción: Contiene el código de la instrucción que se está ejecutando
    • Registro de pila: Contiene la dirección de memoria del último elemento de la pila de datos que esté utilizándose
    • Registro de estado: Contiene información sobre el resultado de la operación en curso.

Cuando se hace referencia al procesador, también suele utilizarse la expresión Unidad Central de Proceso o CPU (del inglés, Central Processing Unit).

El Juego de instrucciones del procesador

Llamamos juego de instrucciones al conjunto de instrucciones que un procesador en particular es capaz de interpretar. En realidad, además de las instrucciones, también están implicados los registros que incluye el diseño del procesador, los tipos de datos que sabe manejar, las interrupciones, etc.

Algunas veces, procesadores con un diseño totalmente diferentes tienen los mismos juegos de instrucciones. Esto se hace persiguiendo la compatibilidad entre distintos modelos de procesador del mismo fabricante o entre procesadores de fabricantes distintos (como es el caso de los productos de Intel y AMD).

Sin embargo, lo normal es que los procesadores que son diferentes tengan juegos de instrucciones distintos.

Ciclo de instrucción

Interpretando el funcionamiento del procesador de una forma simplista, podemos decir que la ejecución de un programa se basa en un proceso repetitivo en el que se van leyendo y ejecutando una serie de instrucciones preestablecidas. A este proceso lo llamamos Ciclo básico de instrucción y sigue el siguiente esquema:

Ciclo de instrucción

En definitiva, el ciclo de instrucción es el periodo que tarda el procesador en ejecutar una instrucción de su juego de instrucciones. Podemos dividirlo en las siguiente etapas:

  1. Leer la instrucción siguiente:
    • Se pasa el valor del contador de programa al bus de direcciones
    • Se carga la instrucción desde la memoria principal al registro de datos
    • Se incrementa el valor del contador de programa
    • Se carga el valor del registro de datos en el registro de instrucción
    • El decodificador de instrucción interpreta la instrucción
    • Si hay datos implicados, se cargan en los registros de datos
  1. Ejecutar la instrucción:
    • La unidad de control interpreta la instrucción como una serie de señales de control y las envía a las unidades funcionales implicadas para que se realice la acción
    • Según la instrucción, el resultado se envía a la memoria principal o a algún dispositivo.

En general, las instrucciones se clasifican en las siguientes categorías:

  • Procesador-memoria: Se envían datos desde la memoria al procesador o a la inversa.
  • Procesador-E/S: Se envían datos desde un dispositivo de entrada/salida al procesador o a la inversa
  • Tratamiento de datos: realiza una operación aritmética, una operación lógica o una comparación
  • Control: Modifica la secuencia de ejecución del programa, es decir, coloca un valor diferente en el registro contador de programa.

Interrupciones

Una Interrupción consiste en una señal que recibe el procesador en ciertas situaciones y que ocasiona la suspensión temporal del programa que se está ejecutando. El objetivo es atender posibles incidencias que surjan a lo largo de la ejecución del programa.

De esta forma se consigue mejorar la eficiencia del procesamiento porque, por ejemplo, el procesador puede dedicarse a ejecutar un proceso mientras espera una operación de entrada/salida de un proceso diferente, siendo avisado cuando la operación de entrada/salida concluya.

Existen diferentes tipos de interrupciones.

  • De programa: Se producen cuando, al tratar de ejecutar una instrucción, se obtiene un error inesperado (una división por cero, el uso de una posición de memoria no autorizada, etc).
  • Por fallo hardware: Cuando se produce un fallo imprevisto en el uso de un dispositivo (como un error de paridad en una posición de memoria)
  • De reloj: Producidas por el reloj del sistema.
  • De entrada/salida: cuando se produce una situación de error en una operación de entrada/salida o cuando ésta ha terminado satisfactoriamente.

Hablaremos más acerca de las interrupciones en el próximo capítulo.

Desde un punto de vista físico, el microprocesador es un circuito integrado formado por una serie de transistores. Cada uno de ellos, abrirá o cerrará el flujo de corriente eléctrica al ritmo que marque el reloj del sistema. Dicho ritmo se conoce habitualmente como frecuencia de reloj.

En física, la frecuencia se mide en hercios, de modo que un hercio (o hertz) indica una oscilación por segundo y se representa con el símbolo Hz. En realidad, los microprocesadores actuales son mucho rápidos y suelen medir su velocidad en gigahercios (GHz), que son 109 Hz. Así, un microprocesador cuyos transistores oscilaran con una frecuencia de reloj de 1 GHz, podrían cambiar de estado una vez por cada nanosegundo transcurrido.

Los microprocesadores actuales suelen incorporar varios núcleos. Cada núcleo es una parte del microprocesador que actúa casi como un procesador independiente. En este caso, hablaremos de núcleos físicos. Por otro lado, algunas arquitecturas de procesadores simulan la existencia de varios núcleos para estructurar de forma más eficaz el procesamiento de instrucciones. En esos casos, estaremos hablando de núcleos lógicos.

Además, existen placas base que admiten la instalación de varios procesadores, lo que permite obtener un alto rendimiento.

Entre procesadores de la misma arquitectura, la frecuencia de reloj puede ofrecer una idea de sus diferencias de rendimiento, aunque cuando se trata de arquitecturas diferentes, este dato no suele ser muy revelador. De hecho, en los últimos tiempos, los procesadores han aumentado su rendimiento sin aumentar su frecuencia de reloj. En la mayoría de los casos aumentando su número de núcleos.

Así pues, para evaluar el rendimiento de un procesador, deberíamos tener en cuenta el número de instrucciones ejecutadas en cada ciclo de reloj y, en procesadores con valores similares, comparar su frecuencia.

Otros valores a tener en cuenta para evaluar el rendimiento son los millones de instrucciones por segundo o MIPS (en inglés, millions of instructions per second) o el número de operaciones en coma flotante por segundo o FLOPS (en inglés, floating point operations per second)

Es frecuente que los procesadores de una misma familia se prueben a diferentes frecuencias de reloj y se comercialicen para aquella en la que resultan estables. Así, podemos encontrar procesadores del mismo tipo, comercializados con frecuencias diferentes.

Entre los fabricantes actuales, existe la tendencia de incluir en el microprocesador elementos que antes eran independientes, como la funcionalidad del puente norte y los procesadores de vídeo integrados. Esto reduce el consumo y contribuye a reducir el tamaño de la placa base.

De hecho, comienza a ser frecuente la integración de una gran parte de los elementos que componen un ordenador dentro de un solo microprocesador. Estos sistemas suelen conocerse por las siglas SoC (del inglés System On a Chip o System On Chip) y actualmente suelen utilizarse en sistemas embebidos.

En este contexto, es muy importante el nivel de integración de los transistores que forman los distintos componentes del procesador. Cada transistor permite representar dos estados (0 ó 1) y, en base a ellos, se construye todo el sistema informático. Por ejemplo, para hacernos una idea, un procesador con arquitectura Broadwell de Intel está formado por unos 1.900 millones de transistores. Lógicamente, cuanto más pequeños sean los transistores, más pequeño será el microprocesador o, dicho de otra forma, más componentes podrán integrarse en el mismo espacio.

En el momento de escribir este documento, los principales fabricantes de microprocesadores han alcanzado un nivel de integración de 14 nanómetros, lo que significa que un componente ocupa la 14 milmillonésima parte de un metro. Para que te hagas una idea, en los microprocesadores de 2001 aún se utilizaba una tecnología de proceso de 180 nanómetros.

Nota: Con uno o varios transistores se crea una puerta lógica, y con una o varias puertas lógicas ya se pueden realizar operaciones de nivel básico.

Además de disminuir el espacio, un procesador con mayor nivel de integración mejora su rendimiento y reduce el consumo de energía (mejorando la autonomía de los dispositivos móviles)

Un elemento que lleva mucho tiempo formando parte del microprocesador, es la memoria caché. Se trata de una memoria de gran velocidad que trata de almacenar la información con la que está trabajando el procesador en ese momento. Dado que la memoria caché es mucho más rápida que la memoria RAM, el procesador obtendrá los datos en menos tiempo.

Existen tres niveles de memoria caché con diferentes velocidades:

  • Primer nivel o L1: Es la más rápida y también la más pequeña. Se integra en los microprocesadores desde el procesador 80486 de Intel en 1989.
  • Segundo nivel o L2: Es más lenta y algo más grande que la de primer nivel.
  • Tercer nivel o L3: De nuevo, se trata de una memoria más lenta y más grande que la de segundo nivel.

En los procesadores actuales, todos los niveles de memoria caché vienen integrados en el microprocesador. A modo de ejemplo, en los procesadores con la arquitectura Skylake de Intel, presentada en agosto de 2015 para la sexta generación de procesadores Intel Core, el tamaño de la memoria caché es este:

  • Caché L1: 64 KiB para cada núcleo
  • Caché L2: 256 KiB para cada núcleo
  • Caché L3: 8192 KiB compartida entre todos los núcleos

Veremos más datos sobre la memoria caché en el siguiente apartado.

Estructura de un procesador de 5ª generación del fabricante Intel.

En lo relativo a su parte externa, el microprocesador dispone, en una de sus caras, de una serie de contactos que permiten su comunicación con el zócalo de la placa base. El número de estos contactos puede ser muy elevado (por ejemplo, el socket LGA 2011 tiene, precisamente, 2011 contactos).

Además del número de contactos, es muy importante el modo en el que el procesador se une al socket. En este sentido, las opciones principales son:

  • PGA (Pin Grid Array): Los contactos están formados pines que sobresalen del procesador y encajan en pequeños agujeros del socket. Para evitar que se desajuste, el socket dispone, normalmente, de una palanca que asegura los pines en su posición. Un ejemplo de este tipo es el AMD FX 8-Core de AMD, que utiliza el socket AM3+.

    Procesador con conexión de tipo PGA.

  • BGA (Ball Grid Array): Se trata de una evolución del anterior donde los pines se han sustituido por esferas que se sueldan a la placa base. De esta forma, se evita la necesidad de un socket reduciendo su coste y el tamaño necesario (algo muy importante, sobre todo en ordenadores portátiles). Lógicamente, el inconveniente es que el microprocesador no puede ser reemplazado.

    Un ejemplo de este tipo es el procesador i7-4770R de Intel, que utiliza el socket FCBGA1364.

    Procesador con conexión de tipo BGA (fuente: Wikimedia Commons)

  • LGA (Land Grid Array): En este caso, las superficies de contacto del procesador son lisas y es el socket el que incorpora unos pequeños salientes para facilitar el contacto. Esta configuración permite elegir entre usar un socket o soldar el procesador a la placa, uniendo las ventajas e inconvenientes de los dos anteriores.

    Un ejemplo de este tipo es el procesador i7-6700K de Intel, que utiliza el socket FCLGA1151.

    Procesador con conexión de tipo LGA

En la cara opuesta del microprocesador, suele añadirse una protección metálica, llamada difusor térmico integrado o IHS (en inglés, Integrated Heat Spreader) que protege el circuito, facilita la eliminación de calor y permite serigrafiar su nombre y/o sus características.

El microprocesador suele instalarse unido a un disipador mediante una pasta térmica que facilita la transferencia de calor y, sobre éste, se coloca un ventilador que permiten evacuar el aire caliente generado.

El disipador suele estar fabricado en aluminio o cobre por tratarse de materiales que conducen muy bien la temperatura.

Disipador y ventilador del fabricante Scythe.

Cuando la temperatura supone un problema (porque haya dificultades para la correcta ventilación o porque se genera más temperatura de la normal, como es el caso del overclocking), puede recurrirse a otros mecanismos, como la refrigeración líquida o las células peltier.

Sistema de refrigeración líquida del fabricante Raijintek.

Refrigeración con célula Peltier del fabricante FSH.