Funcionamiento de una computadora

Introducción

Todas las computadoras tienen una estructura en común aunque hayan sido diseñadas con fines muy diferentes. Lo que puede cambiar entre distintas computadora es la calidad y la tecnología de los componentes. Los tiempos de respuesta de un sistema informático pueden ser más rápidos con una mejor calidad de la electrónica, una mayor sofisticación de los circuitos o la utilización de algoritmos más eficientes que realicen la tarea a resolver en un tiempo menor. Por ejemplo, una Playstation, un teléfono celular smartphone, una notebook, un televisor (tipo smart-tv), una supercomputadora (que cuesta millones de dólares) todos estos mecanismos son computadoras que comparten una estructura común, aunque se usen para fines completamente diferentes. Normalmente estamos más acostumbrados a las PC nombre que viene del inglés Personal Computer, es decir computadora personal. Esta denominación las diferenció en su aparición de los grandes sistemas que sólo se encontraban en los centros de cómputos de universidades o empresas.
Lo primero que tenemos que diferenciar son las dos estructuras constructivas principales que hacen funcionar una computadora. Estas son el HARDWARE y el SOFTWARE
Veremos ahora lo que son cada una de estas estructuras:
Hardware: Si lo traducimos del inglés así como palabra de uso común esta sería ferretería (si, ese lugar al que iríamos a comprar tornillos o tuercas) y no es una mala traducción. Hardware es toda la estructura de circuitos electrónicos de la computadora, incluyendo soporte y ventilación. Dicho de otro modo, es lo que podemos tocar en una de estás máquinas, es tangible, está ahí. Los que diseñan y construyen hardware suelen estudiar en las facultades o departamentos de ingeniería.
Software: El software es algo intangible pero real. Engloba a las instrucciones que se le dan a una computadora para que ejecute, y de esta manera, que produzca los resultados que se desea. Sería el equivalente a los algoritmos que se estudian en álgebra, pero ahora implementados en el sistema de computación. Ustedes ya conocen diferentes tipos de Software, por ejemplo, los Sistemas Operativos (SO): En un celular pueden ser el Android o el IOS, o en una PC podrían ser Windows (realizado por Microsoft), MacOSX (programado por Apple) o el que usaremos en la práctica: el LINUX. Este último fue desarrollado por voluntarios de Universidades y de empresas por todo el planeta. Sobre estos SO corren los programas cuyas órdenes fueron escritas en lenguajes de computación. En esta cursada vamos a darles los elementos necesarios para desarrollar software de cálculo matemático, de visualización y análisis de datos, utilizando dos lenguajes el FORTRAN y el PYTHON.
Los que trabajan en desarrollo de Software estudian en facultades de informática o sistemas.

Hardware

CPU

La CPU (iniciales en inglés de Central Processing Unit o Unidad de Procesamiento Central) es el componente de la computadora que realmente realiza el trabajo. En la actualidad es un chip (o un conjunto de varios chips dentro del mismo encapsulamiento y que interactúan en conjunto). Este circuito electrónico está construido con el equivalente a millones de transistores y es una de las partes más caras de la computadora. Cada elemento electrónico tiene tamaños de 5 a 14 nm (nm es un nanómetro cuyo tamaño es \(10^{-9}\) metros). En las computadoras actuales este chip se instala sobre la placa madre (Motherboard). Las CPUs no trabajan recibiendo órdenes en algo que se parezca a lenguaje humano, las órdenes están en lenguaje binario. Las CPUs realizan las operaciones que se indican en los programas y los cálculos matemáticos. No poseen grandes cantidades de memoria.
En computadoras de uso profesional puede haber varias CPUs en la placa madre y estas pueden realizar trabajo en paralelo. En esta situación cada CPU realiza parte del trabajo al mismo tiempo, es como si se construyera una casa y cada albañil construye una parte o un cuarto diferente de esta. Entonces más albañiles permitirían construir la casa en menos tiempo. Esto suele ser muy útil en los casos de cálculos complejos donde se pueden hacer varias operaciones matemáticas a la vez. Por lo cual, el trabajo se resuelve más rápido.
Muchas CPUs tienen estructuras para hacer paralelismo interno. A estas estructuras que trabajan independientemente se las llama CORES, pudiendo tener una CPU de una PC no muy sofisticada entre 4 y 8 cores como algo estándar, pero hay CPUs que tienen más de 48 CORES. Además, en cada CORE suele haber dos unidades de procesamiento matemático que se los denomina Threads.
La CPU se relaciona con los demás componentes de la computadora en forma sincrónica, es decir que todos los componentes electrónicos reciben pulsos para realizar las operaciones de transferencia de datos al mismo tiempo. Esto significa que cada computadora tiene un reloj que crea esos pulsosz. Recuerden que la frecuencia como medida es la inversa del tiempo, es \(1/t\) y se mide en hertz. Un hertz es \([hertz] = [1/seg]\), por lo tanto, con más Hertz (más pulsos por segundo), más rápida será la computadora para correr un programa al funcionar todos sus elementos electrónicos a mayor velocidad. Los valores actuales de los relojes que sincronizan las CPUs están en los Gigahertz, es decir mil millones de pulsos por segundo.
Para una explicación alternativa vea la figura 1.1. Un problema asociado es que al aumentar la frecuencia del reloj aumenta mucho la cantidad de calor generado, y por consiguiente, es un desafío muy importante de las arquitecturas de las CPUs cómo eliminar o disipar este aumento de temperatura. Por eso, se trabaja mucho en el diseño para evitar generar calor por un lado y su disipación por el otro.
Otro aspecto del problema del calor está en el desarrollo de las CPUs para notebooks y celulares, ya que si se desperdicia energía en generar calor, la energía almacenada en la batería de estos sistemas se agotará muy rápido. En este tipo de computadoras se prefieren entonces CPUs más lentas para que la batería dure mucho más.

En este comic, que pertenece a la serie de Asterix (Goscinny y Uderzo), puede verse algo muy similar a la sincronización en una computadora. Los remeros se sincronizan a través de escuchar los golpes que se dan en el tambor. En caso de perder la sincronización se engancharían los remos y podrían romperse. En la historieta el romano a cargo del barco ordena que se aumente la velocidad, por lo cual el “percusionista” tendrá que acelerar el ritmo de golpeteo. Como consecuencia la frecuencia de sincronización será más alta (más hertz) y los pobres esclavos tendrán que remar más rápido.

Veamos la siguiente publicidad de las empresas INTEL y AMD (figuras 1.2 y 1.3) que son los mayores fabricantes de CPUs para las PCs (PC viene de Personal Computer, es decir Computadora Personal).

En esta tabla pueden verse 4 procesadores diferentes de la empresa INTEL (tabla tomada de la página web de la empresa). Fíjense que están anotados los números de cores y el número de threads. Si nos guiamos por esos números el mejor procesador podría hacer 18 tareas en paralelo, pero en el caso de las tareas de cálculo, se podrían hacer 36 de ellas en paralelo. También se indica la frecuencia normal de uso, y la frecuencia (Max turbo) a la cual el procesador puede llegar a usar por períodos limitados de tiempo, pero no en forma continua.
Esta es la descripción de un procesador Ryzen de la empresa AMD. Se muestran los datos de Cores, Threads y la potencia disipada \(\sim\)105 Watts en este caso

Memoria

Memoria RAM

La memoria RAM, cuyo nombre proviene del inglés Random Access Memory (memoria de acceso aleatorio), es la memoria en donde se guardan los programas que están corriendo en la computadora y sus datos. Esta memoria funciona siempre que la computadora esté encendida. Un corte de corriente haría que los datos que están guardados en esta memoria se pierdan. La CPU se conecta con la memoria con un sistema de cables que se los denomina Bus de datos.
Existen en general dos tipos de esta memoria, la Dinámica y la Estática. La primera es de muy bajo costo de fabricación y con capacidad de ser accedida en algunas decenas de nanosegundos (recordar que un nanosegundo es \([ns]=10^{-9}\) de segundo), claramente en un tiempo fuera de la escala de la percepción humana. Esta memoria tiene la desventaja que necesita ser recargada de energía en períodos cortos de tiempo, y entonces, la computadora pierde tiempo en esta tarea. Por otro lado, la memoria Estática es mucho más rápida (del orden de algunos ns) y no tiene que ser recargada, pero su precio es mucho más alto y encarece a la computadora.
Para que las computadoras funcionen más rápido y su costo de fabricación no sea muy alto, se usan ambas memorias en combinación. De esta forma se usa memoria dinámica en grandes cantidades (que es muy barata), pero en el camino del Bus de datos se encuentra un sistema de memoria estática (no mucha, por su precio) que guarda lo último que haya pasado por este Bus. Es decir, si guardo un número de un cálculo en la memoria, este se copia en la memoria estática en el camino a guardarse en la dinámica. A esta memoria en el camino se la llama memoria CACHE.
Las CPUs modernas suelen tener memorias cache dentro de ellas para ganar tiempo. Estas trabajan adelantando datos que hace poco se hayan usado y que estén ahí en vez de tener que ir a buscar a ese dato particular a la memoria dinámica. Las CPUs modernas tienen varios niveles de cache interno, incluso algunos cores dentro de la CPU tienen sus propia memoria cache.

Memoria ROM

Es una clase de memoria que se graba los datos y quedan en forma permanente, aún con la computadora apagada. ROM es la sigla de Read Only Memory, que significa que es una memoria que sólo se puede leer. La información que está en la ROM fue puesta por el fabricante de la computadora. En este tipo de memoria suele estar un software llamado BIOS que es el que corre cuando arranca la computadora y después de hacer una serie de testeos, (en jerga de informáticos “Bootea”) este arranca, a su vez el sistema operativo (por ejemplo, el Windows o el Linux).

Memoria CMOS

Es un tipo de memoria lenta pero muy útil, ya que los datos se guardan y se conservan aún estando apagada la computadora. Suele ser utilizada en circuito electrónicos que no necesiten mucha energía. CMOS viene de Complementary Meta Oxide Semiconductor. Para lo cual las computadoras disponen de una pila recargable para alimentar esta memoria. Esta pila se recarga cuando la computadora está encendida. Este tipo de memoria, de la cual hay varias tecnologías diferentes, suelen ser en la actualidad variantes de la memoria Flash, que es la tecnología usada en los pen drives.
Sirve fundamentalmente para guardar las configuraciones de la computadora. Por ejemplo, si yo apago la computadora y le agrego más memoria, al encenderla el BIOS es el encargado de encontrar cuanta memoria existe en total sumando el nuevo agregado y este nuevo valor es guardado en la CMOS. Luego al activarse el sistema operativo (SO), por ejemplo el Windows, este se entera por el BIOS de la nueva cantidad de memoria y entonces este SO la puede utilizar, de lo contrario no sabría de su existencia.

Almacenamiento interno

La idea del almacenamiento interno y externo es la de guardar programas y datos que sobrevivan cuando la computadora esté apagada, o bien para transportarlos entre computadoras o simplemente para hacer copias de respaldo (Backups) de datos de mucha importancia. Con la idea de que estos no se pierdan en caso de fallas con la electrónica o errores humanos (muy probables!!!).
Hay dos tipos de almacenamiento que se instalan en la parte interna de las computadoras, el más antiguo, son los discos rígidos. Estos son dispositivos mecánicos que graban magnéticamente la información sobre una superficie ferromagnética rotante con geometría de disco. Típicamente con velocidades de acceso del orden de los milisegundos.
La otra opción son los Discos de Estado Sólido (o SSD) que si bien se los llama discos no hay nada circular (ni rotante) en ellos. Son un tipo de memoria flash que graba en circuitos la información. Tienen velocidades de acceso en las décimas de milisegundo y se espera que en un tiempo corto sean tan rápidos como la velocidad de acceso a la memoria RAM.
A estos dispositivos se los “Formatea”, es decir se construye en ellos una estructura de índices, para que se pueda guardar y recuperar la información. Para ser gráfico, pensemos en una biblioteca, el disco es el cuarto libre. El formateo construye las repisas y los muebles donde se almacenan los libros y los ficheros que indican su ubicación.
Hay distintos protocolos para formatear un disco, a estos protocolos se los denomina sistema de archivos (File System,) ejemplos de File Systems son: FAT32, ext4, etc).

Periféricos e interfaces de conexión

Los periféricos, son todos los distintos dispositivos que se pueden conectar a la computadora, pueden ser el teclado, el mouse, pantallas, sistemas de audio, video, etc. Para ello hay distintas interfaces electrónicas. Las pantallas de Video o monitores suelen conectarse con enchufes VGA (analógicos), DVI o HDMI (digitales).
El HDMI es un sistema de conexión diseñado para los sistemas de DVD o Blu-Ray, por lo cual la mayoría de los televisores puede conectarse con esa interface como monitor de una computadora. Aunque se pueden conseguir convertidores de HDMI a VGA y viceversa, los sistemas de conexión digitales son los que proveen una mejor imagen.
Para todos los demás periféricos, los conectores digitales modernos, son puertos serie (no paralelos), es decir los bits binarios van uno detrás del otro como una fila de personas. El más utilizado es USB (Universal Serial Bus), que también es el enchufe típico de los cargadores de celulares. Actualmente el enchufe tipo A es el más usado, pero se está reemplazando progresivamente por el tipo C, que es más pequeño y puede ser usado sin tener en cuenta de que lado se lo conecta, es reversible. Mientras que el enchufe tipo A, que es el más común, no es reversible. Vea la Fig. 1.4

Vista de los enchufes USBs más comunes, el Tipo A es el más conocido, pero será reemplazado por el tipo C en breve.

Conexiones sin cables (wireless)

Hay sistemas para conectar periféricos que no usan cables, el preferido para dispositivos cercanos es el bluetooth. Normalmente es usado para conectar parlantes, teclados, mouses1 (o ratones en español) y que se utiliza en la mayoría de los celulares. En cambio, las conexiones Wi-Fi son usadas para conexiones a la red internet, aunque bajo ese nombre existe una gran cantidad e incluso diversos protocolos de conexión. También es posible conectar un celular a internet a través de las compañías telefónicas, usando protocolos conocidos como 3G, 4G y en un par de años 5G. Este último es extremadamente rápido y su despliegue cambiará mucho la forma de uso del celular. Para conexiones a corta distancia también existe el bluetooth que es muy usado en el sistemas de audio, desde auriculares para celular a parlantes portátiles.

Software

El Software son las órdenes que se le dan al Hardware para su ejecución. El software que más usamos es el Sistema Operativo (SO). Este se encarga del manejo del sistema y de ser la interface entre el usuario y la computadora. Además se encarga de coordinar los periféricos (printer, parlantes, etc). Por ejemplo, en una PC es el Windows, en una computadora de Apple es el MacOSX, o puede ser el Linux. Este último es un SO gratuito realizado por voluntarios de todo el planeta y es el sistema operativo más utilizado en muchas áreas científicas.
Cuando uno conecta un dispositivo nuevo a su computadora, este suele venir con un “driver” o manejador, que le permite al SO “hablar” este periférico. Estos drivers solían venir en discos pero actualmente los SO los bajan de internet al momento de localizar que existe un nuevo hardware conectado a la computadora.
El LINUX es una versión de UNIX y es el que usamos en la cátedra. Los sistemas UNIX son los que prefieren las personas que usan computadoras en forma profesional y que programan sus propios códigos. Esto es debido a que el SO opera mucho más rápido. Por esta razón, estos SO son los preferidos en los ambientes científicos. Mientras que el Windows o el MacOSX están pensados para usuarios menos calificados con la idea de vender estas computadoras como un electrodoméstico mas. A pesar de esto, el MacOSX tiene un UNIX interno escondido. Las nuevas versiones de Windows evolucionan a también convertirse en un UNIX, ya que es posible desde el propio "store" del sistema instalar un sistema que permite correr órdenes linux de la distribución Ubuntu2. En ambos casos la idea general es que el usuario no profesional lo utilice a partir de un sistema gráfico más simple, pero que el usuario más capacitado y con usos profesionales tenga acceso a un sistema más complejo en la calidad y variedad de órdenes que se le pueden dar a la computadora.
Otro ejemplo, son los celulares y tabletas donde existen dos SO que dominan el mercado en este momento (hay otros con menor cantidad de usuarios), el Android realizado por Google a partir de portar el Linux a los celulares y el IOS que se usa en el Iphone. Un punto que hay que destacar es el interés de los fabricantes de celulares para que en un futuro cercano haya un SO común entre PCs y teléfonos, con la idea de que fabriquen computadoras con la tecnología de los celular. Un ejemplo de esto es la tecnología de la nueva CPU llamada M1 de Apple o los procesadores ARM que pueden correr Windows.

También hay sistemas operativos conocidos como ‘firmware’’ estos se usan en dispositivos de uso doméstico y aunque son invisibles al usuario existen. Se utilizan desde los televisores hasta en los termostatos de estufas, etc. Si son dispositivos que se conectan a internet, normalmente su dueño los descubre cuando el aparato pide permiso para instalar una actualización.

Lenguajes de programación

Para darle las órdenes a la computadora hay que usar un lenguaje de programación. Hay muchos lenguajes y muy diferentes, construidos con la idea de realizar un tipo de tarea específica. En nuestro caso, el interés como científicos es el de calcular, analizar y visualizar datos.
En esta cursada la idea es que los alumnos dominen dos lenguajes: el Fortran que es muy antiguo pero útil para hacer programas de cálculo muy pesados y el Python que es uno de los lenguajes más usados en el análisis de datos. En el caso del Python, este es un lenguaje moderno y orientado a objetos (más adelante veremos qué es un objeto) a diferencia del Fortran. Pero con una desventaja al ser tan actual: continuamente se lo mejora pero sin mantener la compatibilidad con versiones anteriores, lo que obliga a revisar programas de hace unos años o meses.
En general hay dos clases de lenguajes para programar una computadora, los que son compilados o los que son interpretados. El lenguaje Fortran es compilado, es decir se escriben las órdenes y este conjunto de órdenes (todas juntas) son convertidas (o traducidas) a un programa ejecutable que es el que entiende la CPU de la computadora.
Por lo tanto en Fortran tengo 3 etapas: programar el código, compilarlo y luego puedo correr el ejecutable que es el resultado de esta compilación.
En el caso de los interpretados (como el Python), cada orden (o un conjunto de estas) del programa es convertida a órdenes del CPU y luego ejecutada, para pasar a la orden que sigue, esto permite trabajar con más interacción con el código, pero los programas son más lentos porque el método es poco eficiente. Pero por otro lado es más fácil encontrar errores en el código o realizar mejoras en el momento, y en computadoras muy rápidas la ineficiencia del interprete pasa mucho más desapercibida.
En lenguajes interpretados modernos a veces estos se usan como un frente (frontend) para llamar a códigos ya compilados (backend) y estamos en un caso híbrido entre compilados e interpretados. Por ejemplo, esto se utiliza con los sistemas de Machine Learning.

En el caso del Fortran este tiene una cantidad no muy grande de órdenes a disposición del usuario pero estas son suficientes para realizar todas las operaciones que se pueden encontrar en un libro de álgebra. En el caso del Fortran no se le están agregando nuevos comandos. Mientras que el lenguaje Python tiene un filosofía de trabajo diferente en la cual se pueden agregar órdenes y funciones construidas por otros autores como si fuesen nativas del sistema, por lo cual la cantidad de comandos es inmenso en número, variado en temas y a su vez evoluciona rápidamente con el tiempo. Veremos con detalle estas diferencias durante la cursada.


  1. El plural de mouse (ratón pero en este caso el animlito) es mice ya que es irregular en inglés, pero en el caso del ratón de las computadoras se ha aceptado mouses como el plural.↩︎

  2. En la página web de la cátedra hay un apunte de como hacer esta instalación.↩︎