jueves, 18 de octubre de 2012

ARQUITECTURA Y MICROARQUITECTURA



Para poder diferenciar estos términos, debemos definir cada uno de ellos.

Micro-arquitectura: En computación, una micro-arquitectura es una descripción del circuito eléctrico de una computadora, de la unidad central de proceso o del procesador digital de señal, que es suficiente para describir completamente el funcionamiento del hardware.

En ámbitos académicos, suele emplearse el término "organización de la computadora", mientras que en la industria de la computación suele utilizarse el término micro-arquitectura  Ambas palabras son sinónimos.

La micro-arquitectura de una máquina, generalmente es representada empleando un diagrama de bloques que describe las interconexiones entre registros, buses y bloques funcionales de la máquina. Esta descripción incluye el número de unidades de ejecución, el tipo de las unidades de ejecución (como punto flotante, entero, SIMD, etc.), la naturaleza del pipelining, el diseño de la memoria caché y el soporte de periféricos.

El esquema físico del circuito, las construcciones de hardware y otros detalles físicos son llamados implementación de esa micro-arquitectura  Dos máquinas pueden tener la misma micro-arquitectura  y por lo tanto el mismo diagrama de bloques, pero diferentes implementaciones de hardware.

Arquitectura: La arquitectura de computadoras es el diseño conceptual y la estructura operacional fundamental de un sistema de computadora. Es decir, es un modelo y una descripción funcional de los requerimientos y las implementaciones de diseño para varias partes de una computadora, con especial interés en la forma en que la unidad central de proceso (UCP) trabaja internamente y accede a las direcciones de memoria.
También suele definirse como la forma de seleccionar e interconectar componentes de hardware para crear computadoras según los requerimientos de funcionalidad, rendimiento y costo.
El ordenador recibe y envía la información a través de los periféricos por medio de los canales. La UCP es la encargada de procesar la información que le llega al ordenador. El intercambio de información se tiene que hacer con los periféricos y la UCP. Todas aquellas unidades de un sistema exceptuando la UCP se denomina periférico, por lo que el ordenador tiene dos partes bien diferenciadas, que son: la UCP (encargada de ejecutar programas y que está compuesta por la memoria principal, la UAL y la UC) y los periféricos (que pueden ser de entrada, salida, entrada-salida y comunicaciones).
La micro-arquitectura y la arquitectura de conjunto de instrucciones constituyen la arquitectura de computadora.

Las características que se pretende que tenga un conjunto de instrucciones son cuatro, principalmente:
-  Completo: Que se pueda realizar en un tiempo finito cualquier tarea ejecutable con un ordenador (computable o decidible).
-  Eficiente: Que permita alta velocidad de cálculo sin exigir una elevada complejidad en su UC y ALU y sin consumir excesivos recursos (memoria), es decir, debe cumplir su tarea en un tiempo razonable minimizando el uso de los recursos.
-  Autocontenidas: Esto es, que contengan en sí mismas toda la información necesaria para ejecutarse.
-  Independientes: Que no dependan de la ejecución de alguna otra instrucción.
Se puede comprobar que para que un conjunto de instrucciones sea completo solo se necesitan cuatro instrucciones:
-> escritura
-> mover a la izquierda una posición y leer
-> mover a la derecha una posición y leer
-> parar
En esta idea se basan las arquitecturas RISC, no obstante, con este conjunto no se puede conseguir la eficiencia del repertorio de instrucciones por lo que en la práctica el conjunto suele ser más amplio en aras de conseguir un mejor rendimiento, tanto en uso de recursos como en consumo de tiempo.

DIFERENCIAS ENTRE ARQUITECTURA Y MICRO-ARQUITECTURA

La micro-arquitectura debe distinguirse de la arquitectura de conjunto de instrucciones. Esta última es una imagen abstracta de un sistema de computación como sería visto por un programador en lenguaje máquina, e incluye el conjunto de instrucciones, modos de dirección de memoria, registros del procesador, y formatos de direcciones y datos.

La micro-arquitectura  en cambio, es de nivel más inferior, más concreto. Muestra las partes constituyentes del sistema y cómo se interconectan e interoperan, para así implementar la especificación de arquitectura. 

Diferentes máquinas podrían tener una misma arquitectura de conjunto de instrucciones, y así ser capaces de ejecutar los mismos programas, sin embargo pueden tener diferentes micro-arquitecturas.

Estas diferentes micro-arquitecturas (junto con los avances en las tecnologías de fabricación de semiconductores) son las que permiten nuevas generaciones de procesadores que permiten alcanzar mejores niveles de rendimiento comparadas con las generaciones previas. En teoría, una única micro-arquitectura (especialmente si ésta incluye microcódigo) podría ser usada para implementar dos conjuntos de instrucciones diferentes, por la programación de dos almacenes de control diferentes (el almacén de control almacena el microprograma del CPU).

Ejemplos de arquitectura RISC

Los diseños RISC han llevado a un gran número de plataformas y arquitecturas al éxito, algunas de las más grandes:
-    La línea MIPS Technologies Inc., que se encontraba en la mayoría de las computadoras de Silicon Graphics hasta 2006, y estuvo en las consolas ya descatalogadas Nintendo 64, PlayStation y PlayStation 2. Actualmente se utiliza en la PlayStation Portable y algunos routers.
-    La serie IBM POWER, utilizado principalmente por IBM en Servidores y superordenadores.
-    La versión PowerPC de Motorola e IBM (una versión de la serie IBM POWER) utilizada en los ordenadores AmigaOne, Apple Macintosh como el iMac, eMac, Power Mac y posteriores (hasta 2006). Actualmente se utiliza en muchos sistemas empotrados en automóviles, routers, etc, así como en muchas consolas de videojuegos, como la Playstation 3, Xbox 360 y Wii.
-    El procesador SPARC y UltraSPARC de Sun Microsystems y Fujitsu, que se encuentra en sus últimos modelos de servidores (y hasta 2008 también en estaciones de trabajo).
-    El PA-RISC y el HP/PA de Hewlett-Packard, ya descatalogados.
-  El DEC Alpha en servidores HP AlphaServer y estaciones de trabajo AlphaStation, ya descatalogados.
-  El ARM – El paso de hardware de instrucciones x86 en operaciones RISC llega a ser significativo en el área y la energía para dispositivos móviles e integrados. Por lo tanto, los procesadores ARM dominan en PALM, Nintendo DS,Game Boy Advance y en múltiples PDAs, Apple iPods, Apple iPhone, iPod Touch (Samsung ARM1176JZF, ARM Cortex-A8, Apple A4), Apple iPad (Apple A4 ARM -based SoC), videoconsolas como Nintendo DS (ARM7TDMI, ARM946E-S), Nintendo Game Boy Advance (ARM7TDMI).
-  El Atmel AVR usado en gran variedad de productos, desde mandos de la Xbox a los coches de la empresa BMW.
-  La plataforma SuperH de Hitachi, originalmente usada para las consolas Sega Super 32X, Saturn y Dreamcast, ahora forman parte de el corazón de muchos equipos electrónicos para el consumo.SuperH es la plataforma base de el grupo Mitsubishi - Hitachi. Estos dos grupos, unidos en 2002, dejaron aparte la propia arquitectura RISC de Mitsubishi, el M32R.
-  Los procesadores XAP usados en muchos chips wireless de poco consumo (Bluetooth, wifi) de CSR.

Ejemplos de arquitectura CISC

Motorola 68000, Zilog Z80 y toda la familia Intel x86, AMD x86_64 usada en la mayoría de las computadoras personales actuales.

domingo, 7 de octubre de 2012

Unidad Central de Procesos



UNIDAD CENTRAL DE PROCESAMIENTO

La unidad central de procesos (CPU) es la parte fundamental de cualquier sistema basado en microprocesador. Habitualmente se identifica la CPU con el circuito integrado del sistema que realiza tal función, si bien esta puede realizarse por medio de varios circuitos integrados o, como también es frecuente, empleando un único circuito integrado que realiza otras funciones además de las propias de la CPU, como puedan ser la memoria o los periféricos de entrada-salida. En cualquier caso la CPU debe ocuparse de generar las señales de control necesarias y ejecutar el programa del usuario. Para ello realiza varias tareas, las cuales se pueden dividir en dos subtareas o fases,  a saber:
      1.     Fase de búsqueda (fetch). Se realiza el acceso a la memoria del sistema para leer la instrucción.
      2.     Fase de ejecución. Se realiza la interpretación de la instrucción y la activación de los recursos necesarios para su ejecución.
Para realizar estas tareas la CPU se divide en varios bloques funcionales interconectados mediante buses internos. Se pueden utilizar uno o más buses independientes según las características y prestaciones que se deseen. En las CPU de aplicación general suele usarse un bus único que se comparte entre los diferentes subsistemas, lo que permite una única transferencia simultánea. Si se desea incrementar la capacidad de transferencia u optimizar el acceso simultaneo a más de un dato, se diseña la CPU con dos o más buses internos, de tal forma que sea posible realizar transferencias simultaneas, acceder a más de un dato en una única operación, separar los caminos de los datos y de las instrucciones, etc.
Podemos encontrar ejemplos de CPU con bus único en procesadores comerciales de aplicación general como el 8085, 6800, 8086, 68000, etc. El uso de varios buses internos es típico de CPU de aplicaciones específicas como los microcontroladores y los Procesadores Digitales de Señal (DSP). Los primeros están diseñados para aplicaciones industriales y de control: entre los más conocidos, podemos citar al 8051, PIC, 68HC11, etc. Los DSP están optimizados para realizar los cálculos habituales en procesado de señal, básicamente productos y sumas: los más conocidos son los TMS320.
En las figuras que siguen se muestran las estructuras internas más típicas de una CPU. En la figura 1 puede verse la estructura de un bus único y en la figura 2 se observa la estructura con dos buses.


Los buses son conjuntos de líneas o canales físicos (hilos de cobre) que permiten la comunicación entre los elementos principales del ordenador, memoria central, ALU y unidad de control y donde se vuelca la información que proviene de los periféricos para llegar hasta la CPU. Son de tres tipos:
      -          Bus de direcciones. Por el que se transporta la información de las direcciones o posiciones de los datos                                                                       e instrucciones en memoria o la información del periférico.
      -          Bus de datos. Por el que viajan los datos.
      -          Bus de control. Que transporta señales de control y de estado de los elementos.
Como puede verse en cualquiera de las figuras, la estructura interna de una CPU contiene los siguientes    bloques funcionales:
      -          La Unidad Central de Procesos de un sistema basado en microprocesador.
     -     Unidad Aritmetico - Logica (ALU). La función de la ALU es realizar las operaciones aritméticas y  lógicas. La operación a realizar la indica la unidad de control. Los operandos se guardan en registros al igual  que el resultado. Si el registro donde se guarda el resultado es específico se llama acumulador.
     -          Unidad de Control (UC). La tarea de la UC es la de generar las señales de control necesarias para  organizar los flujos de información externos e internos entre la CPU y el resto del sistema.
     -          Registros. Los registros son elementos de memoria que sirven para guardar información importante y  necesaria para la CPU. Los podemos agrupar en dos grandes tipos:
a)      Generales: Contienen los operandos que se especifican en las instrucciones del programa. Como su nombre indica son de carácter general, aunque algunos de ellos pueden tener misiones específicas, como es el caso del registro acumulador, el cual almacena el resultado de las operaciones aritméticas y lógicas.
b)      Específicos: son aquellos en los que su contenido y/o su uso cumplen una función concreta. Veamos los más comunes:
·         PC: contador de programa (Program Counter). Contiene la dirección de la próxima instrucción a ejecutar.
·         IR: registro de instrucción (Instruction Register). Contiene el código de operación de la instrucción en ejecución.
·         SR: registro de estado (Status Register). Contiene bits de control y estado que indican el resultado de ciertas operaciones e informaciones relevantes de la CPU tras la ejecución de cada instrucción.
·         SP: puntero de pila (Stack Pointer). Almacena la dirección de un bloque de memoria principal conocido como pila y anteriormente descrito, donde la CPU guarda información temporalmente. El acceso se realiza según un esquema LIFO (Last In First Out).
Los registros son los que el usuario conoce y direcciona explícitamente en los programas de aplicación. Además de esto registros, existen otros que no son visibles para el usuario, como el MAR (Memory Address Register) y el MDR (Memory Data Register), que anteriormente se han representado en las figuras 1 y 2. Estos registros son necesarios para retener temporalmente los datos y direcciones y completar la ejecución de las instrucciones.

viernes, 5 de octubre de 2012

Jerarquía de Memoria


¿Qué es memoria?

Una memoria es un dispositivo de almacenamiento de instrucciones y/o datos.

Jerarquía de memoria

La memoria de un computador esta organizada como una jerarquía (Figura 1) compuesta por diferentes niveles de almacenamiento entre los que se mueve la información a medida que la necesitan los procesos durante su ejecución.
Las limitaciones de diseño de la memoria de un computador se resumen en tres variables:
      ·         ¿Qué cantidad?
      ·         ¿Qué velocidad?
      ·         ¿Qué costo?
Estas tres características compiten entre sí y generalmente se cumplen las siguientes relaciones:
      ·         A menor tiempo de acceso, mayor costo por bit.
      ·         A mayor capacidad, menor costo por bit.
      ·         A mayor capacidad, mayor tiempo de acceso.
A medida que se desciende por la jerarquía (Figura 1) se tienen las siguientes condiciones:
      ·         Disminución del costo por bit.
      ·         Aumento de la capacidad.
      ·         Aumento del tiempo de acceso (menos velocidad).
      ·         Disminución de la frecuencia de acceso a la memoria por el procesador.




 El objetivo de estructurar toda la memoria de un computador como una jerarquía es conseguir una memoria relativamente grande y rápida a un precio no muy alto. El funcionamiento de la jerarquía de memoria se basa en hacer copias de información de los niveles más lentos y grandes a los niveles más rápidos en los que se necesita. Así, por ejemplo, cuando se quiere ejecutar un programa hay que copiar las instrucciones y datos del mismo, que se encuentra en disco (en el fichero ejecutable) a memoria principal. De igual forma, el procesador a medida que va accediendo a memoria caché, provoca que la información necesaria, en forma de líneas de cache, se copie de memoria principal a memoria caché. Finalmente hay muchas instrucciones que necesitan que la información resida en los registros del procesador, esto hace que haya que copiar información de la memoria caché a los registros.
En el acceso a un nivel de la jerarquía se produce un fallo cuando el dato referenciado no se encuentra en ese nivel. Se dice que hay un acierto en caso contrario. La existencia de un fallo requiere que los datos referenciados se copien del nivel inferior al nivel en el que se ha provocado el fallo.
La existencia de múltiples copias de un mismo dato en una jerarquía de memoria produce un problema de falta de coherencia. En efecto, cuando se modifica un dato en un nivel superior de la jerarquía, se produce una discrepancia con la copia del dato que se encuentra en el nivel inferior. Para resolver este problema es necesario que la información modificada en un nivel superior de la jerarquía se actualice en algún momento en el nivel inferior.


MEMORIA PRINCIPAL


La memoria principal satisface las demandas de las caches y unidades vectoriales y sirve como interfaz de entrada y salida ya que es el destino de la entrada así como la fuente para la salida, las medidas de rendimiento de la memoria principal hacen énfasis a la latencia y al ancho de banda.

MEMORIA CACHE

Cache es el nombre escogido para representar el nivel de jerarquía de memoria entre la CPU y memoria principal, y este es el uso dominante del término. Hoy en día aparecen caches en toda clase de computadoras y en algunos computadores más de una vez

En la cache se guardan las palabras de memoria de mayor uso, cuando la CPU necesita una palabra primero lo busca en la cache. Solo si la palabra no esta ahí recurre a la memoria principal, esto mejora el tiempo de acceso a los programas que se quiere usar.

MEMORIA VIRTUAL

La memoria virtual es una técnica de administración de la memoria real que permite al sistema operativo brindarle al software de usuario y a sí mismo un espacio de direcciones mayor que la memoria real o física
La mayoría de los ordenadores tienen cuatro tipos de memoria: registros en la CPU, la memoria caché (tanto dentro como fuera del CPU), la memoria física (generalmente en forma de RAM, donde la CPU pueden leer directa y razonablemente rápido) y el disco duro que es mucho más lento, pero también más grande y barato.
Muchas aplicaciones requieren acceso a más información (código y datos) que la que se puede mantener en memoria física. Esto es así sobre todo cuando el sistema operativo permite múltiples procesos y aplicaciones ejecutándose simultáneamente. Una solución al problema de necesitar mayor cantidad de memoria de la que se posee consiste en que las aplicaciones mantengan parte de su información en disco, moviéndola a la memoria principal cuando sea necesario. Hay varias formas de hacer esto. Una opción es que la aplicación misma sea responsable de decidir qué información será guardada en cada sitio (segmentación), y de traerla y llevarla. La desventaja de esto, además de la dificultad en el diseño e implementación del programa, es que es muy probable que los intereses sobre la memoria de dos o varios programas generen conflictos entre sí: cada programador podría realizar su diseño teniendo en cuenta que es el único programa ejecutándose en el sistema. La alternativa es usar memoria virtual, donde la combinación entre hardware especial y el sistema operativo hace uso de la memoria principal y la secundaria para hacer parecer que el ordenador tiene mucha más memoria principal (RAM) que la que realmente posee. Este método es invisible a los procesos. La cantidad de memoria máxima que se puede hacer ver que hay tiene que ver con las características del procesador. Por ejemplo, en un sistema de 32 bits, el máximo es 232, lo que da 4096 Megabytes (4 Gigabytes). Todo esto hace el trabajo del programador de aplicaciones mucho más fácil, al poder ignorar completamente la necesidad de mover datos entre los distintos espacios de memoria.

DISCO MAGNETICO

Un disco magnético consiste en uno o más platos de aluminio con un recubrimiento magnetizable. Originalmente estos platos llegaron a tener 50 cm de diámetro, pero en la actualidad suelen ser de 3 a 12 cm, y algunos discos para computadoras portátiles tienen diámetros de menos de 3cm y se siguen encogiendo. Una cabeza de disco contiene una bobina de inducción flota sobre la superficie y muy cerca de ella, descansando en un colchón de aire. Cuando una corriente positiva o negativa pasa por la cabeza, magnetiza la superficie justo debajo de ella, alineando las partículas magnéticas hacia la izquierda o hacia la derecha, dependiendo de la polaridad de la corriente de la unidad.