¿Cómo funciona un chip de computadora? ¿Cómo hacemos que toda esa información se compacte en ese chip cada vez más reducido?

Un microprocesador moderno es una entidad tremendamente complicada, y miles de personas han necesitado décadas de trabajo para llegar a donde está ahora. Es casi imposible cubrir todas las bases aquí, pero haré un intento. Tenga listo un cubo de palomitas de maíz, porque esto va a ser largo.

Cualquier sistema moderno funciona sobre la base de buenas abstracciones , es decir, módulos más simples sobre los que se construyen elementos más complejos. En mi opinión, el procesador moderno se puede dividir en las siguientes capas muy amplias:

  1. Dispositivos (transistores)
  2. Circuitos
  3. Puertas lógicas
  4. Bloques lógicos simples
  5. Procesador
  6. Software

Para empezar, comencemos desde un “punto medio”, uno que no es ni demasiado complicado de entender ni demasiado lejos de un procesador real: la puerta lógica. Una puerta lógica tomará cierto número de entradas, todas las cuales son 0 o 1, y generará un bit que nuevamente es 0 o 1 de acuerdo con alguna regla. Por ejemplo, una puerta AND generará 1 solo si todas sus entradas son 1.
Ahora puede comenzar a preguntarme “¿Pero qué quiere decir con 0 y 1? ¿Qué significa eso en términos de electricidad?”. La respuesta es fantásticamente complicada. Puede significar un nivel de voltaje (0 es 0V, 1 es 1V), un pulso eléctrico (0 no es pulso, 1 es un pulso de 1V por 1 nanosegundo, una billonésima de segundo), un fotón (0 no es fotón , 1 es 1000 fotones), y así sucesivamente, todo dependiendo de cómo se diseñó el circuito. Este es el poder de las abstracciones. No necesita saber lo que significan 0 y 1 para diseñar cosas más arriba (pero tomará malas decisiones más arriba si no sabe esto, por lo que tal vez la abstracción no sea perfecta).

Ahora pensemos cómo podemos hacer algo con estas puertas muy simples. Permítanos pensar que está a punto de comenzar su propia compañía de procesadores y que desea hacer un bloque simple que agregue dos números usando estas puertas solo.

“Pero espera”, dices, “¿qué es un número en términos de 0 y 1? Solo conozco números como 57 y 42, que están hechos de dígitos del 0-9, no solo 0 y 1”. Es cierto, pero mira, 57 es solo una “representación” del número debajo, que en realidad es 5 * 10 + 7. También puede representar 57 como 1 * 2 ^ 5 + 1 * 2 ^ 4 + 1 * 2 ^ 3 + 0 * 2 ^ 2 + 0 * 2 ^ 1 + 1 * 2 ^ 0. Voila !! ahí lo tienes, 57 es lo mismo que 111001 en este nuevo sistema. Puede convencerse de que cualquier número puede representarse en este formulario.

Ahora, pensemos cómo vamos a construir un sumador. En primer lugar, intentemos construir un “medio sumador”, uno que tome dos bits y los agregue a la salida de dos bits. Entonces, si los dos bits son ambos 0, generará 00, si solo uno de ellos es 1, generará 01, y si ambos son 1 generará 10. Pensemos un bit a la vez y tomemos el primero mordió al principio. Después de un tiempo, descubrimos “¡Oh! Ese bit es 1 solo si ambos bits de entrada son 1. Para que podamos pasar por una puerta AND. ¡Impresionante!”. Ahora tenemos la mitad de nuestro trabajo hecho. Solo queda un poco.

Ahora nos sentamos a pensar de nuevo. Hmm, esta otra parte parece más difícil. Es casi como una puerta OR, pero no genera 1 si ambas entradas son 1. Ok, no pensemos más en esto y simplemente decidamos llamarlo un nuevo tipo de puerta, una puerta OR exclusiva.
“No se preocupe”, le digo, “contrataremos a algunos ingenieros de circuitos súper impresionantes que pueden diseñar una puerta de este tipo mientras duermen”. Ahora dibujamos una imagen de nuestro nuevo y sorprendente circuito: un medio sumador.

Pero, ahora dice, “podemos agregar solo números de 1 bit. Nuestra compañía rival puede agregar números de más de mil millones. ¿Cómo hacemos eso?”. La respuesta es sorpresa sorpresa, abstracciones. Verá, nuestro diseño actual solo puede agregar dos números de un bit, y la salida es una suma y un “carry”, que ahora debe agregarse al siguiente bit más alto. Esto necesita la adición de tres bits, que nuestro pequeño no puede hacer.

Entonces, después de otro día completo de pensar en esto, descubrimos que este será un buen circuito para hacer esto y lo llamaremos sumador “completo”.

Ahora tenemos todo el poder añadido del mundo en nuestras manos. Verán, ahora podemos encadenar a 32 de estos pequeños individuos como lo siguiente y tenemos en nuestras manos un monstruo que puede sumar números de más de mil millones, en un abrir y cerrar de ojos.
Y aquí están las maravillosas noticias: puedes seguir haciendo mejores y mejores puertas, y tu circuito será cada vez mejor. Ese es el poder de la abstracción.

Por supuesto, resulta que nuestra forma de agregar cosas no es realmente tan buena. Puedes hacerlo mejor … mucho mejor. Pero, debido a nuestra abstracción amiga, eso se puede hacer independientemente de las puertas. Si tu circuito más nuevo es 2 veces mejor que el anterior, Y tienes puertas 2 veces más rápidas, ¡tienes un circuito 4 veces mejor! Ese es uno de los principales contribuyentes a cómo mejoramos miles de veces en unas pocas décadas. Construimos puertas más pequeñas, más rápidas y que consumen menos energía. Y descubrimos mejores y mejores formas de hacer el mismo cálculo. Y luego nos unimos a ellos juntos. Funcionó como magia!

Ahora trabajamos durante un año en nuestro garaje y construimos circuitos que pueden multiplicar, sumar, restar, dividir, comparar y hacer todo tipo de operaciones aritméticas, todo dentro de 1 nanosegundo. Incluso hacemos un pequeño circuito que puede “almacenar” un valor, es decir, su salida dependerá del valor que se haya escrito anteriormente (alguien sugiere que lo llamemos flip-flop. Eso suena como un nombre gracioso, lo mantenemos ^ _ ^). Pero, verán, una cosa que todos nuestros circuitos tienen en común es que solo toman entradas y hacen la misma operación sobre ellas para dar la salida. ¿Qué pasa si quisiera a veces hacer una multiplicación, y en otras ocasiones una adición?

¡Ahora, tenemos una onda cerebral! Decimos, no consideremos los bits solo como números. Tratemos de representar las “acciones” en pedazos. Digamos que 0 significa “sumar”, 1 significa “multiplicar”. Ahora, construyamos un pequeño circuito que vea un bit como un “comando”, y seleccione entre dos entradas, I0 e I1, y las salidas I0 si el comando es 0, e I1 si es 1. Este es un multiplexor.
“¡Wow!”, Dices, “ahora solo necesitamos un multiplexor para elegir entre las salidas de un sumador y un multiplicador, ¡y tenemos nuestra solución! De hecho, ¿por qué no tener muchos de estos multiplexores para elegir? muchas salidas, y tenemos una máquina tan increíble. Puede realizar muchas operaciones aritméticas dependiendo de lo que le des como “comando”.

¡Ahora tenemos otra idea IMPRESIONANTE! ¿Recuerdas esas divertidas chanclas que construimos antes? Pensamos, ¿y si conectamos un multiplexor 1024-1 a la salida de 1024 flip-flops? ¡Ahora tenemos lo que se llama una memoria de 1 Kilobit! Podemos darle una “dirección”, y nos devolverá un poco, que era el bit almacenado en esa ubicación numerada. ¿No es genial? Además, estos bits ahora pueden ser “números” (datos) o “comandos” (instrucciones).

Sentémonos y pensemos qué tenemos hasta ahora: tenemos tantas funciones aritméticas, tenemos un multiplexor genial que selecciona qué salida elegir, y tenemos una memoria, que puede darnos un poco si le damos una “dirección” .

Aquí está lo asombroso ahora. Tenemos TODO lo que necesitamos para construir un procesador. Veamos cómo:

  • En primer lugar, tenemos una matriz de memoria MEM que contiene todos los “comandos” (instrucciones) y “números” (datos).
  • En segundo lugar, tenemos un número llamado “contador de programa”, uno que usamos para seleccionar qué instrucción ejecutar desde MEM. Normalmente solo aumenta en 1 en cada paso.
  • Tercero, tenemos un bloque aritmético con multiplexores.
  • Cuarto, generamos ambas entradas a nuestro bloque aritmético desde MEM.
  • Finalmente, hay dos tipos de instrucciones: instrucciones de datos e instrucciones de control. Cada instrucción de datos contiene cuatro cosas: dos direcciones que especifican qué dos números elegir del MEM, un comando que indica qué operación realizar y otra ubicación que indica dónde devolver el resultado. Las instrucciones de control simplemente ponen otra dirección en el “contador de programa”.

Esta cosa que acabas de construir se llama máquina Von-Neumann (sí, locos como él descubrieron todo esto en 1945, no sé cómo). Hoy en día, las personas comienzan a preguntarse si esta es la mejor manera de construir cosas, pero esta es la forma estándar en que se construye cualquier procesador hoy en día.

Bueno, cuando dije antes que así es como se construyen todos los procesadores, quise decir “teóricamente”, y por “teóricamente”, quiero decir “consideremos que una vaca es una esfera” teóricamente. Verá, la CPU de su competidor puede recorrer círculos alrededor de su CPU básica Von-Neumann. Solo tiene 1000 Kilobits de memoria, su competidor puede manejar hasta miles de millones (Gb) o trillones (Tb) de bits de memoria. Pero ahora dices, de ninguna manera esos tipos pueden crear un multiplexor de mil millones a uno y tener sus datos dentro de 1 nanosegundo. Cierto. Su salsa secreta es algo llamado localidad .

Lo que esto significa es que su programa normalmente solo usa algunas ubicaciones de datos y memoria de instrucciones a la vez. Entonces, lo que debe hacer es tener una memoria grande que consista en GB de datos, luego trae una pequeña parte de ella, la parte que se está utilizando actualmente, en una matriz mucho más pequeña (quizás 1 MB) llamada caché . Por supuesto, ahora puede tener un caché aún más pequeño debajo de este caché, y así sucesivamente, hasta que pueda llegar a algo en lo que pueda leer o escribir en aproximadamente la misma cantidad de tiempo que puede hacer un cálculo aritmético.

Otra idea poderosa que puede hacer se llama procesamiento fuera de orden . El siguiente programa puede ilustrar el concepto detrás de esto que calcula X = (A + B) * (C + D)

  1. Agregue A y B y guárdelo en U
  2. Agregue C y D y guárdelo en V
  3. Multiplica U y V y guárdalo en X

De la manera normal, lo hará secuencialmente, siguiendo una instrucción tras otra y terminando la ejecución en 3 pasos. Pero, si tiene dos sumadores en su sistema, puede ejecutar las instrucciones 1 y 2 en paralelo, y luego hacerlo en 2 pasos. Entonces ejecuta tanto como sea posible en cada paso y termina su ejecución más rápido.

Ahora, piense en el tiempo en que todo lo que sabía era una simple puerta AND. Esta cosa que has construido parece muy ajena a eso. Pero en realidad son solo capas sobre capas de bloques, y reutilizando un bloque más simple para construir un bloque más complejo. Esta es la idea clave aquí. Una CPU se construye solo parcheando partes, que se construye parcheando partes más pequeñas. Al final, sin embargo, si solo miras la cosa, se ve así:

  1. Sumador (electrónica)
  2. Arquitectura von Neumann
  3. Caché de la CPU
  4. Ejecución fuera de orden
  5. ARCA | Procesador Intel® Core ™ i7-3960X Extreme Edition (caché de 15 M, hasta 3,90 GHz)

Editar: Hay muchos detalles que omití en la respuesta original. Esta respuesta será equivalente a responder a “¿Cómo funciona un auto F1?” con “Tiene ruedas, y una dirección que las guía, y un motor para correr las ruedas”. Verdaderamente, diseñar y construir una CPU es uno de los milagros de la tecnología moderna que involucra una gran cantidad de disciplinas de ingeniería (incluyendo, por ejemplo, física cuántica, metalurgia, fotónica, etc.). Intentaré abordar algunos problemas más a continuación.

Fabricación
Una de las increíbles hazañas de la tecnología ha sido la capacidad de crear y conectar miles de millones de pequeños transistores, cada uno de menos de 100 nm (sí, eso es nano , lo que significa una milmillonésima parte de un metro) de ancho, en un patrón preciso definido por los diseñadores de circuitos y el Arquitectos de CPU, y todavía lo hacen increíblemente barato. Está claro que crear y conectar una cantidad tan enorme de transistores uno por uno es imposible a mano o incluso por cualquier forma de mecánica.

El método para fabricar un chip se llama fotolitografía, y es la razón detrás del precio extremadamente bajo de los procesadores en comparación con su complejidad. La idea es similar a cómo una foto analógica solía ser “desarrollada” (si alguien recuerda eso). Primero describiré cómo crear un patrón de óxido de silicio sobre silicio (esto se usa en puertas de transistores). Primero se deposita una capa de óxido de silicio sobre el silicio. Luego se aplica una capa de material fotorresistente encima. Este material es sensible a la luz, pero es resistente al “grabado”. El inverso del patrón que se creará también se hace en forma de una “máscara” a través de la cual se ilumina la luz UV sobre la fotorresistencia. Sin embargo, esto plantea la pregunta de cómo se creó la máscara en primer lugar.

Aquí está la magia de la fotolitografía: la máscara es en realidad mucho más grande que el tamaño del patrón que se grabará. La luz que brilla a través de la máscara simplemente es enfocada por una lente para tener el tamaño correcto cuando cae sobre el silicio. Una vez que la luz cambia la fotorresistencia, es eliminada por una explosión de plasma, dejando solo el patrón deseado en el óxido de silicio.


Para crear una capa de metal, por otro lado, se sigue un procedimiento similar. Sin embargo, ahora el inverso del patrón está grabado en SiO2, y luego el metal se deposita en los “surcos” creados por el SiO2.

La razón por la que esto es tan económico es porque una vez que tiene la “máscara”, puede crear una gran cantidad de chips a partir de ella. Por lo tanto, aunque una máscara es bastante costosa (unos pocos millones de dólares), su costo se divide en muchos chips, lo que hace que cada chip sea muy barato (juego de palabras no previsto).

Tipos de recuerdos
Como dije antes, puedes construir una memoria conectando flip-flops a multiplexores. Sin embargo, esa no es una forma especialmente eficiente de hacer las cosas. Un flip-flop consume alrededor de 15-20 transistores. Sin embargo, en la práctica hay dos tipos de estructuras de memoria: RAM estática (o SRAM en resumen), que usa 6 transistores por bit, y RAM dinámica (o DRAM en resumen), que usa solo un transistor y un condensador por bit. Una RAM estática es esencialmente dos puertas NO conectadas en un bucle como este.

Claramente, hay dos estados posibles para A y B, A = 1, B = 0 o A = 0, B = 1. La idea es aplicar un voltaje externo para empujar el bucle a un estado u otro, que es entonces el bit “almacenado”, y luego simplemente lea el voltaje en A o B para “leer” el bit.

Por otro lado, la RAM o DRAM dinámica es aún más simplista y es más o menos así.


En este diseño, el transistor simplemente actúa como un interruptor para almacenar la carga en el condensador, en cuyo caso se lee como un 1, de lo contrario un 0. Sin embargo, la carga en el condensador se escapa del transistor de vez en cuando. Por lo tanto, debe leerse y reescribirse a intervalos fijos, y por eso se llama RAM dinámica.

Los cachés en un chip son generalmente SRAM, ya que son más rápidos. Sin embargo, las memorias principales en una computadora son generalmente DRAM, ya que son mucho más pequeñas en tamaño y, por lo tanto, una mayor cantidad de memoria puede caber en un solo chip.

  1. Fotolitografía
  2. Memoria estática de acceso aleatorio
  3. Memoria dinámica de acceso aleatorio

PD: He comenzado un blog sobre ideas básicas de arquitectura de CPU en CPU Architecture . En caso de que esta respuesta le interese, puede consultarla.

Progresión por microprocesador: Intel

El primer microprocesador que se convirtió en una computadora doméstica fue el Intel 8080, una computadora completa de 8 bits en un chip, introducido en 1974. El primer microprocesador que causó un gran impacto en el mercado fue el Intel 8088, introducido en 1979 e incorporado en la PC de IBM (que apareció por primera vez alrededor de 1982). Si está familiarizado con el mercado de PC y su historia, sabe que el mercado de PC pasó del 8088 al 80286 al 80386 al 80486 al Pentium al Pentium II al Pentium III al Pentium 4.

Todos estos microprocesadores están hechos por Intel y todos ellos son mejoras en el diseño básico del 8088. El Pentium 4 puede ejecutar cualquier pieza de código que se ejecute en el 8088 original, ¡pero lo hace unas 5.000 veces más rápido!

Desde 2004, Intel ha introducido microprocesadores con múltiples núcleos y millones de transistores más. Pero incluso estos microprocesadores siguen las mismas reglas generales que los chips anteriores.


Aquí están las diferencias entre los diferentes procesadores que Intel ha introducido a lo largo de los años.

Compilado de la Guía de referencia rápida del microprocesador Intel y los puntajes de referencia de TSCP
Información adicional sobre la tabla en esta página:

  • La fecha es el año en que se introdujo por primera vez el procesador. Muchos procesadores se reintroducen a velocidades de reloj más altas durante muchos años después de la fecha de lanzamiento original.
  • Transistores es el número de transistores en el chip. Puede ver que la cantidad de transistores en un solo chip ha aumentado constantemente a lo largo de los años.
  • Micrones es el ancho, en micrones, del cable más pequeño del chip. A modo de comparación, un cabello humano tiene 100 micras de espesor. A medida que disminuye el tamaño de la función en el chip, aumenta el número de transistores.
  • La velocidad del reloj es la velocidad máxima a la que se puede sincronizar el chip. La velocidad del reloj tendrá más sentido en la siguiente sección.
  • Ancho de datos es el ancho de la ALU. Una ALU de 8 bits puede sumar / restar / multiplicar / etc. dos números de 8 bits, mientras que una ALU de 32 bits puede manipular números de 32 bits. Una ALU de 8 bits tendría que ejecutar cuatro instrucciones para agregar dos números de 32 bits, mientras que una ALU de 32 bits puede hacerlo en una sola instrucción. En muchos casos, el bus de datos externo tiene el mismo ancho que la ALU, pero no siempre. El 8088 tenía una ALU de 16 bits y un bus de 8 bits, mientras que los Pentium modernos obtienen datos de 64 bits a la vez para sus ALU de 32 bits.
  • MIPS significa “millones de instrucciones por segundo” y es una medida aproximada del rendimiento de una CPU. Las CPU modernas pueden hacer tantas cosas diferentes que las clasificaciones MIPS pierden mucho de su significado, pero puede obtener una idea general de la potencia relativa de las CPU de esta columna.

En esta tabla puede ver que, en general, existe una relación entre la velocidad del reloj y MIPS. La velocidad máxima del reloj es una función del proceso de fabricación y los retrasos dentro del chip. También existe una relación entre el número de transistores y MIPS. Por ejemplo, el 8088 registró 5 MHz pero solo se ejecutó a 0.33 MIPS (aproximadamente una instrucción por 15 ciclos de reloj). Los procesadores modernos a menudo pueden ejecutar a una velocidad de dos instrucciones por ciclo de reloj. Esa mejora está directamente relacionada con el número de transistores en el chip y tendrá más sentido en el futuro.

¿Qué es un chip?
Un chip también se llama circuito integrado (IC) . Generalmente es una pieza pequeña y delgada de silicio sobre la cual se han grabado los transistores que forman el microprocesador. Un chip puede ser tan grande como una pulgada de lado y puede contener decenas de millones de transistores. Los procesadores más simples pueden consistir en unos pocos miles de transistores grabados en un chip de solo unos pocos milímetros cuadrados.

Lógica de microprocesador

Para comprender cómo funciona un microprocesador, es útil mirar dentro y aprender sobre la lógica utilizada para crear uno. En el proceso, también puede aprender sobre el lenguaje ensamblador , el idioma nativo de un microprocesador, y muchas de las cosas que los ingenieros pueden hacer para aumentar la velocidad de un procesador.

Un microprocesador ejecuta una colección de instrucciones de la máquina que le indican al procesador qué hacer. Según las instrucciones, un microprocesador hace tres cosas básicas:

  • Usando su ALU (Unidad Aritmética / Lógica), un microprocesador puede realizar operaciones matemáticas como suma, resta, multiplicación y división. Los microprocesadores modernos contienen procesadores de coma flotante completos que pueden realizar operaciones extremadamente sofisticadas en grandes números de coma flotante.
  • Un microprocesador puede mover datos de una ubicación de memoria a otra.
  • Un microprocesador puede tomar decisiones y saltar a un nuevo conjunto de instrucciones basadas en esas decisiones.

Puede haber cosas muy sofisticadas que hace un microprocesador, pero esas son sus tres actividades básicas. El siguiente diagrama muestra un microprocesador extremadamente simple capaz de hacer esas tres cosas:
Esto es casi tan simple como un microprocesador. Este microprocesador tiene:

  • Un bus de direcciones (que puede tener 8, 16 o 32 bits de ancho) que envía una dirección a la memoria
  • Un bus de datos (que puede tener 8, 16 o 32 bits de ancho) que puede enviar datos a la memoria o recibir datos de la memoria
  • Una línea RD (lectura) y WR (escritura) para indicarle a la memoria si desea establecer u obtener la ubicación direccionada
  • Una línea de reloj que permite que un pulso de reloj secuencia el procesador
  • Una línea de reinicio que restablece el contador del programa a cero (o lo que sea) y reinicia la ejecución

Supongamos que tanto la dirección como los buses de datos tienen 8 bits de ancho en este ejemplo.
Aquí están los componentes de este simple microprocesador:

  • Los registros A, B y C son simplemente pestillos hechos de chanclas. (Consulte la sección sobre “pestillos activados por bordes” en Cómo funciona la lógica booleana para obtener más detalles).
  • El pestillo de la dirección es como los registros A, B y C.
  • El contador del programa es un pestillo con la capacidad adicional de aumentar en 1 cuando se le indica que lo haga, y también de restablecerse a cero cuando se le indica que lo haga.
  • La ALU podría ser tan simple como un sumador de 8 bits (vea la sección sobre sumadores en Cómo funciona la lógica booleana para más detalles), o podría sumar, restar, multiplicar y dividir valores de 8 bits. Asumamos lo último aquí.
  • El registro de prueba es un pestillo especial que puede contener valores de comparaciones realizadas en la ALU. Una ALU normalmente puede comparar dos números y determinar si son iguales, si uno es mayor que el otro, etc. El registro de prueba también puede contener normalmente un bit de acarreo desde la última etapa del sumador. Almacena estos valores en flip-flops y luego el decodificador de instrucciones puede usar los valores para tomar decisiones.
  • Hay seis casillas marcadas como “3 estados” en el diagrama. Estos son amortiguadores de tres estados . Un búfer de tres estados puede pasar un 1, un 0 o esencialmente puede desconectar su salida (imagine un interruptor que desconecta totalmente la línea de salida del cable hacia el que se dirige la salida). Un búfer de tres estados permite que múltiples salidas se conecten a un cable, pero solo una de ellas puede conducir un 1 o un 0 a la línea.
  • El registro de instrucciones y el decodificador de instrucciones son responsables de controlar todos los demás componentes.

Aunque no se muestran en este diagrama, habría líneas de control desde el decodificador de instrucciones que:

  • Dígale al registro A que bloquee el valor actualmente en el bus de datos
  • Dígale al registro B que bloquee el valor actualmente en el bus de datos
  • Indique al registro C que bloquee el valor que la ALU genera actualmente
  • Indique al registro del contador del programa que bloquee el valor actualmente en el bus de datos
  • Indique al registro de dirección que bloquee el valor actualmente en el bus de datos.
  • Indique al registro de instrucciones que bloquee el valor actualmente en el bus de datos.
  • Dile al contador del programa que incremente
  • Dile al contador del programa que restablezca a cero
  • Active cualquiera de los seis búferes de tres estados (seis líneas separadas)
  • Dígale a la ALU qué operación realizar
  • Indique al registro de prueba que bloquee los bits de prueba de la ALU
  • Activa la línea RD
  • Activa la línea WR

Entrando en el decodificador de instrucciones están los bits del registro de prueba y la línea del reloj, así como los bits del registro de instrucciones.

Memoria de microprocesador

Has visto acerca de la dirección y los buses de datos, así como las líneas RD y WR. Estos buses y líneas se conectan a RAM o ROM, generalmente a ambos. En nuestro microprocesador de muestra, tenemos un bus de direcciones de 8 bits de ancho y un bus de datos de 8 bits de ancho. Eso significa que el microprocesador puede direccionar (28) 256 bytes de memoria, y puede leer o escribir 8 bits de la memoria a la vez.

Supongamos que este microprocesador simple tiene 128 bytes de ROM que comienzan en la dirección 0 y 128 bytes de RAM que comienzan en la dirección 128.

ROM significa memoria de solo lectura. Un chip ROM se programa con una colección permanente de bytes preestablecidos. El bus de dirección le dice al chip ROM qué byte debe obtener y colocar en el bus de datos. Cuando la línea RD cambia de estado, el chip ROM presenta el byte seleccionado en el bus de datos.

RAM significa memoria de acceso aleatorio. La RAM contiene bytes de información, y el microprocesador puede leer o escribir en esos bytes dependiendo de si la línea RD o WR está señalizada. Un problema con los chips RAM actuales es que se olvidan de todo una vez que se corta la energía. Es por eso que la computadora necesita ROM.


Chip de RAM
Por cierto, casi todas las computadoras contienen cierta cantidad de ROM (es posible crear una computadora simple que no contenga RAM; muchos microcontroladores hacen esto colocando un puñado de bytes de RAM en el chip del procesador), pero generalmente es imposible crear uno que no contiene ROM). En una PC, la ROM se llama BIOS (Sistema básico de entrada / salida). Cuando se inicia el microprocesador, comienza a ejecutar las instrucciones que encuentra en el BIOS. Las instrucciones del BIOS hacen cosas como probar el hardware en la máquina, y luego va al disco duro para buscar el sector de arranque (vea Cómo funcionan los discos duros para más detalles). Este sector de arranque es otro pequeño programa, y ​​el BIOS lo almacena en la RAM después de leerlo en el disco. El microprocesador comienza a ejecutar las instrucciones del sector de arranque desde la RAM. El programa del sector de arranque le indicará al microprocesador que busque algo más del disco duro en la RAM, que el microprocesador ejecuta, y así sucesivamente. Así es como el microprocesador carga y ejecuta todo el sistema operativo.

Instrucciones de microprocesador

Incluso el microprocesador increíblemente simple que se muestra en el anterior tendrá un conjunto bastante grande de instrucciones que puede realizar. La colección de instrucciones se implementa como patrones de bits, cada uno de los cuales tiene un significado diferente cuando se carga en el registro de instrucciones. Los humanos no son particularmente buenos para recordar patrones de bits, por lo que se define un conjunto de palabras cortas para representar los diferentes patrones de bits. Esta colección de palabras se llama lenguaje ensamblador del procesador. Un ensamblador puede traducir las palabras a sus patrones de bits muy fácilmente, y luego la salida del ensamblador se coloca en la memoria para que el microprocesador la ejecute.
Aquí está el conjunto de instrucciones en lenguaje ensamblador que el diseñador podría crear para el microprocesador simple en nuestro ejemplo:

  • LOADA mem : carga el registro A desde la dirección de memoria
  • LOADB mem : carga el registro B desde la dirección de memoria
  • CONB con – Carga un valor constante en el registro B
  • SAVEB mem : guarda el registro B en la dirección de memoria
  • SAVEC mem – Guardar registro C en la dirección de memoria
  • AGREGAR – Agregue A y B y almacene el resultado en C
  • SUB – Resta A y B y almacena el resultado en C
  • MUL – Multiplica A y B y almacena el resultado en C
  • DIV – Divide A y B y almacena el resultado en C
  • COM : compara A y B y almacena el resultado en la prueba
  • JUMP addr – Salta a una dirección
  • JEQ addr – Saltar, si es igual, a la dirección
  • JNEQ addr – Salta, si no es igual, a la dirección
  • JG addr – Saltar, si es mayor que, a la dirección
  • JGE addr – Salta, si es mayor o igual, a la dirección
  • JL addr – Saltar, si es menor, a la dirección
  • JLE addr – Saltar, si es menor o igual, a la dirección
  • STOP : detener la ejecución

Si sabe cómo funciona la programación en C, entonces sabe que esta simple pieza de código C calculará el factorial de 5 (donde el factorial de 5 = 5! = 5 * 4 * 3 * 2 * 1 = 120):

a = 1; f = 1; while (a <= 5) {f = f * a; a = a + 1;}

Al final de la ejecución del programa, la variable f contiene el factorial de 5.

Lenguaje ensamblador
Un compilador de C traduce este código C al lenguaje ensamblador. Suponiendo que la RAM comienza en la dirección 128 en este procesador, y la ROM (que contiene el programa de lenguaje ensamblador) comienza en la dirección 0, entonces, para nuestro microprocesador simple, el lenguaje ensamblador podría verse así:

// Supongamos que a está en la dirección 128 // Supongamos que F está en la dirección 1290 CONB 1 // a = 1; 1 SAVEB 1282 CONB 1 // f = 1; 3 SAVEB 1294 LOADA 128 // si a> 5 el salto a 175 CONB 56 COM7 JG 178 LOADA 129 // f = f * a; 9 LOADB 12810 MUL11 SAVEC 12912 LOADA 128 // a = a + 1; 13 CONB 114 ADD15 SAVEC 12816 JUMP 4 // bucle de nuevo a if17 STOP

ROM
Entonces, la pregunta es: “¿Cómo se ven todas estas instrucciones en la ROM?” Cada una de estas instrucciones en lenguaje ensamblador debe estar representada por un número binario. En aras de la simplicidad, supongamos que cada instrucción en lenguaje ensamblador recibe un número único, como este:

  • LOADA – 1
  • CARGA – 2
  • CONB – 3
  • SAVEB – 4
  • SAVEC mem – 5
  • AGREGAR – 6
  • SUB – 7
  • MUL – 8
  • DIV – 9
  • COM – 10
  • SALTO addr – 11
  • Dirección JEQ – 12
  • Dirección JNEQ – 13
  • JG addr – 14
  • Dirección JGE – 15
  • JL addr – 16
  • Dirección JLE – 17
  • PARADA – 18

Los números se conocen como códigos de operación . En ROM, nuestro pequeño programa se vería así:

// Supongamos que a está en la dirección 128 // Supongamos que F está en la dirección 129Addr código de operación / valor0 3 // CONB 11 12 4 // SAVEB 1283 1284 3 // CONB 15 16 4 // SAVEB 1297 1298 1 // LOADA 1289 12810 3 // CONB 511 512 10 // COM13 14 // JG 1714 3115 1 // LOADA 12916 12917 2 // LOADB 12818 12819 8 // MUL20 5 // SAVEC 12921 12922 1 // LOADA 12823 12824 3 // CONB 125 126 6 // ADD27 5 // SAVEC 12828 12829 11 // SALTO 430831 18 // PARADA

Puede ver que siete líneas de código C se convirtieron en 18 líneas de lenguaje ensamblador, y que se convirtieron en 32 bytes en ROM.

Descodificación
El decodificador de instrucciones debe convertir cada uno de los códigos de operación en un conjunto de señales que conducen los diferentes componentes dentro del microprocesador. Tomemos la instrucción ADD como ejemplo y veamos lo que necesita hacer:

  1. Durante el primer ciclo de reloj, necesitamos cargar la instrucción. Por lo tanto, el decodificador de instrucciones debe: activar el búfer de tres estados para el contador del programa, activar la línea RD, activar el búfer de tres estados de datos y bloquear la instrucción en el registro de instrucciones
  2. Durante el segundo ciclo de reloj, la instrucción ADD se decodifica. Tiene que hacer muy poco: configurar el funcionamiento de la ALU para que, además, bloquee la salida de la ALU en el registro C
  3. Durante el tercer ciclo de reloj, el contador del programa se incrementa (en teoría, esto podría superponerse en el segundo ciclo de reloj).

Cada instrucción puede desglosarse como un conjunto de operaciones secuenciadas como estas que manipulan los componentes del microprocesador en el orden correcto. Algunas instrucciones, como esta instrucción ADD, pueden tomar dos o tres ciclos de reloj. Otros pueden tomar cinco o seis ciclos de reloj.

Rendimiento del microprocesador

La cantidad de transistores disponibles tiene un gran efecto en el rendimiento de un procesador. Como se vio anteriormente, una instrucción típica en un procesador como un 8088 tomó 15 ciclos de reloj para ejecutarse. Debido al diseño del multiplicador, se necesitaron aproximadamente 80 ciclos para hacer una multiplicación de 16 bits en el 8088. Con más transistores, se hacen posibles multiplicadores mucho más potentes capaces de velocidades de un solo ciclo.

Fuente: Cómo funcionan los microprocesadores

¿Cómo hacemos que toda esa información se compacte en ese chip cada vez más reducido?

En primer lugar, tiene que describirse de alguna manera: escrito, o convertido en un modelo matemático, o un video o fotografía. Hay cosas que sabemos hacer, como cruzar una habitación o contar un buen chiste, que son muy difíciles de explicar y convertir en palabras.
Entonces la información tiene que ser digitalizada. Eso es fácil para el inglés: simplemente escríbalo con un teclado. Otros medios, como el sonido o el video, deben ser muestreados y cuantificados (la teoría de muestreo dice que en realidad no se pierde información al hacer eso) y digitalizados, convertidos en bits digitales, por ejemplo, en un convertidor analógico a digital. Luego, los datos se pueden comprimir opcionalmente, ya sea compresión sin pérdida de, por ejemplo, texto, o compresión con pérdida como JPEG / MPEG para fotos, audio, video, etc. Luego, los datos se pueden almacenar como bits: datos binarios (activar / desactivar o 0/1) en algún medio de almacenamiento. No importa qué, debido a la abstracción que mencionó Subhasis. Pueden ser agujeros perforados en una cinta de papel o quemados en una capa de metal en un disco de plástico, o cargas atrapadas en pozos potenciales en silicio, o dominios magnéticos en la superficie de un disco de metal. Los avances en electrónica y tecnología de materiales siguen reduciendo el tamaño de los dominios magnéticos o pozos potenciales que podemos usar, aunque lógicamente tendremos problemas para hacer agujeros más pequeños que una molécula y los dispositivos a menor escala se vuelven más vulnerables a defectos y rayos cósmicos. Afortunadamente, podemos usar algoritmos de corrección de errores y redundancia, como en la supuesta capacidad de poder perforar un pequeño agujero en un CD de música sin perder sonido.

Imagina si tienes 5 personas. ¿Cómo maximizaría la comunicación cuando solo pueden decir SÍ o NO?

En la sociedad, la respuesta más simple sería “Mayoría”. Si la mayoría dice que sí, sí. Si la mayoría dice NO, no. Pero mejoremos en eso … Tratemos de hacer más.

Si una persona es designada como “DICTADOR”, si esa persona dice SÍ, siempre SÍ. Si esa persona dice NO, otras personas deciden.

Al especificar 1 persona con una Función , puede agregar complejidad y hacer más.

Si sigue agregando funciones y si sigue agregando más personas, hay mucho más que puede hacer.

Las computadoras consisten en muchos microchips (llamados simplemente chips), colocados en tableros electrónicos. Un chip puede almacenar memoria de la computadora o proporcionar circuitos lógicos para microprocesadores. Uno de los chips más conocidos es el microprocesador Pentium de Inteler.

Un chip es una pequeña pieza de material semiconductor (generalmente silicio) en el que está incrustado un circuito integrado. Un chip típico puede contener millones de componentes electrónicos (transistores).

Un chip se fabrica a partir de una oblea de silicio (o, en algunos casos especiales, un zafiro), que primero se corta a medida y luego se graba con circuitos y dispositivos electrónicos.

Las computadoras modernas dependen del procesamiento de cantidades cada vez mayores de datos en chips semiconductores cada vez más pequeños.

Existen diferentes tipos de chips: chips de CPU (también llamados microprocesadores) que contienen una unidad de procesamiento completa, mientras que los chips de memoria contienen memoria en blanco.

Los chips están disponibles en una variedad de paquetes. Los más comunes son:

  • DIP (paquetes duales en línea) con 8 a 40 patas, divididas uniformemente en dos filas.
  • PGA (matrices de cuadrícula de pines): chips cuadrados donde los pines están dispuestos en cuadrados concéntricos.
  • SIP (paquetes individuales en línea): chips con una fila de patas en línea recta como un peine.

Además de estos tipos de chips, también hay módulos de memoria en línea (SIMM) únicos, que consisten en hasta nueve chips empaquetados como una sola unidad.

Muchos chips de propósito especial, conocidos como circuitos integrados para aplicaciones específicas, se están fabricando hoy para automóviles, electrodomésticos, teléfonos y otros dispositivos.

Fuente:

SCI-TECH … El sitio genial para la ciencia caliente

Proveedor mundial de obleas de silicio | WaferPro

Un microprocesador no contiene información. Manipula símbolos en formato binario. No comprende la información que representan los símbolos. Se almacenan más símbolos en la RAM, hay muy poco en la CPU.

¡Nunca lo olvides, las computadoras son ESTÚPIDAS!

Imagine una persona que tiene la capacidad de decir sí o no a cada pregunta que responda. Ahora imagine millones de tales individuos. Esto es lo que forma la lógica detrás de la informática.

Son solo 0s (falso) y 1s (verdadero) que tienen una propiedad interesante para conducir a más 0s y 1s. Si dos afirmaciones son ciertas, ambas partes están de acuerdo en algo.

Si en una situación necesitara dinero y se acercara a dos amigos y ambos le ofrecieran dinero o al menos uno le ofreciera dinero, su problema se resolvería.

Si quisieras casarte, las dos partes deberían decir que sí.

Imagine una red compleja de tales decisiones sobre todos los datos que tiene y ahora imagine los millones de personas que tiene a su disposición que pueden tomar esas decisiones. Eso es computación. Ahora imagine todo eso en un solo chip que es un chip de computadora.

Los chips de computadora tienen puertas en ellos. Estas puertas son las que te ayudan a tomar esas decisiones. Están hechos de materiales que conducen o no conducen electricidad (1 cuando conducen 0 cuando no lo hacen). Cada vez que sabemos cómo llevar estos materiales a un tamaño más pequeño, reducimos el chip, ya que es de lo que está hecho el chip. Intente aprender en los transistores para ver a qué me refiero con conducción y no conductividad.

Esta es una de las mejores lecturas sobre arquitectura de computadoras que he encontrado (enlace a continuación). Vi esto por primera vez cuando estaba en la escuela secundaria, pero todavía me gusta a pesar de su poca cobertura del tema. Está destinado a ser un iniciador para lectores que no sean de ingeniería informática. El autor simplifica mucho los conceptos … incluso un laico puede entenderlo muy bien. Todo lo que necesita saber es cómo se enciende una bombilla mediante un interruptor … tan simple como eso.

Cómo funcionan las computadoras

Si le interesa cómo un chip de computadora hace su trabajo sin inteligencia real:

Se trata de cómo hacer tu propia computadora con bloques de dominó. Bastante interesante.

Richard Feynman dio una charla interesante en Esalen explicando la computación para el laico (a nivel conceptual).

Lo describe en términos de un archivero muy rápido. Creo que hoy damos por sentado estas ideas, pero creo que es informativo mirar hacia atrás y ver cómo las personas lidiaron con estos conceptos.

intente aprender algunos chips mirocontroller 8051 o raspberry pi, intente keil para simulaciones usando co u otro lenguaje, funcionará para conceptos básicos en chips y su programación.

Los elementos de los sistemas informáticos

Consulte HowStuffWorks “Cómo funcionan los microprocesadores”