los legados de diseños anteriores, como el motor de diferencia de Babbage y los sistemas de tarjetas perforadas de mainframe de la década de 1970, tienen un impacto significativo en los sistemas informáticos actuales. En mi primer artículo en esta serie histórica, Computer history and modern computers for sysadmins, discutí varios precursores de la computadora moderna y enumeré las características que definen lo que hoy llamamos una computadora.,
en este artículo, analizo la unidad central de procesamiento (CPU), incluidos sus componentes y funcionalidad. Muchos de los temas se refieren al primer artículo, así que asegúrate de leerlo si aún no lo has hecho.
la unidad central de procesamiento (CPU)
la CPU en las computadoras modernas es la encarnación del «molino» en el motor de diferencia de Babbage. El término unidad central de procesamiento se originó en las nieblas del tiempo de la computadora cuando un solo gabinete masivo contenía los circuitos necesarios para interpretar las instrucciones del programa a nivel de la máquina y realizar operaciones con los datos suministrados., La unidad central de procesamiento también completó todo el procesamiento para cualquier dispositivo periférico conectado. Los periféricos incluían impresoras, lectores de tarjetas y dispositivos de almacenamiento tempranos como drum y unidades de disco. Los dispositivos periféricos modernos tienen una cantidad significativa de potencia de procesamiento y descargan algunas tareas de procesamiento de la CPU. Esto libera a la CPU de las tareas de entrada / salida para que su potencia se aplique a la tarea principal en cuestión.
Las primeras computadoras solo tenían una CPU y solo podían realizar una tarea a la vez.,
conservamos el término CPU hoy en día, pero ahora se refiere al paquete de procesador en una placa base típica. La figura 1 muestra un paquete de procesador Intel estándar.
Figura 1: Un procesador Intel Core i5 procesador de paquete (Jud McCranie a través de Wikimedia Commons, CC BY-SA 4.0).
no hay nada que ver aquí aparte del propio paquete del procesador. El paquete del procesador es un chip que contiene el procesador(s) sellado dentro de un contenedor de metal y montado en una pequeña placa de circuito impreso (PC)., El paquete simplemente se coloca en su lugar en el zócalo de la CPU en una placa base y se asegura con una disposición de palanca de bloqueo. Un enfriador de CPU se conecta al paquete de procesador. Hay varios sockets físicos diferentes con números específicos de contactos, por lo que obtener el paquete correcto para que se ajuste al socket de la placa base es esencial si construye sus propios equipos.
cómo funciona la CPU
veamos la CPU con más detalle. La figura 2 es un diagrama conceptual de una CPU hipotética para que pueda visualizar los componentes más fácilmente., La RAM y el reloj del sistema están sombreados porque no son parte de la CPU y solo se muestran para mayor claridad. Además, no se dibujan conexiones entre el reloj de la CPU y la unidad de control a los componentes de la CPU. Baste decir que las señales del reloj y la unidad de control son una parte integral de todos los demás componentes.
Figura 2: simplificada del diagrama conceptual de un típico de la CPU.
este diseño no parece particularmente simple, pero la realidad es aún más complicada., Esta cifra es suficiente para nuestros propósitos sin ser demasiado compleja.
unidad lógica aritmética
la unidad lógica aritmética (ALU) realiza las funciones aritméticas y lógicas que son el trabajo de la computadora. Los registros A y B contienen los datos de entrada, y el acumulador recibe el resultado de la operación. El registro de instrucciones contiene la instrucción que la ALU debe realizar.
por ejemplo, cuando se suman dos números, uno se coloca en el registro A y el otro en el registro B. El ALU realiza la adición y pone el resultado en el acumulador., Si la operación es lógica, los datos a comparar se colocan en los registros de entrada. El resultado de la comparación, un 1 o 0, se pone en el acumulador. Ya sea una operación lógica o aritmética, el contenido del acumulador se coloca en la ubicación de caché Reservada por el programa para el resultado.
Hay otro tipo de operación realizada por la ALU. El resultado es una dirección en memoria, y se utiliza para calcular una nueva ubicación en memoria para comenzar a cargar instrucciones. El resultado se coloca en el registro de puntero de instrucciones.,
registro de instrucciones y puntero
el puntero de instrucciones especifica la ubicación en la memoria que contiene la siguiente instrucción a ejecutar por la CPU. Cuando la CPU completa la ejecución de la instrucción actual, la siguiente instrucción se carga en el registro de instrucciones desde la ubicación de memoria señalada por el puntero de instrucción.
después de cargar la instrucción en el registro de instrucciones, el puntero del registro de instrucciones se incrementa en una dirección de instrucción. El incremento le permite estar listo para mover la siguiente instrucción al registro de instrucciones.,
Cache
la CPU nunca accede directamente a la RAM. Las CPU modernas tienen una o más capas de caché. La capacidad de la CPU para realizar cálculos es mucho más rápida que la capacidad de la RAM para alimentar datos a la CPU. Las razones de esto están más allá del alcance de este artículo, pero lo exploraré más adelante en el siguiente artículo.
la memoria caché es más rápida que la RAM del sistema, y está más cerca de la CPU porque está en el chip del procesador. La caché proporciona almacenamiento de datos e instrucciones para evitar que la CPU espere a que se recuperen los datos de la RAM., Cuando la CPU necesita datos, y las instrucciones del programa también se consideran datos, la caché determina si los datos ya están en residencia y los proporciona a la CPU.
si los datos solicitados no están en la caché, se recuperan de la RAM y utilizan algoritmos predictivos para mover más datos de la RAM a la caché. El controlador de caché analiza los datos solicitados e intenta predecir qué datos adicionales se necesitarán de la RAM. Carga los datos anticipados en la caché., Al mantener algunos datos más cerca de la CPU en una caché que es más rápida que la RAM, la CPU puede permanecer ocupada y no perder ciclos esperando datos.
Nuestra CPU simple tiene tres niveles de caché. Los niveles 2 y 3 están diseñados para predecir qué datos e instrucciones del programa se necesitarán a continuación, mover esos datos desde la RAM y moverlos cada vez más cerca de la CPU para estar listos cuando sea necesario. Estos tamaños de caché suelen oscilar entre 1 MB y 32 MB, dependiendo de la velocidad y el uso previsto del procesador.
la caché de Nivel 1 está más cerca de la CPU. En nuestra CPU, hay dos tipos de caché L1., L1i es la caché de instrucciones, y L1d es la caché de datos. Los tamaños de caché de Nivel 1 suelen oscilar entre 64 KB y 512 KB.
Unidad de gestión de memoria
LA UNIDAD DE GESTIÓN DE MEMORIA (MMU) gestiona el flujo de datos entre la memoria principal (RAM) y la CPU. También proporciona la protección de memoria necesaria en entornos multitarea y la conversión entre direcciones de memoria virtual y direcciones físicas.
reloj de la CPU y unidad de control
todos los componentes de la CPU deben sincronizarse para que funcionen juntos sin problemas., La unidad de control realiza esta función a una velocidad determinada por la velocidad del reloj y es responsable de dirigir las operaciones de las otras unidades mediante el uso de señales de temporización que se extienden por toda la CPU.
memoria de Acceso Aleatorio (RAM)
aunque la RAM, o almacenamiento principal, se muestra en este diagrama y en el siguiente, no es realmente una parte de la CPU. Su función es almacenar programas y datos para que estén listos para su uso cuando la CPU los necesite.
cómo funciona
las CPU trabajan en un ciclo que es administrado por la unidad de control y sincronizado por el reloj de la CPU., Este ciclo se llama ciclo de instrucción de CPU, y consiste en una serie de componentes fetch/decode/execute. La instrucción, que puede contener datos estáticos o punteros a datos variables, se obtiene y se coloca en el registro de instrucciones. La instrucción se decodifica, y cualquier dato se coloca en los registros de datos A y B. La instrucción se ejecuta usando los registros A y B, con el resultado puesto en el acumulador. La CPU luego aumenta el valor del puntero de instrucción por la longitud del anterior y comienza de nuevo.
el ciclo básico de instrucción de la CPU se ve así.,
la Figura 3: La CPU básica ciclo de una instrucción.
la necesidad de velocidad
aunque la CPU BÁSICA Funciona bien, las CPU que se ejecutan en este ciclo simple se pueden usar aún más eficientemente. Hay múltiples estrategias para aumentar el rendimiento de la CPU, y nos fijamos en dos de ellas aquí.
sobrealimentar el ciclo de instrucción
Un problema que encontraron los primeros diseñadores de CPU fue la pérdida de tiempo en los diversos componentes de la CPU., Una de las primeras estrategias para mejorar el rendimiento de la CPU fue superponer las porciones del ciclo de instrucción de la CPU para utilizar las diversas partes de la CPU más plenamente.
por ejemplo, cuando la instrucción actual ha sido decodificada, la siguiente se obtiene y se coloca en el registro de instrucciones. Tan pronto como esto ha ocurrido, el puntero de instrucción se actualiza con la dirección de memoria de la siguiente instrucción. El uso de ciclos de instrucción superpuestos se ilustra en la Figura 4.,
Figura 4: instrucciones de CPU ciclo con la superposición.
este diseño se ve agradable y suave, pero factores como esperar E / S pueden interrumpir el flujo. No tener los datos o instrucciones adecuados en la caché requiere que la MMU Localice los correctos y los mueva a la CPU, y eso puede tomar algún tiempo. Ciertas instrucciones también tardan más ciclos de CPU en completarse que otras, lo que interfiere con la superposición suave.
sin embargo, esta es una estrategia poderosa para mejorar el rendimiento de la CPU.,
Hyperthreading
otra estrategia para mejorar el rendimiento de la CPU es hyperthreading. Hyperthreading hace que un único núcleo de procesador funcione como dos CPU al proporcionar dos flujos de datos e instrucciones. Agregar un segundo puntero de instrucción y un registro de instrucción a nuestra CPU hipotética, como se muestra en la Figura 5, hace que funcione como dos CPU, ejecutando dos flujos de instrucción separados durante cada ciclo de instrucción. Además, cuando una secuencia de ejecución se detiene mientras espera datos (de nuevo, las instrucciones también son datos), la segunda secuencia de ejecución continúa procesándose., Cada núcleo que implementa hyperthreading es el equivalente de dos CPU en su capacidad para procesar instrucciones.
Figura 5: diagrama conceptual de un CPU con hyperthreading.
recuerde que este es un diagrama muy simplificado y explicación de nuestra CPU hipotética. La realidad es mucho más compleja.
más terminología
he encontrado una gran cantidad de terminología de CPU diferentes., Para definir la terminología un poco más explícitamente, veamos la CPU en sí usando el comando lscpu
.
el procesador Intel que se muestra arriba es un paquete que se conecta a una sola toma en la placa base. El paquete del procesador contiene seis núcleos. Cada núcleo es capaz de hyperthreading, por lo que cada uno puede ejecutar dos subprocesos simultáneos para un total de 12 CPU.
mis definiciones:
- Core-Un core es la unidad física de hardware más pequeña Capaz de realizar la tarea de procesamiento. Contiene una ALU y uno o dos conjuntos de registros de soporte., El segundo conjunto de Registros y circuitos de soporte permite hyperthreading. Uno o más núcleos se pueden combinar en un solo paquete.
- CPU-una unidad de hardware lógico capaz de procesar un solo hilo de ejecución. El uso moderno del término unidad central de procesamiento se refiere al número total de subprocesos que un paquete de procesador es capaz de ejecutar simultáneamente. Un procesador de un solo núcleo que no admite hyperthreading es el equivalente de una sola CPU. En este caso, CPU y core son sinónimos., Un procesador hyperthreading con un solo núcleo es el equivalente funcional de dos CPU. Un procesador hyperthreading con ocho núcleos es el equivalente funcional de 16 CPU.paquete
- : El componente físico que contiene uno o más núcleos, como el que se muestra en la Figura 1 anterior.
- Procesador-1) un dispositivo que procesa las instrucciones del programa para manipular datos. 2) frecuentemente utilizado como sinónimo de paquete.,
- Socket-a veces se usa como otro sinónimo de paquete, pero se refiere con mayor precisión al socket físico en la placa base en la que se inserta el paquete del procesador.
los Términos socket, procesador y paquete a menudo se usan indistintamente, lo que puede causar cierta confusión. Como vemos en los resultados del comando lscpu
, Intel nos proporciona su propia terminología, y considero que la fuente autorizada., En realidad, todos usamos esos términos de varias maneras, pero mientras nos entendamos unos a otros en un momento dado, eso es lo que realmente importa.
observe que el procesador anterior tiene dos cachés de nivel 1 de 512 KiB cada uno, uno para instrucciones (L1i) y uno para datos (l1d). La caché de Nivel 1 es la más cercana a la CPU, y acelera las cosas para tener instrucciones y datos separados en este punto. Los cachés de Nivel 2 y Nivel 3 son más grandes, pero las instrucciones y los datos coexisten en cada uno.
¿Qué significa todo esto?
Buena pregunta., En los primeros días de los mainframes, cada computadora tenía una sola CPU y era incapaz de ejecutar más de un programa simultáneamente. El mainframe podría ejecutar nómina, luego contabilidad de inventario, luego facturación de clientes, y así sucesivamente, pero solo una aplicación podría ejecutarse a la vez. Cada programa tenía que terminar antes de que el operador del sistema pudiera comenzar el siguiente.
algunos primeros intentos de ejecutar varios programas a la vez tomaron un enfoque simple y estaban dirigidos a una mejor utilización de una sola CPU., Por ejemplo, program1 y program2 se cargaron, y program1 se ejecutó hasta que se bloqueó esperando que ocurriera E / S. En ese momento, program2 se ejecutó hasta que fue bloqueado. Este enfoque se denominó Multiprocesamiento y ayudó a utilizar plenamente el valioso tiempo de la computadora.
los primeros intentos de multitarea implicaban cambiar el contexto de ejecución de una sola CPU muy rápidamente entre los flujos de ejecución de múltiples tareas. Esta práctica no es verdadera multitarea como la entendemos porque, en realidad, solo se procesa un único hilo de ejecución a la vez. Se llama más correctamente tiempo compartido.,
Las computadoras modernas, desde relojes inteligentes y tabletas hasta supercomputadoras, todas admiten una verdadera multitarea con múltiples CPU. Varias CPU permiten a los equipos ejecutar muchas tareas simultáneamente. Cada CPU realiza sus propias funciones al mismo tiempo que todas las demás CPU. Un procesador de ocho núcleos con hyperthreading (es decir, 16 CPU) puede ejecutar 16 tareas simultáneamente.
Pensamientos finales
observamos una CPU conceptualizada y simplificada para aprender un poco sobre las estructuras. Apenas he hojeado la superficie de la funcionalidad del procesador en este artículo., Puede obtener más información tomando los enlaces incrustados para los temas que exploramos.
recuerde que los diagramas y descripciones en este artículo son puramente conceptuales y no representan ninguna CPU real.
en la siguiente parte de esta serie, miraré la RAM y las unidades de disco como diferentes tipos de almacenamiento y por qué cada uno es necesario para las computadoras modernas.