====== Introducción a la arquitectura de ordenadores ======
===== Estructura de un Ordenador =====
En Arquitectura de Ordenadores un sistema informática se podría representar, en su forma más simple, mediante el siguiente esquema. En él aparecen representados los principales elementos hardware y cómo interactúan unos con otros. Obviamente con el paso de los años este esquema y su complejidad han evoluacionado mucho y muy rápido, pero en esencia el funcionamiento sigue siendo el mismo. Simplemente cada componente ha sido mejorado en calidad, cantidad y velocidad. Desde los primeros ordenadores personales hasta lo que podemos encontrar hoy en día, se ha seguido de alguna manera la misma estructura, basada en lo que se conoce como **Arquitectura Von Neumann** (siguiente imagen).
{{ von_neumann.jpg |Esquema de un sistema informático. Arquitectura de Von Neumann}}
Visto el esquema básico de un sistema informático, conviene diferenciar entre los siguientes términos:
* **Hardware**: Son todas las partes físicas y tangibles de un ordenador: elementos mecánicos, electrónicos, cables, tarjetas de expansión, . . .
* **Software**: Es el soporte lógico de un ordenador que hace que éste pueda funcionar. Lo que se conoce generalmente como aplicaciones, incluyendo en éstas al propio Sistema Operativo
* **Firmware**: Se compone de una serie de instrucciones grabadas en un tipo de memoria para gestionar el nivel más bajo de funcionamiento de algún elemento de hardware. Puesto que se integra en la electrónica del dispositivo se dice que es a la vez hardware y software, y en cierta manera funciona como intermediario entre las órdenes que un dispositivo recibe y sus componentes electrónicos. El ejemplo más conocido de elemento firmware es la **BIOS**
===== Composición de un Sistema Informático =====
Tal y como se observa en el esquema anterior, un Sistema Informático está compuesto principalmente por los siguientes elementos:
* **Unidad Central de Proceso (CPU)** que es el elemento que procesa las instrucciones y los datos y coordina en gran medida el resto del hardware para el correcto funcionamiento de todo el sistema
* **La Memoria** está formada por todos los elementos hardware que permiten que un sistema almacene información, ya sea de forma vólatil o permanente
* **Los buses** son los elementos que permiten que las diferentes partes del sistema estén coenctadas y se comuniquen entre sí
* **Las tarjetas de expansión** son aquellos elementos que permiten extender la funcionalidad básica o inicial de cualquier sistema informático. Con el paso del tiempo, algunos de estos elementos considerados como tarjetas de expansión se han hecho tan imprescindibles que podrían dejar de considerarse como tal
¿Qué dispositivos se pueden considerar tarjetas de expansión?
==== La Unidad Central de Proceso ====
La CPU, también conocida como procesador, es el elemento hardware encargado de leer y ejecutar las instrucciones el programa que se encuentre en ejecución en cada momento. Es uno de los componentes principales de cualquier sistema informático y en gran medida determina la capacidad de procesamiento de éste, aunque con cierta dependencia del resto de elementos que componen el sistema.
Su capacidad (frecuencia) se mide en Hercios (actualmente en Ghz) que es la forma de expresar cuántos ciclos de ejecución es capaz de ejecutar en un segundo. Si simplificáramos diríamos que cuanta más frecuencia de procesador mayor procesamiento, pero al referirse al número de ciclos deberemos saber qué es capaz de hacer un procesador determinado en cada ciclo. Si tenemos en cuenta eso y nos fijamos en la tendencia actual, se ha llegado incluso a reducir la frecuencia en procesadores que en la práctica son mucho más potentes que otros anteriores. Esto se debe a que internamente evolucionan también en otros aspectos como pueden ser el número de //cores//, la memoria caché integrada en el mismo, la complejidad de su estructura y otros aspectos que finalmente cobran tanta importancia como la frecuencia.
En la siguiente imagen se representa el esquema de uno de los últimos procesadores de Intel, el Intel Core i7, caracterizado por sus cuatro //cores// y cada uno de ellos con acceso a una zona de caché.
{{ quad_core.jpg |Intel Core i7}}
Tambien es importante tener en cuenta que, dada la estructura que se ha comentado al inicio de este punto, se produce lo que se conoce como //cuello de botella// por el que elementos muy rápidos deben esperar a elementos muy lentos, de manera que la velocidad del conjunto vendrá determinada siempre por el elemento más lento. De esa manera, si disponemos de una CPU muy potente pero el resto de componentes no lo son, no estaremos aprovechando todo el rendimiento que esa CPU nos pueda proporcionar.
Actualmente, ¿Cuál es el mayor cuello de botella en un equipo informático?
==== La Memoria ====
La situación ideal en cualquier equipo informático es la de una única memoria de capacidad infinita, rápida, no volátil y de un coste muy bajo. Puesto que en la realidad no existen esas memorias, se hace uso de lo que se conoce como //jerarquía de memoria//.
{{ memorias.jpg |Jerarquía de memoria}}
Para entender el concepto de jerarquía de memoria hay que tener en cuenta, tal y como se muestra en el gráfico anterior, que la memoria incrementa el coste cuánto más rápida y más capacidad tiene de tal manera que no es viable fabricar un ordenador con gran capacidad de la memoria más rápida. También hay que tener en cuenta que cuanto mayor es la capacidad de la memoria, más díficil será conseguir que ésta sea rápida.
Así, cualquier equipo actual posee una cierta cantidad de varios niveles de memoria, empezando por una memoria muy rápida, de pequeña capacidad y de un coste muy elevado, para terminar con una memoria muy lenta, de gran capacidad y de un coste muy bajo, pasando por varios tipos de memoria de características y prestaciones intermedias. Así, actualmente podemos distinguir entre cuatro tipos de memoria:
* **Registros de la CPU**: De muy pequeña capacidad pero muy rápida. La componen los registros internos del procesador (unos pocos registros)
* **Memoria caché (L1, L2)**: Actualmente cobra más importancia en la fabricación de los procesadores y alcanza tamaños de unos pocos MBytes. Más lenta que los registros de la CPU y mucho más rápida que la memoria principal, aunque de tamaño mucho más pequeño que ésta (2-8 MB)
* **Memoria Principal**: También conocida como memoria RAM (4-6 GB)
* **Memoria Secundaria**: Lo que se conoce popularmente como el disco duro (500 GB-2 TB)
En [[http://www.spinellis.gr/pubs/trade/2006-login-memhier/html/memhier.html|este artículo]] se realizó un análiss de los diferentes tipos de memoria que aquí se comentan. Como dato más relevante se muestra una tabla comparativa que muestra, para cada tipo de memoria, la relación coste-velocidad con respecto a las demás.
{{ costes_memoria.jpg |Relación coste-velocidad}}
¿Donde colocarías a los discos SSD en esta comparativa?
=== Registros de la CPU ===
Los registros de la CPU son el primer nivel en la jerarquía de memoria. Es la memoria más rápida pero también la de menor capacidad. La forman una serie de registros internos del procesador que funcionan como memorias muy rápidas donde se almacenan los datos con los que se va a operar en cada momento.
El tamaño de estos registros determina el tamaño de los datos con los que es capaz de operar el procesador. Así, los procesadores actuales operan ya con registros de 64 bits frente a los registros de 32 bits con los que se llevaba trabajando mucho tiempo. Así, se habla de arquitecturas de 32 bits (x86) ó arquitecturas de 64 bits (amd64, x86_64).
Así, el tamaño de los registros dependerá de la arquitectura que implemente un procesador determinado. Por ejemplo, hoy en día todos los nuevos procesadores ya implementan arquitecturas de 64 bits por lo que operan con tamaños de datos más grandes y son capaces de realizar operaciones más grandes en el mismo intervalo de tiempo que las arquitecturas de 32 bits.
=== Caché ===
La memoria caché es una memoria de alta velocidad y pequeña capacidad (más lenta que los registros de la CPU pero de mucha más capacidad que éstos). Su utilidad es la de almacenar los datos e instrucciones más utilizados por los programas, puesto que por norma general se tiende a acceder en gran medida a los mismos datos e instrucciones una y otra vez. De esta manera, se evita que el ordenador deba acceder a memoria RAM, que es mucho más lenta que esta memoria. Cada vez que el dato se encuentra en memoria caché se dice que se ha producido un acierto. Esa será entonces la medida a evaluar para saber si una memoria caché es buena.
{{ cache.jpg |Funcionamiento de la memoria caché}}
Otro aspecto que cabe destacar a la hora de tener en cuenta una memoria caché, es el nivel que ocupa ésta. En ese caso hablamos de memorias caché de nivel 1 (L1, integrada en el procesador), nivel 2 (L2) y nivel 3 (L3), en función de la distancia a la que se encuentran del procesador. De esa manera, cuanto más cerca del procesador más rápida es pero también disminuye su capacidad. En la actualidad, la gran mayoría de procesadores disponen de una memoria caché L2 integrada ya en el procesador junto a una pequeña porción de caché L1 de unos pocos KBs y no se dispone de memoria de nivel 3
{{ cache_intel.jpg |Esquema de caché en procesadores Intel}}
{{ cache_amd.jpg |Esquema de caché en procesadores AMD}}
¿Es importante esta memoria caché, de unos pocos megas,
en el rendimiento general del equipo?
=== Memoria Principal ===
La memoria principal, también conocida como memoria RAM, está directamente conectada a la CPU a través de un bus de direcciones y un bus de datos. Debe estar presente para que ésta funcione puesto que contendrá, en todo momento, los programas o procesos en ejecución y los datos con los que se opera.
Es un tipo de memoria de lo que se conoce como acceso aleatorio, denominación que surge para diferenciarlas de las memorias de acceso secuencial, donde el acceso a un dato pasaba por acceder primero a todos los datos que estaban situados por delante de éste (cinta de datos). Con las memorias de acceso aleatorio es posible acceder directamente a cualquier dato, sin tener que pasar antes por ningún otro.
Hay que tener en cuenta también que es una memoria volátil, por lo que en ausencia de alimentación perderá su información.
Es una memoria de mucha más capacidad que la memoria caché pero bastante más lenta que ésta. Por el contrario, es mucho más rápida que la memoria secundaria, pero también de menor capacidad y de un coste superior.
La memoria principal se puede ver como un conjunto de celdas donde cada una de estas celdas se identifica con una dirección diferente para que el procesador pueda direccionarlas. Así, como se ha comentado anteriormente son necesarios dos buses para comunicarse con la memoria principal:
* **Bus de direcciones**: Que permite direccionar o seleccionar que celda de la memoria principal se leerá/escribirá en la siguiente operación. Dependiendo del tamaño de este bus de direcciones, el procesador podrá direccionar más o menos de esas celdas de memoria
* **Bus de datos**: Que permite que el dato que se escribe/lee viaje de la CPU a la memoria principal. Dependiendo del tamaño de este bus, se permitirá transferir datos de mayor o menor tamaño al mismo tiempo
¿Cómo puedo saber si mi ordenador dispone de suficiente memoria RAM?
=== 32 bits vs 64 bits ===
Hasta hace unos años los procesadores estaban, por lo general, basados en arquitecturas de 32 bits, por lo que sus registros tenían un tamaño de 32 bits. Se determinó así hace unos años por que se pensó que sería suficiente para las necesidades de la época. Pero la evolución, tanto de los propios equipos, como de los programas, cada vez más exigentes en cuanto a procesamiento y memoria, ha hecho evolucionar este aspecto.
Así, actualmente ya se fabrican, a nivel doméstico incluso, procesadores basados en arquitecturas de 64 bits, lo que ha permitido por una parte una mayor capacidad de proceso y por otro lado una mayor capacidad de direccionamiento, que ha repercutido en el soporte de una mayor cantidad de memoria principal. Para entender esto hay que tener en cuenta que trabajando con números de 32 bits, un procesador sólo es capaz de trabajar con un rango máximo de 232 lo que equivale a 4294967296 valores diferentes. En definitiva sólo permitía direccionar hasta esa cantidad de direcciones de memoria por lo que sólo era posible trabajar con hasta 4 GB de memoria principal. Si contamos con que algunos Sistemas Operativos reservaban parte de esa memoria para otros usos, nos encontrábamos con que algunos equipos veían limitada su memoria máxima a unos 3 GB.
Así, con el paso a arquitectura de 64 bits, es posible trabajar con 264 direcciones de memoria diferentes, lo que equivale a la posibilidad de trabajar con cantidad considerablemente mayores de memoria.
¿Cómo puedo saber a qué arquitectura corresponde mi ordenador?
¿Puedo instalar software de 32 bits en un sistema de 64 bits?
¿Y software de 64 bits en un sistema de 32 bits?
=== Memoria Secundaria ===
La memoria secundaria se caracteriza, principalmente, por ser de gran capacidad y no volátil. Cuando se habla de memoria secundaria se hace referencia al disco duro puesto que es el dispositivo más común que se utiliza como almacenamiento secundario y, hoy en día, se ha convertido en un elemento indispensable en un ordenador.
Por otro lado, y debido principalmente al encarecimiento de la memoria principal, existen algunos mecanismos muy extendidos que permiten al Sistema Operativo hacer funcionar la memoria secundaria (que es barata) como si fuera memoria principal. Es lo que se conoce como memoria virtual (swap) y ReadyBoost, que aunque no son elementos hardware merece la pena mencionarlos aquí puesto que están muy relacionados con los elementos de memoria de un sistema
{{ swap.jpg |Memoria Swap}}
{{ readyboost.jpg |ReadyBoost}}
¿Cómo podemos saber el uso de memoria virtual de nuestro Sistema
Operativo?
==== El Sistema de Entrada/Salida ====
El Sistema de Entrada Salida (E/S) está compuesto por los elementos hardware que se encargan de realizar todas las operaciones de comunicación que los dispositivos periféricos establecen con la unidad central de proceso (CPU) de cualquier equipo informático.
Así, se conoce como Entrada a todas las operaciones en las que la CPU recibe señales y Salida son aquellas en las que la CPU emite señales a cualquiera de los componentes que forman el equipo. Por ejemplo, leer de un disco y utilizar el teclado o ratón serían operaciones de Entrada, mientras que el uso de los monitores o la impresora, serían operaciones de Salida.
También nos podemos encontrar con operaciones de Entrada/Salida, que son aquellas que se dan en dispositivos que emiten ambos tipos de señales, entrada y salida, como pueden ser los módems o las tarjetas de red.
=== Bus ===
Se denomina bus, al conjunto de conexiones físicas (cables, placa de circuito impreso, etc.) que pueden compartirse con múltiples componentes de hardware para que se comuniquen entre sí. Es el elemento principal de cualquier operación E/S. El propósito de los buses es reducir el número de rutas necesarias para la comunicación entre los distintos componentes, al realizar las comunicaciones a través de un solo canal de datos.
{{ bus.jpg |Conexión punto a punto (imagen izquierda) y conexión en bus (imagen derecha)}}
¿Qué ventajas e inconvenientes tiene la conexión en bus?
En el caso en que sólo dos componentes de hardware se comuniquen a través de la línea, podemos hablar de puerto hardware.
Un bus se caracteriza por la cantidad de información que se transmite en forma simultánea. Este volumen se expresa en bits y corresponde al número de líneas físicas mediante las cuales se envía la información de forma simultánea. El término ancho se utiliza para designar el número de bits que un bus puede transmitir simultáneamente.
Por otra parte, la velocidad del bus se define a través de su frecuencia (que se expresa en Hz), es decir el número de paquetes de datos que pueden ser enviados o recibidos por segundo. Cada vez que se envían o reciben estos datos podemos hablar de ciclo.
De esta manera, es posible hallar la velocidad de transferencia máxima del bus (la cantidad de datos que puede transportar por unidad de tiempo) al multiplicar su ancho por la frecuencia. Por lo tanto, un bus con un ancho de 16 bits y una frecuencia de 133 MHz, tiene una velocidad de transferencia de:
16 * 133.106 = 2128*10^6 bit/s, ó 2128*10^6/8
266*10^6 bytes/s ó 266*10^6/1000 =
266*10^3 KB/s ó 259.7*10^3/1000 = 266 MB/s
En realidad, cada bus se puede dividir a su vez en tres subconjuntos:
* El **bus de direcciones**, (también conocido como bus de memoria) transporta las direcciones de memoria al que el procesador desea acceder, para leer o escribir datos. Se trata de un bus unidireccional.
* El **bus de datos** transfiere tanto las instrucciones que provienen del procesador como las que se dirigen hacia él. Se trata de un bus bidireccional.
* El **bus de control** (en ocasiones denominado bus de comando) transporta las órdenes y las señales de sincronización que provienen de la unidad de control y viajan hacia los distintos componentes de hardware. Se trata de un bus bidireccional en la medida en que también transmite señales de respuesta del hardware.
Dentro de un equipo, se distinguen dos buses principales:
* el **bus interno o de sistema** (que también se conoce como bus frontal o FSB). El bus interno permite al procesador comunicarse con la memoria principal (la memoria RAM).
* el **bus de expansión** (llamado algunas veces bus de entrada/salida) permite a diversos componentes de la placa base (USB, puerto serial o paralelo, tarjetas insertadas en conectores PCI, discos duros, unidades de CD) comunicarse entre sí. Sin embargo, permite principalmente agregar nuevos dispositivos por medio de las ranuras de expansión que están a su vez conectadas al bus de entrada/salida.
El conjunto de chips es el componente que envía datos entre los distintos buses del equipo para que todos los componentes que forman el equipo puedan a su vez comunicarse entre sí. Originalmente, el conjunto de chips estaba compuesto por un gran número de chips electrónicos, aunque destacan dos componentes:
* El **Puente Norte** (que también se conoce como controlador de memoria), se encarga de controlar las transferencias entre el procesador y la memoria RAM. Se encuentra ubicado físicamente cerca del procesador.
* El **Puente Sur** (también denominado controlador de entrada/salida o controlador de expansión) administra las comunicaciones entre los distintos dispositivos periféricos de entrada-salida.
{{ esquema_pentium4.jpg |Esquema Pentium 4}}
{{ esquema_i7.jpg |Esquema Intel Core i7}}
¿Cuáles son las principales diferencias entre los dos esquemas
(Pentium e i7)?
==== Gestión de Recursos ====
La gestión de los recursos la componen los elementos hardware que permiten a la CPU gestionar el acceso a los recursos, puesto que éstos son limitados. Así, habrá que controlar en cada momento quién accede a cada recurso (memoria RAM, disco duro, impresora, . . .) y si éste está disponible o está siendo ocupado en ese momento por otro proceso del sistema.
=== Controlador ===
Las unidades de E/S constan normalmente de un componente mecánico y un componente electrónico. El componente electrónico se denomina controlador del dispositivo o adaptador. En los ordenadores personales este componente suele adoptar la forma de una tarjeta de circuito impreso (tarjeta controladora) que puede insertarse en una ranura de expansión. El componente mecánico es el dispositivo mismo
{{ controlador.jpg |Controlares}}
La tarea del controlador consiste en convertir un flujo de bits en serie en un bloque de bytes y realizar cualquier corrección de errores que sea necesaria. Normalmente primero se ensambla el bloque de bytes, bit a bit, en un búfer que está dentro del controlador. Una vez comprobado su checksum y declarado el bloque libre de errores, puede procederse a copiarlo en la memoria principal.
=== Cómo se comunican los dispositivos con la CPU: Las interrupciones ===
{{ interrupciones.jpg |Funcionamiento de una interrupción}}
Ya que un procesador no puede procesar simultáneamente varios trozos de información (procesa un trozo de información por vez), un programa que está siendo ejecutado puede, gracias a la petición de interrupción (IRQ), ser momentáneamente suspendido mientras se produce una interrupción. El programa interrumpido puede continuar ejecutándose luego.
Una interrupción se convierte en una interrupción de hardware cuando es solicitada por uno de los componentes del equipo. Existen varios periféricos en un equipo. Estos periféricos necesitan generalmente utilizar los recursos del sistema aunque sólo sea para comunicarse con el sistema mismo. Cuando un periférico desea acceder a un recurso, envía una petición de interrupción al procesador para llamar su atención. Los periféricos cuentan con un número de interrupción que se denomina IRQ (Interrupt Request, Petición de Interrupción). Es como si cada periférico tirara de un //"hilo"// que está atado a una campana para señalarle al equipo que desea que le preste atención.
Este //"hilo"// es, de hecho, una línea física que conecta cada ranura de expansión así como cada interfaz E/S a la placa base. Estas IRQ están controlados por un //controlador de interrupciones// que se encarga de "cederle la palabra" a la IRQ que posea la mayor prioridad.
¿Dónde puedo ver toda esta información en mi equipo?
¿Tiene algo que ver con los drivers de mis periféricos?
===== Prácticas =====
* **Práctica 1.1** Conocer la arquitectura de un ordenador
----
(c) 2016 Santiago Faci