sábado, 4 de mayo de 2013

MEMORIA


Las memorias son dispositivos encargados de almacenar información, programas y datos. Estos dispositivos pueden ser vistos como un conjunto lineal de celdas, en los que cada una tiene un número asignado, el cual es único y lo llamaremos dirección. La estructura lógica de una memoria puede ser comparada con un arreglo, en el cual cada posición tiene un índice correspondiente.

Dirección Datos
01h      0h
02h    5h
03h     5h
04h     0h
05h     Ch
06h       ...
07h        ...
08h       ...
09h       ...
0Ah        ...

SEGMENTOS Y DIRECCIONES

Los registros de segmento se utilizan para referenciar áreas de memoria. La plataforma IA-32 permite direccionar la memoria según el modelo de memoria lineal o el modelo de memoria segmentada. El modelo de memoria lineal presenta todo el espacio de direcciones de la memoria como un espacio contiguo. Todas las instrucciones, los datos y la pila se encuentran en el mismo espacio de direcciones de memoria. Cada posición de memoria se referencia mediante una dirección específica llamada "dirección lineal".

El problema del enfoque anterior consiste en que todos los datos se encuentran mezclados entre si y a la vez distribuidos a lo largo de todo el espacio de direcciones memoria, lo cual hace que su manejo sea engorroso e ineficiente. El modelo de memoria segmentada resuelve este problema dividendo el espacio de direcciones en segmentos independientes entre si. Cada segmento contiene un tipo específico de información, es decir el código (las instrucciones) se ubica en un segmento, los datos en otro y la pila en un tercer segmento. Las posiciones de memoria en los segmentos se definen por direcciones lógicas. Una dirección lógica está compuesta por una dirección de segmento y un desplazamiento. El procesador traduce una dirección lógica a una dirección


Registro de segmento Descripción
cs                                Segmento de código
ds                                Segmento de datos
ss                                Segmento de pila
es                                 Apuntador de segmento extra
fs                                Apuntador de segmento extra
gs                                Apuntador de segmento extra




El bus de las direcciones es el conjunto de vías que llevan la información acerca de dónde, en la memoria, se obtendrán los datos que serán transferidos hacia o desde ella. Por este bus circulan direcciones de memoria que indican de qué localidad de memoria se leen o escriben datos que viajan en el bus de datos. La velocidad del bus de direcciones es la misma a la del bus de datos. El ancho del bus de direcciones dá la dirección-habilidad del procesador, que es cuánta memoria puede ser direccionada por el procesador. Un bus con 16 líneas, por ejemplo, puede trabajar directamente con 216 direcciones de memoria; eso es 65,536 (o 64 KB) localidades de memoria posibles. Los diversos microprocesadores usados en varias PCs, por lo regular, cuentan con un bus de direcciones de 20 a 32 bits. El Pentium y el Pentium Pro tienen un bus de direcciones de 32 bits, otros fabricantes de chips han prolongado el alcance de algunos de sus productos a 64 bits.

El tamaño del bus de direcciones no tiene un impacto directo en el rendimiento.

Los procesadores normalmente direccionan más memoria física de la existente, y de hecho normalmente los chipset o algunos factores en la motherboard ponen las restricciones a la cantidad máxima de memoria del sistema. Por ejemplo, un Pentium puede direccionar teóricamente 4GB de memoria RAM, pero la mayoría de las motherboard normales no soportará ni siquiera la cuarta parte.

Tamaño del Bus de direcciones y RAM máxima en diferentes procesadores
En la tabla 1 se muestra el ancho del bus de direcciones y la memoria RAM Máxima para varios microprocesadores.

 

 
 

VELOCIDAD DE OPERACION



La velocidad de un micro se mide en megahercios (MHz), aunque esto es sólo una medida de la fuerza bruta del micro; un micro simple y anticuado a 200 MHz puede ser mucho más lento que uno más complejo y moderno (con más transistores, mejor organizado...) que vaya a "sólo" 150 MHz. Es lo mismo que ocurre con los motores de coche: un motor americano de los años 60 puede tener 5.000 cm3, pero no tiene nada que hacer contra un multiválvula actual de "sólo" 2.000 cm3.


Debido a la extrema dificultad de fabricar componentes electrónicos que funcionen a las inmensas velocidades de MHz habituales hoy en día, todos los micros modernos tienen 2 velocidades:


Velocidad interna: la velocidad a la que funciona el micro internamente (200, 333, 450... MHz).

Velocidad externa o de bus: o también "FSB"; la velocidad con la que se comunican el micro y el mother board, para poder economizar el precio de ésta. Típicamente, 33, 60, 66 ó 100 MHz.

La cifra por la que se multiplica la velocidad externa o del board para dar la interna o del micro es el multiplicador; por ejemplo, un Pentium III a 450 MHz utiliza una velocidad de bus de 100 MHz y un multiplicador 4,5x.

MODALIDADES DE OPERACION


El procesador soporta numerosos modos de operación para código x86, en los cuáles no todas las instrucciones están disponibles. Un sub-repertorio de instrucciones de 16-bit está disponible en “modo real” (disponible en todos los procesadores x86), “modo protegido 16-bit” (disponible desde el Intel 80286), o en el “modo v86” (disponible desde el Intel 80386). Por su parte, las instrucciones de 32-bits están disponibles para el “modo protegido 32-bit” y para el “modo heredado” (disponible con las extensiones de 64 bits). El repertorio de instrucciones parte de ideas similares en cada modo, pero da lugar a distintas formas de acceso a memoria y de este modo emplea estrategias de programación diferentes.


Los modos en los que el código x86 puede ser ejecutado son: 
Modo real (16-bit) 
Modo protegido (16-bit y 32-bit) 
Modo 8086 virtual (16-bit) 
System Management Mode (16-bit) 
Modo largo (64-bit) 


MODO REAL

El modo real (también llamado modo de dirección real en los manuales de Intel) es un modo de operación del 80286 y anteriores CPUs compatibles de la arquitectura x86. El modo real está caracterizado por 20 bits de espacio de direcciones segmentado (significando que solamente se puede direccionar 1 MB de memoria), acceso directo del software a las rutinas del BIOS y el hardware periférico, y no tiene conceptos de protección de memoria o multitarea a nivel de hardware. Todos los CPUs x86 de las series del 80286 y posteriores empiezan en modo real al encenderse el computador; los CPUs 80186 y anteriores tenían solo un modo operacional, que era equivalente al modo real en chips posteriores.
MODO PROTEGIDO 


El modo protegido es un modo operacional de los CPUs compatibles x86 de la serie 80286 y posteriores. El modo protegido tiene un número de nuevas características diseñadas para mejorar las multitareas y la estabilidad del sistema, como protección de memoria, y soporte de hardware para memoria virtual así como de conmutación de tareas. A veces es abreviado como p-mode y también llamado Protected Virtual Address Mode (Modo de Dirección Virtual Protegido) en el manual de referencia de programador del iAPX 286 de Intel, (Nota, iAPX 286 es solo otro nombre para el Intel 80286). En el 80386 y procesadores de 32 bits posteriores se agregó un sistema de paginación que es parte del modo protegido.



MODO 8086 VIRTUAL 


En el microprocesador 80386 y posteriores, el modo 8086 virtual, también llamado modo real virtual o VM86, permite la ejecución de aplicaciones de modo real que violan las reglas bajo control de un sistema operativo de modo protegido.


El VM86 usaba la forma de segmentación del modo real, pero usaba la dirección resultante de 20 bits (realmente 21 bits), tratándola como una dirección lineal, de tal manera que era sujeta a paginación.


Era usado para ejecutar programas DOS en Microsoft Windows/386, Windows 3.x, Windows 95, Windows 98, Windows Me, y OS/2 2.x y más adelante, a través de las máquinas DOS virtuales, también en SCO UNIX a través de Merge, y en Linux por medio de dosemu.



MODO DE GERENCIA DEL SISTEMA


El Modo de Gerencia de Sistema, o System Management Mode (SMM) en inglés, es un modo de operación lanzado por primera vez con el Intel 386SL y disponible en microprocesadores posteriores de la arquitectura x86, en el que es suspendida toda la ejecución normal (incluyendo el sistema operativo), y es ejecutado un software especial separado en un modo de alto privilegio (usualmente un depurador en firmware o asistido por hardware).


Algunos usos comunes del SMM son:


• Para emular hardware de la tarjeta madre que no está implementado o tiene errores (bugs).

• Operaciones de gerencia de energía, como encendido de ventiladores.

• Para emular un ratón o un teclado PS/2 desde un USB.

• Funciones de seguridad del sistema, como apagar el computador cuando hay alta temperatura en el CPU.

• Configuración del sistema, como por ejemplo en los computadores notebook de Toshiba e IBM.



MODO LARGO


En la arquitectura de computador AMD64 (x86-64), el modo largo (long mode) es el modo donde una aplicación o sistema operativo de 64 bits pueden acceder a las instrucciones y los registros de 64 bits del procesador, mientras que los programas de 32 bits y 16 bits se ejecutan en un sub modo de compatibilidad.

Un procesador x86-64 actúa de la misma manera que un procesador IA-32 cuando corre en modo real o modo protegido, que son sub-modos soportados cuando el procesador no está en el modo largo.


Transferencia entre registros


Los registros de computadora están representados por letras mayúsculas (en ocasiones seguidas de números), para denotar la función del registro. Por ejemplo, el registro que contiene una dirección para la unidad de memoria, por lo general se llama un registro de direccionamiento de memoria y se designan las letras MAR por sus siglas en inglés (memory address register). Otros nombres para registros son PC (contador de programa), IR (registro de instrucción) y Rl (registro de procesador). Los flip-flops individuales en un registro de n bits están numerados en una secuencia de O hasta n — 1, comenzando desde O en la posición de la extrema derecha y aumentando los números hacia la izquierda. La figura 4-1 muestra la representación de registros en forma de diagrama de bloque. La manera más común de representar un registro es mediante una caja rectangular con el nombre del registro dentro. Los bits individuales pueden distinguirse como en el ejemplo (b). La numeración de bits en un registro de 16 bits puede señalarse en la parte superior de la caja, como se muestra en el ejemplo (c). Un registro de 16 bits se divide en 2 partes en el ejemplo (d). Los bits del O al 7 reciben el símbolo L (byte bajo) y los bits del 8 al 15 reciben el símbolo H (byte alto). El nombre del registro de 16 bits es PC. El símbolo PC (0-7) o Pc (L) denomina el byte de orden menor y PC (8-15) o PC (H) designa al byte de orden mayor.

La transferencia de información de un registro a otro se representa en forma simbólica mediante un operador de sustitución. El enunciado:



R2 <— Rl

denota una transferencia del contenido del registro Rl al registro R2. Designa la sustitución del contenido de R2 por el contenido de Rl. Por definición, el contenido del registro fuente Rl no cambia después de la transferencia.
Un enunciado que especifica una transferencia de registro implica que están disponibles circuitos de la salida del registro fuente a la entrada del registro destino y que el registro destino tiene capacidad de carga paralela. Normalmente, deseamos que la transferencia ocurra sólo bajo una condición de control predeterminada. Esto puede mostrarse mediante un enunciado si, entonces Qf-then)
Si (P = 1) entonces (R2 <— Rl)
donde P es una señal de control que se genera en la sección de control. En ocasiones es conveniente separar las variables de control de la operación de transferencia de registros al especificar una función de control. Una función de control es una variable booleana, que es igual a O o a 1. La función de control se incluye en el enunciado como sigue:
P: R2~-Rl
La condición de control se termina con un signo de dos puntos. Representa la necesidad de que la operación de transferencia sea ejecutada sólo por el hardware si P = 1.

MODOS DE DIRECCIONAMIENTO


Permite determinar un operando , o la ubicación de un operando en una instrucción. Estos operandos pueden residir en diversas partes:

1.-La propia instrucción

2.-Memoria principal


3.-Registros internos de la CPU


-Los programas utilizan varios MD motivados por:

1.- Ahorro de espacio

2.- Código reubicable : se puede almacenar el programa en diversas zonas de memoria sin q afecte a la ejecución del código


3.-Estructuras de datos.






DIRECCIONAMIENTO INMEDIATO


a) El operando está presente en la propia instrucción, por lo tanto, esta opera con un valor constante.

b) El direccionamiento es mas rápido  El operando se encuentra ya en IR al fin de la fase de búsqueda. 2 palabras: lectura de memoria adicional.


DIRECCIONAMIENTO DIRECTO

La instrucción contiene la dirección real del operando.


1.- Lectura MAS RAPIDA q en memoria >> ninguna lectura adicional.
2.- Solo necesita CD pequeño.
3.- Rango operando = Rango registro >> LIMITA espacio de direcciones.


°Direccionamiento absoluto:

a) La instrucción contiene la dirección de memoria donde se encuentra el objeto, q se halla en una posición de mem principal.
b) Rango de posiciones limitado por CO.
c) Formato de 2 palabras >> MAYOR CAPACIDAD DE DIRECCIONAMIENTO >> lectura adicional.

° Direccionamiento mediante registro

a) Operando almacenado en un registro de la CPU. La instrucción indica de q registro se trata.
b) Registros limitados.


DIRECCIONAMIENTO INDIRECTO
El campo de operando contiene una dirección de memoria, en la que se encuentra la dirección efectiva del operando.



DIRECCIONAMIENTO ABSOLUTO
El campo de operando contiene una dirección en memoria, en la que se encuentra la instrucción.
De registro: Sirve para especificar operandos que están en registros.



DIRECCIONAMIENTO INDIRECTO MEDIANTE REGISTROS
El campo de operando de la instrucción contiene un identificador de registro en el que se encuentra la dirección efectiva del operando. En este modo el campo de la dirección de la instrucción da la dirección en donde la dirección efectiva se almacena en la memoria. El control localiza la instrucción de la memoria y utiliza su parte de dirección para accesar la memoria de nuevo para leer una dirección efectiva. Unos pocos modos de direccionamiento requieren que el campo de dirección de la instrucción sea sumado al control de un registro especificado en el procesador. La dirección efectiva en este modo se obtiene del siguiente cálculo:
Dir. efectiva = Dir. de la parte de la instrucción + Contenido del registro del procesador.
  


DIRECCIONAMIENTO RESPECTO A UN REGISTRO BASE
Este modo de direccionamiento es muy usado por los ensambladores cuando se llaman a las funciones (para acceder a los parametros apilados en la pila, valga la redundancia). Consiste, al igual que el indirecto a través de registro, en calcular la EA (Effective Address) como la suma del contenido del registro base y un cierto desplazamiento (u offset) que siempre será positivo. Esta técnica permite códigos reentrantes y acceder de forma fácil y rápida a posiciones cercanas de memoria. 

EA = RB+offset
RB = registro base
offset = desplazamiento

DIRECCIONAMIENTO RESPECTO A UN REGISTRO INDICE
Es similar al anterior, lo único que es el contenido del registro indice el que indica el desplazamiento que se produce a partir de una dirección de memoria que se pasa también como argumento a la orden que utiliza este modo de direccionamiento. Aunque en esencia son dos modos equivalentes. La EA se calcula como la suma del contenido del registro indice y una dirección de memoria:


EA = RI+DM
RI = registro indice
DM = direccion de memoria
-> RI se comporta como un offset

REGISTROS DE PROPÓSITO GENERAL


Registros de propósito general o en ingles GPRs o "General Purpose Registers"están disponibles para almacenar datos transitorios que requiere el programa.

Por ejemplo, cuando un programa se interrumpe su estado, es decir, el valor de los registros como el contador de programa, registro de instrucción o la memoria registro de direcciones - se pueden guardar en los registros de propósito general, lista para recordar cuando el programa está listo para comenzar de nuevo.

En general, cuanto más registra un CPU tiene disponible, más rápido se puede trabajar.

FAMILIA MICROPROCESADORES INTEL


FUNCIONAMIENTO MICROPROCESADOR


El microprocesador ejecuta instrucciones almacenadas como números binarios en la memoria principal . La ejecución se puede realizar en varias fases:

PreFetch, Pre lectura de la instrucción desde la memoria principal.
Fetch, envio de la instrucción al decodificador (una parte de la CPU).
Decodificación de instrucción, es decir determinar que instrucción es y por tanto que se debe hacer.
Lectura de operandos (si los hay).
Ejecución de la microinstrucción.
Escritura de los resultados, primero en el registro acumulador y después en la memoria RAM si fuera necesario.

Cada una de estas fases se realiza en uno o varios ciclos de CPU, dependiendo de la estructura del procesador, y concretamente de su grado de segmentación. La duración de estos ciclos viene determinada por la frecuencia de reloj, y nunca podrá ser inferior al tiempo requerido para realizar la tarea individual (en un solo ciclo) de mayor tiempo. El microprocesador se conecta a un oscilador que genera varios ciclos en un segundo.

Las instrucciones que lee, interpreta y ejecuta el procesador están escritas en su propio lenguaje, el lenguaje-máquina. También se utiliza un lenguaje de más alto nivel el ensamblador. Cada modelo de procesador tiene su propio lenguaje-máquina y necesita su propio ensamblador, es decir, las instruciones de los AMD e Intel serán distintas.

Registros


Nivel de Memoria


Se conoce como jerarquía de memoria a la organización piramidal de la memoria en niveles, que tienen los ordenadores. Su objetivo es conseguir el rendimiento de una memoria de gran velocidad al coste de una memoria de baja velocidad, basándose en el principio de cercanía de referencias.
Los puntos básicos relacionados con la memoria pueden resumirse en: Cantidad, Velocidad y Coste.

Se busca entonces contar con capacidad suficiente de memoria, con una velocidad que sirva para satisfacer la demanda de rendimiento y con un coste que no sea excesivo. Gracias a un principio llamado cercanía de referencias, es factible utilizar una mezcla de los distintos tipos y lograr un rendimiento cercano al de la memoria más rápida.

Los niveles que componen la jerarquía de memoria habitualmente son:
Nivel 0: Registros
Nivel 1: Memoria caché
Nivel 2: Memoria principal
Nivel 3: Disco duro (con el mecanismo de memoria virtual)
Nivel 4: Redes(Actualmente se considera un nivel más de la jerarquía de memorias)

Instrucciones de un Microprocesador


Aritmetica: Es la encargada de realizar los cálculos. Los datos sobre los que se realizan la operaciones se denominan operandos. Al elemento encargado de ejecutar las operaciones se le denomina operador, y esta formado por una serie de circuitos electrónicos que son capaces de sumar dos números binarios o hacer las operaciones lógicas elementales: disyunción, conjunción y negación; incluso algunos operadores son también capaces de multiplicar, dividir y realizar otras operaciones mas complejas.

Logica: es el cerebro de una computadora. Su función e ejecutar programas almacenados en la memoria central tomando sus instrucciones, examinándolas y luego ejecutándolas una tras otra. La CPU se compone de varias partes. La unidad de control se encarga de traer las instrucciones de las memoria principal y de determinar su tipo. La unidad aritmética y lógica realiza operaciones como la suma o la función booleana AND, necesarias para llevar a cabo las instrucciones.


                                   


Booleanas: Estas instrucciones corresponden a- contactos de cierre: el contacto se establece cuando el objeto bit que controla el contacto está en el estado 1, - contactos de apertura: el contacto se establece cuando el objeto bit que controla el contacto está en el estado 0,- contactos de flanco ascendente: detección del paso de 0 a 1 del objeto bit que lo controla,- contactos de flanco descendente: detección del paso de 1 a 0 del objeto bit que lo controla.




Pipelininig: La segmentación de instrucciones es similar al uso de una cadena de montaje en una fábrica de manufacturación. En las cadenas de montaje, el producto pasa a través de varias etapas de producción antes de tener el producto terminado. Cada etapa o segmento de la cadena está especializada en un área específica de la línea de producción y lleva a cabo siempre la misma actividad. Esta tecnología es aplicada en el diseño de procesadores eficientes. A estos procesadores se les conoce como pipeline processors.
Un pipeline processor está compuesto por una lista de segmentos lineales y secuenciales en donde cada segmento lleva a cabo una tarea o un grupo de tareas computacionales. Puede ser representado gráficamente en dos dimensiones, en donde en el eje vertical encontramos los segmentos que componen el pipeline y en el segmento horizontal representamos el tiempo.


RAM y ROM: La memoria de acceso aleatorio (en inglés: random-access memory cuyo acrónimo es RAM) es la memoria desde donde el procesador recibe las instrucciones y guarda los resultados. Es el área de trabajo para la mayor parte del software de un computador.1 Existe una memoria intermedia entre el procesador y la RAM, llamada caché, pero ésta sólo es una copia (de acceso rápido) de la memoria principal (típicamente discos duros) almacenada en los módulos de RAM.1 Por ejemplo, en el sistema operativo Windows Vista, gracias al servicio ReadyBoost, es posible asignar memoria flash de un dispositivo externo USB como memoria caché y así mejorar la velocidad del equipo informático, debido a la mayor velocidad de las Flash respecto al disco duro.


MANEJO INSTRUCCIONES DE UN MICROPROCESADOR



Un proceso es un programa en ejecución, los procesos son gestionados por el sistema operativo y están formados por:
Las instrucciones de un programa destinadas a ser ejecutadas por el microprocesador.
Su estado de ejecución en un momento dado, esto es, los valores de los registros de la CPU para dicho programa.
Su memoria de trabajo, es decir, la memoria que ha reservado y sus contenidos.
Otra información que permite al sistema operativo su planificación. Esta definición varía ligeramente en el caso de sistemas operativos multihilo, donde un proceso consta de uno o más hilos, la memoria de trabajo (compartida por todos los hilos) y la información de planificación. Cada hilo consta de instrucciones y estado de ejecución. Los procesos son creados y destruidos por el sistema operativo, así como también este se debe hacer cargo de la comunicación entre procesos, pero lo hace a petición de otros procesos. El mecanismo por el cual un proceso crea otro proceso se denomina bifurcación (fork). Los nuevos procesos pueden ser independientes y no compartir el espacio de memoria con el proceso que los ha creado o ser creados en el mismo espacio de memoria. En los sistemas operativos multihilo es posible crear tanto hilos como procesos. La diferencia estriba en que un proceso solamente puede crear hilos para sí mismo y en que dichos hilos comparten toda la memoria reservada para el proceso.










Funciones Básicas de un Procesador







Es el encargo del control y el procesamiento de datos en todo el ordenador. Para esta tarea es necesario que le ayuden otros elementos capaces de realizar funciones específicas y así liberar de trabajo costoso y difícil al microprocesador.

1. Unidad Aritmetico-Lógica (ALU): Lleva a cabo las funciones de procesamiento de datos.

2. Unidades Funcionales: se encargan de operaciones matemáticas específicas, y así sacan y facilitan el trabajo al microprocesador. (sumas, multiplicaciones, dividir por números enteros, etc.)
3. Registros: Almacenan datos durante cierto tiempo, dentro la CPU.
etc.
Todos estos elementos están conectados entre sí por medio de un conjunto de circuitos o conexiones nombrado bus. Todo su funcionamiento se basa en interpretar las señales eléctricas como números y de esta forma poder operar sobre ellas, para lo cual hace servir métodos como la álgebra de Boole.

UNIDAD DE INTERFAZ EN EL BUS


La unidad de interfaz del bus o unidad E/S, es la parte del procesador que se une con el resto de la PC. Debe su nombre al hecho de que realiza los movimientos de datos hacia el bus de datos del procesador, el primer conducto en la transferencia de información hacia y desde el CPU. La BIU es la responsable de responder a todas las señales que van al procesador, y de generar todas las señales que van del procesador a las demás partes del sistema. También sirve de paso a las instrucciones de programa y los datos para que éstos puedan alcanzar los registros de la unidad de control y de la ALU. La BIU sincroniza los niveles de las señales de la circuitería interna del microprocesador con los de los otros componentes dentro de la PC. Los circuitos internos de un microprocesador, por ejemplo, se diseñan para consumir poca electricidad de modo que puedan funcionar más rápidamente y evitar el calentamiento excesivo. Estos circuitos internos delicados no pueden manejar los voltajes más altos necesarios para los componentes externos. Por lo tanto, cada señal que sale del microprocesador pasa a través de un buffer de señal intermedio en la BIU que incrementa su voltaje.

UNIDAD DE CONTROL (UC)


La unidad de control (UC) es uno de los tres funcionales principales en los que se divide una unidad central de procesamiento (CPU). Los otros dos bloques son la Unidad de proceso y el bus de entrada/salida.

Su función es buscar las instrucciones en la memoria principal, decodificarlas (interpretación) y ejecutarlas, empleando para ello la unidad de proceso.
La ejecución de una instrucción se divide en varias etapas que deben realizarse según una secuencia muy precisa de señales de control que establece la señal de control. Hay dos formas básicas para implementar la unidad de control:




Unidad de control cableada: Realiza sus funciones mediante elementos hardware. No la analizaremos en profundidad aquí.

Unidad de control microprogramada: Es mas lenta que la anterior, pero permite implementar instrucciones mas potentes y flexibles. Será analizada en profundidad en los siguientes apartados

martes, 30 de abril de 2013

UNIDAD DE PUNTO FLOTANTE


 
 
 
Una unidad de coma flotante (adaptación del inglés floating-point unit o literalmente traducido unidad de punto flotante) o, también conocido como coprocesador matemático, es un componente de la unidad central de procesamiento especializado en el cálculo de operaciones en coma flotante. Las operaciones básicas que toda FPU puede realizar son la suma y multiplicación usuales, si bien algunos sistemas más complejos son capaces también de realizar cálculos trigonométricos o exponenciales.
No todas las unidades centrales de procesamiento tienen una FPU dedicada. En ausencia de FPU, la CPU puede utilizar programas en micro código para emular una función en coma flotante a través de la unidad aritmético lógica (ALU), la cual reduce el coste del hardware a cambio de una sensible pérdida de velocidad.
En algunas arquitecturas, las operaciones en coma flotante se tratan de forma completamente distinta a las operaciones enteras, con registros dedicados y tiempo de ciclo diferentes. Incluso para operaciones complejas, como la división, podrían tener un circuito dedicado a dicha operación.
Hasta mediados de la década de 1990, era común que las CPU no incorporasen una FPU en los ordenadores domésticos, sino que eran un elemento opcional conocido como coprocesador. Ejemplos podrían ser las FPUs 387 y 487 que se utilizaban en las unidades centrales de procesamiento Intel 80386 e Intel 80486SX (el modelo 80486DX ya incluía el coprocesador de serie) en máquinas Intel Pentium, o la FPU 68881 utilizada en las unidades centrales de procesamiento 680x0 en ordenadores Macintosh.
Cabe destacar que en los países anglosajones, numéricamente se hace uso del punto como separador de unidades en vez de la reconocida internacionalmente en el Sistema Internacional de Unidades, la coma, por esa razón la traducción más correcta sería "unidad de coma flotante" porque sus operaciones desplazan la coma de los decimales.

ALU



Definimos genéricamente a la unidad ALU (por sus siglas en inglés Arithmetic Logic Unit) como una de las unidades que forman parte de la Unidad Central de Procesos (es decir, del Procesador, Microprocesador o CPU – Central Processor Unit, por sus siglas en inglés) mediante la cual es posible realizar una gran cantidad de operaciones aritméticas básicas (Suma, Resta, División y Multiplicación) además de realizar algunas operaciones Lógicas (Yes, Or, Not, And – Es decir, si; y, o, no) entre dos números o dos conjuntos de números.

 
En informática, la Unidad Aritmética Lógica forma parte del circuito digital del procesador indefectiblemente, teniendo además presencia en otros Circuitos Electrónicos que necesiten realizar estas operaciones, teniendo por ejemplo la utilización de un Reloj Digital, donde estos cálculos lógicos se basan en dos funcionalidades básicas:

 
ü  Sumar de a 1 al tiempo actual (para los Segundos, Minutos y las Horas).

ü  Comprobación de la activación o no activación del sonido de la alarma.

ü  Cambio de Hora y Minutos de acuerdo al sistema hexadecimal.

 
Pero esta unidad es generalmente utilizada en circuitos de alta complejidad, cubriendo no solo operaciones matemáticas simples, sino una gran cantidad de cálculos por segundos, siendo en el caso de los últimos aquellos que son conocidos como Microprocesadores, y que como hemos dicho, son el cerebro de un ordenador y te toda la información que se procesa a través de él.

Es en estos pequeños y complejos dispositivos que encontramos los siguientes componentes:

Dispositivos de Adición:

Se encargan de realizar las anteriormente mencionadas operaciones aritméticas.

Registros: Son los que contienen los Operandos que permiten realizar las operaciones, siendo aportados estos por la Unidad de Control.

Resultados Parciales: Fragmentos de cálculos que fueron realizados.

Resultados Finales: Resultados propiamente dichos de los cálculos efectuados.

Control de Cálculo: Dispositivo que se encarga de controlar, redirigir y corregir los errores que se puedan haber cometido en las operaciones realizadas.

Hemos mencionado en este listado a la Unidad de Control, y debemos definirla como un dispositivo que se encarga de enviar a la Arichmetic Logic Unit todas las órdenes y operaciones que debe realizar, además de transportar los Resultados Finales que ha obtenido hacia otros componentes.

De este modo, podemos definir el funcionamiento de la siguiente manera:

ü  Unidad de Control: Emite las acciones a efectuar.

ü  Unidad Aritmético Lógica: Procesa los datos recibidos y envía los registros.

ü  Unidad de Control: Analiza los resultados obtenidos y los envía a otros dispositivos.

 

ESTRUCTURA GENERAL DE UN MICROPROCESADOR


Se presenta a continuación un esquema en bloques de un sistema básico de un computador y sus funciones esenciales, ALU ( Arithmetic Logic Unit), unidad de control, unidad de I/O y memoria central.
Todos los demás componentes agregados al sistema se denominan periféricos , y vinculan al sistema con el mundo exterior, para intercambiar y visualizar datos.
 
 
 
 

 
 
 
 
 
 
Los datos introducidos en el computador se utilizan como base para operaciones de todo tipo, aritméticas, lógicas, Son funciones realizadas por la ALU que además contiene registros especiales y de uso general donde procesa la información antes y después de su uso.
Luego será almacenada en la memoria central , que es la zona de almacenamiento de gran capacidad, se guardan aquí tanto datos como programas ejecutables.
 

Todo el sistema es controlado por la unidad de control que genera las señales temporización y sincronización de todo el sistema. A partir de esta breve descripción se pueden apreciar en la arquitectura del sistema dos elementos diferentes en cuanto a sus características; los circuitos eléctricos / electrónicos que constituyen al procesador y lo que se ha dado en llamar el programa ( conjunto de operaciones denominadas instrucciones.
Los programas a utilizar suelen estar en la memoria central del sistema. Cada una de las celdas que componen la memoria central debe ser seleccionada por la unidad central para poder ordenar la información allí guardada y de esta manera poder transformar los datos en una secuencia determinada para obtener el resultado deseado de la operación de los mismos.

Esta selección se denomina direccionamiento y lo realiza la unidad de control por medio del registro de direccionamiento, y su función es almacenar la dirección a ejecutar del sistema.

 
 
 
 
 



La descripción anterior presenta un tratamiento secuencial de instrucciones que es sincronizado por un reloj ( CLOCK).
La comunicación entre la unidad central y el resto del sistema puede realizarse a través de una estructura como la de arriba representada, donde se muestran conjuntos de líneas denominadas bus. Generalmente pueden distinguirse tres indispensables en cualquier tipo de estructura de datos, ellos son datos (data), direcciones(address) y control(control).

lunes, 29 de abril de 2013

REPRESENTACIÓN DE NÚMEROS NEGATIVOS


SIGNO Y MAGNITUD

Normalmente utilizamos el símbolo “-” precediendo a un número para indicar que este es menor que cero. Esta es una notación muy práctica en la vida cotidiana pero no puede ser utilizada en la representación que se hace de los números en una computadora, recordemos que Es solo se pueden utilizar los dígitos binarios para representar cualquier cosa en ellas y el “-” no es ningún bit.

Pero podemos utilizar la misma idea, preceder el número de un bit que indique su signo, después de todo solo hay dos posibles signos, a saber: “+”y “-”. Todo lo que tenemos que hacer es asignar arbitrariamente un bit a cada signo. Convencionalmente se hace: “+” = 0, “-” = 1.

A este método de representación de números negativos se le denomina signo y magnitud porque, análogamente a lo que solemos hacer, se coloca un símbolo que precede al número y10 Representación de números negativos que indica su signo y luego se pone la magnitud del número.
En esta notación por ejemplo:
1 010102 = −1010

De esta manera es muy fácil distinguir los números positivos de los negativos, si utilizamos un número fijo de bits para representarlos y decidimos que siempre el primer bit es para el signo del número, entonces basta con observar el primer bit de la izquierda (al que en este caso no podemos decirle formalmente “el más significativo”, dado que no tiene asociada ninguna potencia de 2) para determinar si se trata de un número negativo o positivo.

En este caso la “multiplicación por -1” de un número equivale a negar o invertir el bit de la extrema izquierda, esto es, convertirlo en cero si vale 1 y viceversa. De hecho la idea fundamental detrás de la representación de signo y magnitud es que ocurra: −(−a) = a. Lo que nos parece evidente por estar acostumbrados a nuestra representación de números negativos convencional.
Un inconveniente del sistema de signo y magnitud es que existen dos representaciones distintas para el cero, es decir, el neutro aditivo no es ´único formalmente hablando, tanto el 10. . .0 como el 00. . .0 son cero, el primero con signo “-”y el segundo con signo “+”, lo que tampoco es correcto desde el punto de vista matemático, dado que el cero no es ni positivo ni negativo.

Esta dualidad del cero tiene implicaciones importantes en una computadora digital. Los procesadores tienen generalmente instrucciones para cambiar al flujo de los programas llamadas saltos, hay saltos incondicionales (siempre que el procesador ejecuta la instrucción de salto la siguiente instrucción es aquella indicada por el salto) y hay saltos condicionales (la instrucción siguiente es a veces la que está bajo la del salto y a veces la indicada por el salto dependiendo de alguna condición). Y generalmente la condición de salto es establecida comparando algún dato con cero. Si hay dos representaciones del cero hay que hacer dos comparaciones y eso lleva más tiempo que hacer solo una.

COMPLEMENTO A 1
Otra manera de representar números negativos es la conocida como complemento a 1. Para hablar de ella primero trataremos con una generalización.

Dentición:
El complemento a b − 1 de un número r, representado en k dígitos en base b se define como:

Cb−1(rb) = (b − 1k . . . b − 11) − rb2.2 Complemento a 1 11 donde b − 1 es el valor máximo de un digito en base b.
Por ejemplo el complemento a 9 del número 1357910 es: C9(1357910) = 99999 − 13579 = 8642010 nótese que el minuendo que se ha usado tiene tantos nueves como dígitos tiene el número 13579.

En el caso de nuestro sistema binario hablaremos del complemento a 1 del número n en k bits como el resultado de restar n al número constituido por k unos.

Por ejemplo:
C1(011012) = 11111 − 01101 = 100102

nótese que cada bit del resultado es el negado del número original. De hecho esta es la receta práctica para obtener el complemento a 1 de cualquier número binario rápidamente.

Receta: El complemento a uno de un número binario n2 se obtiene invirtiendo cada bit de n2.
Por ejemplo:
C1(100101101112) = 011010010002

Una alternativa de representación de números negativos en la computadora es utilizando el complemento a 1, es decir, el negativo de un número es su complemento a 1.
Por ejemplo: 1010 = 010102 −1010 = 101012
Al igual que en el caso de signo y magnitud se adopta la convención de que todos los números cuyo bit del extremo izquierdo sea cero son positivos y por ende, todos aquellos cuyo bit del extremo izquierdo es 1 son negativos.

Nuevamente, como en signo y magnitud, la idea es que −(−a) = a. También tenemos el problema de que hay dos distintas representaciones para el cero: 0. . .0 y 1. . .1. El primero es un cero con signo “+”y el segundo un cero con signo “-”.

También hay que notar que tenemos tantos números positivos como negativos, tanto en signo y magnitud como en complemento a 1. Supongamos que se utilizan k bits para representar nuestros números enteros en una computadora. ¿Cuantos números representables tenemos? bueno, si tengo k lugares en los que puedo poner 0 ´o 1 y cada vez que elijo el lugar i tengo esas dos posibilidades para el lugar i + 1 entonces tengo en total 2k combinaciones,12 representación de números negativos es decir, números representables, ahora bien, ¿cuántos de estos 2k números son negativos (o mejor dicho tienen signo “-”)? tanto en complemento a 1 como en signo y magnitud los que tienen signo “-” son aquellos que empiezan con 1 que son justamente la mitad de todos nuestros números, es decir 2k−1, lo mismo ocurre con los que tienen signo “+”, también son  2  k−1.

COMPLEMENTO A 2
Ya mencionamos el inconveniente que haya dos representaciones diferentes del cero en el contexto de nuestras computadoras digitales. Para evitar esto (que sin embargo se puede sobrellevar), se inventó otro mecanismo para representar números negativos, se denomina complemento a 2, eso nos lleva a considerar, en general, el complemento a la base.

Dentición 2 :
El complemento a b de un número r, representado en k dígitos en base b se define como:

Cb(rb) = (1 0k . . .01) – rb nótese que el número que se utiliza ahora como minuendo tiene un digito más que los usados en la representación, es decir tiene k + 1 dígitos, un 1 seguido de k ceros a la derecha.

Por ejemplo, el complemento a 10 de 1357910 es:
C10(1357910) = 100000 − 13579 = 8642110
el resultado es, evidentemente, el mismo que se obtuvo en el complemento a 9 incrementado en uno, es decir: Cb(xb) = Cb−1(xb) + 1.
En el caso particular de base 2, el complemento a 2 de un número x2 es el resultado de
sumar 1 al complemento a 1 de x2 que, como vimos, no es otro que el número negado bit a
bit.

Por ejemplo1: C2(011012) = 10010 + 00001 = 100112
También existe una receta rápida para obtener el complemento a 2 de un número binario. Receta: El complemento a 2 del número x2 se obtiene copiando, de derecha a izquierda, todos los bits de x2 hasta encontrar el primer 1 inclusive e invertir todos los bits restantes hacia la izquierda. 1En este ejemplo no ocurre, pero pudiera ser que al sumar dos dígitos binarios ambos fueran 1, el resultado en este caso seria 210 = 102, por lo que se colocaría, a la manera de una suma convencional en base 10, el digito menos significativo y el otro se lleva como acarreo.2.4 Exceso 13

Por ejemplo:
C2(00110011 1002) = 11001100 1002
Entonces es posible representar el negativo de un número binario como su complemento a 2. La idea detrás de esta representación es que: a + (−a) = 0. Un número más su negativo, que es de hecho su inverso aditivo, nos da cero, un ´único cero. A diferencia de signo y magnitud y de complemento a 1, en la representación en complemento a 2 de números negativos tenemos una sola representación de cero, a saber: 0. . .0. Esta vez el negativo, es decir el complemento a 2, de 0. . .0 es justamente 0. . .0.

Además conservamos la ventajosa propiedad exhibida por signo y magnitud y complemento a 1 de poder determinar facialmente si un número es negativo o positivo observando el bit del extremo izquierdo.
Sin embargo no todo es perfecto, tenemos una desventaja. Concluimos que hay una sola representación de cero en complemento a 2 en k bits, eso está bien, ahora ¿cuántos números negativos se pueden representar? todos los números de k bits que empiezan con 1, es decir 2k−1, ¿cuantos números positivos se pueden representar? pues también hay 2k−1 que empiezan con cero, pero uno de ellos es el cero (0. . .0), hay entonces exactamente 2 k−1 − 1 números positivos. ¡Aja! hay un número negativo, el más grande en magnitud, 10. . .0, que no tiene su inverso aditivo en el conjunto de 2k posibles números.
Por ejemplo,
en cuatro bits:
C2(01002) = 11002
dónde: 01002 = 410 y 11002 = −410, porque 0100 + 1100 = 00002.
En cambio: C2(10002) = 100002 lo que es un error.

Por ejemplo, en una computadora que utilice, como es común, 16 bits para representar ciertos enteros con signo2, el número más grande positivo representable es 32767 y el más grande negativo es -32768 que no posee su inverso aditivo en el conjunto {−32768, . . . ,32767}.

EXCESO
Otro mecanismo para representar números negativos es el conocido como exceso a x. Si el número de bits usados para representar enteros es k entonces generalmente x = 2k−1 o x = 2k−1 − 1. Por ejemplo, si se utilizan 8 bits para representar enteros entonces el 2Como el tipo short de Java14 representación de números negativos sistema utilizado podría ser exceso a 128 o bien exceso a 127. La idea del sistema es que, para representar el número n en k bits se le suma a n, el valor del exceso (esto es 2 k−1 o 2k−1 − 1), obteniéndose n + e entonces n se escribe como n + e en binario (ya sin consideraciones de signo por supuesto). Por ejemplo, para escribir en 8 bits el número −10010 en exceso a 28−1 = 27 = 128 hacemos: −100+ 128 = 2810, esto en binario se escribe: 000111002 (16+8+4), por lo que, en exceso a 128 en 8 bits −10010 = 000111002. En cambio, usando las mismas condiciones (8 bits, exceso a 128): 100 + 128 = 22810 = 111001002, es
decir: 10010 = 111001002. Nuevamente hay un solo cero (en exceso a 128 en 8 bits seria 100000002), lo que significa, dado que la cantidad de números representables en k bits es par, que hay un negativo o un positivo “de más”, en nuestro ejemplo es el −128 (porque su inverso aditivo seria 128 y 128 + 128 = 256, que no se puede escribir en 8 bits), el único cero es 100000002 y el rango de representatividad es: {−128, . . . ,127}, cabe señalar que los números en exceso a 2k−1 y en complemento a 2 se escriben igual salvo el bit más significativo.

Para saber entonces que número está siendo representado por una cadena de bits debemos saber el valor del exceso. Si nos topamos con un 011011012 y se nos dice que está representando a un número en exceso a 128 entonces sabemos que al valor del número sin consideraciones de signo (10910) se le debe restar un 128 para determinar su verdadero valor, es decir nuestra cadena 011011012 está representando al número 10910 − 12810 = −1910.

En exceso a 2k−1 − 1 se hace lo mismo, solo que el número a sumar es, por supuesto n = 2k−1 − 1. Si se utilizan 8 bits en la representación, el sistema seria exceso a 127, este caso particular nos resultará ´útil cuando consideremos la representación de números en punto flotante. En exceso a 127 en ocho bits un número n es representado como la cadena de bits que le correspondería al número n+127 en binario. Por ejemplo nuestro −1910 anterior se escribiría como −19 + 127 = 10810 = 011011002, el cero seria 011111112 el −12710 = 000000002 el 12710 = 111111102 y el 12810 = 111111112, este ´último es el que no posee su inverso (−128) en el rango de representatividad del sistema que resulta ser {−127, . . . ,128}. Nótese que el número negativo más grande es representado como una cadena de ceros.