Portada Internacional El procesador

El procesador

Por -
2 348
Share on FacebookTweet about this on TwitterShare on Google+Share on TumblrShare on LinkedInPin on PinterestEmail this to someone
AMD_K6-166ALR

Procesador AMD K6, no pongo un procesador Intel por tal de llevar la contraria.

Tal vez te hayas preguntado quién es Intel o AMD y qué hacen de pegatina en ese ordenador que tienes. Pues bien tanto Intel como AMD son las multinacionales más potentes en cuanto a venta de procesadores de PCs. ¿Qué es un procesador? La semana pasada os di una vista de los diferentes componentes de un ordenador, recordar de dicho texto que el procesador es quién se encarga de ordenar al resto del componentes lo que hay que hacer y cómo hay que hacerlo. Para ello lee instrucciones, las interpreta, y una vez que las tiene claras, las ejecuta por medio de ordenes.Son cuatro años los que necesita un futuro ingeniero para comprender cómo funciona un ordenador, ahora esos años están comprimidos en dos cursos, y aún así hay un montón de procesos más que ocurren en los nuevos procesadores y de los que ni los ingenieros, ni los frikis del hardware, de los que no tenemos ni idea. Para que no perdernos (porque es muy fácil perderse), comenzaré desde una imagen simplificada e iré ampliando, destacar que cuando hable de ‘la memoria’ me referiré siempre a memoria principal, estad muy atentos:

  • Visión muy simple: un procesador lee cada instrucción de memoria, una a una, y el contador de por qué instrucción va leyendo se llama PC (Program Counter, contador de programa), tras leer una instrucción, la ejecuta. Las instrucciones son del tipo ‘ADD a3, a1, a2′, la cual significaría suma el contenido de las direcciones de memoria a1 y a2 y el resultado me lo guardas en la dirección de memoria a3. Las instrucciones que lee el procesador son: instrucciones de volcado de memoria (guardar o cargar datos en algún componente, periférico, la tarjeta gráfica, o la memoria principal), instrucciones aritméticas y lógicas (suma, resta, multiplicación, división, ‘o’ lógico, ‘y’ lógico,…), e instrucciones de salto. Las instrucciones de salto cambian el valor de PC, así si vas leyendo por una dirección de memoria puedes cambiar inmediatamente a otra dirección. La memoria principal trae instrucciones o datos del disco duro cuando sea necesario. Esta visión es casi (es más simplificada aún) la de los primeros ordenadores, totalmente monotarea y muy lentos, pero con la ventaja que no tenías manualmente que cambiar cables de sitio por cada instrucción o tarea a ejecutar.
  • Con registros y ALU: Introducimos dentro del procesador un tipo de memoria muy cara y muy pequeña, pero extremadamente rápida, llamada registros (no confundir con el ‘registro de Windows’) con el objetivo de acelerar la extracción de datos. Así ya ‘ADD R3, R1, R2′ significa suma lo que hay en los registros R1 y R2 y el resultado lo guardas en el registro R3. Además las instrucciones aritméticas y lógicas las hará una parte a la que llamamos la ALU (Arithmetic Logic Unit, unidad aritmético lógica), así los saltos y los volcados de memoria (pues podremos mover datos desde memoria principal a registros, y de registros a memoria principal) serán instrucciones rápidas que no pasarán por la ALU. Además imponemos una restricción, las instrucciones aritméticas y lógicas sólo se podrán usar con datos del registro, esto es los datos que usará la ALU siempre estarán en registro y nunca en memoria. Dadas todas estas ventajas y simplificaciones realizamos un nuevo avance respecto a los saltos e introducimos algo que se llama como ‘direccionamiento relativo’. Esto es, antes hacíamos los saltos poniendo la dirección de memoria a la que queríamos saltar directamente, ahora además los podremos hacer sumando a esa dirección antes una cantidad que está guardada en un registro (que suele ser la dirección de PC, por cierto el contador PC es también un registro). Esto permite que podamos tener una memoria todo lo grande que queramos (muchas direcciones de memoria), independientemente del procesador que usemos. Ésta es la visión del procesador que se tiene tras primero de carrera, una visión monotarea y más rápida que la anterior visión supersimplificada, lo normal para esta visión es construir un procesador al completo con sólo puertas lógicas y registros.
  • Con Memorias Caché: Debido a que la memoria principal ha crecido mucho de tamaño en comparación con los registros, pero no podemos hacer que crezcan los registros porque incrementaría el coste del ordenador, creamos una memoria intermedia entre memoria principal y registros llamada memoria caché. Dicha memoria es muy cara, no tanto como los registros pero más que la memoria principal, así que será de un tamaño mediano, y se integra dentro del procesador. Debido a las ventajas que esto ofrece, tendremos una caché de datos, que contendrá los datos de las operaciones, y una caché de instrucciones, que contendrá las probablemente próximas instrucciones a ejecutar (siempre que no haya saltos, si hay un salto habrá que borrar la memoria caché de instrucciones y traer las próximas instrucciones de memoria principal, esto es un problema que solucionaremos en los siguientes puntos). Así el recorrido de un dato desde memoria principal a la ALU sería: memoria principal – memoria caché de datos – registros – ALU; en cambio el recorrido de una nueva instrucción sería: memoria principal – memoria caché de instrucciones – ejecutar la instrucción. El procesador trabaja con la caché de forma transparente, es decir como si estuviera trabajando con memoria principal, por lo que jamás se le dará al programador el poder de pasar un dato o una instrucción a memoria caché, y no se borrarán datos, ni instrucciones de memoria principal al pasarlos a memoria caché. Esto añade mucha complejidad al procesador, pero la rapidez que implica es enorme.
  • Segmentación: Vale, ya hemos añadido memoria caché, pero el procesador no sólo seguía siendo monotarea, sino monoinstrucción, es decir sólo puedes ejecutar una instrucción en cada instante de tiempo. Sin embargo observamos que podemos dividir la lectura y procesamiento de una instrucción en cinco etapas: lectura de la instrucción, IF (lees la instrucción de la caché de instrucciones); decodificación de la instrucción, ID (extraemos de los registros los valores de los operandos de la instrucción); ejecución, EX (ejecución de la instrucción en la ALU o cálculo de la dirección de un salto en caso de ‘direccionamiento relativo’); acceso a memoria, MEM (acceso a la caché de datos para leer datos o escribir datos); escritura de resultado, WB (escribimos el resultado de la operación de la ALU en un registro). Así que dividimos en el procesador el tiempo de cada instrucción en esas cinco etapas, esto tiene un problema y es que, por ejemplo, en una instrucción de lectura de memoria no usamos la ALU, luego en esa instrucción en la etapa EX la ALU estará muerta de risa sin hacer nada. La ventaja de esto es que cuando la primera instrucción esté en la etapa ID (etapa 2ª) la siguiente instrucción estará en la etapa ID (etapa 1ª). Es decir, conseguimos que el procesador sea multi-instrucción, esto es podemos conseguir ejecutar hasta cinco instrucciones (pues son cinco etapas) en un mismo instante de tiempo, lo que aumenta con creces la velocidad. Si acortamos el tiempo de cada etapa (aumentan los GHz), se aumenta en velocidad, pero al mismo tiempo se aumenta la temperatura a la que se somete el procesador, así que no ésa no es una solución valida, y sino que se lo pregunten a Intel con su Pentium IV, además que subir los GHz aumenta el consumo de electricidad.
MIPS_Architecture_(Pipelined).svg

Un esquema con lo que llevamos hasta ahora, hay más cosas de las descritas, pero bueno céntrate en los componentes que he dicho que son los más importantes, y en que los ‘Memory’ son accesos a las cachés de instrucciones (‘Memory’ de la izquierda) y de datos (‘Memory’ de la derecha). Por cierto esta arquitectura de PC tan utilizada se le conoce con el nombre de MIPS y tiene su historia.

  • Memoria virtual: La memoria virtual es poder usar la memoria principal como si fuera una memoria caché del disco duro. Esto implica, por ejemplo, que puedes ver una película en tu ordenador sin importar que la memoria que ocupa dicha película sea mayor que la memoria principal de tu ordenador. Con esto abrimos la posibilidad a la multitarea, como veremos en el siguiente punto. Para la memoria virtual Linux usa una partición a parte para la memoria virtual y cuando se pasa un fichero, en el caso de Windows usa un fichero. Es decir el tratamiento de la memoria virtual es responsabilidad del sistema operativo, pero como el sistema operativo está entre el mundo del hardware y el del software merece mención aquí y en el siguiente punto.
  • Sistema operativo multitarea: El sistema operativo multitarea además de gestionar la memoria virtual gestionará cuando un conjunto de instrucciones (un programa, también llamado tarea) se ejecuta y cuando no, según el usuario o según sus propias decisiones. Así el usuario creerá que está ejecutando varias tareas al mismo tiempo, cuando en realidad sólo se está realizando una por turnos. Así asignamos a cada tarea una prioridad y las vamos turnando dándoles, a cada una, un tiempo límite, y cuando se exceda de ese tiempo, la cambiamos por otra. Una vez agotado su tiempo (o bien el usuario ha cambiado de ventana, dándole así más prioridad a otra tarea), trasladamos los datos de la tarea a memoria principal, y lo que no quepa al disco duro (memoria virtual), y colocamos el estado de dicha tarea en ‘bloqueada’. También estará una tarea bloqueada cuando esté esperando un evento, como es un clic del ratón, la pulsación de una tecla, un dato de internet, la conexión con un periférico,… Con esto ya sabes qué está ocurriendo cuando una ventana en windows te sale entera de color blanco, que seguramente esté en estado ‘bloqueada’. Cuando otra tarea agote su tiempo, nos traeremos la tarea de memoria principal y virtual a la caches y registros y cambiaremos su estado. A esto de bloquear tareas y volverlas a cargar, se le conoce como ‘cambio de contexto’. La gestión de las tareas es responsabilidad del sistema operativo que tú elijas, y no del hardware, pero como podéis ver el sistema operativo es quién está entre el mundo del software y el hardware. Y ésta sería la visión hasta tercero de carrera.
  • Procesador superescalar: Un procesador superescalar es el que permite que no sólo haya segmentación, sino que también se puedan ejecutar varias instrucciones en el mismo tiempo de ejecución durante esa segmentación. Es decir, además de poder ejecutar una instrucción en la fase 1ª, habrán varias que se estén ejecutando en esa misma fase 1ª, cuando pasemos a la fase 2ª todas ellas pasarán a la fase 2ª, además de que otras nuevas instrucciones entrarán en la fase 1ª, y así sucesivamente con todas las fases. Para lograr esto que puede parecer una utopía aumentamos el número de fases, y replicamos los elementos que intervienen en cada fase, así, por ejemplo, tendremos varias ALU e incluso sumadores para los saltos en caso de  ‘direccionamiento relativo’ (decir que usar el  ‘direccionamiento relativo’ es lo más normal y frecuente). Se soluciona de forma parcial el problema de predecir saltos mediante un sistema de control estadístico de predicción de saltos, es decir si se suele saltar a una dirección de memoria, las cachés guardarán datos intuyendo que se saltará, si es muy raro que eso ocurra, se interpretará que no salta. Si una vez que se sepa con seguridad si se salta o no, se ha predicho lo contrario (falla la predicción), se borran todos los cambios producidos por la predicción, se efectúa el salto o no salto y se comienza como si no hubiera habido predicción. Con esto completamos la visión hasta cuarto de carrera.
  • Multi-núcleo (multicore) y niveles de caché: Para comenzar tendremos un procesador que a su vez en su interior contendrá dos o cuatro procesadores (tal y como los hemos descrito) idénticos y cada uno de ellos trabajará de forma independiente (inclusive sus cachés serán independientes), siendo su única conexión la memoria principal o un nivel de caché externo, será responsabilidad del programador el que un determinado programa use varios de estos procesadores y no uno solo. Como he dicho hasta el momento teníamos entre la memoria y los registros, un elemento llamado caché, ahora tendremos varias cachés: el nivel de caché hasta ahora descrito (una caché de instrucciones y una para datos) le llamaremos L1, y habrá una L1 independiente para cada procesador; encima del nivel L1 habrá un nivel de caché L2 (una sola que contiene tanto instrucciones como datos) que bien será compartido entre todos los procesadores o habrá un nivel L2 para cada procesador (depende del modelo del procesador); y en algunos casos tendremos un nivel de caché L3 compartido entre todos los procesadores. Así la recolección de los datos quedaría:  Disco duro – puente sur – puente norte – memoria principal – puente norte – caché L3 – caché L2 – caché L1 – registros. Por lo que el nivel L3 será el que traiga los datos de la memoria, y en caso de no haber nivel L3, será el nivel L2; también habrá que tener en cuenta a qué procesador enviar los datos. Esta es la visión de lo que son los procesadores actuales y yo sólo los he visto en una asignatura optativa que se suele escoger mucha gente.

¿A que es complicado? Y lo he simplificado mucho, pues además de algunas cosas que sé y no he dicho (no quería liarla llenando esto de fórmulas matemáticas, tablas o unidades de control, pienso que lo suyo es mostrar una vista de todo a un nivel simple pero lo suficiente para aprender e incluso para ampliar información por tu cuenta), hay otras que ni un ingeniero y ni un friki del hardware informático sabe, vamos cosas que nadie sabe. Los procesadores avanzan muy rápido y hasta el más experto sabe una versión simplificada del mismo, que como podéis ver no es tan simple y es muy fácil perderse en todo este entramado. Ni siquiera un trabajador de Intel sabrá todos los detalles, pues debido a la complejidad cada experto está especializado en una sección del microprocesador, como es normal. Ya ni hablemos de los procesadores que tienen las tarjetas gráficas que usan las videoconsolas, los cuales llegan a tener decenas de procesadores en su interior y una capacidad de computo que supera a los procesadores comunes de los ordenadores, pero ya hablaré de eso y sus aplicaciones otro día.

Por otra parte cada dos por tres hay un nuevo procesador así que si alguna vez consiguieras entender cómo funciona el procesador más moderno, al cabo de unos pocos meses ese procesador podría estar desfasado. Para que os hagáis una idea de este hecho, en donde estudiaba una vez vino un señor de Intel a dar una conferencia (todo un lujo) y en ella nos dijo que tenían preparados hasta qué productos venderían dentro de diez años (el futuro de los procesadores está ya escrito). Vamos, que debido a la cantidad de los avances que hacían, tenían que realizar más despacio la venta de los mismos, haciendo avances poco a poco. A pesar de este hecho, las verdaderas pruebas de estos procesadores se hacen con los usuarios que compran el procesador más moderno y por tanto el menos probado, posteriormente a raíz de los errores encontrados se va mejorando el producto. En Internet puedes encontrar mucha información sobre qué versión de un procesador es más madura, a dichas versiones se les suele conocer con el nombre de stepping.

Fuentes:

  • Organización y Diseño de Computadores, David A. Patterson, John L. Hennessy. Editorial McGrawHill.
  • Ingeniería de Computadores II, Sebastián Dormido Canto, José Sánchez Moreno, Victorino Sanz Plat. Editorial Sanz y torres.
  • Arquitectura del PC – Volumen I: Microprocesadores, Manuel Ujaldón Martínez. Editorial Ciencia-3, S.L.

Otros artículos

Toy_robot

Por -
0 421

2 comentarios

  1. Okei, intente seguir la info, pero me quede muy pero que muy colgado! jajajajajaja
    saludos y felicitaciones por la pagina!

    • jajaja… Bueno, es normal, es un tema duro. Por suerte el resto de temas de tecnología que suelo tratar no son tan heavys, sino iba listo. xD

      Gracias (supongo que te refieres a mi sección, la página no es mía jejeje ;) ) y un saludo.

Responder

(Spamcheck Enabled)