Dominio digital: Arquitectura

En esta página, cambiamos de software a hardware, comenzando con la arquitectura, que es esencialmente el hardware como se ve para el software.

El software en una computadora sería inútil sin el hardware de la computadora: el circuito real dentro de la caja. Así como hay capas de abstracción para el software, los diseñadores de hardware también piensan en capas de abstracción.

diagrama simplificado de la jerarquía de abstracción computacional que muestra tres niveles de abstracción decreciente: dominio de software, dominio digital y dominio analógico; hay una línea divisoria entre los dominios de software y digital etiquetada como 'barrera de abstracción del programa' y una línea divisoria entre los dominios analógico y digital etiquetada como 'barrera de abstracción digital;' hay una flecha vertical de dos puntas a la derecha que indica que los elementos enumerados primero en la lista tienen un 'alto nivel de abstracción' y los que están más abajo en la lista tienen un 'bajo nivel de abstracción'

Todos hablan de computadoras representando todos los datos utilizando solo dos valores, 0 y 1. Pero en realidad no es así como funcionan los circuitos electrónicos. Los diseñadores de computadoras pueden trabajar como si los circuitos estuvieran apagados (0) o encendidos (1) debido a la abstracción digital, la abstracción más importante en hardware. Por encima de ese nivel de abstracción, hay cuatro niveles más detallados, llamados dominio digital. Debajo de la abstracción digital, los diseñadores trabajan en el dominio analógico, en el que un cable en un circuito puede tener cualquier valor de voltaje, no solo dos valores.

En las siguientes cuatro páginas, exploraremos cuatro niveles del dominio digital.

La computadora del programa almacenado

Como verás en el Laboratorio 2, ha habido máquinas para realizar cálculos durante miles de años. Pero los inicios de la computadora moderna programable se remontan a principios de 1800 con el trabajo de Charles Babbage.

Babbage era principalmente un matemático, pero contribuyó a campos tan variados como la astronomía y la economía. Babbage vivió hace unos 150 años de 1791-1871. La electricidad como fuente de energía era desconocida. La máquina de vapor entró en uso generalizado en la época en que nació. La maquinaria más precisa de su tiempo era el mecanismo de relojería/engranajes.

Máquina diferencial

La primera computadora de Babbage fue la máquina diferencial. Utilizó engranajes para diseñar una máquina compleja que calcularía e imprimiría tablas de números (como las tablas de registro o funciones trigonométricas que puede tener en la parte posterior un libro de texto de matemáticas). Pero estos engranajes debían ser tan precisos que cada uno tenía que ser hecho a mano. El proyecto se volvió tan costoso que el gobierno dejó de financiarlo y Babbage nunca terminó una versión a gran escala.

La máquina diferencial en el Museo de Ciencias de Londres: la imagen muestra un gran dispositivo mecánico con muchos engranajes y una gran manivela al lado.
La máquina diferencial en el Museo de Ciencias de Londres
Imagen del usuario geni de Wikimedia. Copyright 2008. Licencia: GFDL, CC BY-SA.
Un primer plano que muestra los engranajes de la máquina diferencial más claramente
Un primer plano que muestra los engranajes de la máquina diferencial más claramente
Imagen de Carsten Ullrich. Copyright 2005. License: CC-BY-SA-2.5.

Aprende más sobre la historia de la máquina diferencial.

En la época de Babbage, tales tablas numéricas fueron calculadas a mano por matemáticos humanos y fueron escritas a mano para su impresión. Tanto el cálculo como la copia para imprenta eran propensos a errores, y se necesitaban tablas precisas para fines que iban desde la ingeniería hasta la navegación.

Babbage construyó una primera máquina diferencial pequeña en 1822. Este primer esfuerzo demostró que una máquina diferencial era posible, pero no tenía la precisión (número de dígitos en cada número) para ser práctica. En 1823, el gobierno británico financió a Babbage para construir una versión más grande. Desafortunadamente, los metalúrgicos en su día no podían producir engranajes muy precisos en grandes cantidades; cada uno tenía que ser hecho a mano. Así, había gastado diez veces su presupuesto aprobado para cuando el gobierno canceló el proyecto en 1842.

En 1991, el Museo de Ciencias de Londres completó una máquina diferencial siguiendo el diseño original de Babbage utilizando engranajes hechos por procesos modernos pero con el nivel de precisión que estaba disponible para Babbage. Esto demostró que, en principio, Babbage podría haber completado una máquina en funcional, con suficiente tiempo y dinero.

La máquina analítica

La máquina diferencial podría usarse para calcular muchas funciones diferentes configurando manualmente la posición de inicio de varios engranajes. Pero tenía solo un algoritmo: el construido en el diseño de hardware. En 1833, Babbage comenzó a trabajar en la máquina analítica, que se basaba en la idea general de la máquina diferencial, pero podía llevar a cabo instrucciones en un lenguaje de programación primitivo preparado en tarjetas perforadas.

Tarjetas perforadas utilizadas para programar la máquina analítica
Karoly Lorentey. Copyright 2004. License: CC-BY.
Tarjetas perforadas utilizadas para programar la máquina analítica

En estos días, estamos rodeados de computadoras programables, y tener software parece obvio ahora. Pero no era obvio, y antes de Babbage, todos los algoritmos se implementaron directamente en el hardware.

Entonces, hace 150 años, Babbage creó planes para lo que es esencialmente una computadora moderna, aunque no tenía dispositivos electrónicos disponibles. Su idea fundamental para el hardware era completamente mecánica, pero resultó que no le fue posible construirlo con la tecnología de su tiempo. No obtuvimos computadoras utilizables hasta que hubo una tecnología fundamental, lo suficientemente pequeña, económica y lo suficientemente rápida como para soportar la abstracción del software. Pronto aprenderás sobre esta tecnología, transistores.

Aprende más sobre la máquina analítica.

La máquina analítica, al igual que las computadoras modernas, tenía un procesador aritmético (llamado "molino") y una memoria separada (el "almacén") con capacidad para 1000 números, cada uno con hasta 40 dígitos. El molino hacía aritmética en decimal (con dígitos 0-9 igualmente espaciados alrededor de cada engranaje); el uso de "unos y ceros" en computación llegó más tarde.

El lenguaje de programación utilizado en la máquina analítica incluía condicionales y bucles, que es todo lo que se necesita para representar cualquier algoritmo. (Podría hacer bucles porque podía avanzar o retroceder a través de las tarjetas perforadas que contienen el programa).

Por desgracia, Babbage podo construir solo una pequeña parte de la máquina analítica, lo que habría requerido aún más trabajo en metal que la máquina diferencial. Sus notas sobre el diseño no estaban completas, por lo que nadie ha construido nunca un modelo funcional, aunque hay simulaciones disponibles en la Web (consulte el problema Llevar más allá a continuación). Lamentablemente, en los primeros días de las computadoras electrónicas, el trabajo de Babbage no era ampliamente conocido y la gente terminó reinventando muchas de sus ideas.

photo of Ada Lovelace

Ada Lovelace (1815-1852) fue una matemática inglesa que trabajó con Charles Babbage en la máquina analítica. Es ampliamente considerada como "la primera programadora". Gran parte de lo que sabemos hoy sobre el diseño de Babbage proviene de las extensas notas de Ada Lovelace sobre su diseño, incluido el primer programa publicado para la máquina analítica.

Fue Ada, Condesa de Lovelace, quien primero reconoció que los números en la computadora de Babbage podían ser utilizados no solo como cantidades, sino también para representar notas musicales, caracteres de texto y demás. Por lo tanto, se le atribuye la invención de la idea de la computación simbólica (que incluye texto, imágenes, música, etc.) en contraposición a la computación puramente numérica. Esta visión allanó el camino para todas las formas en que se utilizan las computadoras hoy en día, desde películas a la carta hasta programas de interacción por voz como Siri y Alexa.

Artículo: 10 Things You May Not Know About Ada Lovelace (10 cosas que quizás no conocías acerca de Ada Lovelace) (en español)

La abstracción del software (un programa almacenado en la memoria de la computadora) es lo que hace que una computadora sea utilizable para más de un propósito.

¿Qué es una arquitectura?

La máquina analítica (descrito anteriormente) fue la primera arquitectura de computadora programable. El procesador en la computadora que está utilizando hoy comprende un solo idioma, su propio lenguaje de máquina—no Java, ni C, ni Snap!, ni Python, ni ninguna otra cosa. Los programas escritos en esos otros idiomas primero deben traducirse al lenguaje de máquina.

La parte más importante de la arquitectura es el lenguaje de máquina, el conjunto de instrucciones de nivel ultrabajo que comprende el hardware. Este lenguaje es como un contrato entre el hardware y el software: el hardware promete comprender un conjunto de instrucciones, y el software compila programas de lenguaje amigable para los humanos en esas instrucciones.

Lenguaje de máquina (machine language) es el lenguaje de programación de más bajo nivel; es entendido directamente por el hardware de la computadora.

Arquitectura (architecture) es una abstracción, una especificación del lenguaje de máquina. También indica cómo se conecta el procesador a la memoria. No especifica la circuitería; la misma arquitectura se puede construir como circuitería de muchas maneras diferentes.

Una parte importante de una arquitectura es la cantidad de cables que conectan el procesador y la memoria. Esto se llama el ancho de la arquitectura, medido en bits (número de cables). Una computadora más ancha puede procesar más datos en una sola instrucción.

¿Cómo se ve el lenguaje de máquina?

Considera la instrucción de Snap! asignar a (c) el valor (a + b). En un lenguaje de nivel más bajo como C o Java, la misma idea se escribiría como:

c = a+b;
Ese simple comando podría traducirse a seis instrucciones de lenguaje de máquina (ligeramente simplificadas aquí):
movq    _c, %rcx
movq    _b, %rdx
movq    _a, %rsi
movl    (%rsi), %edi
addl    (%rdx), %edi
movl    %edi, (%rcx)
Esta notación, llamada lenguaje ensamblador, es un equivalente línea por línea a los códigos de instrucción numéricos reales, pero un poco más legible.

¿Qué significa ese código?

Las primeras tres instrucciones cargan las direcciones de las tres variables en registros dentro del procesador. Los nombres con signos de porcentaje, como %rcx, se refieren a registros específicos del procesador. Movq es el nombre de una instrucción de lenguaje de máquina. (Abrevia "move quote", que dice mover un valor constante a un registro. Nota que a es una variable, pero la dirección de a es un valor constante: la variable no se mueve en la memoria de la computadora.)

La siguiente instrucción, movl ("move long"), dice mover una palabra de un lugar a otro. Escribir un nombre de registro entre paréntesis, como (% rsi), significa usar la ubicación de memoria cuya dirección está en el registro. En este caso, dado que el tercer movq coloca la dirección de a en el registro %rsi, el primer movl dice mover la variable a de la memoria a un registro del procesador. Luego, la instrucción addl dice agregar la variable b en ese mismo registro. Finalmente, el valor en el registro %edi se mueve a la ubicación de memoria que contiene la variable c.

¡No te gustaría tener que programar en este lenguaje! Y no tienes que hacerlo; las arquitecturas modernas están diseñadas para compiladores, no para programadores humanos de lenguaje máquina.

Aprende sobre:
Aprende más acerca de la arquitectura de computadoras en general.

La jerarquía de memoria

Por un costo determinado de circuito hardware, cuanto más grande es la memoria, más lento funciona. Por esta razón, las computadoras no solo tienen una gran cantidad de memoria. Habrá un pequeño número de registros dentro del procesador, generalmente entre 8 y 16 de ellos. El "tamaño" (número de bits) de un registro de datos es igual al ancho de la arquitectura.

La memoria principal de la computadora, en estos días, se mide en GB (gigabytes o miles de millones de bytes). Una memoria de ese tamaño no puede ser lo suficientemente rápida como para llevarle el paso a un procesador moderno. Afortunadamente, los programas de computadora generalmente tienen localidad de referencia, lo que significa que si el programa acaba de usar una ubicación de memoria particular, probablemente usará una ubicación cercana a continuación. Por lo tanto, un programa completo puede ser muy grande, pero en el transcurso de un segundo más o menos solo se necesitará una pequeña parte. Por lo tanto, las computadoras modernas están diseñadas con una o más memorias caché, mucho más pequeñas y, por lo tanto, más rápidas, entre el procesador y la memoria principal. El procesador se asegura de que la memoria utilizada más recientemente se copie en la memoria caché.

Un procesador x86 de 64 bits reciente tiene un caché de primer nivel (L1) de 64 KB (miles de bytes) dentro del chip del procesador, un caché L2 más grande pero más lento de 256 KB, también dentro del procesador, y un caché L3 de hasta 2 MB (megabytes, millones de bytes) fuera del procesador. Cada nivel de caché tiene una copia de las partes usadas más recientemente del siguiente nivel hacia afuera: el caché L1 copia parte del caché L2, que copia parte del caché L3, que copia parte de la memoria principal. El procesador puede acceder a los datos en el caché L1 casi tan rápido como sus registros internos, y cada nivel externo es un poco más lento. El hardware en el procesador maneja toda esta complejidad, de modo que los programadores pueden escribir programas como si el procesador estuviera directamente conectado a la memoria principal.

Segundo abastecimiento

Intel otorga licencias a otros fabricantes de chips para fabricar procesadores que usen la misma arquitectura que los procesadores de Intel. ¿Por qué hacen eso? ¿No ganarían más dinero si la gente tuviera que comprarle a Intel? La razón es que los fabricantes de computadoras, como Dell, Apple y Lenovo, no construirán sus sistemas alrededor de una arquitectura que solo esté disponible en una compañía. No les preocupa que Intel vaya a la quiebra; La preocupación es que puede haber una demanda mayor de la esperada para un procesador en particular, e Intel puede no ser capaz de completar los pedidos a tiempo. Pero si ese procesador también está disponible en otras compañías como AMD y Cyrix, un retraso en Intel no se convertirá en un retraso en Dell. Esos otros fabricantes de chips pueden no usar el mismo circuito que la versión Intel, siempre y cuando se comporten de la misma manera a nivel de arquitectura.

  1. Aprender lo suficiente sobre la máquina analítica para poder escribir incluso un programa simple para ella es una tarea bastante grande. No lo intentes hasta después del examen AP, pero si te interesa, hay muchos recursos en línea disponibles aquí: