Arquitectura de un ordenador
| |
El término arquitectura de ordenador hace referencia a cómo están organizados los elementos de un ordenador. En la actualidad, prácticamente todos los ordenadores siguen el mismo modelo básico de arquitectura[1], pero en el pasado se experimentaron con muchos modelos diferentes de ordenador, cada uno con sus ventajas e inconvenientes[2]. Conocer cómo funciona la arquitectura de un ordenador es importante para programar y para optimizar métodos numéricos (como ocurre por ejemplo con la factorización de Doolittle).
Contenido
1 Componentes de un ordenador
El hardware del ordenador está dividido en diferentes componentes que trabajan de manera coordinada:
- El procesador; en inglés, Central Processing Unit (CPU)
- La memoria RAM, donde se almacenan de manera temporal los datos y programas en ejecución
- El disco duro, donde se almacenan de manera permanente ficheros y programas
- Otros dispositivos de entrada y salida (pantalla, teclado, altavaoces, webcam, micrófono, etc).
1.1 Procesador
El procesador dispone de un juego de instrucciones básicas, que son todas las operaciones que puede realizar el ordenador. Por ejemplo, la suma de dos números se realiza en el procesador. Las operaciones de las que dispone el procesador suelen ser operaciones lógicas de bajo nivel, que combinadas dan lugar a operaciones más complejas. Por ejemplo, la suma se realiza combinando varias operaciones AND lógicas. La información también se representa en el ordenador usando un sistema numérico binario, y las operaciones suelen trabajar sobre cada uno de los dígitos (bits) de la representación numérica binaria de la información. Cuando se habla de arquitecturas de 32 bits significa que los números que maneja el procesador pueden tener hasta 32 dígitos binarios. También, que cada posición de la memoria RAM puede almacenar un número de 32 bits. En la actualidad, los ordenadores más modernos incorporan arquitecturas de 64 bits, aunque en ocasiones tienen instalados sistemas operativos de 32 bits por motivos de compatibilidad (un sistema operativo de 32 bits puede funcionar en una arquitectura de 64 bits, pero un sistema operativo de 64 bits es imposible que funcione sobre una arquitectura de 32 bits).
La representación binaria acabó imponiéndose sobre otros sistemas de representación numérica (por ejemplo, el decimal al que estamos acostumbrados) por las técnicas con las que se construyen los ordenadores, usando dispositivos electrónicos. El dispositivo más sencillo del que consta un procesador es el transistor[3], que puede representar fácilmente dos estados diferentes (correspondientes a los dos posibles valorses, 0 y 1, que toma un bit). El procesador también consta de una pequeña memoria (registros) donde se guardan los elementos que intervienen en una operación y los resultados de las operaciones. Estos valores se escriben y leen en la memoria RAM del ordenador. La comunicación tiene lugar a través del denominado bus[4].
1.2 Memoria RAM
La memoria RAM es el dispositivo donde se guarda la información mientras el ordenador está funcionando. Contiene tanto los programas que se están ejecutando, como los datos que manejan esos programas. La memoria tiene varias posiciones donde se puede guardar información codificada en números binarios. Por ejemplo, una arquitectura de 64 bits puede guardar en cada posición números en binario con hasta 64 dígitos. Estas posiciones se conocen como direcciones de memoria. El procesador puede recuperar valores de direcciones de memoria específicas, y escribir también en otras posiciones de memoria. La cantidad de posiciones de memoria disponibles es el tamaño de la memoria RAM. Por tanto, una mayor memoria implica que se pueden tener más programas en ejecución, y que manejen más información. Ésta es la causa de que ampliar la memoria RAM de un ordenador incremente de manera notable la experiencia de usuario, al poder ejecutar más programas de manera simultánea.
El acrónimo RAM proviene de Random Access Memory, en español Memoria de Accesso Aleatorio. En Informática, el término acceso aleatorio hace referencia a que se puede acceder a posiciones de memoria concretas de manera directa, si se conoce su posición. Antiguamente, las memorias eran de accesso secuencial, y para acceder a una posición había que recorrer todas las posiciones anteriores. Por el contrario, las memorias de acceso aleatorio pueden saltar directamente a una localización de memoria sin necesidad de recorrer todas las posiciones anteriores.
Un problema habitual al usar un ordenador es que la memoria RAM no sea suficiente para ejecutar todos los programas. En los sistemas operativos primitivos, cuando esto ocurría el ordenador dejaba de funcionar (en términos coloquiales, se colgaba), ya que en la memoria RAM está toda la información que el ordenador necesita para seguir funcionando. Desde hace muchos años, los sistemas operativos intentan remediar esta situación con un proceso denominado swapping. Cuando el ordenador se queda sin memoria suficiente para mantener en memoria todos los programas en ejecución y la información que manejan, vuelva al disco duro algo del contenido de la memoria RAM, para hacer espacio para la información que necesite para seguir funcionando en ese momento. Si necesita alguna de la información que se ha eliminado de la memoria, la vuelve a recuperar del disco. Para esto, necesita hacer hueco y volcar otros contenidos en el disco duro. Este trasiego de información entre el disco y la memoria es muy lento, ya que el disco duro suele ser mucho más lento que la memoria RAM.
El software que es encarga de, entre otras tareas, la comunicación entre la memoria y el procesador es el sistema operativo, por medio del kernel, el núcleo del sistema operativo[5].
1.3 Disco duro
El disco duro es un dispositivo donde se guardan de manera permanente datos y programas. A diferencia de la memoria RAM, si apagamos el ordenador la información contenida en el disco duro se mantiene. Existen diferentes tecnologías para discos duros. La tecnología más habitual es la de discos magnéticos, que se leen con un cabezal similar al de un tocadiscos. Más recientemente, se comercializan también discos de estado sólido, que son totalmente electrónicos. Estos discos duros no llevan partes mecánicas, por lo que son mucho más rápidos que los discos duros magnéticos. Sin embargo, también fallan con más facilidad, y duran menos ciclos de escritura y lectura.
Para poder escribir y leer en el disco duro, que es un dispositivo físico, el sistema operativo usa un programa denominado sistema de ficheros, que expone el disco duro a los programas como si fuera una estructura ramificada (un árbol, en términos informáticos) de directorios y ficheros[6]. El sistema de ficheros se encarga de decidir en qué partes del disco duro se escribe un fichero, y en general, de organizar y distribuir la información físicamente en el dispositivo.
El disco duro no es un componente con demasiada influencia en la programación de ordenadores. El sistema de ficheros siempre expondrá el disco duro a nuestros programas de la misma manera. No podemos optimizar nuestros programas de ninguna manera, más allá de minimizar las posibles escrituras y lecturas en el disco duro, que es siempre uno de los elementos más lentos del ordenador.
1.4 Otros dispositivos
Cuando el usuario se comunica con los programas que se ejecutan en el ordenador, siempre lo hace a través de algún dispositivo de entrada o de salida. Escribimos texto usando el teclado, lo leemos en la pantalla, lanzamos programas apuntando con el ratón, hablamos a través de un micrófono, escuchamos sonidos a través de altavoces, etc.
Desde el punto de vista del programador, no es necesario preocuparse por cómo funcionan estos dispositivos. El kernel del sistema operativo dispone de funciones que nos permiten escribir en los dispositivos de salida (por ejemplo, reproducir un sonido supone escribir en el dispositivo de salida de sonido) o leer desde los dispositivos de entrada. Normalmente, estas funciones del kernel del sistema operativo están trasladadas al lenguaje de programación que usamos. Por ejemplo, el siguiente código de Octave UPM lee información del teclado. El intérprete de Octave UPM llama a la función correspondiente del kernel, que se comunica con el teclado, y recoge las pulsaciones de las teclas. Todo este proceso es completamente transparente para el programador. El efecto neto es que el programador obtiene un determinado valor en una variable:
n = input('Dame un numero: ');Del mismo modo, al ejecutar el siguiente código, el intérprete de Octave UPM llama a la función correspondiente del kernel, que se encarga de interactuar con la pantalla y escribir el texto Hola mundo en la pantalla:
disp('¡Hola mundo!');2 Arquitectura de los ordenadores modernos
3 Referencias
- ↑ Arquitectura de von Neumann (Wikipedia ES)
- ↑ Comparison of CPU architectures (Wikipedia EN)
- ↑ Transistor (Wikipedia ES)
- ↑ Bus (Wikipedia ES)
- ↑ Kernel (Wikipedia ES)
- ↑ Sistema de ficheros (Wikipedia ES)