martes, 27 de noviembre de 2012

Buses de un Sistema de computo

Un BUS es un conjunto de conductores comunes que interconectan componentes en un sistema de cómputo.  Los buses que interconectan partes de un sistema de cómputo transfieren direcciones, datos e información de control entre el microprocesador y sus sistemas de memoria y de entrada/salida.  En el sistema de cómputo basado en el microprocesador, existen tres tipos de buses para esta transferencia de información: el bus de datos, el bus de direcciones y el bus de control.  La figura 5 muestra cómo estos buses interconecta a varios componentes del bus del sistema, como el microprocesador, la RAM, la ROM y algunos pocos dispositivos de entrada/salida.


El bus de direcciones solicita a la memoria una localidad de memoria o a los dispositivos de entrada/salida  una localidad de entrada/salida.  Si la entrada/salida es direccionada, el bus de direcciones contiene una dirección de entrada/salida de 16 bits; si la memoria es direccionada, el bus de direcciones contiene una dirección de memoria que varía en ancho dependiendo de una versión  del microprocesador a otro microprocesador.

El bus de datos transfiere información entre el microprocesador y su espacio de direccionamiento de memoria y entrada/salida; la transferencia de datos varía tamaño dependiendo del tipo de microprocesador que se trate.  La ventaja de un bus más ancho es la velocidad de las aplicaciones que utilizan formatos grandes.

El bus de control contiene líneas que seleccionan ya sea a la memoria o la entrada/salida y que ocasionan que éstas efectúen una operación de lectura o escritura.  En la mayoría de los sistemas de cómputo existen cuatro líneas del bus de control: MRDC (Control de lectura de memoria), MWTC (Control de escritura de memoria), IORC (Control de lectura de entrada/salida) e IOWC (Control de escritura de entrada/salida).  Por ejemplo, si IOWC = 0, el microprocesador está escribiendo datos desde el bus de datos hacia un dispositivo de entrada/salida, cuya dirección aparece en el bus de direcciones.


Arquitectura Intel(Componentes, Modelo de programación, organización de memoria)


El Microprocesador.

El microprocesador es un circuito integrado de gran complejidad. Tiene capacidad para poder ejecutar miles de millones de instrucciones por segundo provenientes de un programa o software (grupo de instrucciones).

El microprocesador realiza tres tareas principales para el sistema de cómputo:
1. Transferencia de datos entre él mismo y la memoria o dispositivos de Entrada/Salida.
2. Operaciones Lógicas y Aritméticas.
3. Control de flujo del programa.

Internamente consta de varias partes:
Memoria cache o de almacenamiento intermedio (uno o dos niveles)

Unidad de recuperación de instrucciones

Cola de instrucciones
Unidades de ejecución.  

La figura siguiente figura muestra un esquema a bloques muy simplificado de un microprocesador y los elementos que le permiten comunicarse con la memoria a fin de recuperar instrucciones y ejecutarlas.

Asumiendo que en la memoria hay un espacio que contiene un programa, recuperado de un ejecutable, los pasos que daría el procesador serían más o menos los siguientes:

La BU (Bus Unit – Unidad de Bus-)  recupera de la memoria las instrucciones y, en el caso de las actuales Pentium y compatibles., las va almacenando en una cola, de tal manera que se encuentren ya en el microprocesador con antelación para acelerar la ejecución.

Las instrucciones van pasando de esa cola interna de la BU a la IU (Instruction Unit – Unidad de Instrucción-), que se encarga de decodificar las instrucciones y recuperar los datos que pudieran llevar asociados.  La UI conjuntamente con la BU, conforman la parte del microprocesador que se ocupa de ir recuperando y preparando las instrucciones del microprocesador.

Los dos bloques que aparecen a la izquierda, en el interior del microprocesador, forman la Unidad de Ejecución, compuesta de la CU (Control Unit –Unidad de Control -) y la ALU (Arithmetic Logic Unit –Unidad Lógica Aritmética-) Observe que estas unidades comparten el acceso a los registros.

Las instrucciones pasan de la IU a la CU, encargada de ejecutarlas sirviéndose para ello de los datos alojados en los registros y apoyándose en la ALU.  En consecuencia, se modificarán esos registros, por ejemplo el de indicadores y si es necesario se enviará de vuelta a la memoria el dato que corresponda.  Para ello la CU se comunica con la BU.


El microprocesador 8086/8088 está constituido por dos unidades que operan de manera independiente y estas son:

1. UNIDAD DE INTERFAZ DE BUS (BIU).
a)  Realiza la fase de captura de la instrucción.
b)  La coloca en la cola de espera.
(4 bytes para el 8088)
(6 bytes para el 8086)
c)  Realiza el control del Bus.
d)  Contiene los registros de segmento.

2.  UNIDAD DE EJECUCION. (EU)
a) Extrae la primera instrucción en la cola de la BIU
b) Ejecuta la instrucción.
c) Contiene los registros de propósito general, registros de pila y registro índice.

En la figura se muestra el diagrama del Modelo de Programación para este microprocesador.



El microprocesador tiene disponibles 20 bits de direccionamiento a memoria, es organizada en un arreglo lineal de 1'048,576 de bytes, direccionables del 00000H a 0FFFFFH.  La memoria es dividida lógicamente en segmentos llamados: CODE, DATA, EXTRA DATA y STACK. Cada uno puede tener desde 16 bytes hasta 64 KB de longitud.

La referencia a memoria se realiza mediante un DIRECCIONAMIENTO BASE él cual se encuentra en registros de segmento de alta velocidad. El tipo segmento se escogió de acuerdo a las necesidades de los programas.  El registro de segmento es seleccionado de acuerdo a la siguiente regla:
Toda la información con los mismos atributos es colocada en un mismo segmento; por ejemplo todo el código es colocado en el segmento de código (CS) y todos los datos son colocados en el segmento de datos (DS). Esta manera de hacer las cosas da como resultado programas más rápidos, cortos y estructurados.

La figura muestra  la organización de la memoria del microprocesador.



Hay localidades de la memoria las cuales son reservadas para operaciones específicas del microprocesador:

a)  De la dirección  00000H a la 003FFH son reservadas para interrupciones, lo que permite manejar hasta 256 interrupciones.
Cada interrupción usa 4 bytes:
*  2 bytes para la dirección del segmento.
*  2 bytes para la dirección del offset .

b) De la dirección FFFF0H a la FFFFFH son reservadas para rutinas de inicialización del sistema.

El microprocesador 8086/8088 puede manejar alrededor de 65536 puertos de Entrad/Salida. La dirección de Entrada/Salida permanece en el mismo formato en las líneas A0 a A15, las restantes líneas de dirección se mantienen en CERO en operaciones de entrada/salida. Las instrucciones de Entrada/Salida utilizan el registro DX como un apuntador, con ello se logra un acceso directo a cualquier dispositivo de Entrada/Salida.  En la figura 4 se muestra el diagrama del manejo del direccionamiento del microprocesador 8088/8086.

domingo, 16 de septiembre de 2012

Historia del Microprocesador Arquitectura Intel

Que es un microprocesador?
Es un circuito integrado conformado por millones de componentes electrónicos. Constituye la unidad central de procesamiento (CPU) de un PC catalogado como microcomputador.

Cual es su función?
Es el encargado de ejecutar los programas; desde el sistema operativo hasta las aplicaciones de usuario; sólo ejecuta instrucciones programadas en lenguaje de bajo nivel, realizando operaciones aritméticas y lógicas simples, tales como sumar, restar, multiplicar, dividir, las lógicas binarias y accesos a memoria.

Historia
Microprocesador 4004
Fue el primer microprocesador que se lanzo al mercado. Era de solo 4 bits capaz de direccionar 4096 localidades de memoria de 4 bits de ancho.
Contaba con un conjunto de 45 instrucciones y se usaba para videojuegos y sistemas de control.

Microprocesador 8008
Debido a que cada vez se necesitaban hacer operaciones mas complejas llego el micro 8008 que tenia 8 bits. Con esto se amplio la capacidad de direccionamiento de 16Kb.
Memoria de 8 bits.
Conjunto de 48 Instrucciones.

Los gemelos 8086/8088
Desarrollados por intel y los antecesores de los actuales microprocesadores del mercado.

 El trabajo de desarrollo para el 8086 comenzó en la primavera de 1976 y el chip fue introducido al mercado en el verano de 1978. El 8088 fue lanzado en 1979.

El 8086 y el 8088 ejecutan el mismo conjunto de instrucciones. Internamente son idénticos, excepto que el 8086 tiene una cola de 6 bytes para instrucciones y el 8088 de sólo 4. Exteriormente se diferencian en que el 8086 tiene un bus de datos de 16 bits y el del 8088 es de sólo 8 bits, por ello, el 8086 era más rápido. Por otro lado, el 8088 podía usar menor cantidad, y más económicos, circuitos lógicos de soporte, lo que permitía la fabricación de sistemas más económicos.


80286
Una de las características interesantes de este procesador es que fue el primer procesador x86 con modo protegido(Mas adelante se dedicara gran parte de este blog a su entendimiento), en el cual existían cuatro anillos de ejecución y división de memoria mediante tablas de segmentos.
Al tener un bus de direcciones de 24 bits, es capaz de direccionar hasta 16 MB de memoria RAM, mientras que el 8086 sólo puede direccionar 1 MB.

80386
El predecesor del i386 fue el Intel 80286, un procesador de 16 bits con un sistema de memoria segmentada. El i386 añadió una arquitectura de 32 bits y una unidad de traslación de páginas, lo que hizo mucho más sencillo implementar sistemas operativos que emplearan memoria virtual.

Intel introdujo posteriormente el i486, pero ni éste ni sus sucesores han introducido tantos cambios en la arquitectura x86 como el i386 con su sistema de direccionamiento plano de 32 bits. Otros microprocesadores, como el Motorola 68000 tenían direccionamiento plano desde mucho antes.

80486

Los Intel 80486 (i486, 486) son una familia de microprocesadores de 32 bits con arquitectura x86 diseñados por Intel Corporation.
Los i486 son muy similares a sus predecesores, los Intel 80386. Las diferencias principales son que los i486 tienen un conjunto de instrucciones optimizado, una unidad de coma flotante y un caché unificado integrados en el propio circuito integrado del microprocesador y una unidad de interfaz de bus mejorada. Estas mejoras hacen que los i486 sean el doble de rápidos que un i386 e i387 a la misma frecuencia de reloj. De todos modos, algunos i486 de gama baja son más lentos que los i386 más rápidos.
Intel Pentium

Intel Pentium es una gama de microprocesadores de quinta generación con arquitectura x86 producidos por Intel Corporation.
El primer Pentium se lanzó al mercado el 22 de marzo de 1993,  con velocidades iniciales de 60 y 66 MHz, 3.100.000 transistores, cache interno de 8 KiB para datos y 8 KiB para instrucciones; sucediendo al procesador Intel 80486. Intel no lo llamó 586 debido a que no es posible registrar una marca compuesta solamente de números.

La aparición de este procesador se llevó a cabo con un movimiento económico impresionante, acabando con la competencia, que hasta entonces producía procesadores equivalentes, como es el 80386, el 80486 y sus variaciones o incluso NPUs.
Las siguientes empresas fueron afectadas por la aparición del Pentium:
Advanced Micro Devices, Mejor conocida como AMD. Tuvo que crear sus procesadores desde cero. Este es el K5 y el K6 (A estos procesadores se los bautizó así debido a que "K" significa Kriptonita, y como se sabe, la Kriptonita debilita al super-héroe de historietas y películas Superman esto es en consecuencia a lo que le hizo Intel a sus competidores con la aparición de Pentium)
Cyrix, que producía muy buenos 486, luego fue adquirida por VIA
Harris
LU-MATH
Estas últimas dos no fueron muy conocidas aunque sus versiones de procesadores de alto rendimiento (como el Harris 80386) llegaron tarde y lamentablemente no pudieron hacerse un hueco en el mercado.

Actualidad
Ahora tenemos micros mas poderosos que los que acabo de mencionar pero todos ellos se basan en la arquitectura intel x86, también hubo un tiempo en el que Motorola se dedico a la producción de este circuito integrado. Nos interesa conocer lo básico de los Intel ya que en este blog se darán tutoriales e información sobre la programación sobre Intel que también tiene compatibilidad con AMD su principal competencia. Mas adelante se verán temas como la arquitectura de 8088/8086, conjunto de registros, modos de direccionamiento y despues entrar de lleno a el Lenguaje Ensamblador.
Procesadores mas actuales:

Intel Core Duo





viernes, 14 de septiembre de 2012

Historia del Lenguaje Ensamblador

Para poder programar en Bajo nivel(Ensamblador) debemos conocer desde lo básico hasta lo mas complicado.
La primera computadora programable fue la ENIAC en 1946 pero se programaba mediante circuitos complejos que no eran nada funcionales. Después se empezó a utilizar el lenguaje maquina que son claves binaras que representan un CÓDIGO DE OPERACIÓN(OPCODE). Estas se almacenan en grupos de instrucciones llamados PROGRAMAS.

ENIAC
Esto llego a ser muy complicado debido a que se debían aprender series enormes de códigos binarios para realizar operaciones. Por ejemplo:
Para realizar la suma se tenia una instrucción binaria muy similar a "00101010010100101". Es por eso que se complicaba demasiado manejar este tipo de programación.

Actualmente manejamos lenguajes de Alto nivel que son relativamente sencillos a comparación con el lenguaje maquina. Pero no se llego al alto nivel desde el código binario, existe un lenguaje que nació para facilitar el binary code. Este se llama "LENGUAJE ENSAMBLADOR".

QUE ES EL LENGUAJE ENSAMBLADOR?
Es la primera abstracción del lenguaje maquina , consiste en asociar los OPCODE con palabras clave que sean fáciles de recordar para el programador.
A estas palabras clave se les llama MNEMÓNICOS.
Un programa ensamblador traduce el o convierte el codigo fuente(ensamblador) a codigo objeto(lenguaje maquina).
La computadora UNIVAC fue la primera en usar ensamblador.
UNIVAC
Que necesito saber antes de usar lenguaje ensamblador?(OJO)
-Conocer a detalle como traba el micro.
-conocer a detalle como opera la computadora(Memoria, discos duros, dispositivos E/S)
-Lógica computacional.
-Manejar algún lenguaje de alto nivel(C, C++, C#, Pascal, Perl, VB, JAVA, etc...)
-Manejo del sistema binario y hexadecimal(suma, resta, multiplicación, división).

Que ventajas ofrece el lenguaje ensamblador?
-Optimizan al máximo los programas en tamaño y velocidad.
-Rápidos y compactos.
-No genera código predefinido como el alto nivel.
-No se necesita capacidades de memoria ni computadoras sofisticadas.
-Nos da habilidades de programación avanzada.

Que desventajas tiene?(OJO)
-Una instrucción mal interpetada puede generar un caos en nuestro equipo al grado de tener que reiniciar nuestra maquina.
-La insuficiencia de conocimientos básicos y de programación causa efectos impredecibles.
-Se vuelve mas complejo conforme se agregan rutinas y funciones.
-Se pueden usar con lenguajes de alto nivel(PROGRAMACIÓN HÍBRIDA).

Aplicaciones actuales.
Sistemas embebidos: Impresoras, cámaras, autos, armas, juguetes.
Tiempo real: Control de robots, manufactura, adquisición de datos.
Transporte: Barcos, aviones, sondas espaciales.
Entretenimiento: Graficacion, multimedia, videojuegos.
DSP: Procesador digital de señal para operaciones a alta velocidad.
Procesamiento de señales, voz e imagen:
-aparatos médicos
-aparatos para datos sísmicos
-reproductores de audio
-modems
-cámaras digitales.

En el próximo post veremos toda la información relevante de los Microprocesadores Intel 8088/8086