Proyecto de hardware libre: Control de NES con Arduino

Para este proyecto se requieren los siguientes componentes:

  • Placa Arduino UNO
  • 5 Cables
  • Un control de NES

uno_smd_f

Software requerido:
El Arduino IDE nos proveerá una interfaz para el desarrollo de código para subirlo a la placa Arduino, mientras que el Processing es un entorno de desarrollo que permite comunicarse con el puerto serial de la placa Arduino e interpretar esos datos con librerías de Java, JavaScript y Python.

Diagrama de conexión:

captura22222

Más información al respecto:  https://tresi.github.io/nes/

Codificación:

Sketch Arduino IDE:
constintlatch = 2;
constintpulse = 3;
constintdata  = 4;
#define latchlow digitalWrite(latch, LOW)
#define latchhigh digitalWrite(latch, HIGH)
#define pulselow digitalWrite(pulse, LOW)
#define pulsehigh digitalWrite(pulse, HIGH)
#define dataread digitalRead(data)
#define wait delayMicroseconds(12)
bytesalida;
voidsetup() {
  Serial.begin(9600);
  pinMode(latch, OUTPUT);
  pinMode(pulse, OUTPUT);
  pinMode(data, INPUT);
voidloop() {
  salida = 0;
  LeerControl();
  Serial.write(salida);
}
/*
 * bit 7 = A          00000001
 * bit 6 = B          00000010
 * bit 5 = Select     00000100
 * bit 4 = Start      00001000
 * bit 3 = Arriba     00010000
 * bit 2 = Abajo      00100000
 * bit 1 = Izquierda  01000000
 * bit 0 = Derecha    10000000
 *
 * Por ejemplo, si leo 00000011,
 * entonces A y B están siendo presionados.
 */
voidLeerControl() {
  latchlow;
  pulselow;
  latchhigh;
  wait;
  latchlow;
  for(inti = 0; i < 8; i++) {
    salida += dataread * (1<< i);
    pulsehigh;
    wait;
    pulselow;
    wait;
  }
}
Sketch Processing:
importprocessing.serial.*;
importjava.awt.*;
importjava.awt.event.KeyEvent;
importjava.awt.event.*;
importjava.awt.Robot;
Serial arduino;
Robot VKey;
PImage bgImage;
byterecvout; // Recibe
byteprevout; // Previo
bytecombout; // Combinación
voidsetup() {
  size(312, 229);
  frameRate(60);
  println("Lista de puertos COM:");
  println(Serial.list());
  arduino = newSerial(this, Serial.list()[1], 9600); // ATENCIÓN, CAMBIAR SEGÚN EL PUERTO COM QUE SE UTILICE!!!
  bgImage = loadImage("arduino_wbg.png");
  try
  {
    VKey = newRobot();
  }
  catch(AWTException a) {
  }
  prevout = 0;
}
voiddraw() {
  if(bgImage != null) {
    background(bgImage);
  }
  serialRead();
  combout = (byte)(recvout ^ prevout);
  emularTeclado();
  //emularMovimientoRaton();
  prevout = recvout;
}
voidserialRead() {
  while(arduino.available () > 0) {
    recvout = (byte)arduino.read();
  }
}
voidemularTeclado() {
  // Botón A
  if((combout & 1) != 0) {
    if((recvout & 1) == 0) {
      VKey.keyPress(KeyEvent.VK_L);
    } else{
      VKey.keyRelease(KeyEvent.VK_L);
    }
  }
  // Botón B
  if((combout & 2) != 0) {
    if((recvout & 2) == 0) {
      VKey.keyPress(KeyEvent.VK_K);
    } else{
      VKey.keyRelease(KeyEvent.VK_K);
    }
  }
  // Botón Select
  if((combout & 4) != 0) {
    if((recvout & 4) == 0) {
      VKey.keyPress(KeyEvent.VK_G);
    } else{
      VKey.keyRelease(KeyEvent.VK_G);
    }
  }
  // Botón Start
  if((combout & 8) != 0) {
    if((recvout & 8) == 0) {
      VKey.keyPress(KeyEvent.VK_H);
    } else{
      VKey.keyRelease(KeyEvent.VK_H);
    }
  }
  // Botón Arriba
  if((combout & 16) != 0) {
    if((recvout & 16) == 0) {
      VKey.keyPress(KeyEvent.VK_W);
    } else{
      VKey.keyRelease(KeyEvent.VK_W);
    }
  }
  // Botón Abajo
  if((combout & 32) != 0) {
    if((recvout & 32) == 0) {
      VKey.keyPress(KeyEvent.VK_S);
    } else{
      VKey.keyRelease(KeyEvent.VK_S);
    }
  }
  // Botón Izquierdo
  if((combout & 64) != 0) {
    if((recvout & 64) == 0) {
      VKey.keyPress(KeyEvent.VK_A);
    } else{
      VKey.keyRelease(KeyEvent.VK_A);
    }
  }
  // Botón Derecho
  if((combout & 128) != 0) {
    if((recvout & 128) == 0) {
      VKey.keyPress(KeyEvent.VK_D);
    } else{
      VKey.keyRelease(KeyEvent.VK_D);
    }
  }
}
  voidemularMovimientoRaton() {
  // Botón Izquierdo
  if((combout & 64) != 0) {
    if((recvout & 64) == 0) {
      VKey.mouseMove(MouseInfo.getPointerInfo().getLocation().x-100,MouseInfo.getPointerInfo().getLocation().y);
    }
  }
  // Botón Derecho
  if((combout & 128) != 0) {
    if((recvout & 128) == 0) {
      VKey.mouseMove(MouseInfo.getPointerInfo().getLocation().x+100,MouseInfo.getPointerInfo().getLocation().y);
    }
  }
  // Botón Arriba
  if((combout & 16) != 0) {
    if((recvout & 16) == 0) {
      VKey.mouseMove(MouseInfo.getPointerInfo().getLocation().x,MouseInfo.getPointerInfo().getLocation().y-100);
    }
  }
  // Botón Abajo
  if((combout & 32) != 0) {
    if((recvout & 32) == 0) {
      VKey.mouseMove(MouseInfo.getPointerInfo().getLocation().x,MouseInfo.getPointerInfo().getLocation().y+100);
    }
  }
  // Botón A
  if((combout & 1) != 0) {
    if((recvout & 1) == 0) {
      VKey.mousePress(InputEvent.BUTTON1_MASK);
    } else{
      VKey.mouseRelease(InputEvent.BUTTON1_MASK);
    }
  }
}
Video de explicación y demostración de funcionamiento:
Anuncios

Trabajo de investigación “Paralelismo en el procesador”

INTRODUCCIÓN

El presente es un trabajo investigativo realizado para la clase de Arquitectura de computadoras de la Carrera de Ingeniería en Sistemas, UNAH.

En él se pretende dar a conocer fundamentos teóricos sobre el tema “Pararelismo en el procesador”, para ello será necesario abordar otros tópicos como ser:

  • Las diferentes formas de paralelismo que existen:
    • A nivel de datos.
    • A nivel de instrucciones.
  • Segmentación.
  • Multinúcleo.
  • Taxonomía de Flynn.
    • Modelo SISD.
    • Modelo SIMD
    • Modelo MIDS
    • Modelo MIMD

CONTENIDO

El paralelismo lo podemos definir como la ejecución de diversas actividades simultáneamente en varios procesadores.

Se puede hablar de un “pseudoparalelismo” cuando solamente existe un procesador gestionando multiprogramación.

Al hablar de paralelismo surge el concepto de concurrencia el cual se refiere a  la existencia de varias actividades ejecutándose simultáneamente y necesitan sincronizarse para actuar de manera conjunta.

Hay concurrencia entre varios procesos cuando existen al mismo tiempo.

Hay paralelismo entre varios procesos cuando se ejecutan al mismo tiempo.

El paralelismo requiere un soporte físico: varios procesadores.

Paralelismo a nivel de datos.

El paralelismo a nivel de datos se da cuando cada procesador ejecuta la misma tarea sobre diferentes conjuntos o subregiones de datos.

Hace referencia a los escenarios en los que la misma operación se realiza simultáneamente (es decir, en paralelo) en elementos de una colección o matriz de origen. En las operaciones paralelas de datos, se crean particiones de la colección de origen para que varios subprocesos puedan funcionar simultáneamente en segmentos diferentes.

Ejemplo de paralelismo a nivel de datos con C# utilizando la librería “Task Parallel Library”

Esta biblioteca admite el paralelismo de datos a través de la clase System.Threading.Tasks.Parallel, Esta clase proporciona las implementaciones paralelas basadas en método de los bucles for y foreach .

// Versión secuencial

foreach (var item in sourceCollection)

{

Process(item);

}

 

// Versión en paralelo

Parallel.ForEach(sourceCollection, item => Process(item));

 

Cuando un bucle paralelo se ejecuta, la TPL crea particiones del origen de datos para que el bucle pueda funcionar simultáneamente en varias partes. En segundo plano, el programador de tareas crea particiones de la tarea según los recursos del sistema y la carga de trabajo. Cuando es posible, el programador redistribuye el trabajo entre varios subprocesos y procesadores si se desequilibra la carga de trabajo.

Paralelismo a nivel de instrucción.

El paralelismo a nivel de instrucción se utilizó por primera vez en las arquitecturas computacionales como un medio para agilizar el código de máquina secuencial ordinario. La pregunta clave en su momento fue: “¿qué tan rápido puede ejecutarse un programa en un procesador con paralelismo a nivel de instrucción?”.

Ciclo de la instrucción.

Cada instrucción que se ejecuta un computador pasa por un ciclo, que va desde que es seleccionada desde memoria hasta que completa su objetivo. Este ciclo aunque es similar en todas las arquitecturas de computadores, presenta algunas variaciones, dependiendo de la complejidad de la microarquitectura y de decisiones de diseño.

Para evitar problemas al momento de analizar el modelo y trabajar con un ciclo más simple, se trabajará con una versión simplificada del computador básico, la cual se muestra en la siguiente figura:

compciclo.png

El ciclo de la instrucción para este computador, contará de 5 etapas: instruction fetch, instruction decode, execute, memory y writeback.

  • Instruction fetch (IF)

Corresponde a la primera etapa del ciclo, en la cual se va a buscar a la memoria de instrucciones la siguiente instrucción, apuntada por el valor actual del “Program Counter”. La salida de esta etapa es la instrucción obtenida desde memoria, la cual se separará en un “opcode” y en un parámetro.

  • Instruction decode (ID)

La segunda etapa del ciclo corresponde al “Instruction decode”, es decir la decodificación de la instrucción y la generación de las señales de control. La unidad de control se encargará de transformar el “opcode” de la instrucción obtenida en las señales de control específicas que le indicarán al procesador qué tarea ejecutar.

  • Execute (EX)

La tercera etapa corresponde a la ejecución, la cual es realizada mediante la ALU.

La ALU, como única unidad de ejecución en este computador, se encargará de realizar la operación seleccionada en la etapa previa, con los parámetros seleccionados también por las señales de control, obteniendo un resultado. Adicionalmente, la ALU también generará el “condition code Z”, dependiendo del resultado de la operación obtenida.

  • Memory (MEM)

La cuarta etapa corresponde a la lectura o escritura en memoria de datos.

Esta etapa solo estará presente si a la instrucción ejecutada le correspondía transferencia hacia o desde memoria.

En esta etapa se podrá haber escrito en memoria, u obtenido un dato de esta para luego ser almacenado en un registro.

  • Writeback (WB)

La última etapa del ciclo también estará presente solamente en algunas instrucciones.

En esta etapa de “writeback”, corresponderá escribir en los registros ya sea un resultado de la ALU o un dato obtenido desde memoria.

 

Segmentación (Pipelining).

La segmentación consiste en dividir un proceso secuencial en etapas independientes.

Existen diversos procesos que pueden ser modelados como un pipeline, siendo los más comunes las líneas de ensamblaje industriales, en las cuales distintas tareas son ejecutadas sobre un producto y luego de ejecutar todas las tareas se obtiene un producto final terminado.

La gran ventaja de un pipeline de ensamblaje está en que es posible paralelizar la producción de un producto, dado que al mismo tiempo que se le esté aplicando un proceso a un elemento, es posible estar ejecutando otra tarea sobre otro elemento.

De esta forma, al dividir la producción completa en tareas menores se logra reducir el tiempo, ya que se aprovecha que cada parte del proceso es independiente, y que por tanto queda “libre” una vez que un determinado elemento ha pasado por esta.

Instruction pipeline.

En el caso del procesamiento de la instrucción, esta secuencia de etapas se conoce como “instruction pipeline”, que contiene las distintas partes del ciclo de la instrucción antes descrito. En el “instruction pipeline” ocurre lo mismo que en el pipeline de ensamblaje: la idea es poder reutilizar cada una de las subetapas para ir procesando otras instrucciones de manera simultánea; de esta manera se consigue que N unidades funcionales del procesador estén trabajando a la vez, lo que redunda en un factor de mejor en el rendimiento del chip en circunstancias ideales.

 
Ventajas:
  • El programador puede conocer las partes lógicas de su programa, dándoles un tratamiento particular.
  • Es posible compilar módulos separados como segmentos.
  • Es posible que los segmentos crezcan dinámicamente según las necesidades del programa en ejecución.
  • Existe la posibilidad de definir segmentos que aun no existan.
Desventajas:
  • Debido a que los segmentos tienen un tamaño variable se pueden presentar problemas de fragmentación externas.
  • Al permitir que los segmentos varíen de tamaño, pueden ser necesarios planes de reubicación a nivel de los discos, si los segmentos son devueltos a dicho dispositivo, lo que conlleva a nuevos costos.

Tecnología MultiThreading.

Esta Tecnología permite ejecutar múltiples hilos para procesarlos en paralelo dentro de un único procesador. Esta tecnología simula dos procesadores no lógicos dentro de un procesador imaginario.

java-concurrency-tutorial-introduction-1.png

Ya que los programas usualmente ejecutan más de un “thread”, un paso más de desarrollo de procesadores es la incorporación de capacidad para ejecutar varios hilos. Se pueden mantener los recursos del procesador ocupados aún cuando un “thread” se frene ante un fallo de caché o una falla de predicción de salto.

Características.

  • Diferentes hilos de ejecución comparten las unidades funcionales del procesador (por ejemplo, unidades funcionales).
  • El procesador debe tener estructuras independientes para cada uno de los hilos que ejecuta, como registro de renombre o contador de programa, entre otros.
  • Si los hilos pertenecen a diferentes procesos, el procesador debe facilitar mecanismos para que puedan trabajar con diferentes tablas de páginas.

Las arquitecturas actuales explotan este paradigma de muchas formas diferentes. Sin embargo, la motivación es la misma: la mayoría de aplicaciones actuales tienen un alto nivel de paralelismo y su rendimiento escala añadiendo más paralelismo a nivel de procesador.

El objetivo es mejorar la productividad de los sistemas que pueden correr aplicaciones que son inherentemente paralelas.

Tecnología Multinúcleo.

Cuando se habla de “núcleos” o “Cores” de una CPU, se refiere a cada uno de los procesadores que están empaquetados en la cápsula, es decir en el chip. Entonces cuando nos referimos a “Tecnología Multinúcleo” nos referimos a dos o cuatro núcleos en un único chip. Básicamente, los CPU de varios núcleos, permiten que la computadora realice varios procesos a la vez en los diferentes procesadores que posee el chip.

Cada uno de los procesadores está fuertemente acoplado con una cache pequeña de 1er nivel, y todos los procesadores comparten una cache de 2º nivel. Los procesadores pueden colaborar en tareas paralelas o ejecutar tareas independientes. Requiere código con paralelismo explícito para aprovechar todo el potencial.

Definiciones

A continuación se muestra un recuadro con el significado de las definiciones con las cuales se conocen en el mercado a los diferentes tipos de CPU y la cantidad de cores o núcleos que contienen.

TIPO DE PROCESADOR CANTIDAD DE NUCLEOS
Dual Core Dos núcleos
Quad Core Cuatro núcleos
Hexa Core Seis núcleos
Octo Core Ocho núcleos
Deca Core Diez núcleos

Evolución potencial de las arquitecturas multicore.

2

4

6

Taxonomía de Flynn.

Michael Flynn propuso un mecanismo de clasificación de las computadoras.

El método de Flynn se basa en el número de instrucciones y de la secuencia de datos que la computadora utiliza para procesar información. Puede haber secuencias de instrucciones sencillas o múltiples y secuencias de datos sencillas o múltiples.

descarga.jpeg

Modelo SISD: Single Instruction, Single Data

Se refiere a las computadoras convencionales de Von Neumann. Ejemplo: PC’s.

En la categoría SISD están la gran mayoría de las computadoras existentes. Son equipos con un solo procesador que trabaja sobre un solo dato a la vez. A estos equipos se les llama también computadoras secuenciales.

Este hardware está diseñado para dar soporte al procesamiento secuencial clásico, basado en el intercambio de datos entre memoria y registros del procesador, y la realización de operaciones aritméticas en ellos.

400px-SISD

Características del modelo SISD.

  • La CPU procesa únicamente una instrucción por cada ciclo de reloj.
  • Únicamente un dato es procesado en cada ciclo de reloj.
  • Es el modelo más antiguo de computadora y el más extendido.
  • Ejemplo: la mayoría de las computadoras, servidores y estaciones de trabajo.

 

Modelo SIMD: (Single Instruction, Multiple Data).

Fueron los primeros multiprocesadores difundidos comercialmente.

Es una técnica empleada para conseguir paralelismo a nivel de datos.

Los repertorios SIMD consisten en instrucciones que aplican una misma operación sobre un conjunto más o menos grande de datos. Es una organización en donde una única unidad de control común despacha las instrucciones a diferentes unidades de procesamiento. Todas éstas reciben la misma instrucción, pero operan sobre diferentes conjuntos de datos. Es decir, la misma instrucción es ejecutada de manera sincronizada por todas las unidades de procesamiento.

Características del modelo SIMD.

  • Todas las unidades ejecutan la misma instrucción.
  • Cada unidad procesa un dato distinto.
  • Todas las unidades operan simultáneamente

1200px-SIMD.svg

Modelo MISD: (Multiple Instruction, Single Data).

Las arquitecturas de tipo pipeline pertenecen a esta clasificación, también pertenecen los computadores tolerantes a fallos que utilizan ejecución redundante para detectar y enmascarar errores, no existen otras implementaciones específicas.

1200px-MISD.svg

Características del modelo MISD.

  • Cada unidad ejecuta una instrucción distinta.
  • Cada unidad procesa el mismo dato.
  • Aplicación muy limitada en la vida real.

Modelo MIMD: (Multiple Instruction, Multiple Data).

Las máquinas que usan MIMD tienen un número de procesadores que funcionan de manera asíncrona e independiente. En cualquier momento, cualquier procesador puede ejecutar diferentes instrucciones sobre distintos datos. La arquitectura MIMD puede utilizarse en una amplia gama de aplicaciones como el diseño asistido, simulación, modelado y en interruptores.

1200px-MIMD.svg

Características del modelo MIMD.

  • Cada unidad ejecuta una instrucción distinta.
  • Cada unidad procesa un dato distinto.
  • Todas las unidades operan simultáneamente.
  • Consistieron en el “siguiente paso” en la evolución de las arquitecturas paralelas.

Categorización del modelo MIMD.

Esta categorización se basa en el mecanismo utilizado para comunicación y sincronización.

MIMD de memoria compartida:
  • Comunicación entre procesadores a través del recurso compartido.
  • El bus (cuello de botella) limita la escalabilidad a un máximo de pocas decenas de procesadores.
MIMD de memoria distribuida:
  • No existe el concepto de memoria global.
  • Arquitectura escalable para aplicaciones apropiadas para esta topología.

CONCLUSIONES

El paralelismo (multiprocesadores) se puede aprovechar desde un programa al utilizar la Programación Concurrente.

El paralelismo hace referencia a la cantidad de procesadores, mientras que la concurrencia hace referencia a las actividades, por lo que podemos concluir que la concurrencia es un concepto lógico.

El paralelismo es una forma eficaz de explotar los sucesos concurrentes en el proceso de computación.

Un procesador segmentado es aquel que divide el proceso de ejecución de una instrucción en etapas de similar duración, con el objetivo último de procesar instrucciones simultáneamente, encontrándose cada una en una etapa diferente de su ejecución.

El principio MultiThreading” se refiere a que el procesador puede ejecutar más de un “thread” al mismo tiempo.

La carga de instrucciones y la ejecución segmentada de instrucciones son ejemplos comunes encontrados en las computadoras SISD más modernas.

Los modelos MIMD y SIMD son más apropiados para la aplicación del paralelismo tanto a nivel de datos como de control.

A diferencia de los modelos SISD y MISD, las computadoras MIMD pueden trabajar asincrónicamente

BIBLIOGRAFÍA

  • “Pipeline: paralelismo a nivel de instrucción”

http://www.academia.edu/10850712/Pipeline_Paralelismo_a_nivel_de_instrucci%C3%B3n

  • “Concurrencia y paralelismo”

http://people.ac.upc.edu/marisa/miso/concurrencia.pdf

  • “Data Parallelism (Task Parallel Library)”

https://msdn.microsoft.com/es-es/library/dd537608(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

  • “Características de paralelismo en procesadores”

http://www.academia.edu/9664619/Caracter%C3%ADsticas_de_Paralelismo_en_Procesadores

  • “Microprocesadores Multinúcleo”

http://www.nacho-alvarez.es/wp-content/uploads/2008/06/procesadores_multi_nucleo.pdf

  • “Introducción al Paralelismo y Organización de un Computador”

http://ocw.uc3m.es/ingenieria-informatica/organizacion-de-computadores/material-teorico-1/OC_T00.pdf

  • “Arquitecturas multihilo”

https://www.exabyteinformatica.com/uoc/Informatica/Arquitecturas_de_computadores_avanzadas/Arquitecturas_de_computadores_avanzadas_(Modulo_3).pdf

  • “Arquitecturas paralelas”

https://www.fing.edu.uy/inco/cursos/hpc/material/clases/Clase2-2009.pdf

Link al documento en PDF:

Paralelismo en el procesador Saul Lainez – 20101006758

Tecnologías que se usan en la construcción de Memoria Ram y Memoria Caché

Memoria Ram

Las memorias de acceso aleatorio son conocidas como memorias RAM (Random Access Memory).

Se caracterizan por ser memorias de lectura/escritura y contienen un conjunto de variables de dirección que permiten seleccionar cualquier dirección de memoria de forma directa e independiente de la posición en la que se encuentre.

Existen muchas tecnologías de memoria RAM, pero pueden resumirse en dos grandes grupos:  Memorias RAM estáticas (SRAM) y dinámicas (DRAM).

DRAM

Este tipo de memoria es el más ampliamente utilizado en los PCs actuales.  Tiene la característica de ser de fácil construcción (resulta económica) y muy compacta (muchos bits en poco espacio), aunque con el inconveniente de la necesidad de refresco ya comentada, además de ser comparativamente “lenta”. Este último factor ha ha motivado la aparición de memorias caché mucho más rápidas.  La velocidad de acceso de la DRAM es del orden de 60 ns.

Almacena su información en una celda que contiene un condensador y un transistor; Debido a este diseño, estas células deben ser alimentadas con electricidad cada pocos milisegundos para que la memoria siga reteniendo sus datos.

Esta memoria es de tipo volátil, lo que significa que si se desconecta de la corriente eléctrica, pierdela información que almacenaba.

SRAM.

Este tipo de memoria está formada por conjuntos de 6 transistores por cada bit; lo que origina que mientras exista alimentación no pierde su contenido. Además es muy rápida, pero es comparativamente más voluminosa que la DRAM y mucho más cara.

A diferencia de la DRAM, que almacena los bits en células que contienen un condensador y un transistor, SRAM no tiene que ser alimentadas con electricidad periódicamente para retener sus datos.

Jerarquía de memoria

En la construcción del sistema de memoria de un computador se persiguen entre otros tres objetivos: alta velocidad, alta capacidad y bajo coste.

Si analizamos los diferentes tipos de tecnologías de memoria existentes en la actualidad (SRAM, DRAM y almacenamiento magnético) llegamos a la conclusión de que no hay ninguna tecnología de memoria que por sí sola satisfaga los requisitos antes mencionados, debido a que:

  • La SRAM es la más rápida, pero enormemente costosa.
  • El almacenamiento magnético es muy económico y tiene una enorme capacidad pero es extremadamente lento.
  • La tecnología DRAM se encuentra en el punto intermedio, no es suficientemente rápida, ni suficientemente grande, pero tampoco excesivamente costosa.

Como consecuencia de esto, la solución al problema reside en combinar memorias rápidas y pequeñas con memorias lentas y grandes de tal forma que:

  • Las  memorias rápidas y pequeñas contengan los datos con más probabilidad de acceso.
  • Las memorias lentas y grandes contengan los datos con menos probabilidad de acceso.

Con esto se consigue que la capacidad del sistema de memoria sea elevada, pues contiene memorias grandes. Además, en la mayor parte de los casos el sistema de memoria será rápido, pues en la mayor parte de los casos accederá a las memorias rápidas.

Para poder llevar a la práctica la solución anterior es necesario que se cumplan dos condiciones:

  • Conocer a priori los datos con mayor probabilidad de acceso futuro para así poder almacenarlos en las memorias pequeñas y rápidas.
  • Que estos datos sean pocos y con una gran probabilidad de ser accedidos en el futuro. De esta forma cabrán en las memorias pequeñas y rápidas y además servirán la mayor parte de los accesos futuros, obteniéndose un sistema de memoria rápido en la mayor parte de los casos.

La combinación de las diferentes tecnologías de memoria se hace en niveles de diferente capacidad y velocidad, formando lo que se conoce como jerarquía de memoria.

Memoria Caché

La memoria caché de un procesador, es un tipo de memoria volátil (como la memoria RAM), pero muy rápida. Su función es almacenar instrucciones y datos a los que el procesador debe acceder continuamente.

El sistema de memoria cache está diseñado especialmente para servir al apropiado y organizado almacenamiento de información en una computadora. Su función es básicamente mantener de manera temporal y accesible aquellos datos que son requeridos para realizar determinadas funciones o tareas. Esta disponibilidad permite que cada programa o archivo tenga inmediato acceso a la información necesaria y pueda así dedicarse a subir el nivel de eficiencia de las funciones normales. De tal modo, la memoria principal cuenta con una gran ayuda que le permite adquirir mayor velocidad de desempeño y mejores resultados por fuera de sus limitadas capacidades.

¿Cómo funciona la memoria cache?

Cada vez que el sistema quiere acceder a un nuevo dato, éste es almacenado en la memoria caché. Entonces, cuando se necesita recurrir nuevamente al mismo dato, el sistema se dirigirá directamente al caché, haciendo así el proceso mucho más rápido. Este ciclo de almacenamiento y rescate de datos, obliga a la memoria caché a estar en continua renovación.

Su función, entonces, es mantener de manera temporal y accesible aquellos datos que son requeridos por el sistema para realizar determinadas funciones o tareas. Así, cada vez que abras una app en tu smartphone, ésta tendrá acceso inmediato a la información que necesita para subir el nivel de eficiencia de sus funciones.

Bibliografía

http://www.zator.com/Hardware/H5_3_2.htm

http://mermaja.act.uji.es/docencia/is23/data/trabajos08/Memorias.pdf

http://www.lgblog.cl/tecnologia/que-es-el-cache/

http://www.atc.uniovi.es/inf_med_gijon/3ingcomp/practicas/SMC/teor%C3%ADa-conceptos.htm

http://whatis.techtarget.com/definition/SRAM-static-random-access-memory

http://www.computerhope.com/jargon/d/dram.htm

Tarea

Camino de datos.

Es la sección del computador encargada de manipular y transformar los datos procedentes de la memoria o los registros internos, para obtener los resultados .

Su labor es soportar el conjunto de operaciones que precisan las instrucciones del repertorio que es capaz de interpretar la unidad de control.

Unidad de control.

Es la sección del computador encargada de interpretar las instrucciones del programa y gobernar la ejecución de las mismas.

La unidad de control emite señales de control (ordenes) externas a la CPU para producir el intercambio de datos con la memoria y los módulos de E/S. Tambien emite señales de control internas para transferir datos entre registros, hacer que la ALU ejecute una función concreta y regular otras operaciones internas.

La unidad de control necesita dos registros:
1) Uno, llamado contador de programa, que contiene la dirección de las próxima instrucción por ejecutar. Su nombre se debe a que, excepción hecha de las rupturas de secuencia, este registro va aumentando su contenido de manera de direccionar a la siguiente instrucción;
2) Otro, llamado registro de instrucción, que tiene dos partes: una para el código de operación, que define el tipo de instrucción a ejecutar (suma, multiplicación, salto, etc.) y otra parte, que contiene la dirección del operando.
Sus componentes son:

– Decodificador: Se encarga de extraer el código de operación de la instrucción en curso (que está en RI), la analiza y emite señales necesarias al resto de elementos para su ejecución a través del secuenciador.

– Reloj: Proporciona una sucesión de pulsos eléctricos o ciclos a intervalos constantes, que marcan los instantes en que han de comenzar los distintos pasos de que consta cada
instrucción.

– Secuenciador (S): También llamado controlador. En este dispositivo se generan órdenes muy elementales (microórdenes) que, sincronizadas por los pulsos del reloj, hacen que se vaya ejecutando poco a poco la instrucción que está cargada en el RI.

Registros.

Un registro es una memoria de alta velocidad y poca capacidad, integrada en el microprocesador, que permite guardar transitoriamente y acceder a valores muy usados, generalmente en operaciones matemáticas.

Los registros están en la cumbre de la jerarquía de memoria, y son la manera más rápida que tiene el sistema de almacenar datos.

La cantidad, tamaño y función de los registros varía según el diseño del procesador

Es una de las decisiones más importantes del diseño

Tipos de Registros

Visibles al programador                                                                                                                                         Propósito general                                                                                                                                                    • Cuanto más generales, mayor flexibilidad para el usuario                                                                • Frecuentemente existen restricciones. Ej., la suma se aplica siempre sobre el                            registro AC.

Datos                                                                                                                                                                             • Operandos de ALU

Direcciones                                                                                                                                                                  • Segmento, puntero de stack, etc.

Códigos de condición                                                                                                                                                • Se acceden implícitamente mediante instrucciones de salto condicional                                    • En general forman parte de la palabra de estado

Control y estado (PC, IR, MBR y MAR)                                                                                                                Algunos son visibles al programador y otros no                                                                                      Ej. PC, IR, MBR, MAR, palabra de estado

Unidad Aritmética Lógica.

La ALU o unidad aritmético lógica consiste en un circuito digital que permite realizar operaciones ariméticas y lógicas entre dos números.

Es necesario que se deba determinar en su interior las condiciones en las que son procesados los operandos, como si es negativo o positivo, si se ha desbordado la capacidad, con esta información se determinará cual será la decisión a tomar.

Esta unidad realiza cálculos (suma, resta, multiplicación y división) y operaciones lógicas (comparaciones). Transfiere los datos entre las posiciones de almacenamiento.

Tiene un registro muy importante conocido como: Acumulador ACC Al realizar operaciones aritméticas y lógicas, la UAL mueve datos entre ella y el almacenamiento. Los datos usados en el procesamiento se transfieren de su posición en el almacenamiento a la UAL.

Los datos se manipulan de acuerdo con las instrucciones del programa y regresan al almacenamiento. Debido a que el procesamiento no puede efectuarse en el área de almacenamiento, los datos deben transferirse a la UAL. Para terminar una operación puede suceder que los datos pasen de la UAL al área de almacenamient o varias veces.

Las ALUs existen en todo circuito electrónico moderno, desde realizar incrementos de 1 al tiempo actual, en contadores de circuitos sencillos e incrementadores en calculadoras básicas, hasta las sofisticadas en los procesadores Phenom AMD II y Core i7 de Intel; en procesadores gráficos, tarjetas de sonido, lectores ópticos (CD) y televisores de alta definición en donde se ubican ALUs muy potentes.

Típicamente, una unidad aritmético lógica está compuesta por un circuito operacional, un registro de entradas, un registro acumulador y un registro de estados. Estas entidades permiten el correcto funcionamiento de la ALU y, por ejemplo, son responsables de la resolución de operaciones aritméticas de números enteros, operaciones lógicas de bits, operaciones de desplazamiento de bits y otras más complejas. Entre estas últimas pueden contarse, por caso, calcular la raíz cuadrada, emular a un coprocesador y múltiples otras.

Segmentación.

La segmentación de cauce (pipelining) es una forma particularmente efectiva de organizar el hardware de la CPU para realizar más de una operación al mismo tiempo.

Consiste en descomponer el proceso de ejecución de las instrucciones en fases o etapas que permitan una ejecución simultánea.

Explota el paralelismo entre las instrucciones de un flujo secuencial.

Características.

La segmentación es una técnica de mejora de prestaciones a nivel de diseño hardware.

La segmentación es invisible al programador.

Necesidad de uniformizar las etapas.

              Al tiempo de la más lenta

El diseño de procesadores segmentados tiene gran dependencia del repertorio de instrucciones.

Bibliografía

http://quegrande.org/apuntes/EI/2/ECm1/teoria/07-08/tema_4.pdf

http://weblidi.info.unlp.edu.ar/catedras/arquitecturaP2003/teorias/notas%20clase%2004.pdf

http://www.dia.eui.upm.es/asignatu/Arq_com/AC%20Grado/Paco%20Aylagas/3-Segmentaci%C3%B3n.pdf

http://rafazarquitectura.blogspot.com/2010/09/unidad-aritmetica-logica.html

http://www.internetglosario.com/805/UnidadAritmeticoLogica.html

https://www.fing.edu.uy/inco/cursos/arqsis2/teorico/clase03.pdf

http://www.portalhuarpe.com/Medhime20/Sitios%20con%20Medhime/Computaci%C3%B3n/COMPUTACION/Menu/modulo%205/5-5.htm

http://www.portalhuarpe.com/Medhime20/Sitios%20con%20Medhime/Computaci%C3%B3n/COMPUTACION/Menu/modulo%205/5-6.htm

Frecuencia del procesador

El procesamiento de instrucciones se realiza en ciclos. Pero no todas las funciones se ejecutan en un único ciclo. El procesamiento de instrucciones complejas requiere la ejecución de varias acciones por lo que pueden necesitar varios ciclos.

Frecuencia de trabajo interna.

Determina cuántos ciclos para nanoinstrucciones tienen lugar cada segundo. Un procesador con una frecuencia de 100 MHZ ejecuta 100 millones de nanoinstrucciones por segundo. Como cada instrucción necesita varias etapas, siempre se dan menos de 100 millones de ciclos de instrucción por segundo.

Frecuencia externa.

Indica la velocidad con la que el procesador puede acceder a la memoria RAM. La velocidad depende aquí de la placa base.

La frecuencia interna y externa no tiene  porqué ser iguales.  En función del tamaño y estructura del juego de instrucciones,  una CPU puede ser más rápida que otra con la misma frecuencia interna. Esto depende fundamentalmente de la cantidad media de nanoinstrucciones que tiene cada instrucción.

Fuentes consultadas:

http://www.alegsa.com.ar/Diccionario/C/14258.php

https://books.google.hn/books?id=nDb5ywe_PPoC&pg=PA64&lpg=PA64&dq=frecuencia+interna+cpu&source=bl&ots=4tI72Pvq-G&sig=MKDpfW3jS20OXQk8JVtR2S2o29w&hl=es&sa=X&ved=0ahUKEwiexfn1ou3RAhWK5SYKHVlpD_IQ6AEISDAK#v=onepage&q=frecuencia%20interna%20cpu&f=false

Hercio

El Hertz, Hertzio, hercio o Hz es una unidad física usada para medir la frecuencia de ondas y vibraciones de tipo electromagnético. Debe su nombre a su descubridor, H.R. Hertz quien vió que los impulsos eléctricos se comportaban como ondas, y por tanto se podía medir su frecuencia contando los ciclos que hacían por segundo.
La magnitud que mide el hercio se denomina frecuencia y es, en este sentido, la inversa del período. Un hercio es la frecuencia de una partícula que sufre una oscilación en un período de un segundo.
Otras unidades Hertz

• Kilohertz (KHz) – 1000 Hz
• Megahertz (MHz) – 1000 KHz
• Gigahertz (GHz) – 1000 MHz
• Terahertz (THz) – 1000 GHz
• Petahertz (PHz) – 1000 THz
• Exahertz (EHz) – 1000 PHz
• Zettahertz (ZHz) – 1000 EHz
• Yottahertz (YHz) – 1000 ZHz

Fuentes consultadas:

http://www.mastermagazine.info/termino/5236.php

http://www.tecnologiahechapalabra.com/salud/eventos/articulo.asp?i=6631

http://www.alegsa.com.ar/Dic/hertz.php

El transistor

¿Qué es un transistor?

Un transistor es un dispositivo que regula el flujo de corriente o de tensión actuando como un interruptor o amplificador para señales electrónicas.

El transistor, inventado en 1951, es el componente electrónico estrella, pues inició una auténtica revolución en la electrónica que ha superado cualquier previsión inicial. También se llama Transistor Bipolar o Transistor Electrónico.

Vienen a sustituir a las antiguas válvulas termoiónicas de hace unas décadas. Gracias a ellos fue posible la construcción de receptores de radio portátiles llamados comúnmente “transistores“, televisores que se encendían en un par de segundos, televisores en color, etc. Antes de aparecer los transistores, los aparatos a válvulas tenían que trabajar con tensiones bastante altas, tardaban más de 30 segundos en empezar a funcionar, y en ningún caso podían funcionar a pilas debido al gran consumo que tenían.

Los transistores son unos elementos que han facilitado, en gran medida, el diseño de circuitos electrónicos de reducido tamaño, gran versatilidad y facilidad de control. En la siguiente imagen podemos ver varios transistorores diferentes.

Polarización de un Transistor

Una polarización correcta permite el funcionamiento de este componente. No es lo mismo polarizar un transistor NPN que PNP. Generalmente podemos decir que la unión base – emisor se polariza directamente y la unión base – colector inversamente.

Zonas de Trabajo

Corte: No circula intensidad por la Base, por lo que, la intensidad de Colector y Emisor también es nula. La tensión entre Colector y Emisor es la de la batería. El transistor, entre Colector y Emisor se comporta como un interruptor abierto. IB es igual a IC es igual a IE es igual a 0; VCE es igual a Vbat

Saturación: Cuando por la Base circula una intensidad, se aprecia un incremento de la corriente de colector considerable. En este caso el transistor entre Colector y Emisor se comporta como un interruptor cerrado. De esta forma, se puede decir que la tensión de la batería se encuentra en la carga conectada en el Colector.

Activa: Actúa como amplificador. Puede dejar pasar más o menos corriente. Cuando trabaja en la zona de corte y la de saturación se dice que trabaja en conmutación. En definitiva, como si fuera un interruptor. La ganancia de corriente es un parámetro también importante para los transistores ya que relaciona la variación que sufre la corriente de colector para una variación de la corriente de base. Los fabricantes suelen especificarlo en sus hojas de características, también aparece con la denominación hFE. Se expresa de la siguiente manera:

ß = IC / IB

Fuentes consultadas:

https://www.ecured.cu/Transistor

http://www.areatecnologia.com/TUTORIALES/EL%20TRANSISTOR.htm