25.07.2013 Views

sistemas numericos y operaciones aritmeticas - Departamento de ...

sistemas numericos y operaciones aritmeticas - Departamento de ...

sistemas numericos y operaciones aritmeticas - Departamento de ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

SISTEMAS NUMERICOS Y OPERACIONES ARITMETICAS DE UN SISTEMA COMPUTACIONAL<br />

La aritmética ha jugado un papel importante en la civilización,<br />

especialmente en áreas <strong>de</strong> la ciencia, ingeniería y tecnología. Máquinas que<br />

operan aritmética, podríamos encontrarlas <strong>de</strong>s<strong>de</strong> el 500 AC., en forma <strong>de</strong> ábacos<br />

usados en China. A través <strong>de</strong> la historia <strong>de</strong> las computadoras, los procesadores<br />

aritméticos son la medida <strong>de</strong> capacidad <strong>de</strong> trabajo mas <strong>de</strong>stacada. Obviamente<br />

éstos son usados para ejecutar <strong>operaciones</strong> aritméticas y generar soluciones<br />

numéricas a problemas computacionales. Des<strong>de</strong> el advenimiento <strong>de</strong> Medium/Large<br />

Scale Integrated (MSI/LSI) mas y mas sofisticados procesadores se fueron<br />

tornando estándar (hardware) en las computadoras <strong>de</strong> alta performance.<br />

Estos procesadores en hardware (Aritméticos) proveen mayor velocidad <strong>de</strong><br />

cómputo que los m‚todos tradicionales <strong>de</strong> computación. La elección <strong>de</strong> un dado<br />

sistema aritmético condiciona tanto al diseño <strong>de</strong>l sistema como a las<br />

aplicaciones.<br />

Sea R un conjunto <strong>de</strong> números reales, la aritmética real podría <strong>de</strong>finirse<br />

como un mapeo algebraico<br />

f: R x R -> M<br />

Ejemplos típicos <strong>de</strong> f son las <strong>operaciones</strong> aritméticas +,-,*,/ <strong>de</strong> dos<br />

operandos.<br />

Sea M el conjunto <strong>de</strong> números representados en una máquina, cada número en<br />

M podría tener solo un numero finito <strong>de</strong> dígitos. M será un subconjunto finito<br />

<strong>de</strong> R, esto es, M está contenido en R. Una aritmética en la máquina podría<br />

mo<strong>de</strong>larse por el siguiente mapeo:<br />

g: M x M -> M<br />

La segunda difiere <strong>de</strong> la primera en el aspecto fundamental <strong>de</strong> la<br />

precisión. Solo cómputos 'Finite Precision Aritmetic' (Aritmética <strong>de</strong> Precisión<br />

Finita) pue<strong>de</strong>n ser realizados por los procesadores aritméticos, mientras que la<br />

aritmética real pue<strong>de</strong> producir resultados <strong>de</strong> precisión arbitraria, sin<br />

representación en la longitud. En otras palabras consi<strong>de</strong>ramos la aritmética <strong>de</strong><br />

la máquina como una aritmética real aproximada sujeta a los controles <strong>de</strong><br />

redon<strong>de</strong>o apropiados. En términos <strong>de</strong> mapeo funcional, la función máquina g pue<strong>de</strong><br />

relacionarse a la real f por la siguiente función compuesta :<br />

El mapeo h se <strong>de</strong>fine por<br />

g : h o p<br />

h = f| M x M -> R<br />

Definida como la función real f restringida al dominio máquina M x M.<br />

El mapeo <strong>de</strong>finido por p: R -> M es el esquema <strong>de</strong> redon<strong>de</strong>o elegido, el<br />

cual podría llevar un numero <strong>de</strong> longitud arbitraria a una forma representable en<br />

la máquina. Nótese que las computadoras digitales, en contraste con las unida<strong>de</strong>s<br />

aritméticas convencionales, pue<strong>de</strong>n realizar cómputos <strong>de</strong> precisión arbitrarios,<br />

dada la suficiente capacidad <strong>de</strong> almacenamiento y tiempo <strong>de</strong> ejecución. 'Finite<br />

Precision' surge <strong>de</strong> las restricciones en ambos aspectos impuestos al sistema:<br />

tamaño <strong>de</strong> palabra restringida, registros, sumadores, capacidad <strong>de</strong> memoria y los<br />

tiempos <strong>de</strong> ejecución.<br />

El diseño aritmético incluye el <strong>de</strong>sarrollo <strong>de</strong> los algoritmos aritméticos y<br />

su implementación lógica. En el campo <strong>de</strong> arquitectura, esto interacciona con la<br />

eficiencia <strong>de</strong> la implementación <strong>de</strong> una operación. En el campo <strong>de</strong>l análisis<br />

numérico esto concierne a la exactitud <strong>de</strong> una aritmética real aproximada.<br />

Básicamente el diseño <strong>de</strong> esos <strong>sistemas</strong> involucra tanto el campo <strong>de</strong> ciencias <strong>de</strong><br />

la computación como el <strong>de</strong> la ingeniería digital.<br />

1


SISTEMAS NUMERICOS<br />

La implementación <strong>de</strong> los algoritmos aritméticos en una computadora digital<br />

<strong>de</strong>pen<strong>de</strong> en mucho <strong>de</strong> cómo el dato numérico es almacenado en memoria y en<br />

registros. Diferentes representaciones internas resultarán en diferentes diseños<br />

<strong>de</strong> Hardware. La elección <strong>de</strong> un sistema numérico impactar tanto al diseñador en<br />

sus puntos <strong>de</strong> vista, como al usuario en sus métodos numéricos aplicados.<br />

La aritmética real solo pue<strong>de</strong> ser llevada a cabo por máquinas con<br />

precisión finita, ya que todas las representaciones numéricas se <strong>de</strong>ben<br />

restringir a una longitud finita.<br />

Una buena elección <strong>de</strong>l sistema aritmético y <strong>de</strong> la representación interna<br />

afecta tanto a la eficiencia <strong>de</strong> la implementación <strong>de</strong> las <strong>operaciones</strong> máquina<br />

como a la exactitud <strong>de</strong> la aritmética real aproximada.<br />

El diseñador <strong>de</strong>ber estar atento a las realida<strong>de</strong>s <strong>de</strong> la arquitectura en<br />

cuanto a la eficiencia <strong>de</strong> tiempo y espacio, como también a la parte numérica<br />

analítica <strong>de</strong> proveer suficiente exactitud para un rango amplio <strong>de</strong> aplicaciones.<br />

Generalmente, los números a nivel máquina pue<strong>de</strong>n dividirse en cinco<br />

categorías:<br />

A.- Sistemas Numéricos con Base (RADIX NUMBER)<br />

Las computadoras usan base fija (FIXED RADIX) con r≥2 y un conjunto <strong>de</strong><br />

dígitos {0,1,2...,r-1}.<br />

Todos los dígitos <strong>de</strong>l número son pesados (pon<strong>de</strong>rados) positivamente y cada<br />

número es representado en forma única. Algunos <strong>sistemas</strong> especiales pue<strong>de</strong>n usar<br />

'Mixed Radix', en los cuales diferentes dígitos <strong>de</strong>l número asumen valores<br />

distintos <strong>de</strong> la base.<br />

B.- Sistemas Numéricos <strong>de</strong> Dígito Signado<br />

Este sistema pue<strong>de</strong> ser consi<strong>de</strong>rado como una extensión <strong>de</strong>l caso <strong>de</strong> Fixed-<br />

Radix en el cual se advierten que los dígitos sean pesados tanto positiva como<br />

negativamente en el conjunto {-α,...,-1,0,1,...,α} don<strong>de</strong> α es un entero positivo<br />

limitado. Un dado valor numérico en este sistema podrá tener más <strong>de</strong> un valor<br />

(representación). Por ello este sistema es consi<strong>de</strong>rado redundante.<br />

C.- Sistema Numérico Residuo<br />

A cada dígito no se le asigna un factor <strong>de</strong> peso, luego el or<strong>de</strong>n <strong>de</strong> los<br />

dígitos es irrelevante en la <strong>de</strong>terminación <strong>de</strong>l valor <strong>de</strong>l número.<br />

A<strong>de</strong>más múltiples raíces son asignadas a diferentes dígitos.<br />

Un número es representado por una n-tupla<br />

con respecto a otra n-tupla<br />

X= {r1,r2,...,rn}m<br />

M={m1,m2,...,mn}<br />

cada ri se <strong>de</strong>nomina residuo <strong>de</strong> X módulo mi, don<strong>de</strong> todos los {mi: i=1,2,...n} son<br />

relativamente primos <strong>de</strong> a pares. Todos los n dígitos residuos ri con<br />

i=1,2,3,...n pue<strong>de</strong>n ser procesados in<strong>de</strong>pendientemente. A partir <strong>de</strong> esto la suma<br />

y la multiplicación son inherentemente libres <strong>de</strong> carry en la aritmética residuo.<br />

D.- Sistemas Numéricos Racionales<br />

2


Estos <strong>sistemas</strong> representan las cantida<strong>de</strong>s numéricas como fracciones en<br />

términos <strong>de</strong> pares <strong>de</strong> enteros numerador/<strong>de</strong>nominador. Las <strong>operaciones</strong> básicas +,-<br />

,*,/ <strong>de</strong> estos números siempre dan números racionales, luego estas <strong>operaciones</strong><br />

son cerradas, sin recurrir a precisión infinita. Una situación que torna esto<br />

difícil es el caso <strong>de</strong> que numerador/<strong>de</strong>nominador pue<strong>de</strong>n hacerse muy gran<strong>de</strong>s<br />

rápidamente.<br />

E.- Sistemas Numéricos Logarítmicos<br />

Estos <strong>sistemas</strong> emplean un número real N>1 como base. El conjunto <strong>de</strong><br />

números reales es <strong>de</strong>finido como el espacio logarítmico LN<br />

LN = {x: |x|= Ni, i es entero} ∪ {0}<br />

La i<strong>de</strong>a <strong>de</strong> aplicar expresiones exponenciales surge para habilitar redon<strong>de</strong>o<br />

geométrico mas que aritmético para aumentar la exactitud.<br />

De todos los <strong>sistemas</strong> enunciados el básicamente empleado y <strong>de</strong>l cual nos<br />

ocuparemos es el sistema <strong>de</strong> base convencional, existiendo <strong>de</strong>l segundo 'Redundant<br />

Signed-Digit' un cierto número <strong>de</strong> implementaciones en <strong>sistemas</strong>. Los <strong>de</strong>más no han<br />

probado a la fecha ser eficientes al grado <strong>de</strong> adoptarlos en implementaciones.<br />

CLASIFICACION DE LAS OPERACIONES ARITMETICAS.<br />

Se pue<strong>de</strong>n clasificar en 3 clases <strong>de</strong>s<strong>de</strong> el punto <strong>de</strong> vista <strong>de</strong>l usuario y <strong>de</strong>l<br />

diseñador:<br />

A.- Operaciones Aritméticas Estándar.<br />

Esta incluye las 4 funciones aritméticas primitivas: suma, resta,<br />

multiplicación y división tanto en punto fijo como en punto flotante.<br />

Toda otra función matemática podrá ser expresada en términos <strong>de</strong> estas cuatro.<br />

Respecto a los dos modos <strong>de</strong> operación, sobre lo que volveremos, po<strong>de</strong>mos <strong>de</strong>cir:<br />

1.- Punto fijo (FXP) es usado normalmente en problemas con datos con<br />

Fixed-Radix-Point, como los encontrados en aplicaciones comerciales o<br />

cálculos estadísticos. FXP se pue<strong>de</strong> subdividir en dos subclases, <strong>de</strong><br />

acuerdo a la posición aparente <strong>de</strong>l punto. En aritmética entera todos los<br />

esultados se alinean en el extremo <strong>de</strong>recho <strong>de</strong> los registros, como si el<br />

punto estuviese en la <strong>de</strong>recha (extremo). En la aritmética fraccionaria<br />

todos los resultados, in<strong>de</strong>pendientemente <strong>de</strong> su longitud, se alinean a la<br />

izquierda <strong>de</strong> los registros (extremo).<br />

2.- Punto Flotante (FLP) es usado principalmente en cómputos <strong>de</strong> tipo<br />

científico e ingenieril, en los cuales se requiere frecuentemente<br />

escalamiento. FLP pue<strong>de</strong> a su vez subdividirse en dos subclases <strong>de</strong> acuerdo<br />

al formato <strong>de</strong> datos. Cuando se fuerza la normalización se tiene la<br />

llamada FLP normalizada; cuando no se requiere los operandos normalizados<br />

tanto durante etapas intermedias y finales <strong>de</strong>l resultado, se tiene FLP no<br />

normalizadas. La mayoría adopta la primera.<br />

B.- Funciones Aritméticas Elementales.<br />

3


Se refiere a aquellas <strong>operaciones</strong> especiales usadas frecuentemente en<br />

cómputos matemáticos. Incluye exponencial, raíz cuadrada, hiperbólicas, etc. No<br />

todas las computadoras incluyen estas funciones como hardware estándar. En el<br />

presente la mayoría implementa estas funciones elementarias por software o<br />

firmware. 'Special Purpose Hardware' (Hardware <strong>de</strong> Propósito Especial) está<br />

siendo utilizado cada vez más a partir <strong>de</strong> que el costo <strong>de</strong>l hardware <strong>de</strong>scien<strong>de</strong>.<br />

C.- Operaciones Seudo-Aritméticas.<br />

Estas requieren cierto grado <strong>de</strong> cálculo aritmético, pero principalmente<br />

para propósitos <strong>de</strong>dicados en la ejecución <strong>de</strong> un programa. Dos subclases <strong>de</strong><br />

<strong>operaciones</strong> seudo-aritméticas serian:<br />

1. Aritmética <strong>de</strong> direccionamiento: tiene que ver con el cómputo <strong>de</strong> la dirección<br />

efectiva <strong>de</strong> memoria, como in<strong>de</strong>xing, indirect, relative u offset.<br />

2. Aritmética <strong>de</strong> edición <strong>de</strong> datos: incluye <strong>operaciones</strong> lógicas y <strong>de</strong><br />

transformación <strong>de</strong> datos como, comparación, complementación, load, store,<br />

empaquetado, <strong>de</strong>sempaquetado, logaritmos, normalización, etc. Estas son usadas en<br />

la transformación <strong>de</strong> datos <strong>de</strong> un formato a otro, chequeo <strong>de</strong> consistencia con un<br />

formato fuente, testeo para controlar la secuencia <strong>de</strong> ejecución.<br />

Nosotros estamos interesados principalmente en la aritmética <strong>de</strong> FXP y FLP<br />

estándar, <strong>de</strong> aplicación más general.<br />

Las instrucciones aritméticas a su vez son subdivididas <strong>de</strong> acuerdo a la<br />

precisión que manejan. 'Multiple Precision Aritmethic' se aplica tanto en<br />

FXP,FLP.<br />

1. SP se refiere a las <strong>operaciones</strong> <strong>de</strong>finidas sobre operandos estándar con<br />

longitud <strong>de</strong> palabra igual a una palabra <strong>de</strong> memoria.<br />

2. DP usa el doble <strong>de</strong> la longitud <strong>de</strong> palabra para cada operando. Triple y<br />

similares podrán <strong>de</strong>finirse análogamente.<br />

Algunos <strong>sistemas</strong> ofrecen Hardware para manejar datos binarios y <strong>de</strong>cimal. En<br />

estas máquinas las <strong>operaciones</strong> se <strong>de</strong>finen directamente con operandos <strong>de</strong>cimales.<br />

La conversión (las <strong>operaciones</strong> <strong>de</strong> pack y unpack), requiere <strong>de</strong> instrucciones para<br />

manejar los datos directamente en formato <strong>de</strong>cimal.<br />

Por ejemplo una instrucción ADD podría clasificarse en 16 categorias<br />

SP<br />

DP<br />

FXP<br />

FLP<br />

Entero<br />

Fraccionario<br />

Normalizado<br />

No Normalizado<br />

4<br />

BINARIO<br />

DECIMAL<br />

Obs: El que clasifica<br />

la operación es<br />

el operando<br />

Si no hubiese límite en la inversión <strong>de</strong> hardware en camino a aumentar la<br />

velocidad <strong>de</strong> procesamiento, se podría diseñar una unidad aritmética para<br />

procesar tanto datos reales como complejos, o hardware <strong>de</strong>dicados a resolver


cálculos especiales como 'Super Fast-Fourier Transformer' (SFFF), manipulador <strong>de</strong><br />

matrices. Esto es tanto m s posible cuando más avanza la tecnología.<br />

BASE NUMBER SYSTEM.<br />

El sistema adoptado, en su generalidad como quedó dicho, correspon<strong>de</strong> a estos<br />

<strong>sistemas</strong>. Solo unos pocos utilizan SD y los restantes no han <strong>de</strong>mostrado aún ser<br />

eficientes por lo que no han sido aceptados.<br />

Un número Base-r X se representa en una computadora por un 'Digital<br />

Vector' <strong>de</strong> (n+k)-tuplas<br />

X = (Xn-1 ....... X0, X-1 ....... X-k)r<br />

don<strong>de</strong> cada componente Xi para -k ó i ó n-1 se <strong>de</strong>nomina <strong>de</strong> i-ésimo dígito <strong>de</strong>l<br />

vector X. Cada dígito podrá asumir r distintos valores<br />

{0,1,....,r-1}<br />

don<strong>de</strong> r es la base <strong>de</strong>l sistema numérico. En un sistema <strong>de</strong> base fija, todos los<br />

dígitos asumen la misma base. El sistema <strong>de</strong>cimal convencional pertenece a esta<br />

categoría con r=10.<br />

Los primeros n dígitos forman la parte entera <strong>de</strong>l número, y los restantes<br />

k, in<strong>de</strong>xados negativamente forman la parte fraccionaria, un punto (o coma)<br />

separa a ambas porciones. En una computadora ese punto es implícito, esto es, no<br />

ocupa ninguna posición <strong>de</strong> almacenamiento.<br />

Sistemas <strong>de</strong> Base Mezcla son aquellos que asumen para la base distintos<br />

valores en diferentes posiciones <strong>de</strong>l dígito. Por ejemplo 'Count Time' (horas,<br />

minutos, segundos) sigue Bases Mezcla (24 60 60).<br />

En un sistema pesado se asocia con cada vector digital X, un valor único<br />

<strong>de</strong>notado como: n-1<br />

Xu = (xi * wi)<br />

i=-k<br />

En don<strong>de</strong> cada wi se <strong>de</strong>nomina el factor <strong>de</strong> peso para cada dígito, los n+k<br />

factores <strong>de</strong> peso forman el vector <strong>de</strong> peso <strong>de</strong>notado por:<br />

W = (wn-1,....,w0,w-1,w-2,....,w-k).<br />

El valor <strong>de</strong> X se obtiene <strong>de</strong>l producto escalar <strong>de</strong> X*W. En particular el<br />

vector <strong>de</strong> peso<br />

W = (rn-1, ..r0, r-1, ...., r-k)<br />

correspon<strong>de</strong> a la representación posicional <strong>de</strong> un número base r con<br />

valor: n-1 n-1<br />

Xu = X * W = (xi * wi) = (xi * ri).<br />

i=-k i=-k<br />

En la práctica hay cuatro <strong>sistemas</strong>, correspondiendo a base r = 2,8,10,16<br />

(binario, octal, <strong>de</strong>cimal, hexa<strong>de</strong>cimal).<br />

A mayor r, más dígitos binarios para representarlos (codificarlos). En<br />

general al menos k bits <strong>de</strong> requieren para codificar<br />

un dígito en base r con:<br />

k = log2 r<br />

Los humanos estamos acostumbrados al sistema <strong>de</strong>cimal, mientras que una<br />

computadora digital codifica los datos en binario. Esta forma popular <strong>de</strong><br />

5


codificación binaria est basada en la eficiencia <strong>de</strong> la representación,<br />

facilidad para el diseño aritmético, y seguridad <strong>de</strong> la operación.<br />

Para un sistema posicional <strong>de</strong> base b y n dígitos, po<strong>de</strong>mos establecer que<br />

la precisión, o la cantidad <strong>de</strong> números ser b n . Para cada posición habrá un<br />

requerimiento <strong>de</strong> b símbolos, luego po<strong>de</strong>mos <strong>de</strong>finir:<br />

E = n*b N = b n ln N = n*ln b<br />

(E: espacio que me cuesta almacenarlo)<br />

como una medida <strong>de</strong> la eficiencia <strong>de</strong>l almacenamiento.<br />

Si <strong>de</strong>seamos minimizar E con la restricción <strong>de</strong> una dada precisión, el<br />

planteo es hallar b <strong>de</strong> tal forma que:<br />

ln(N)<br />

E = n*b = b* sea mínimo.<br />

ln(b)<br />

Derivando con respecto a b<br />

dE (ln N) * (ln b −1)<br />

=<br />

db<br />

2<br />

(lnb)<br />

El cual es 0, ln(b)=1 para b=e (2,73...).<br />

Evi<strong>de</strong>ntemente la base <strong>de</strong> la <strong>de</strong> representación <strong>de</strong>be ser entera.<br />

Des<strong>de</strong> el punto <strong>de</strong> vista <strong>de</strong> la eficiencia 3 es algo superior a 2, dado que 3/ln3<br />

es menor que 2/ln2. Pero la elaboración <strong>de</strong> circuitos digitales con<br />

representación <strong>de</strong> solo dos posibles estados para las variables es muy sencilla y<br />

constituye una única alternativa lógica para un sistema digital <strong>de</strong>s<strong>de</strong> un punto<br />

<strong>de</strong> vista práctico. Se prefiere base 2 por su simplicidad y seguridad.<br />

Como se dijo, la mente humana est acostumbrada a la notación <strong>de</strong>cimal.<br />

Leer y escribir strings extensos <strong>de</strong> 0's y 1's, los dígitos binarios posibles, no<br />

solo es <strong>de</strong>sagradable y engorroso al extremo, sino que también induce fácilmente<br />

al error.<br />

Para facilitar la comunicación hombre-máquina es <strong>de</strong>seable un sistema más<br />

semejante a nuestra forma <strong>de</strong> pensar. Octal (b=8) y hexa<strong>de</strong>cimal (b=16) son los<br />

<strong>sistemas</strong> adoptados. La compactación que se logra, 3 para octal y 4 para<br />

hexa<strong>de</strong>cimal, es una enorme ventaja. Dado que estos <strong>sistemas</strong> tienen una base que<br />

es potencia <strong>de</strong> 2, la conversión entre binario y octal o hexa<strong>de</strong>cimal es trivial.<br />

La elección entre octal y hexa<strong>de</strong>cimal estar dada en un principio por el<br />

hecho <strong>de</strong> ser múltiplos <strong>de</strong> 3 o 4, ¢ en algunos casos condicionada al número <strong>de</strong><br />

bits empleado para codificar campos <strong>de</strong> la instrucción, registros generales,<br />

modos <strong>de</strong> direccionado, etc.<br />

Veamos el problema general <strong>de</strong> convertir un número escrito en una base <strong>de</strong><br />

salida bs, a un número en una base <strong>de</strong>stino bd. Esto pue<strong>de</strong> ser manejado <strong>de</strong> varias<br />

maneras. Los métodos más comunes o bien emplean multiplicación o división. Se<br />

<strong>de</strong>be distinguir entre la conversión <strong>de</strong> números enteros y fraccionarios.<br />

A- CONVERSION DE ENTEROS.<br />

6


Sea (xn,xn-1,......,x0) un entero en base bs y<br />

(Xm,Xm-1,......,X0) su conversión a base bd.<br />

A-I. METODO DEL PRODUCTO (usando aritmética <strong>de</strong>stino bd)<br />

Realizamos la suma:<br />

n<br />

|X| = (x i * (bs i ))<br />

i=0<br />

En aritmética base bd.<br />

Ejemplo:<br />

Sea x = 7632 en octal para convertir a <strong>de</strong>cimal.<br />

|X| = ((7*8+6)*8+3)*8+2 = 3994 en <strong>de</strong>cimal.<br />

A-II. METODO DE DIVISION (usando aritmética <strong>de</strong> salida bs)<br />

Se tiene X0 = |x| mod bd, don<strong>de</strong> la división se realiza en base bs.<br />

Continuando en igual sentido para los dígitos sucesivos, <strong>de</strong>s<strong>de</strong> el menos<br />

significativo al m s significativo, se tiene:<br />

X = Q0 * bd + X0 X0 =|X| mod bd , X1=|Q1| mod bd<br />

Q0 = Q1 * bd + X1 , X =Q0 * bd + X0, Q0= Q1 * bd + X1<br />

El procedimiento termina con el valor <strong>de</strong> X1 correspondiente a Qi=0.<br />

Ejemplo:<br />

Convertir x = (7632)8 a base 10. La división se realiza en<br />

octal y el resto se expresa en octal.<br />

X0 = (7632)8 mod (12)8 = (4)8 y |7632/12| = (617)8<br />

X1 = (617)8 mod (12)8 = (11)8 y |617/12| = (47)8<br />

X2 = (47)8 mod (12)8 = (11)8 y |47/12| = (3)8<br />

X3 = (3)8 mod (12)8 = (3)8<br />

X = (3994)10.<br />

B- CONVERSION DE FRACCIONES.<br />

Se tiene ahora x =(x-1,x-2,....,x-n) y se <strong>de</strong>seala conversión a X=(X-1,X-2,....,X-m).<br />

La primer cosa importante a <strong>de</strong>stacar es que un número finito <strong>de</strong> dígitos en base<br />

bs, no necesariamente tiene una representación completa en base bd. Sin embargo,<br />

uno pue<strong>de</strong> obtener los primeros m dígitos <strong>de</strong> la conversión nuevamente usando<br />

multiplicación o división.<br />

B-I. METODO DEL PRODUCTO (usando aritmética <strong>de</strong> salida).<br />

Se multiplica por bd obteniendo:<br />

X-1 = ⎣ |x| * bd ⎦<br />

La parte fraccionaria <strong>de</strong> |x|*bd, la notamos ¯X-1 y se usa para computar:<br />

Ejemplo:<br />

X-2 = ⎣ ¯X-1 * bd ⎦<br />

7


Sea x = (.7632)8, convertirlo a <strong>de</strong>cimal con 4 dígitos<br />

fraccionarios.<br />

(.7632)8 * (12)8 = (11.6004)8. Dando X-1 = 9<br />

(.6004)8 * (12)8 = (7.405)8. Dando X-2 = 7<br />

(.405)8 * (12)8 = (5.062)8. Dando X-3 = 5<br />

(.062)8 * (12)8 = (0.764)8. Dando x-4 = 0<br />

X = (.9750)10<br />

B-II. METODO DE DIVISION (usando aritmética bd)<br />

Simplemente se divi<strong>de</strong> |x| por bs usando aritmética bd<br />

n<br />

X = (x -i * bs -i )<br />

i=1<br />

Ejemplo:<br />

Convertir x = (.7632)8 a <strong>de</strong>cimal. Esto pue<strong>de</strong> ser escrito:<br />

(((2/8 + 3)/8 + 6)/8 + 7)/8 = .9750 (todo en base 10)<br />

Se tienen luego, para convertir <strong>de</strong> una base a otra dos métodos para<br />

enteros, y dos métodos para fraccionarios. Muy a menudo se <strong>de</strong>sea convertir <strong>de</strong><br />

binario (octal o hexa<strong>de</strong>cimal) a <strong>de</strong>cimal, y viceversa. Para calcular a mano,<br />

acostumbrados a la aritmética <strong>de</strong>cimal, se preferirán los métodos A.I y B.II<br />

cuando se convierte <strong>de</strong> binario a <strong>de</strong>cimal, y los métodos A.II y B.I cuando se<br />

convierte <strong>de</strong> <strong>de</strong>cimal a binario. Cuando el procedimiento se automatiza, por<br />

programa o microprograma, la división <strong>de</strong>be evitarse y la aritmética binaria es<br />

preferible. Dado que no siempre podremos usar multiplicación binaria, sobre<br />

looks-ups podrán usarse o manejarse (ardid) como una simulación <strong>de</strong> la aritmética<br />

<strong>de</strong>cimal por procesos binarios.<br />

Por ejemplo, multiplicar un número binario por 10 se pue<strong>de</strong> realizar<br />

corriendo 3 lugares a la <strong>de</strong>recha agregando al resultado 2.<br />

Si se <strong>de</strong>sea codificar cada dígito <strong>de</strong>cimal con<br />

k = ⎡log2 10⎤ = 4<br />

hay varias formas <strong>de</strong> representar con 4 bits un número <strong>de</strong>cimal: BCD, GRAY,<br />

5211 y EXCESO 3. De estos los más populares son BCD y GRAY.<br />

Es <strong>de</strong> notar que en algún caso <strong>de</strong> trabaja con código posicional, aunque<br />

múltiple base como sería BCD, y en otros no posicional como EXCESO 3.<br />

Díg.Dec. BCD GRAY 5211 EXC3 2421<br />

0 0000 0010 0000 0011 0000<br />

1 0001 0110 0001 0100 0001<br />

2 0010 0111 0011 0101 0010<br />

3 0011 0101 0101 0110 0011<br />

4 0100 0100 __0111__ __0111__ __0100__<br />

5 0101 1100 1000 1000 1011<br />

6 0110 1101 1010 1001 1100<br />

7 0111 1111 1100 1010 1101<br />

8 1000 1110 1110 1011 1110<br />

9 1001 1010 1111 1100 1111<br />

8


El código BCD, también expresable como 8421, se lo conoce como 'BCD<br />

Natural'. Obsérvese que cada peso coinci<strong>de</strong> con los cuatro primeros pesos <strong>de</strong>l<br />

sistema binario natural.<br />

La ventaja <strong>de</strong>l otro posicional, 2411, que comparte con EXCESO 3 y 5211 (no<br />

posicionales), es su simetría según el eje que po<strong>de</strong>mos trazar entre 4 y 5. Se<br />

observa que la codificación <strong>de</strong> dos números simétricos al eje es obtenida<br />

complementando cada uno <strong>de</strong> los bits <strong>de</strong> uno para pasar al otro. Esto se conoce<br />

como autocomplementación.<br />

Lo que sería el complemento a 9 (CRD) es trivial obtenerlo, a<strong>de</strong>más es <strong>de</strong><br />

observar que la suma <strong>de</strong> dos simétricos da 9 (1111) (esto facilita la resta <strong>de</strong><br />

igual signo y la suma <strong>de</strong> distinto signo).<br />

El acarreo binario en exceso 3 coinci<strong>de</strong> con el <strong>de</strong>cimal.<br />

En exceso 3, esto indica que el carry generado en sumas con códigos BCD<br />

con estas características coinci<strong>de</strong> con el carry binario, esto es, el que se<br />

obtiene sumando en forma binaria los 1 y 0, que codifican el dígito <strong>de</strong>cimal, lo<br />

cual facilita la implementación <strong>de</strong> los mismos.<br />

El GRAY conocido mas propiamente como 'Progresivo Cíclico' tiene la<br />

característica <strong>de</strong> que <strong>de</strong> un dígito <strong>de</strong>cimal al próximo se pasa cambiando un solo<br />

bit. Esto pue<strong>de</strong> ser útil en aplicaciones en don<strong>de</strong> la situación transitoria <strong>de</strong><br />

cambio <strong>de</strong> m s <strong>de</strong> un bit pudiese dar lugar a efectos no <strong>de</strong>seados. Se lo refiere<br />

como GRAY pues esta codificación BCD es parte <strong>de</strong> ese código reflejado GRAY,<br />

también llamado binario reflejado. Se construye reflejando a partir <strong>de</strong> una<br />

primer línea <strong>de</strong> simetría 2 bits y agregando otros no reflejados, a su vez el<br />

conjunto así formado se vuelve a reflejar a otra línea <strong>de</strong> simetría y así<br />

sucesivamente.<br />

0 0 0 0<br />

1 0 0 1<br />

--------------- Primer línea <strong>de</strong> simetría.<br />

2 0 1 1<br />

3 0 1 0<br />

--------------- Segunda línea <strong>de</strong> simetría.<br />

4 1 1 0<br />

5 1 1 1<br />

6 1 0 1<br />

7 1 0 0<br />

Pue<strong>de</strong> observarse que las combinaciones 0010 a 1010 correspon<strong>de</strong>n a lo que<br />

hemos llamado código GRAY-BCD.<br />

En lo concerniente a EXCESO 3 se obtiene el código sumando al código BCD<br />

puro, 3 en binario. Como se vio es autocomplementado. En la operación <strong>de</strong> suma si<br />

hay carry se <strong>de</strong>be recuperar el exceso, sino hay que quitarle 3 al resultado.<br />

Esta operación se podría realizar en un hardware binario convencional<br />

implementando la observación anterior.<br />

9


REPRESENTACION DE NUMEROS EN PUNTO FIJO.<br />

Un número signado podrá ser positivo o negativo, pero no ambos.<br />

Usualmente un dígito más a la izquierda <strong>de</strong> un n-positional number se reserva al<br />

signo.<br />

Considérese el siguiente número en base r:<br />

A = (an-1 an-2 .... a0)r.<br />

Don<strong>de</strong> el signo (dígito) an-1 ser :<br />

an-1<br />

0 si A ≥ 0<br />

r-1 si A < 0<br />

Los restantes dígitos en A especifican o bien la verda<strong>de</strong>ra magnitud o el<br />

complemento a la base (o a la base disminuida).<br />

Dado que A es un número posicional, se pue<strong>de</strong> (<strong>de</strong>be) ubicar el punto para<br />

distinguir la parte entera <strong>de</strong> la fraccionaria. Si se adopta una posición fija<br />

para el punto, se llama a esto 'PUNTO FIJO'. Teóricamente el punto pue<strong>de</strong> ser<br />

localizado entre dos dígitos adyacentes cualesquiera en una representación.<br />

Hay dos representaciones aceptadas comúnmente, ambas son intercambiables.<br />

Cada uno <strong>de</strong> los n-dígitos enteros pue<strong>de</strong> ser consi<strong>de</strong>rado como una fracción<br />

multiplicada por una constante r n , y cada dígito fraccionario pue<strong>de</strong> ser<br />

consi<strong>de</strong>rado como un entero multiplicado por un factor constante r -k , don<strong>de</strong> r es<br />

la base adoptada. Es muy fácil convertir entre enteros y fraccionarios.<br />

Luego las dos posiciones elegidas comúnmente para el punto son el extremo<br />

izquierdo o el <strong>de</strong>recho <strong>de</strong> la magnitud <strong>de</strong>l número. En el primer caso el punto cae<br />

entre el bit <strong>de</strong> signo an-1, y la magnitud an-2 (bit más significativo). Esto<br />

conduce a números fraccionarios estrictamente menores que uno. En el segundo<br />

caso el punto pasa a la <strong>de</strong>recha <strong>de</strong>l dígito menos significativo a0, lo que lleva<br />

a números enteros.<br />

Estas representaciones son esencialmente equivalentes. Se pue<strong>de</strong> convertir<br />

<strong>de</strong> una a otra multiplicando o dividiendo por un factor r n-1 . Fixed Radix es<br />

implicada, no necesita espacio <strong>de</strong> almacenamiento<br />

Para los números positivos an-1=0, y los restantes dígitos an-2,...,a0,<br />

correspon<strong>de</strong>n a la verda<strong>de</strong>ra magnitud. Esto es la magnitud:<br />

|A| = (mn-2,mn-3,....,m1,m0).<br />

Don<strong>de</strong> mi=ai para i=n-2,...,1,0 cuando an-1=0 o A≥0.<br />

La magnitud será:<br />

n-1 n-2<br />

|A| = (a i * r i ) = (m i * r i )<br />

i=0 i=0<br />

Hay tres diferentes notaciones para representar una magnitud negativa. Sea<br />

A la versión negativa <strong>de</strong>l número A, don<strong>de</strong> el bit <strong>de</strong> signo ahora es r-1:<br />

1.- Signo Magnitud.<br />

A = ((r-1), m-2, m-3, ..., m0)r<br />

Don<strong>de</strong> los mi, n-2≥i≥0 son los dígitos <strong>de</strong> magnitud. Obviamente un número<br />

difiere <strong>de</strong> su versión negativa, sólo en el bit <strong>de</strong> signo.<br />

10


2.- Complemento a la Base Disminuida (DRC).<br />

A = ((r-1), m n-2, m n-1,..., m 0)r<br />

Don<strong>de</strong> m i = (r-1)-mi , para n-2≥i≥0.<br />

En esta notación A = r n -A-1.<br />

A = 0 mn-2 .......... m1 m0<br />

A = r-1 (r-1)-mn-2 ... (r-1)-m1 (r-1)-m0<br />

A + A = r-1 r-1........... r-1 r-1 todos r-1, sumando 1:<br />

A + A + 1 = 1 0 ........... 0 0 = r n<br />

con lo cual A = r n -A-1.<br />

3.- Complemento a la Base (RC).<br />

A = (((r-1), m n-2,..., m 1, m 0)+1)r<br />

En esta notación A = r n - A .<br />

Veamos a modo <strong>de</strong> ejemplo almacenar con r=2 y n=16 la versión negativa y<br />

positiva <strong>de</strong> A = (547)10 = (1000100011)2<br />

Positivo Negativo<br />

Sig-Magnitud 0000001000100011 1000001000100011<br />

1ºComplement 0000001000100011 1111110111011100<br />

2ºComplement 0000001000100011 1111110111011101<br />

Para números negativos se completa con 1's tanto en complemento a 1 como<br />

en complemento a 2. Para positivos se completa con 0's. Esto es lo que se<br />

<strong>de</strong>nomina 'Sign Extension' para el sistema numérico signado.<br />

Observación:<br />

En la adopción <strong>de</strong> un sistema numérico signado es importante la <strong>de</strong>tección<br />

<strong>de</strong> signo (facilidad <strong>de</strong> la misma), equivalencia en los rangos <strong>de</strong> positivos y<br />

negativos, facilidad en las <strong>operaciones</strong> aritméticas básicas (+) y (-), y<br />

representación <strong>de</strong>l 0.<br />

El rango <strong>de</strong> los enteros en cada representación est <strong>de</strong>terminado por la<br />

longitud <strong>de</strong> la palabra, 'n'. En los tres casos el límite superior positivo está<br />

dado por el máximo entero que entra en n bits, incluyendo signo el cual es en<br />

todos los casos 0. Esto es 2 n-1 -1 en <strong>de</strong>cimal.<br />

Se observa que el 0 tiene representación dual en Signo-Magnitud (100000)2<br />

y en 1's Complemento (111111)2.<br />

Mientras que en los casos anteriores el límite en cuanto al número<br />

negativo más gran<strong>de</strong> coinci<strong>de</strong> con la magnitud <strong>de</strong>l límite positivo, 2's<br />

Complemento es asimétrico en el sentido que admite como negativo mas gran<strong>de</strong> (en<br />

magnitud) –2 n-1 (100...0). Es <strong>de</strong> observar que complementa sobre sí mismo lo cual<br />

no es problema pues 100...0 está fuera <strong>de</strong> rango como positivo.<br />

Ocurre 'Overflow' cuando un número positivo exce<strong>de</strong> el límite superior.<br />

Similarmente, ocurre 'Un<strong>de</strong>rflow' cuando un número negativo exce<strong>de</strong> el límite<br />

inferior.<br />

11


El rango lo podríamos resumir como:<br />

Representación Rango Representado<br />

Signo-Magnitud -(2 n-1 -1) ≤ A ≤ 2 n-1 -1 111...11 ó A ó 011...1<br />

1's Complemento -(2 n-1 -1) ≤ A ≤ 2 n-1 -1 100...00 ó A ó 011...1<br />

2's Complemento -2 n-1 ≤ A ≤ 2 n-1 -1 100...00 ó A ó 011...1<br />

ALGORITMOS DE SUMA/RESTA<br />

Signo-Magnitud<br />

Sean<br />

X = (xn-1 xn-2 .... x0)<br />

Y = (yn-1 yn-2 .... y0)<br />

S = (sn-1 sn-2 .... s0)<br />

Si xn-1 = yn-1 es <strong>de</strong>cir, si tienen el mismo signo entonces:<br />

- se suman las magnitu<strong>de</strong>s (xn-2 ... x0), (yn-2 ... y0)<br />

- sn-1 será el signo <strong>de</strong> los sumandos<br />

- Si Carryn-1 = 1 entonces se produjo un Overflow<br />

Si xn-1 ≠ yn-1 es <strong>de</strong>cir, si son <strong>de</strong> distinto signo entonces:<br />

- |X| > |Y|, realizó |X|-|Y| (Circutito que reste)<br />

- sn-1 será el signo <strong>de</strong>l <strong>de</strong> mayor magnitud (xn-1)<br />

Alternativa<br />

Algoritmo<br />

Realizo |X|-|Y|<br />

Si OK ⇒ sn-1 = xn-1<br />

|S|←|X|-|Y|<br />

Si no (Si era |X|


2. Operandos <strong>de</strong> distinto signo<br />

Si Carryn=0 entonces resultado correcto<br />

Si Carryn=1 entonces se <strong>de</strong>scarta el Carry y se suma 1 en la posicón menos<br />

significativa<br />

3. Ambos operandos negativos, luego Carryn=1<br />

Descartamos el Carry y se suma 1 en la posición menos significativa<br />

Si sn-1=o entonces Overflow<br />

Análisis <strong>de</strong>l Overflow<br />

Ambos Cn = 0<br />

+ Cn-1= 0<br />

Ambos Cn = 1<br />

- Cn-1= 0<br />

Overflow = Cn ⊕ Cn-1 (⊕: OR exclusivo)<br />

Complemento a la Base (RC / 2’s Comp.)<br />

Sean<br />

X = (xn-1 xn-2 .... x0)<br />

Y = (yn-1 yn-2 .... y0)<br />

S = (sn-1 sn-2 .... s0)<br />

En RC para sumar se suman como si fuera todo el número incluyendo el signo, una<br />

magnitud<br />

1. Ambos operando positivos, luego Carryn=0<br />

Si sn-1=1 entonces Overflow<br />

2. Operandos <strong>de</strong> distinto signo<br />

Si hay Carry entonces <strong>de</strong>scarta y resultado correcto<br />

3. Ambos operandos negativos, luego Carryn=1<br />

Si hay Carry entonces <strong>de</strong>scarta y resultado correcto<br />

13


REPRESENTACION DE NUMEROS EN PUNTO FLOTANTE<br />

La notación fija es conveniente para representar números <strong>de</strong> base pequeña<br />

con ór<strong>de</strong>nes <strong>de</strong> magnitud acotados. Considérese un binario con 32 bits (palabra).<br />

El rango a manejar esta acotado por ±(2 31 -1), el que aproximadamente es ±(10 11 ).<br />

Esto seria ina<strong>de</strong>cuado para ingeniería y aplicaciones científicas. En camino a<br />

representar números en un rango mucho mayor se emplea una representación por<br />

partes:<br />

f =(m,e)<br />

Para expresar un número real:<br />

f = m.r e<br />

Don<strong>de</strong> m y e son ambos números signados en punto fijo, en una dada base.<br />

Una posible representación para operandos <strong>de</strong> 32 bits sería reservar los 22 bits<br />

m s a la izquierda para el m y los restantes 10 para el campo e con una base<br />

implicada r=2.<br />

Los dos componentes m y e se llaman mantisa y exponente <strong>de</strong> la notación f<br />

respectivamente. En general, la mantisa m pue<strong>de</strong> asumir uno <strong>de</strong> los tres <strong>sistemas</strong><br />

vistos para FXP (Punto Fijo). La base r no aparece en la representación ya que<br />

es auto implicada.<br />

Es interesante observar que el punto en la mantisa m pue<strong>de</strong> flotar a partir<br />

<strong>de</strong> ajustar la magnitud <strong>de</strong>l exponente. Por esta razón a esta notación se la<br />

refiere como 'Floating-Poing Representation' (FLP).<br />

Es <strong>de</strong> notar que muchas <strong>de</strong> las primeras computadoras usaban FXP Arimetic.<br />

Esto, en cálculos científicos, implicaba redon<strong>de</strong>ar los números constantemente<br />

para reducir el número <strong>de</strong> dígitos a una cantidad manejable. Los problemas<br />

generados es estas aplicaciones tienen que ver con rango, precisión y<br />

significancia <strong>de</strong> los números representados.<br />

El rango más usado en punto fijo es el intervalo unitario -1 a +1. Cuando<br />

el rango <strong>de</strong> los números se hace muy gran<strong>de</strong> o muy pequeño durante el cómputo, el<br />

programador <strong>de</strong>ber seguir la posición <strong>de</strong>l punto <strong>de</strong> todos los números<br />

intermedios. Los fuera <strong>de</strong> rango son manejados usualmente por escalamiento por<br />

software, firmware o hardware. Obviamente, los números científicos no entran en<br />

esta escala (intervalo) unitaria. En muchos casos, el número <strong>de</strong>be ser escalado<br />

hacia arriba o hacia abajo para entrar en el intervalo unitario, y al final <strong>de</strong>l<br />

cómputo el resultado <strong>de</strong>be ser transformado <strong>de</strong> vuelta al dominio <strong>de</strong>l usuario. Sin<br />

estas transformaciones, el hardware <strong>de</strong> FXP produce resultados sin sentido.<br />

El problema <strong>de</strong>l escalamiento incluye la selección <strong>de</strong>l factor <strong>de</strong> escala<br />

a<strong>de</strong>cuado, y en casos m s sofisticados empleo <strong>de</strong> Escaling Loop los que modifican<br />

los Escaling Factors en el lazo según las circunstancias. Cualquier n-digit,<br />

base r FXP number tiene un valor absoluto menor que r k dando un máximo error <strong>de</strong><br />

r k-n , adoptando un factor <strong>de</strong> escala común r k . En particular k=0 y k=n correspon<strong>de</strong><br />

a FXP fracción y FXP enteros, respectivamente.<br />

La precisión natural <strong>de</strong> un FXP <strong>de</strong> n dígitos es luego limitada a un máximo<br />

valor <strong>de</strong> r -n . Para incrementar la precisión, se sugirió múltiple precisión FXP<br />

Arimetic. Pero usar mas <strong>de</strong> una palabra para cada Fixed Point Number normalmente<br />

implica más Overhead <strong>de</strong> programación y consumo <strong>de</strong> espacio en almacenamiento <strong>de</strong><br />

datos e instrucciones.<br />

Para cálculos complicados este escalamiento y extensión <strong>de</strong> precisión<br />

implica un extensivo análisis matemático y cómputo lateral para seguir los<br />

factores <strong>de</strong> escala o controlar las longitu<strong>de</strong>s <strong>de</strong> las palabras. Usualmente el<br />

máximo factor <strong>de</strong> escala es el usado en todo el conjunto <strong>de</strong> números. La<br />

introducción <strong>de</strong>l escalamiento pue<strong>de</strong> acarrear pérdidas significantes <strong>de</strong><br />

significancia. Por ejemplo, la diferencia actual entre un factor <strong>de</strong> escala<br />

común, r p y or<strong>de</strong>n <strong>de</strong> magnitud r z <strong>de</strong> un número con algún z


significancia a situaciones muy singulares, las cuales el hardware no pue<strong>de</strong><br />

manejar excepto con la intervención <strong>de</strong>l programador.<br />

Esto se propuso hacia 1940, para superar los problemas <strong>de</strong>l FXP. Aun con un<br />

hardware doble o triple, con mecanismos <strong>de</strong> redon<strong>de</strong>o más complicados, FLP es<br />

universalmente aceptado para 'High Speed Scientific Computations'.<br />

Hay dos tipos <strong>de</strong> FLP: 'no normalizados' y 'normalizados'. Uno normalizado<br />

opera con normalizados y fuerza la post-normalización en todos los resultados<br />

inmediatos e intermedios. La forma normalizada tiene las ventajas <strong>de</strong> simplificar<br />

los procedimientos a partir <strong>de</strong> una única representación, y resulta en una máxima<br />

significancia en la mantisa <strong>de</strong> cada cómputo. La aritmética <strong>de</strong> punto flotante es<br />

un conocimiento a partir <strong>de</strong> los esfuerzos previos <strong>de</strong> <strong>de</strong>sarrollo <strong>de</strong> escalamiento<br />

automático para superar el limitado rango y la precisión rígida asociada a FXP.<br />

La mayoría <strong>de</strong> las computadoras <strong>de</strong> propósito general están equipadas con<br />

ambos FXP y FLP Aritmetic Procesor.<br />

Formatos <strong>de</strong>l Punto Flotante<br />

Muchos factores <strong>de</strong>ben ser pesados en la elección <strong>de</strong> m, e y r. En<br />

particular el rango <strong>de</strong> valores a acomodar y la precisión que se <strong>de</strong>sea obtener<br />

son los dos factores m s importantes.<br />

Es que ambos, e y m, comparten una o m s palabras en la representación. El<br />

dar más espacio a una acorta a la otra. Incrementar el rango dando m s dígitos<br />

al exponente <strong>de</strong>crementaría la longitud <strong>de</strong> la mantisa, disminuyendo luego la<br />

precisión. Decrementar los bit <strong>de</strong>l exponente conduce a lo opuesto. El tercer<br />

par metro, la base <strong>de</strong> representación, tiene a su vez impacto en el rango y la<br />

precisión. Más a<strong>de</strong>lante veremos como juega este factor en la generación <strong>de</strong>l<br />

error.<br />

Hay otras <strong>de</strong>cisiones que son menos críticas. La mantisa podrá ser entera<br />

o fraccionaria; el punto binario implicado a la izquierda o a la <strong>de</strong>recha <strong>de</strong> la<br />

mantisa. A<strong>de</strong>más esta podrá ser representada en una <strong>de</strong> las tres formas vistas. El<br />

exponente ser un número signado con diferentes formas <strong>de</strong> representación.<br />

Finalmente la base se elegir <strong>de</strong> acuerdo a la longitud <strong>de</strong> palabra, y <strong>de</strong><br />

acuerdo a la precisión y al rango como se dijo, pero siempre ser potencia <strong>de</strong><br />

dos.<br />

Muchos puntos flotantes tienen tres campos, ocasionalmente 4, signo,<br />

mantisa, exponente y siendo el signo <strong>de</strong>l exponente el cuarto, raramente<br />

expresado.<br />

Como <strong>de</strong>be ser, o mas o menos, la forma <strong>de</strong> trabajar típica es notación<br />

exceso. Si el exponente es <strong>de</strong> A bits <strong>de</strong> longitud todos los exponentes se<br />

polarizan por 2 A-1 . Esto es, el exponente más negativo es cero. Esto facilita el<br />

manejo <strong>de</strong> los exponentes (comparación). El exponente resultante ser e+2 A-1<br />

(aclarar la aritmética).<br />

Un ejemplo <strong>de</strong> formato <strong>de</strong> punto flotante es el sistema CDE 6000 serie 70:<br />

0 1 11 59<br />

sig-mantisa exponente mantisa no signada<br />

exceso 1024<br />

• Elecciones Básicas<br />

Muchas computadoras son diseñadas con aritméticas en punto flotante binaria,<br />

como es DEC con su PDP-11 Family, luego vino IBM con System/360 que adopto base<br />

16 para su punto flotante. Otras máquinas como la Illiac II usaba base 4 y la<br />

Burroughs usaba base 8. Se pue<strong>de</strong> ver a medida que la base aumenta, menos<br />

corrimientos por alineación (suma/resta) y normalización se requieren. Binario y<br />

octal fueron usados en máquinas en punto flotante en aplicaciones científicas<br />

con pocas protestas sobre sus propieda<strong>de</strong>s numéricas. Las máquinas<br />

15


hexa<strong>de</strong>cimales, sin embargo, han <strong>de</strong>spertando muchas críticas <strong>de</strong> usuarios con<br />

aplicaciones científicas. Esto motorizó la investigación en las propieda<strong>de</strong>s<br />

numéricas <strong>de</strong> los <strong>sistemas</strong> <strong>de</strong> punto flotante en función <strong>de</strong> la base.<br />

Esto tiene que ver con el análisis <strong>de</strong> los errores <strong>de</strong> representación,<br />

simulación y redon<strong>de</strong>o; <strong>de</strong>terminación <strong>de</strong> los limites rigurosos (en la<br />

<strong>de</strong>terminación funciones matemáticas) <strong>de</strong>l error relativo y las correspondientes<br />

consi<strong>de</strong>raciones a nivel <strong>de</strong> diseño <strong>de</strong> la máquina.<br />

Los argumentos y discusiones <strong>de</strong> los méritos relativos <strong>de</strong> binario, octal,<br />

hexa<strong>de</strong>cimal y otros FLP Sistems se centran principalmente en características<br />

como rango <strong>de</strong>l exponente, <strong>de</strong>nsidad <strong>de</strong> los números y error relativo máximo.<br />

Las <strong>operaciones</strong> <strong>de</strong> punto flotante pue<strong>de</strong>n dar lugar a situaciones singulares<br />

aún cuando estas sean legítimas sobre datos legítimos. Se usaran los símbolos +∞<br />

y -∞ para referirse a los quasi-infinite positivos y negativos correspondientes<br />

a FLP Numbers cuyo exponente exce<strong>de</strong> el máximo valor positivo. Dos<br />

infinitesimales, +∈ y -∈ inicialmente se <strong>de</strong>finen como aquellos FLP Numbers cuyo<br />

exponente exce<strong>de</strong> el máximo negativo. ±∈u no normalizados y ±∈n normalizados.<br />

Si p es el número <strong>de</strong> dígitos en la mantisa y q+1 el <strong>de</strong>l exponente, los<br />

infinitos infinitesimales <strong>de</strong>finidos anteriormente satisfacen las siguientes<br />

propieda<strong>de</strong>s con r=2 k don<strong>de</strong> k=log2r es el número <strong>de</strong> bits requerido para<br />

representar cada dígito base r. Nótese que el menor no cero 2 -p fracción binaria<br />

es igual al menor no cero fracción base r, r -p/k .<br />

q<br />

2<br />

+∞ > (1-2 -p −1<br />

) * r Max mantisa + / Max exponente<br />

-∞ < -(1-2 -p q<br />

2 −1<br />

) * r Min mantisa - / Max exponente<br />

1) 0 < +∈u < 2 -p q<br />

-(2<br />

−1)<br />

* r Min mantisa + / Min exponente<br />

2) -2 -p q<br />

-(2<br />

−1)<br />

* r < -∈u < 0 Max mantisa - / Min exponente<br />

3) 0 < +∈n < r -1 q<br />

-(2<br />

−1)<br />

* r Min mantisa + / Min exponente<br />

4) -r -1 q<br />

-(2<br />

−1)<br />

* r < -∈n < 0 Max mantisa - / Min exponente<br />

1 y 2) NO NORMALIZADOS 3 Y 4) NORMALIZADOS<br />

Gráficamente:<br />

NORMALIZADOS NO NORMALIZADOS<br />

Overflow +∞ +∞ Overflow<br />

(1-2 -p q<br />

2 −1<br />

)* r (1-2 -p q<br />

2 −1<br />

)* r<br />

q<br />

+N<br />

r -1 -(2<br />

* r<br />

−1)<br />

0+ 2 -p -(2<br />

* r<br />

−1)<br />

0+<br />

+∈n<br />

+∈u<br />

Un<strong>de</strong>rflow 0 verda<strong>de</strong>ro Un<strong>de</strong>rflow 0 verda<strong>de</strong>ro<br />

-∈n -∈u<br />

-r -1 q<br />

-(2<br />

−1)<br />

* r 0- -2 -p q<br />

-(2<br />

−1)<br />

* r 0-<br />

-N<br />

-(1-2 -p q<br />

2 −1<br />

) * r -(1-2 -p q<br />

2 −1<br />

) * r<br />

Overflow -∞ -∞ Overflow<br />

16<br />

q


Ahora bien, qué situaciones se pue<strong>de</strong>n dar en los resultados durante una<br />

ejecución <strong>de</strong> instrucciones <strong>de</strong> punto flotante en una computadora digital:<br />

- Overflow <strong>de</strong>l Exponente:<br />

Esto se refiere a la condición <strong>de</strong> que el exponente resultante exceda el<br />

límite superior, tanto para mantisas positivas como negativas, dando lugar a +∞<br />

, -∞.<br />

- Un<strong>de</strong>rflow <strong>de</strong>l Exponente:<br />

Se refiere a la condición <strong>de</strong> que el exponente resultante exceda el mínimo<br />

valor permitido y caiga en el intervalo (-∈,0-) y (0+,+∈). Es <strong>de</strong> notar que el<br />

verda<strong>de</strong>ro cero al origen <strong>de</strong> coor<strong>de</strong>nadas es una excepción. En otras palabras,<br />

cero no cae en el intervalo infinitesimal (-∈,0-) y (0+,+∈).<br />

Cuando un exponente lleva a 'Overflow\Un<strong>de</strong>rflow', el hardware genera una<br />

señal aproximada. A veces esto se saltea sin interrumpir el cómputo y otras se<br />

dá intervención al software para preservar el sentido <strong>de</strong>l cómputo.<br />

A diferencia <strong>de</strong> FXP, cero en FLP pue<strong>de</strong> tener más <strong>de</strong> un significado.<br />

Or<strong>de</strong>n <strong>de</strong> Magnitud Cero<br />

Todo punto flotante teniendo mantisa 0, esto es (m,e) = (0,e), se <strong>de</strong>nomina<br />

'Or<strong>de</strong>n <strong>de</strong> Magnitud Zero' (OMZ), don<strong>de</strong> e pue<strong>de</strong> asumir cualquier valor legítimo en<br />

ese campo. Esto surge al realizar el siguiente cálculo:<br />

(m,e) - (m,e) = (0,e)<br />

Este valor representa un amplio rango <strong>de</strong> valores in<strong>de</strong>terminados que<br />

satisfacen la siguiente <strong>de</strong>sigualdad:<br />

-r e-p < (0,e) < r e-p<br />

don<strong>de</strong> p es el número <strong>de</strong> dígitos <strong>de</strong> la mantisa y r la base implícita.<br />

Recordar que el verda<strong>de</strong>ro 0 no pertenece al conjunto infinitesimal, esto<br />

se da con un OMZ con exponente cero, (0,0).<br />

Los números legítimos como se indica en la figura son:<br />

+∈ < +N < +∞<br />

-∞ < -N < -∈<br />

El verda<strong>de</strong>ro cero correspon<strong>de</strong> a la línea divisoria entre positivos y<br />

negativos.<br />

Tabulemos una serie <strong>de</strong> <strong>operaciones</strong> involucrando números infinitos,<br />

infinitesimales, OMZ y FLP normalizados.<br />

N normal ∞ infinito ∈ infinitesimal Zi=(0,ei) (OMZ)<br />

Suma / Resta<br />

∞ ± N = ∞ N ± ∈ = N N - ∞ = -∞<br />

∈ - N = -N ∞ + ∞ = ∞ ∞ ± ∈ = ∞<br />

∈ ± ∈ = ∈ ∈ - ∞ = -∞ ∞ - ∞ = ∞<br />

∈ - ∈ = ∈ N ± Z = N Z – N = -N<br />

Z1 ± Z2 = Z3<br />

Multiplicación<br />

∞ * N = ∞ N * ∈ = ∈ ∞ * ∞ = ∞<br />

∈ * ∈ = ∈ ∞ * ∈ = ∞ (ó ∞ * ∈ = ∈ )<br />

Z1 * Z2 = Z3<br />

N * Z1 = Z2<br />

17


División<br />

∞ / N = ∞ ∈ / N = ∈ N / ∞ = ∈<br />

N / ∈ = ∞ ∞ / ∈ = ∞ ∈ / ∞ = ∈<br />

∞ / ∞ = ∞ ∈ / ∈ = ∞ (ó ∈ / ∈ = ∈)<br />

Z1 / N = Z2<br />

N / Z1 = N / 0<br />

Muchas máquinas adoptan ∞ * ∈ = ∞ y ∈ / ∈ = ∞ en lugar <strong>de</strong> ∞ * ∈ = ∈<br />

y ∈ / ∈ = ∈ para enfatizar la alarma a través <strong>de</strong>l OVERFLOW. N / Z ó N / 0<br />

seteará el flag <strong>de</strong> división por 0.<br />

NORMALIZACION<br />

La representación <strong>de</strong> punto flotante es inherentemente redundante en el<br />

sentido que el mismo número pue<strong>de</strong> ser representado en más <strong>de</strong> una forma, por<br />

ejemplo:<br />

1 * 10 18 = 0.1 * 10 19<br />

Generalmente es <strong>de</strong>seable en una implementación adoptar una única forma<br />

siempre.<br />

Si la mantisa es Signo-Magnitud fraccionaria y la base 2, se dice que la<br />

mantisa est normalizada si el dígito a la <strong>de</strong>recha <strong>de</strong>l punto no es 0. Esto<br />

significa que no hay ceros al comienzo en la magnitud <strong>de</strong>l número:<br />

0.1 * 10 19 es la única forma <strong>de</strong> representar el número <strong>de</strong>l<br />

ejemplo anterior.<br />

La fracción binaria en complemento a 2 está normalizada cuando el bit <strong>de</strong><br />

signo difiere <strong>de</strong>l bit <strong>de</strong> más significancia a su <strong>de</strong>recha. Esto implica que no hay<br />

unos al comienzo <strong>de</strong> un número normalizado negativo en complemento a 2.<br />

El rango está dado por<br />

1/2 ≤ |M| < 1<br />

( M=mantisa para cualquier base.)<br />

Para normalizar se <strong>de</strong>splaza la mantisa a la izquierda, modificando en<br />

forma acor<strong>de</strong> el exponente (<strong>de</strong>crementándolo), en múltiplos <strong>de</strong> k siendo k= log2 r.<br />

Obviamente la normalización asegura la máxima significancia. Hay una<br />

posibilidad <strong>de</strong> incrementarla trabajando con el HIDDEN BIT (oculto). Dado que el<br />

número siempre estar normalizado, el almacenamiento <strong>de</strong>l primer dígito es<br />

innecesario. Si se evita se gana un bit <strong>de</strong> significancia en el caso <strong>de</strong> binarios.<br />

18


• Operaciones <strong>de</strong> Punto Flotante Normalizadas:<br />

Las cuatro <strong>operaciones</strong> estándar : suma, resta, multiplicación y división, se<br />

pue<strong>de</strong>n realizar en punto flotante por HARDWARE con un rango mucho mayor y un<br />

mejor control <strong>de</strong> la precisión. Los operandos x1=(m1,e1), x2=(m2,e2) con x=m*(r e )<br />

y r la base implicada. La mantisa m ser una fracción con p dígitos<br />

significativos (excluyendo el signo) dando el siguiente rango normalizado:<br />

1/r ≤ |m| ≤ 1-r -p < 1<br />

y el exponente e un número signado <strong>de</strong> q bits (excluyendo el signo) tal que:<br />

0 ≤ |e| < r q-1<br />

El exponente es una variable que <strong>de</strong>termina la real posición <strong>de</strong>l punto<br />

OPERACIONES DE PUNTO FLOTANTE<br />

SUMA / RESTA<br />

(M1,e1)+/-(M2,e2)= ( (M1 +/- M2*r -(e1-e2) ),e1) , si e1 > e2<br />

( (M1*r -(e1-e2) ) +/- M2),e2), si e1 ≤ e2<br />

Algoritmo:<br />

• Detectar el operando con exponente mayor<br />

• Correr la mantisa <strong>de</strong>l <strong>de</strong> menor exponente |e1-e2|*log2 r<br />

lugares<br />

• Sumar las mantisas<br />

• Normalizar si es necesario<br />

MULTIPLICACION<br />

(M1,e1)*(M2,e2)=(M1*M2,e1+e2)<br />

Algoritmo:<br />

• Sumar los dos exponentes(eventualmente obtener el exceso<br />

correcto)<br />

• Multiplicar las mantisas<br />

• Post-Normalizar el resultado, si es necesario, multiplicando<br />

la mantisa por r y restando 1 al exponente.<br />

DIVISION<br />

(M1,e1)/(M2,e2)=(M1/M2,e1-e2)<br />

Algoritmo:<br />

• Restar los exponentes(eventualmente realizando el ajuste)<br />

• Dividir las mantisas<br />

• Post-Normalizar, si es necesario y/o <strong>de</strong>seado, multiplicando<br />

la mantisa por 1/r y sumando 1 al exponente.<br />

19


TRUNCADO (CHOPPING) Y REDONDEO (ROUNDING).<br />

En muchos casos el resultado <strong>de</strong> una operación <strong>de</strong> punto flotante pue<strong>de</strong><br />

exce<strong>de</strong>r con p dígitos <strong>de</strong> la mantisa. Por ejemplo:<br />

(*) p+1 dígitos resultan <strong>de</strong> sumar dos números <strong>de</strong> p dígitos normalizados(si la<br />

suma exce<strong>de</strong> el valor 1).<br />

(*) 2*p dígitos se obtienen al multiplicar dos números <strong>de</strong> p-dígitos.<br />

En el primer caso, suma overflow, se corre a <strong>de</strong>recha una posición y se<br />

quita el último bit (menos significativo) in<strong>de</strong>pendientemente <strong>de</strong> su valor. Esta<br />

operación se llama 'Truncado'. En esta aritmética la mantisa resultante se<br />

normaliza primero y luego, los bits <strong>de</strong> mas allá <strong>de</strong> la posición p se <strong>de</strong>scartan y<br />

los p <strong>de</strong> or<strong>de</strong>n superior se retienen incambiados. Si x=0.130581 trunco a 4 daría<br />

(x)4 = 0.1305<br />

Cuando realizamos la segunda operación, producto, una forma razonable <strong>de</strong><br />

quitar <strong>de</strong> los 2*p dígitos los p inferiores, es sumar uno si el bit más<br />

significativo <strong>de</strong> la segunda mitad es 1, <strong>de</strong> otra manera sumar 0. Esto <strong>de</strong>fine una<br />

manera <strong>de</strong> 'Redon<strong>de</strong>o' <strong>de</strong> los p bits menos significativos.<br />

Como se podrá ver, el redon<strong>de</strong>o conduce al número más próximo <strong>de</strong> p. Este<br />

método aproxima el valor <strong>de</strong>l resultado o bien por arriba o por abajo. Por ello,<br />

el margen <strong>de</strong> error está dado como máximo por:<br />

E = r -p / 2<br />

El umbral se resuelve solo a partir <strong>de</strong>l bit más significativo (el bit mas<br />

significativo, si es ò r/2, es siempre 1) <strong>de</strong> la posición a ser quitada,<br />

in<strong>de</strong>pendientemente <strong>de</strong> la base.<br />

Es <strong>de</strong>cir, La operación <strong>de</strong> redon<strong>de</strong>o se resuelve en sí mirando el primer bit<br />

<strong>de</strong> la porción <strong>de</strong>l número a <strong>de</strong>scartar (si es 1 entonces la porción a <strong>de</strong>scartar es<br />

ò r/2), in<strong>de</strong>pendientemente <strong>de</strong> la base en que se trabaja.<br />

Si el dígito tiene un valor entre:<br />

{r/2,(r/2)+1, ... ,r-1}<br />

entonces se suma un 1 a la parte superior; pero si el dígito tiene un valor<br />

entre:<br />

{0,1, .....,r-1}<br />

entonces no se hace nada, que equivale a truncar.<br />

Teoría <strong>de</strong> Redon<strong>de</strong>o<br />

Lo visto en la sección anterior consi<strong>de</strong>raba sólo valores absolutos. Una<br />

<strong>de</strong>scripción algebraica más rigurosa <strong>de</strong>be distinguir números positivos y<br />

negativos, a los efectos <strong>de</strong> normalizar los métodos existentes.<br />

Habíamos visto la función <strong>de</strong> redon<strong>de</strong>o como:<br />

ρ: R -> M (M: Representacíon máquina)<br />

<strong>de</strong>finida para todo a, b ∈ R tal que se verifica:<br />

ρ(a) ≤ ρ(b) toda vez que a≤b.<br />

Se <strong>de</strong>nomina 'redon<strong>de</strong>o optimal' si para todo a ∈ M,<br />

ρ(a) = a.<br />

En la práctica esto será así para cualquier representación razonable. Un<br />

redon<strong>de</strong>o optimal implica que si a∈R y m1, m2 son dos números consecutivos <strong>de</strong> M<br />

con m1 < a < m2, luego o bien ρ(a)=m1 ó ρ(a)=m2. Está claro el interés luego en<br />

que las implementaciones sean optimal.<br />

20


Dem: supongamos que diese un m1'< m1, esto implica que ρ(m1) (que es m1), por ser<br />

optimal conduce a un número mayor <strong>de</strong>l que es un redon<strong>de</strong>o <strong>de</strong> uno menor, lo cual<br />

contradice el requisito básico <strong>de</strong>l redon<strong>de</strong>o <strong>de</strong> no alterar el or<strong>de</strong>n <strong>de</strong> los<br />

números (relativo) cuando aplicamos el redon<strong>de</strong>o:<br />

Dem1: Sea M1< a < M2 con a∈R y M1,M2 ∈ M, consecutivos<br />

Si aplicamos â a la expresión anterior, tenemos<br />

ρ(M1) ≤ ρ(a) ≤ ρ(M2) entonces M1 ≤ M2, luego<br />

ρ(a) = M1 ó ρ(a)=M2 .<br />

Dem2:<br />

Hip: (1) ρ(a)= M' con M'


T siempre redon<strong>de</strong>a hacia el cero, A redon<strong>de</strong>a alejándose <strong>de</strong>l cero y P<br />

siempre adopta el número máquina más cercano, y en el caso <strong>de</strong> ser el <strong>de</strong> la mitad<br />

elige el <strong>de</strong> mayor magnitud.<br />

La mayoría <strong>de</strong> las máquinas elige o bien T o P, un poco como vimos. El<br />

diseñador <strong>de</strong>l sistema <strong>de</strong> punto flotante <strong>de</strong>be realizar <strong>de</strong>cisiones que afectan<br />

tanto la velocidad <strong>de</strong> cómputo como a la exactitud. Se pue<strong>de</strong> <strong>de</strong>mostrar que la<br />

mejor precisión se obtiene con bases bajas y métodos <strong>de</strong> redon<strong>de</strong>o sofisticados; y<br />

su contraposición, velocida<strong>de</strong>s <strong>de</strong> cómputo se incrementan con valores gran<strong>de</strong>s <strong>de</strong><br />

la base y métodos <strong>de</strong> redon<strong>de</strong>o sencillos como truncado. Un buen método <strong>de</strong><br />

redon<strong>de</strong>o incrementa la precisión pero a su vez pue<strong>de</strong> reducir (o afectar) la<br />

velocidad <strong>de</strong> todo el sistema.<br />

Análisis <strong>de</strong> Error<br />

La <strong>de</strong>cisión la hacemos adoptando tres representaciones (r,q,p)=(2,9,22);<br />

(4,8,23),(6,7,24), para representar en números <strong>de</strong> 32 bits aproximadamente el<br />

mismo rango, don<strong>de</strong><br />

r: base<br />

q: bits para el exponente<br />

p: bits para la mantisa<br />

Cada representación <strong>de</strong> un número por m∈M pue<strong>de</strong> ser visto como una clase <strong>de</strong><br />

equivalencia <strong>de</strong> números reales:<br />

m = { x tal que x∈R y x≡m}<br />

don<strong>de</strong> x≡m <strong>de</strong>nota la relación <strong>de</strong> equivalencia <strong>de</strong> acuerdo a la precisión.<br />

El error en la representación, surge <strong>de</strong> representar un evento x <strong>de</strong> la<br />

clase <strong>de</strong> equivalencia.<br />

Para todo FLP (r,q,p), el valor <strong>de</strong>l intervalo entre dos números<br />

adyacentes normalizados es igual a<br />

2 -p * r e Diferencia entre M1 y M2<br />

e: exp que estamos usando<br />

don<strong>de</strong> e es el valor <strong>de</strong>l exponente no polarizado. En particular con r = 2 k<br />

2 -p * 2 k*e = 2 (k*e-p)<br />

La magnitud <strong>de</strong>l error <strong>de</strong> representación es entonces el valor anterior<br />

dividido 2.<br />

El error relativo δ <strong>de</strong> un m∈M y su equivalente x∈R correspon<strong>de</strong> a<br />

(x - m)<br />

δ = (<br />

x<br />

Si se asume una probabilidad logarítmica para la distribución <strong>de</strong> los<br />

números normalizados en el rango<br />

1/r ≤ x < 1 P(x)=<br />

22<br />

1<br />

x.(ln<br />

r)


y un error uniformemente distribuido obtenido a partir <strong>de</strong> un redon<strong>de</strong>o<br />

apropiado<br />

2<br />

Q(x)=<br />

4.<br />

x<br />

p −<br />

luego el promedio <strong>de</strong>l error relativo <strong>de</strong> representación (ARRE) se <strong>de</strong>fine<br />

como<br />

-p<br />

−p<br />

1<br />

1 2 dx (r-1).2<br />

ARRE (p,r)= ∫1 P(x).Q(x) dx = ∫1<br />

=<br />

2<br />

4x<br />

ln r 4.ln r<br />

r<br />

r<br />

El valor máximo <strong>de</strong>l error relativo <strong>de</strong> representación sobre todas las<br />

mantisas normalizadas se <strong>de</strong>fine como<br />

MRRE (p,r)= 2 -p-1 .r (Ver Obs. mas a<strong>de</strong>lante)<br />

Estos valores para los tres casos propuestos conduce a los siguientes<br />

números:<br />

r p q MRRE ARRE EXPONENT NUMBER<br />

2 9 22 0.5*2 -21 0.18*2 -21 9<br />

(2 −1)<br />

2<br />

9<br />

2 −22<br />

2 .( 1−<br />

2 )<br />

4 8 23 0.5*2 -21 0.14*2 -21 9<br />

(2 −2)<br />

2<br />

9<br />

2 −23<br />

2 .( 1−<br />

2 )<br />

16 7 24 2 -21<br />

0.17*2 -21 9<br />

(2 −4)<br />

2<br />

9<br />

2 −24<br />

2 .( 1−<br />

2 )<br />

El hecho <strong>de</strong> que MRRE es la mitad que la correspondiente Hexa<strong>de</strong>cimal para<br />

Binario ha sido usado como indicador <strong>de</strong> la superioridad <strong>de</strong> esta sobre la<br />

primera.<br />

A lo sumo esta superioridad es marginal si consi<strong>de</strong>ramos a<strong>de</strong>más los valores<br />

<strong>de</strong> ARRE. La tabla muestra que r=4 conduce al menor error. La representación<br />

cuaternaria no es nunca menos exacta que la binaria y el valor <strong>de</strong> ARRE es un 20%<br />

menor que el binario.<br />

Otros estudios usando 'Boot-Mean-Square' (rms) han corroborado estas<br />

ecuaciones como mejor resultado para r=4. Dados los diferentes rangos, con r=4 o<br />

r=8, algunos <strong>sistemas</strong> optan por 8 por requerimiento <strong>de</strong>l rango mínimo aceptable,<br />

frente a optar por 4; pero bases mayores que 8 son siempre inferiores a base 4.<br />

Algunas computadoras como PDP-11 usan normalización binaria implícita.<br />

Haciendo uso <strong>de</strong> que la mantisa es binaria y por en<strong>de</strong> todo número normalizado<br />

<strong>de</strong>fine al dígito mas significativo como complemento <strong>de</strong>l <strong>de</strong> signo, esta<br />

información es redundante, no se almacena este dígito "Hid<strong>de</strong>n-Bit" y con ello se<br />

aumenta en 1 bit la significancia. Observar que a partir <strong>de</strong> esto el valor<br />

correspondiente <strong>de</strong> MRRE (p,r) se reduce a la mitad!.<br />

Observación: Si el intervalo como vimos es para dos números normalizados<br />

adyacentes 2 -p * r e = 2 k*e-p , y si aplicamos redon<strong>de</strong>o reducimos el máximo error a la<br />

mitad, esto es 2 k*e-p-1 resulta que el máximo error relativo (MRRE) <strong>de</strong><br />

representación correspon<strong>de</strong>r al menor número normalizado representable, esto es<br />

2 -k * 2 k*e (p es k=1: 0.1000*2 e , k=4: 0.00010000 16 e )<br />

k*<br />

e-p-1<br />

-p-1<br />

2 2 -p-1<br />

MRRE = = = 2 . r<br />

−k<br />

k*<br />

e -k<br />

2 . 2 2<br />

cqp.<br />

Es <strong>de</strong> notar que una alternativa al redon<strong>de</strong>o que conduzca eventualmente a<br />

tener que sumar un dígito en la posición menos significativa es implementar una<br />

aproximación al mismo con ROM. Veamos esto:<br />

23


Mantisa<br />

Incambiada<br />

Mantisa Porción a <strong>de</strong>scartar<br />

x bits<br />

ROM<br />

2 X+1 .x<br />

x bits<br />

Para evitar la suma direccionamos una ROM (Read Only Memory) con la<br />

información <strong>de</strong> los 'X bits inferiores' <strong>de</strong> la porción <strong>de</strong> la mantisa a conservar y<br />

el valor <strong>de</strong>l dígito mas significante <strong>de</strong> la parte a <strong>de</strong>scartar.<br />

Como información, salida <strong>de</strong> la misma, obtenemos la <strong>de</strong>finición, valor, para<br />

los X bits menos significativos <strong>de</strong>l número resultante, como lo hace; entregando<br />

los dígitos correspondientes a haber sumado (si el bit más significativo a<br />

<strong>de</strong>scartar es 1, suma, si es 0, no), siempre y cuando los x bits no sean todos<br />

uno, con lo que no pue<strong>de</strong> sumar pues habría propagación <strong>de</strong> carry a la posición<br />

inmediata siguiente a los x bits. Luego este sería el único caso, cuando<br />

proce<strong>de</strong>ría por truncación, <strong>de</strong>scarta y <strong>de</strong>ja la porción <strong>de</strong> la mantisa incambiada.<br />

Esto en general ha dado buenos resultados en la métrica <strong>de</strong> ARRE, por ejemplo.<br />

24


Introducción.<br />

LENGUAJES Y ORGANIZACION DE UNA COMPUTADORA<br />

Una computadora digital es una m quina que pue<strong>de</strong> resolver problemas a<br />

partir <strong>de</strong> ir ejecutando instrucciones que se le han suministrado. La secuencia<br />

<strong>de</strong> instrucciones que <strong>de</strong>scriben como realizar una tarea se <strong>de</strong>nomina 'programa'.<br />

Como hemos dicho, las componentes electrónicas directamente solo pue<strong>de</strong>n<br />

realizar un conjunto limitado <strong>de</strong> instrucciones, en las cuales los programas<br />

<strong>de</strong>berían realizarse (o convertirse) antes <strong>de</strong> ser ejecutados (excepción hecha <strong>de</strong><br />

los Hard <strong>de</strong>dicados a propósitos especiales, por ejemplo para procesamiento <strong>de</strong><br />

matrices, etc.).<br />

Estas instrucciones primitivas con todo forman un lenguaje en el cual la<br />

gente pue<strong>de</strong> comunicarse con la computadora. Este lenguaje se llama 'Lenguaje<br />

Máquina'. El diseñador <strong>de</strong> una computadora nueva <strong>de</strong>be <strong>de</strong>cidir qué instrucciones<br />

incluir en su lenguaje m quina. En general trataría <strong>de</strong> hacer estas instrucciones<br />

primitivas lo más simples posible, consistente con la computadora <strong>de</strong>seada, con<br />

el objetivo <strong>de</strong> reducir el costo <strong>de</strong> la electrónica necesitada. Dado que muchos <strong>de</strong><br />

estos lenguajes son tan simples, es difícil y tedioso programar en ellos.<br />

El problema pue<strong>de</strong> ser atacado fundamentalmente <strong>de</strong> dos maneras, las cuales<br />

en ambos casos implican <strong>de</strong>finir un nuevo set <strong>de</strong> instrucciones que sea mas<br />

convencional para la gente. Estas instrucciones constituyen un nuevo lenguaje al<br />

cual podremos llamar L2, así como las instrucciones construidas en hardware<br />

forman un lenguaje L1. La diferencia entre los dos métodos radica en la forma en<br />

que los programas escritos en L2 son ejecutados por la computadora, la cual<br />

<strong>de</strong>spués <strong>de</strong> todo solo pue<strong>de</strong> ejecutar programas en el lenguaje máquina L1.<br />

Uno <strong>de</strong> los métodos <strong>de</strong> ejecutar un programa escrito en L2 es reemplazar<br />

primero cada instrucción en L2 por la secuencia equivalente en L1. La<br />

computadora ejecuta luego un nuevo programa L1 en lugar <strong>de</strong>l viejo L2. Esto se<br />

<strong>de</strong>nomina 'Traducción'.<br />

La otra técnica es escribir un programa en L1 que toma al programa L2 como<br />

dato <strong>de</strong> entrada, examina en or<strong>de</strong>n cada instrucción ejecutando la secuencia<br />

equivalente <strong>de</strong> L1 directamente. Esto no requiere la generación <strong>de</strong> un nuevo<br />

programa en L1. Esto se <strong>de</strong>nomina 'Interpretación' y el programa que lo realiza<br />

se llama 'Intérprete'.<br />

La diferencia es que en el primero todo el programa es convertido primero<br />

a un programa en L1, y L2 es <strong>de</strong>jado a un lado (en cuanto a la ejecución). En el<br />

otro cada instrucción <strong>de</strong> L2 es examinada y <strong>de</strong>codificada y ejecutada<br />

inmediatamente. Ambos métodos son ampliamente usados.<br />

Mas que pensar en términos <strong>de</strong> traducción o interpretación, es a menudo mas<br />

conveniente imaginar la existencia <strong>de</strong> una máquina hipotética, 'Virtual Machine',<br />

cuyo lenguaje sea L2. Si esa máquina se pue<strong>de</strong> construir en forma económica no<br />

hay necesidad <strong>de</strong> tener L1; esto es, una máquina que ejecuta programas en L1. Aún<br />

cuando esta máquina no fuese implementable razonablemente (económicamente), el<br />

programador podrá escribir programas en L2 los cuales no se ejecutar n<br />

directamente sino que serán o bien interpretados o bien traducidos <strong>de</strong> forma <strong>de</strong><br />

po<strong>de</strong>r ser ejecutados en L1, el cual en sí mismo se ejecuta directamente en el<br />

hardware existente.<br />

Para realizar o bien la traducción o la interpretación práctica, L1 y L2<br />

no <strong>de</strong>ben ser <strong>de</strong>masiado diferentes. Esto significa que L2 aún siendo mejor que L1<br />

estar no muy lejos <strong>de</strong>l i<strong>de</strong>al para la mayoría <strong>de</strong> las aplicaciones.<br />

La salida lógica es, en el mismo sentido, i<strong>de</strong>ar un nuevo lenguaje, con su<br />

set <strong>de</strong> instrucciones que sea mas orientado a la gente y menos a la máquina <strong>de</strong> lo<br />

que lo es L2. Al mismo lo llamaremos L3. La gente podrá escribir programas en L3<br />

pensando que la máquina virtual con tal lenguaje realmente existe. El programa<br />

podrá o bien traducirse a L2, o ejecutarse por un intérprete en L2.<br />

La creación <strong>de</strong> todo un conjunto <strong>de</strong> nuevos lenguajes, cada uno mas<br />

conveniente que su pre<strong>de</strong>cesor, podrá ir in<strong>de</strong>finidamente hasta que el a<strong>de</strong>cuado es<br />

alcanzado.<br />

25


Se pue<strong>de</strong> ver a la computadora como una serie <strong>de</strong> niveles o capas, una<br />

encima <strong>de</strong> otra. El mas inferior es el mas simple, y el mas alto el mas<br />

sofisticado.<br />

Toda máquina tiene su lenguaje <strong>de</strong> máquina, consistente en todas las<br />

instrucciones que esta m quina pue<strong>de</strong> ejecutar. En efecto, una máquina <strong>de</strong>fine un<br />

lenguaje. Similarmente, un lenguaje <strong>de</strong>fine una máquina, la que pue<strong>de</strong> ejecutar un<br />

programa escrito en ese lenguaje. Lógicamente la máquina <strong>de</strong>finida en un cierto<br />

lenguaje podrá ser enormemente complicada y costosa <strong>de</strong> construir directamente en<br />

circuitos electrónicos. Pero uno la pue<strong>de</strong> "imaginar" <strong>de</strong> todas formas.<br />

La persona cuyo trabajo es escribir un programa en un nivel n no necesita<br />

preocuparse por la interpretación o traducción que hay por <strong>de</strong>trás. El punto es<br />

que el programa ser ejecutado.<br />

Máquinas Contemporáneas<br />

La mayoría <strong>de</strong> ellas consiste <strong>de</strong> dos o mas niveles. De seis niveles no<br />

serán inusuales.<br />

'Nivel 0', el hardware verda<strong>de</strong>ro (no vamos mas abajo porque entraríamos en<br />

áreas <strong>de</strong> ingeniería electrónica, nivel <strong>de</strong> dispositivos, entendiendo con<br />

transistores individuales, esto es, construcción <strong>de</strong> circuitos).<br />

El nivel mas bajo que abordamos correspon<strong>de</strong> al <strong>de</strong> la lógica digital, y los<br />

objetos <strong>de</strong> interés se <strong>de</strong>nominan 'gates' (compuertas). Aunque construidas con<br />

componentes analógicos se construyen alcanzando un comportamiento digital<br />

binario.<br />

El siguiente, 'Nivel 1', el cual es el verda<strong>de</strong>ro lenguaje máquina, dado<br />

que en L0 no existe concepto <strong>de</strong> programa como secuencia <strong>de</strong> instrucciones a<br />

ejecutar. En este sí, llamado 'Microprograma', cuyo trabajo es interpretar las<br />

instrucciones <strong>de</strong>l nivel 2. Al nivel 1 lo referimos como nivel <strong>de</strong><br />

microprogramación.<br />

A pesar <strong>de</strong> que en general no habrá dos computadoras con idénticos L1,<br />

existen muchas similitu<strong>de</strong>s en este nivel.<br />

El nivel L1 tendrá uno o mas programas que pue<strong>de</strong>n correr en él. Cada uno<br />

implícitamente <strong>de</strong>fine un lenguaje <strong>de</strong> Nivel 2 (y su máquina virtual).<br />

Los lenguajes <strong>de</strong> 'Nivel 2' tienen a su vez mucho en común. Po<strong>de</strong>mos <strong>de</strong>cir<br />

que tendrán mas similitu<strong>de</strong>s que diferencias. Po<strong>de</strong>mos aludir a este nivel como el<br />

'Nivel Máquina Convencional' (el que ve el programador <strong>de</strong> base). Lo real es que<br />

el nivel máquina es el L1, el tangible y fijado por hardware. El Nivel L2 es<br />

susceptible <strong>de</strong> cambiar, manteniendo el Nivel L1, dando lugar a distintas<br />

máquinas. Hay ejemplos <strong>de</strong> que en un mismo hardware coexistan mas <strong>de</strong> un programa<br />

intérprete en L1 lo que da lugar a que se tengan "Dos Lenguajes M quina". La<br />

máquina <strong>de</strong> Nivel L2 po<strong>de</strong>mos asumir que como tal no existe, <strong>de</strong>pen<strong>de</strong> <strong>de</strong> la tarea<br />

<strong>de</strong>l programa intérprete en L1, el que le da existencia como para que pueda<br />

enten<strong>de</strong>r las instrucciones <strong>de</strong>l Nivel L2.<br />

Las computadoras <strong>de</strong>l tipo RISC (Reduced Instruction Set Computer) no<br />

tienen nivel <strong>de</strong> microprogramación. En estas el nivel máquina convencional es<br />

llevado a cabo directamente por la electrónica.<br />

El tercer nivel ('Nivel 3') es usualmente híbrido. Muchas <strong>de</strong> las<br />

instrucciones <strong>de</strong> ese lenguaje están también en el nivel L2 (no hay razón para<br />

que esta situación no pueda darse).<br />

A<strong>de</strong>más <strong>de</strong> estas, hay una serie <strong>de</strong> nuevas instrucciones, una diferente<br />

organización <strong>de</strong> memoria, la posibilidad <strong>de</strong> correr dos o mas programas en<br />

paralelo y otras utilida<strong>de</strong>s. Mas variaciones existen entre máquinas <strong>de</strong> Nivel L3<br />

que entre máquinas <strong>de</strong> nivel L1 o L2.<br />

Las nuevas facilida<strong>de</strong>s agregadas son llevadas a cabo por un intérprete el<br />

cual históricamente fue llamado 'Operating System' (en razón que comenzó a<br />

<strong>de</strong>sarrollarse apuntando inicialmente a facilitar, automatizar, las tareas <strong>de</strong>l<br />

operador en las primeras etapas <strong>de</strong> la computación).<br />

26


Las instrucciones <strong>de</strong> este nivel, idénticas al <strong>de</strong> L2, son ejecutadas<br />

directamente por microprograma, no por el Sistema Operativo. En otras palabras,<br />

parte son interpretadas por el sistema operativo y otras por el microprograma.<br />

De allí la <strong>de</strong>scripción <strong>de</strong> híbrido inicial. A este nivel lo referimos como<br />

nivel <strong>de</strong> máquina <strong>de</strong>l Sistema Operativo.<br />

Hay una separación fundamental entre nivel 3 y 4. Los 3 primeros no fueron<br />

diseñados para uso directo <strong>de</strong>l programador. Su objetivo es posibilitar que<br />

corran los intérpretes y traductores necesarios para soportar los niveles<br />

superiores. Estos intérpretes y traductores son escritos por Systems Programers,<br />

que se especializan en diseñar e implementar nuevas máquinas virtuales en Nivel<br />

L4 y encima son usados por los programadores <strong>de</strong> aplicación.<br />

Otro cambio que se da a partir <strong>de</strong>l 'Nivel 4' es el método en que los<br />

niveles superiores son soportados. Nivel 2 y 3 son siempre interpretados. Nivel<br />

4, 5, y mayores son usualmente, aunque no siempre traducidos.<br />

Otra diferencia adicional es la naturaleza <strong>de</strong>l lenguaje provisto entre L1,<br />

L2 y L3 por un lado y L4, L5 y mayores por otro. Los lenguajes máquina <strong>de</strong><br />

niveles 1, 2 y 3 son numéricos. Programas <strong>de</strong> estos niveles son largas series <strong>de</strong><br />

números, difíciles <strong>de</strong> procesar por la gente, pero naturales para las máquinas.<br />

Comenzando en el nivel L4, los lenguajes contienen palabras y abreviaturas con<br />

sentido para la gente.<br />

El L4, lenguaje Assembler, es realmente una forma simbólica <strong>de</strong> los<br />

lenguajes que están por <strong>de</strong>bajo. Los programas en lenguaje ensamblador son<br />

traducidos primero a nivel L2 o L3 y luego interpretados por la máquina virtual<br />

o real a<strong>de</strong>cuada. El programa que realiza la traducción se <strong>de</strong>nomina 'Assembler'.<br />

Este será un tema <strong>de</strong> estudio para compren<strong>de</strong>r cómo la máquina que ve el<br />

programador trabaja con los programas. Como lenguaje, cada vez va perdiendo mas<br />

importancia.<br />

El 'Nivel 5' consiste <strong>de</strong> lenguajes diseñados para ser usados por los<br />

programadores. Se los conoce como lenguajes <strong>de</strong> autonivel (ej.: Basic, C, Pascal,<br />

etc.). Los programas escritos por estos lenguajes, generalmente se traducen a<br />

nivel 3 o 4 por traductores conocidos como 'Compiladores', aunque generalmente<br />

son interpretados.<br />

El 'Nivel 6' y mayores, consisten en un conjunto <strong>de</strong> programas diseñados<br />

para máquinas orientadas específicamente a ciertas aplicaciones. Estos niveles<br />

constituyen un rea <strong>de</strong> investigación actual.<br />

NIVEL 5 HIGH-LEVEL LANGUAGE<br />

Traducción (Compiladores)<br />

NIVEL 4 ASSEMBLER LANGUAGE<br />

Traducción (Assembler)<br />

NIVEL 3 OPERATIVE SYSTEM MACHINE<br />

Interpretación Parcial<br />

(Operative System)<br />

NEVEL 2 CONVENTIONAL MACHINE<br />

Interpretados (Microprogramming)<br />

NIVEL 1 MICROPROGRAMMING<br />

Microprogramas Ejecutados<br />

Directamente en Hardware<br />

NIVEL 0 DIGITAL LOGIC<br />

27


otro.<br />

En la figura se indica a la <strong>de</strong>recha como se pasa <strong>de</strong> un nivel a<br />

L0 -----> Diseño lógico <strong>de</strong>l hardware. En este nivel se entien<strong>de</strong> con compuertas.<br />

Estos circuitos manejan señales digitales binarios, es <strong>de</strong>cir, nivel alto y nivel<br />

bajo <strong>de</strong> tensión (No se cuenta como lenguaje <strong>de</strong> programación).<br />

L1 -----> Es el verda<strong>de</strong>ro "Lenguaje Máquina", es <strong>de</strong>cir, lo que propone L1 es lo<br />

que el HW pue<strong>de</strong> ejecutar. El lenguaje <strong>de</strong> programación <strong>de</strong> este nivel es llamado<br />

'Lenguaje <strong>de</strong> Microprogramación". El propósito <strong>de</strong> L1 es interpretar el lenguaje<br />

L2.<br />

L2 -----> Es el "Lenguaje Máquina Convencional"(el que ve el programador <strong>de</strong><br />

base).Para el mismo HW pue<strong>de</strong>n coexistir distintos lenguajes L2,ya que se pue<strong>de</strong>n<br />

construir intérpretes en L1 para interpretar estos lenguajes L2. Las<br />

computadoras <strong>de</strong>l tipo RISC no tienen nivel <strong>de</strong> microprogramación, por lo tanto el<br />

"Lenguaje Máquina Convencional" es llevado a cabo directamente por la<br />

electrónica.<br />

L3 -----> Es usualmente llamado como "hibrido". Muchas <strong>de</strong> las instrucciones <strong>de</strong><br />

este lenguaje están también en el Nivel 2. A<strong>de</strong>más <strong>de</strong> estas, hay una serie <strong>de</strong><br />

nuevas instrucciones, una diferente organización <strong>de</strong> memoria, la posibilidad <strong>de</strong><br />

correr dos o mas programas en paralelo y otras utilida<strong>de</strong>s. Más variaciones<br />

existen entre máquinas <strong>de</strong> nivel L3 que entre máquinas <strong>de</strong> Nivel L1 y L2 .<br />

Las nuevas facilida<strong>de</strong>s <strong>de</strong> L3 son llevadas a cabo por un intérprete, llamado<br />

"Sistema Operativo"; mientras que las instrucciones idénticas a las <strong>de</strong> L2, son<br />

ejecutadas directamente por microprogramas.<br />

Los niveles 1,2 y 3 no fueron construidos para el programador, sino para dar<br />

soporte a los intérpretes y traductores <strong>de</strong> lenguajes <strong>de</strong> mas alto nivel.<br />

L4 -----> Es el llamado "Lenguaje Assembler". Es realmente una forma simbólica<br />

<strong>de</strong> los lenguajes que est n por <strong>de</strong>bajo. Los lenguajes en L4 son traducidos<br />

primero a nivel L2 y L3 y luego por la máquina virtual a<strong>de</strong>cuada. El programa que<br />

realiza la traducción se llama Assembler.<br />

L5 -----> Consiste <strong>de</strong> lenguajes diseñados para ser usados por los programadores.<br />

Se los conoce como lenguajes <strong>de</strong> Alto Nivel. A estos se los traduce a nivel L3 o<br />

L4 por programas llamados Compiladores, pero también pue<strong>de</strong>n ser interpretados.<br />

L6 y +-----> Consisten en un conjunto <strong>de</strong> programas diseñados para máquinas<br />

orientadas específicamente a ciertas aplicaciones. Todavía están <strong>de</strong>sarrollo.<br />

Evolución <strong>de</strong> las Máquinas Multinivel<br />

Las primeras, remontándose a los 1940's, tenían solo dos niveles, el Nivel<br />

Convencional Máquina en el cual se realizaba la programación y el Nivel <strong>de</strong><br />

Circuitos Lógicos don<strong>de</strong> eran ejecutados. Estos eran complicados, difíciles <strong>de</strong><br />

construir y poco confiables.<br />

En 1951, Wilkes sugiere la i<strong>de</strong>a <strong>de</strong> diseñar una computadora en tres<br />

niveles, en camino a reducir drásticamente el Hardware. La máquina tendría un<br />

intérprete propio, incambiable, cuya función seria ejecutar los lenguajes en<br />

Lenguaje Máquina convencional en forma interpretativa. Dado que el Hardware<br />

ahora solo ejecutaría microprogramas, lo cual tiene un repertorio limitado,<br />

menor circuitería electrónica sería necesaria.<br />

En esa ‚poca los circuitos se construían con válvulas lo que hacía la<br />

posibilidad <strong>de</strong> reducción <strong>de</strong> la complejidad <strong>de</strong> circuitos tremendamente importante<br />

(potencia, confiabilidad).<br />

28


Unas pocas <strong>de</strong> este tipo se construyeron durante los 50's. Mas fueron<br />

construidas durante los 60's. Por los 70's la i<strong>de</strong>a <strong>de</strong> tener un nivel máquina<br />

convencional interpretado por microprogramas, en lugar <strong>de</strong> directamente, se<br />

expandió tremendamente a partir <strong>de</strong> contar con memorias (control) relativamente<br />

rápidas y baratas.<br />

Más recientemente la microprogramación <strong>de</strong>ja lugar a lo que sería control<br />

cableado, <strong>de</strong>saparece el nivel L1, en función <strong>de</strong> que los tiempos que se manejan<br />

en nivel L0 (lógico) tornan inviable (por lentos) el empleo <strong>de</strong> esta técnica. El<br />

proceso a controlar se tornó mucho más rápido que el controlador lo cual se<br />

torna impráctico (sino inadmisible).<br />

Los ensambladores y compiladores fueron <strong>de</strong>sarrollados durante los 50's<br />

para facilitar la tarea <strong>de</strong> programación. En esa época el programador tenía que<br />

operar la máquina personalmente. Por ejemplo el programador una vez que pasa a<br />

hacer uso <strong>de</strong> su 'Block Time' realiza lo siguiente:<br />

1. Carga el compilador (consistente <strong>de</strong> un lote <strong>de</strong> tarjetas).<br />

2. Luego pone el programa suyo (tarjetas) para ser cargado.<br />

3. Cuando terminaba, normalmente cargaba el programa Fortran nuevamente (lo<br />

usual era 2 o mas pasadas).<br />

4. Finalmente se terminaba la traducción. El riesgo era que un error <strong>de</strong>tectado a<br />

esta altura malograse todo el trabajo anterior, pues implicaría recomenzar la<br />

tarea. De no haber error, el compilador producía una salida (tarjetas<br />

perforadas) <strong>de</strong>l programa traducido.<br />

5. Luego ponía su programa en lenguaje máquina, junto con las librerías y lo<br />

ingresaba a la máquina.<br />

6. El programa comenzaba a ejecutar. Si el programa llegaba a fallar, lo cual no<br />

era infrecuente, a partir <strong>de</strong> interactuar <strong>de</strong>s<strong>de</strong> la consola trataba <strong>de</strong> <strong>de</strong>tectar<br />

la causa. Si lo <strong>de</strong>tectaba tenía la opción <strong>de</strong> realizar las modificaciones<br />

(perforar tarjetas con las mismas) y reiniciar la secuencia. Si era menos<br />

afortunado, realizaba una impresión <strong>de</strong>l contenido <strong>de</strong> memoria (volcado) y se<br />

retiraba para con esta información elaborar la solución al problema en casa.<br />

Esto, con variaciones menores, fue normal en centros <strong>de</strong> cómputos por años.<br />

Esto obligaba al programador a apren<strong>de</strong>r como operar y que hacer cuando algo se<br />

rompía, lo cual era frecuente. Todo este esquema inducía a que la computadora<br />

estuviera mucho tiempo ociosa.<br />

Alre<strong>de</strong>dor <strong>de</strong> 1960, la gente trató <strong>de</strong> reducir este tiempo perdido<br />

automatizando la tarea <strong>de</strong> operación. Un programa llamado 'Sistema Operativo' se<br />

mantenía en la computadora todo el tiempo. El programador suministraba ciertas<br />

tarjetas <strong>de</strong> control junto con su programa para ser interpretados por el Sistema<br />

Operativo.<br />

Aunque diseñado para automatizar la operación, fue el primer escalón en el<br />

<strong>de</strong>sarrollo <strong>de</strong> una nueva máquina virtual.<br />

En los años siguientes los Sistemas Operativos se tornaron más y más<br />

sofisticados, incorporando nuevas características a la máquina convencional,<br />

hasta que tomó la apariencia <strong>de</strong> un nuevo nivel. Alguna <strong>de</strong> las instrucciones <strong>de</strong>l<br />

nuevo nivel son idénticas a la <strong>de</strong>l nivel máquina convencional y otras,<br />

particularmente 'Input/Output Instruction', fueron completamente distintas. Las<br />

nuevas instrucciones fueron conocidas a menudo como "Macros <strong>de</strong>l Sistema<br />

Operativo" o "Llamadas al Supervisor".<br />

Los Sistemas Operativos fueron <strong>de</strong>sarrollándose en otros sentidos. Las<br />

primeras computadoras, como ya se dijo, operaban con tarjetas en una<br />

organización <strong>de</strong> sistema batch. Usualmente <strong>de</strong>bíamos esperar horas para conocer el<br />

resultado <strong>de</strong> una corrida, dificultando por en<strong>de</strong> el <strong>de</strong>sarrollo <strong>de</strong> los programas.<br />

En los primeros años <strong>de</strong> los 60's, en el MIT se <strong>de</strong>sarrollo un Sistema<br />

Operativo que permitía a múltiples programadores comunicarse directamente con la<br />

computadora. Terminales remotas se conectaban a la computadora central via línea<br />

telefónica. Las respuestas así obtenidas eran casi inmediatas. Este sistema se<br />

llamó y se llama actualmente, 'Sistema <strong>de</strong> Tiempo Compartido'.<br />

Por último, digamos que la frontera entre hardware y software es<br />

arbitraria y en continuo cambio. El software <strong>de</strong> hoy pasa a ser el harware <strong>de</strong><br />

29


mañana y viceversa. Más aun, las fronteras entre niveles son fluidas, en varios<br />

casos. Des<strong>de</strong> el punto <strong>de</strong> vista <strong>de</strong>l programador, cómo una instrucción es<br />

realmente ejecutada, no es importante.<br />

ORGANIZACION DE LA COMPUTADORA<br />

La computadora, tal cual esta organizada hoy día, no difiere mayormente<br />

<strong>de</strong>l mo<strong>de</strong>lo que concibió Von Neumann, en lo que correspon<strong>de</strong> a la primera<br />

generación <strong>de</strong> computadoras, esto es, empleando tecnología <strong>de</strong> válvulas.<br />

Una cosa que resultó evi<strong>de</strong>nte para Von Neumann era que programar<br />

computadoras con un gran número <strong>de</strong> cables y llaves, tal cual era la metodología<br />

empleada en esa ‚poca, a<strong>de</strong>más <strong>de</strong> tedioso era inflexible. El imaginó que el<br />

programa podría ser almacenado en la memoria <strong>de</strong> la computadora en forma digital,<br />

junto con el dato. A<strong>de</strong>más, que la aritmética <strong>de</strong>cimal serial usada por la ENIAC<br />

(muy difícil <strong>de</strong> manejar) podría reemplazarse por aritmética binaria.<br />

El diseño fue usado por EDSAC, la primer computadora <strong>de</strong> programa<br />

almacenado. Esquemáticamente este mo<strong>de</strong>lo sería:<br />

CONTROL<br />

UNIT<br />

MEMORIA<br />

ARITMETIC<br />

LOGICAL<br />

UNIT<br />

ACUMULADOR<br />

Como se ve, tiene cinco partes básicas: la memoria, la ALU, la unidad <strong>de</strong><br />

control, el equipo <strong>de</strong> entrada y el <strong>de</strong> salida. La memoria era <strong>de</strong> 4096 palabras <strong>de</strong><br />

40 bits por palabra. Cada palabra o bien contenía 2 instrucciones <strong>de</strong> 20 bits, o<br />

un entero signado <strong>de</strong> 39 bits. Ocho bits <strong>de</strong> la instrucción <strong>de</strong>finían el tipo, los<br />

doce bits restantes direccionaban una <strong>de</strong> la 4096 palabras.<br />

Dentro <strong>de</strong> la ALU, iniciador <strong>de</strong>l mo<strong>de</strong>rno CPU (Central Processing Unit),<br />

había un registro <strong>de</strong> 40 bits especial llamado acumulador. Una instrucción típica<br />

sumaba una dirección <strong>de</strong> memoria al contenido <strong>de</strong>l acumulador o almacenaba el<br />

contenido <strong>de</strong>l acumulador en memoria. Obviamente no tenía aritmética <strong>de</strong> punto<br />

flotante, atribuible a que Von Neumann pensaba que todo matemático competente<br />

<strong>de</strong>bería ser capaz <strong>de</strong> manejar la posición <strong>de</strong>l punto binario en su cabeza, lo cual<br />

como se dijo, no es así, a partir <strong>de</strong> la complejidad que pue<strong>de</strong>n asumir los<br />

cálculos.<br />

Vamos a realizar una introducción a los componentes básicos que<br />

constituyen una computadora: procesadores, memoria y dispositivos <strong>de</strong><br />

entrada/salida.<br />

30<br />

INPUT<br />

OUTPUT


Control Unit<br />

Debe realizar:<br />

1. El fetch <strong>de</strong> instrucciones<br />

2. La <strong>de</strong>codificaci¢n,resolver todo lo relacionado con la interpretación <strong>de</strong> la<br />

instrucción y preparar todo para ejecutarla.<br />

Procesador<br />

Es una organización con único 'bus'. Una arquitectura simple sería:<br />

CPU<br />

CONTROL UNIT<br />

ALU<br />

REGISTROS<br />

MEMORIA<br />

PRINCIPAL<br />

La 'CPU' (Central Procesing Unit) es el "cerebro" <strong>de</strong> la computadora. Su<br />

función es ejecutar el programa almacenado en memoria, buscando instrucciones,<br />

examinando las mismas y ejecutando una tras otra. Está compuesta <strong>de</strong> distintas<br />

partes. La 'Unidad <strong>de</strong> Control' es la responsable <strong>de</strong> organizar las distintas<br />

tareas <strong>de</strong>l CPU. La 'Unidad Aritmética-Lógica' realiza las <strong>operaciones</strong><br />

aritméticas, como suma, resta, o lógicas como AND, OR, necesarias en la<br />

ejecución <strong>de</strong> instrucciones.<br />

El CPU contiene a<strong>de</strong>más una pequeña memoria r pida usada en el<br />

almacenamiento <strong>de</strong> resultados temporarios y <strong>de</strong> cierta información <strong>de</strong> control.<br />

Esta memoria consiste en un dado número <strong>de</strong> registros, cada uno con una cierta<br />

función. El más importante es el PC, 'Program Counter', el que apunta a la<br />

próxima instrucción a ser ejecutada. Otro registro importante es el IR,<br />

'Instruction Register', el cual almacena las instrucciones que se están<br />

ejecutando. A<strong>de</strong>más <strong>de</strong> estos, las computadoras tienen otros accesorios, algunos<br />

<strong>de</strong> esos disponibles a nivel 2 y 3 para los programadores, y otros no visibles,<br />

internos, solamente visibles a nivel 1. Esto es, dan soporte <strong>de</strong> hardware a la<br />

ejecución <strong>de</strong> los microprogramas.<br />

31<br />

DISCO<br />

Controlador<br />

IMPRESORA<br />

Controlador<br />

BUS


Ejecución <strong>de</strong> Instrucciones<br />

El CPU ejecuta cada instrucción en una serie <strong>de</strong> pequeños pasos:<br />

1. Búsqueda <strong>de</strong> la próxima instrucción <strong>de</strong>s<strong>de</strong> memoria en el IR.<br />

2. Cambia el PC para apuntar a la próxima instrucción.<br />

3. Determina el tipo <strong>de</strong> instrucción <strong>de</strong> la que acaba <strong>de</strong> traer.<br />

4. Si la instrucción usa dato en la memoria, <strong>de</strong>termina don<strong>de</strong> esta (cálculo <strong>de</strong> la<br />

dirección efectiva).<br />

5. Busca el dato, si lo hubiera, y lo transfiere a un registro interno.<br />

6. Ejecuta la instrucción.<br />

7. Almacena el resultado en el lugar a<strong>de</strong>cuado.<br />

8. Vuelve al paso 1 para comenzar a procesar la próxima instrucción.<br />

Esta secuencia es reconocida como 'Fetch-Deco<strong>de</strong>-Execute Cycle'.<br />

Está claro que estos pasos podrían correspon<strong>de</strong>r a la ejecución <strong>de</strong> un<br />

programa, necesariamente ejecutado por Hardware. Este programa sería lo que<br />

llamamos 'Intérprete' un poco antes.<br />

Luego <strong>de</strong> haber <strong>de</strong>scifrado el lenguaje máquina L <strong>de</strong> una nueva computadora,<br />

el equipo <strong>de</strong> diseño pue<strong>de</strong> <strong>de</strong>cidir cuando construir un procesador en Hardware<br />

para ejecutar programas en L directamente o cuando escribir un intérprete en su<br />

lugar. En tal caso, <strong>de</strong>berán a<strong>de</strong>más, proporcionar la máquina para correr el<br />

intérprete, dado que el intérprete divi<strong>de</strong> la instrucción m quina (convencional)<br />

en pequeñas etapas. La máquina don<strong>de</strong> corre el intérprete podrá a menudo ser<br />

mucho mas simple que si la implementación se hiciese directamente en Hardware.<br />

Por razones <strong>de</strong> economía y facilidad (metodología) en el diseño, esta situación<br />

se daba en la mayoría <strong>de</strong> las computadoras. El hecho <strong>de</strong> que los requerimientos <strong>de</strong><br />

la lógica (en tiempos) no se puedan compatibilizar con los <strong>de</strong> la memoria <strong>de</strong><br />

control, tornan en la actualidad a este sistema inconveniente.<br />

El conjunto <strong>de</strong> todas las instrucciones disponibles <strong>de</strong>l programador<br />

constituye el 'Instruction Set' <strong>de</strong> un dado nivel. La cantidad varía <strong>de</strong> máquina a<br />

máquina, y <strong>de</strong> nivel a nivel. El nivel máquina convencional varía entre 20 y 300.<br />

El hecho <strong>de</strong> disponer <strong>de</strong> un gran número <strong>de</strong> instrucciones no necesariamente<br />

asegura el mejor resultado, pues muchas veces no podrá ser aprovechado a pleno<br />

por los compiladores. Su existencia se inspira en que al disponerlas en "hard"<br />

era mas rápida su ejecución que en "soft", y esto fue tremendamente favorecido<br />

cuando trabajamos con intérprete, los que al ser software, no imponía en<br />

principio limitación práctica al set <strong>de</strong> instrucciones a <strong>de</strong>finir (excepción hecha<br />

<strong>de</strong>l tamaño <strong>de</strong> la memoria <strong>de</strong> control).<br />

Lo actual es manejar un set <strong>de</strong> instrucciones limitado, arquitecturas RISC<br />

(Required Instruction Set Computers) frente a las anteriores CISC (set <strong>de</strong><br />

instrucciones complejo). En las RISC el set <strong>de</strong> instrucciones se elige con mucho<br />

<strong>de</strong>tenimiento, asegurando que cada función que se lleve al hard, esto es, al<br />

nivel máquina convencional, está claramente justificado; esto es, que no resulte<br />

más conveniente mantenerlo en el nivel superior.<br />

A su vez en éstas, el control es necesariamente cableado, no existe la<br />

microprogramación, la ejecución es directamente en hard.<br />

A nivel interno el CPU clásico como se llama, compren<strong>de</strong>: ALU, registros y<br />

Buses internos que <strong>de</strong>finen lo que se llama 'Data Path'.<br />

32


*El control microprogramado aventaja al control cableado en que:<br />

• No fija un techo para las instrucciones<br />

• Es mas fácil <strong>de</strong> implementar<br />

• Es mucho más sistemático que lo que sería <strong>de</strong>sarrollar autómatas.<br />

*DATA PATH: Son todos los lugares <strong>de</strong>l CPU don<strong>de</strong> se procesan los datos.<br />

Está compuesto por:<br />

REGISTROS<br />

BUSES(internos)<br />

ALU<br />

El DATA PATH no es responsable <strong>de</strong> que la instrucción se ejecute correctamente.<br />

Esta responsabilidad la lleva el Control Path se responsabiliza <strong>de</strong> <strong>de</strong>terminar la<br />

performance última.<br />

A + B<br />

A<br />

B<br />

A B<br />

ALU<br />

A<br />

El contenido <strong>de</strong> los registros (un par <strong>de</strong> ellos) es transferido a los<br />

registros <strong>de</strong> entrada <strong>de</strong> la ALU (A Y B). Estos registros mantienen los operandos<br />

mientras la ALU esta calculando (suma, resta, y otras <strong>operaciones</strong> aritméticas y<br />

lógicas simples), almacenando el resultado en un buffer <strong>de</strong> salida (registro).<br />

Este podrá ser transferido a un registro y <strong>de</strong> allí <strong>de</strong> vuelta a memoria.<br />

Las instrucciones las po<strong>de</strong>mos dividir en tres categorías: registromemoria,<br />

registro-registro, memoria-memoria. Registro-memoria permite que<br />

palabras <strong>de</strong> memoria sean transferidas, cargadas, en registros, los que podrán<br />

ser usados posteriormente como operandos en la ALU. Las registro-registro<br />

33<br />

REGISTROS


normalmente buscan operandos en los registros, los transfieren a la ALU, esta<br />

los opera y luego se realiza el almacenamiento <strong>de</strong>l resultado en un dado<br />

registro. Memoria-memoria, busca sus operandos en memoria, realiza la operación<br />

y luego el resultado <strong>de</strong> vuelta en memoria.<br />

El 'Data Path' es fundamental en cuanto a la performance alcanzable.<br />

Memoria<br />

Ya se dijo que es el lugar don<strong>de</strong> el procesador va a buscar los datos y las<br />

instrucciones <strong>de</strong> un dado programa en ejecución. Algunos referencian a esta<br />

unidad como 'store' (almacenamiento).<br />

Bits<br />

También se mencionó que el hard distingue entre 0's y 1's. La celda básica<br />

<strong>de</strong> memoria es un dígito binario llamado bit, el cual podrá adoptar un valor 0 o<br />

1.<br />

Dirección <strong>de</strong> Memoria<br />

Las memorias están compuestas <strong>de</strong> un conjunto <strong>de</strong> celdas o locaciones. Cada<br />

celda tiene un número asociado, 'Address', por el cual el programa pue<strong>de</strong><br />

referirlo.<br />

Si la memoria tiene N celdas, se tendrán direcciones <strong>de</strong> 0 a N-1. Todas las<br />

celdas <strong>de</strong> memoria contienen el mismo número <strong>de</strong> bits. Si cada celda tiene K bits,<br />

cada una podrá almacenar 2 K diferentes combinaciones <strong>de</strong> bits.<br />

Las direcciones por la máquina son a su vez expresadas en forma binaria.<br />

Si la dirección tiene M bits, el máximo número <strong>de</strong> celdas resulta 2 M .<br />

El número M tiene que ver con el máximo número <strong>de</strong> celdas a direccionar<br />

directamente en memoria y es in<strong>de</strong>pendiente <strong>de</strong>l número <strong>de</strong> bits por celda.<br />

El significado <strong>de</strong> 'celda' es que es la mínima unidad direccionable. En los<br />

últimos años se estandarizó que una celda <strong>de</strong> 8 bits se <strong>de</strong>fine como byte. Los<br />

bytes se asocian a su vez en palabras.<br />

Or<strong>de</strong>namiento <strong>de</strong> los Bytes<br />

Los bytes en memoria podrán ser numerados, direccionados <strong>de</strong>ntro <strong>de</strong> la<br />

palabra <strong>de</strong> izquierda a <strong>de</strong>recha o viceversa. Veamos las dos alternativas, la<br />

primeras se conoce como 'BIG ENDIAN' y la segunda como 'LITTLE ENDIAN'.<br />

Sean palabras <strong>de</strong> 4 bytes:<br />

Address Address<br />

0 0 1 2 3 0 3 2 1 0<br />

4 4 5 6 7 4 7 6 5 4<br />

BIG LITTLE<br />

ENDIAN ENDIAN<br />

Es importante enten<strong>de</strong>r que con BIG ENDIAN y LITTLE ENDIAN, un entero <strong>de</strong> 32<br />

bits, con valor digamos 6, se representa en ambos casos como los bits 110 en el<br />

extremo <strong>de</strong>recho (<strong>de</strong> los bits menos significativos), y el resto a la izquierda<br />

son todos 0's.<br />

Si las computadoras sólo almacenaran enteros no habría problemas, el punto<br />

es que las aplicaciones requieren <strong>de</strong> una mezcla <strong>de</strong> datos.<br />

34


Cuando las aplicaciones se resuelven en una misma máquina no hay<br />

dificultad, pero si una máquina envía datos a otra sobre una red, un byte a la<br />

vez comenzando con el byte 0, como el lugar que ocupa en fuente y <strong>de</strong>stino no es<br />

consistente esto como veremos traer aparejado problemas (con la parte<br />

numérica).<br />

Supongamos cinco palabras para almacenar: JIM (espacio) SMITH 21 260<br />

BIG ENDIAN LITTLE ENDIAN TRANSF. BIG-LITT.<br />

J I M M I J M I J<br />

S M I T T I M S T I M S<br />

H 0 0 0 0 0 0 H 0 0 0 H<br />

0 0 0 21 0 0 0 21 21 0 0 0<br />

0 0 1 4 0 0 1 4 4 1 0 0<br />

La solución no es simple, un modo sería que para la transmisión se usara<br />

una forma consi<strong>de</strong>rada estándar, asumida por todas las máquinas. Esto en algunos<br />

casos pue<strong>de</strong> ser innecesario, en los casos en que las dos máquinas usaran la<br />

misma forma y esta fuese distinta a la forma estándar.<br />

Otra solución, que es ineficiente, podría ser incluir un encabezamiento en<br />

cada récord, informando qué tipo <strong>de</strong> dato sigue (string, entero u otro) y cuán<br />

largo es. Esto posibilita que el 'Reciver' realice la necesaria conversión.<br />

Memoria Secundaria<br />

Normalmente la memoria <strong>de</strong> un sistema (aún <strong>de</strong>s<strong>de</strong> los comienzos <strong>de</strong> la<br />

computación <strong>de</strong> programas almacenados) no involucraba un solo nivel MP por<br />

razones <strong>de</strong> costo y por la necesidad <strong>de</strong> po<strong>de</strong>r disponer <strong>de</strong> la información en un<br />

medio estable, esto es, que permitiese un almacenamiento in<strong>de</strong>pendiente <strong>de</strong>l<br />

tiempo.<br />

Las memorias secundarias est n concebidas para almacenar un conjunto <strong>de</strong><br />

datos mucho mayor que el que pue<strong>de</strong> almacenar la memoria principal. Los<br />

dispositivos que cumplen con estos propósitos son los discos magnéticos.<br />

Discos Magnéticos<br />

Es el disco una pieza <strong>de</strong> metal <strong>de</strong> entre 3.5 a 10 pulgadas <strong>de</strong> diámetro el<br />

cual es magnetizable en su superficie, generalmente sobre ambas caras.<br />

La información se almacena en diversos círculos concéntricos, llamados<br />

tracks, entre 40 y algunos cientos por cara. Cada disco tiene una cabeza móvil<br />

asociada a él, que se <strong>de</strong>splaza en forma radial sobre los cilindros. Una cabeza<br />

est preparada para leer/escribir información <strong>de</strong> exactamente un track.<br />

Normalmente se disponen varios discos sobre el mismo eje con una cabeza<br />

próxima a cada superficie (sin tocarla), las cuales se movilizan juntas. La<br />

posición radial <strong>de</strong> las cabezas (distancia <strong>de</strong>s<strong>de</strong> el spindle) se <strong>de</strong>nomina<br />

cilindro. Un disco con N platos tiene 2*N HEADS (cabezas), luego 2*N tracks por<br />

cilindro.<br />

Las tracks se divi<strong>de</strong>n a su vez en sectores, entre 10 y 100 sectores por<br />

track. Cada sector consiste <strong>de</strong> un cierto número <strong>de</strong> bytes, usualmente 512.<br />

En la transferencia se especifica la siguiente información: CILINDRO y<br />

CABEZA, los cuales <strong>de</strong>terminan el track en forma unívoca, el número <strong>de</strong> SECTOR<br />

don<strong>de</strong> comienza la transmisión, el número <strong>de</strong> palabras a transmitirse, la<br />

dirección <strong>de</strong> memoria don<strong>de</strong> va la información o <strong>de</strong> don<strong>de</strong> la información viene y<br />

,por último, si la operación es READ <strong>de</strong> disco a memoria o WRITE <strong>de</strong> memoria a<br />

disco.<br />

La transferencia comienza siempre en el principio <strong>de</strong> un sector, nunca en<br />

el medio. Si la transferencia multisector cruza la frontera <strong>de</strong> un track <strong>de</strong>ntro<br />

<strong>de</strong> un mismo cilindro (por ejemplo <strong>de</strong> la superficie 0 a la 1), no hay pérdida.<br />

35


Sin embargo si la transferencia cruza <strong>de</strong> un cilindro a otro, se pier<strong>de</strong> tiempo <strong>de</strong><br />

rotación, es <strong>de</strong>cir se pier<strong>de</strong> una vuelta mientras se reposicionan las cabezas.<br />

Las cabezas que al momento <strong>de</strong> comenzar la transferencia están posicionadas<br />

sobre otro cilindro, <strong>de</strong>berán previamente moverse. Este movimiento se <strong>de</strong>nomina<br />

'Seek'. Típicamente <strong>de</strong>manda 3 mseg entre cilindros adyacentes y entre 20-100<br />

mseg <strong>de</strong>s<strong>de</strong> el más interno al más externo. Una vez que las cabezas están<br />

posicionadas el controlador <strong>de</strong>be esperar a que el primer sector pase por <strong>de</strong>bajo<br />

<strong>de</strong> las cabezas antes <strong>de</strong> comenzar la transferencia. Este tiempo ser 0, en el<br />

mejor <strong>de</strong> los casos y el tiempo total <strong>de</strong> rotación, en el peor. El tiempo a<br />

esperarse se <strong>de</strong>nomina 'latencia rotacional'. A una rotación típica <strong>de</strong> 3600<br />

rev/seg da una latencia máxima <strong>de</strong> 67 mseg. La capacidad última <strong>de</strong> transferencia<br />

ser un track por tiempo <strong>de</strong> revolución.<br />

Inicialmente los discos eran <strong>de</strong> armadura fija, requiriendo cabezas<br />

múltiples para no tener tiempo <strong>de</strong> seek, solo latencia. Esto físicamente se tronó<br />

inviable y se pasó a una armadura móvil en un conjunto multiplato. La<br />

alternativa para este pack es ser movible (permitiendo ampliar la capacidad en<br />

línea) cuando los DRIVES (unida<strong>de</strong>s) son costosas y con poca capacidad, lo cual<br />

lo hace m s expuestos a la contaminación que los fijos, sellados herméticamente.<br />

Floppy Disks<br />

Paralelamente a estos discos rígidos (Hard Disk) se <strong>de</strong>sarrolló una<br />

alternativa más económica, que permite distribuir software, la cual se conoce<br />

como 'Diskette' o 'Floppy Disk', el cual es un medio pequeño, removible, llamado<br />

así (floppy) por su naturaleza flexible y liviana.<br />

A diferencia <strong>de</strong>l caso anterior, las cabezas cuando operan <strong>de</strong>ben estar en<br />

contacto con la superficie, la tocan. Esto implica un <strong>de</strong>sgaste. Para reducirlo<br />

se mantiene a las cabezas elevadas si no se está transfiriendo. Esto trae<br />

aparejado obviamente un retardo.<br />

Hay una diferencia <strong>de</strong> velocidad <strong>de</strong> rotación muy gran<strong>de</strong> entre floppy y hard<br />

disk y a<strong>de</strong>más la <strong>de</strong>nsidad <strong>de</strong> grabado es también muy dispar, lo que contribuye a<br />

que la velocidad <strong>de</strong> transferencia sea muy dispar (al igual que el seek). El<br />

floppy es un medio inherentemente lento y <strong>de</strong> mucha menor capacidad que el disco<br />

rígido, pero como se dijo muy práctico y económico para distribución <strong>de</strong><br />

software.<br />

Discos Opticos<br />

En los años recientes estos discos se tornaron disponibles constituyendo<br />

una alternativa distinta en cuanto a principios ópticos frente a los magnéticos<br />

corrientes en su operación. A partir <strong>de</strong> ello posibilitan una mucho mayor<br />

<strong>de</strong>nsidad <strong>de</strong> grabación que los discos convencionales (al ser mas precisos).<br />

Comenzaron a <strong>de</strong>sarrollarse inicialmente para ser empleados en grabaciones <strong>de</strong><br />

televisión.<br />

Dada su gran potencialidad en capacidad se produjo alre<strong>de</strong>dor <strong>de</strong> ellos un<br />

gran <strong>de</strong>sarrollo a partir <strong>de</strong> planes intensivos <strong>de</strong> investigación. Se basan en la<br />

misma tecnología que los CD <strong>de</strong> audio y se los <strong>de</strong>nomina 'CD-ROM' (Compact Disc<br />

Read Only Memory).<br />

La preparación <strong>de</strong> un CD-ROM se realiza usando un l ser <strong>de</strong> alta potencia<br />

para realizar agujeros <strong>de</strong> 1 micrón (10-6 mt) en el disco master. De este master<br />

se realiza un mol<strong>de</strong>, este se utiliza para estampar copias en discos plásticos,<br />

<strong>de</strong> la misma forma que se hacía con los discos <strong>de</strong> audio convencionales. Luego una<br />

película muy <strong>de</strong>lgada <strong>de</strong> aluminio se <strong>de</strong>posita sobre el mismo, seguida <strong>de</strong> una<br />

película transparente <strong>de</strong> plástico para protección. La recuperación <strong>de</strong> la<br />

información es similar a la <strong>de</strong> los equipos <strong>de</strong> audio, se tiene un <strong>de</strong>tector que<br />

mi<strong>de</strong> la energía reflejada en la superficie ante la inci<strong>de</strong>ncia <strong>de</strong> un l ser <strong>de</strong><br />

baja potencia. Los agujeros llamados 'PITS' (hoyo) y las reas ubicadas entre<br />

ellos llamadas 'LANDS' tienen diferente reflectividad, haciendo posible<br />

distinguir entre pits y lands.<br />

36


Resulta <strong>de</strong> lo anterior que estos discos son producidos a muy bajo costo,<br />

aunque la información grabada <strong>de</strong> esta manera es propensa a errores.<br />

Los errores se atacan <strong>de</strong> dos maneras posibles: Primero la cabeza <strong>de</strong>l disco<br />

contiene mecanismos que la posicionan tratando <strong>de</strong> compensar las imperfecciones<br />

<strong>de</strong>l fabricante y a<strong>de</strong>más los datos se graban usando un método complejo llamado<br />

'CrossInterLeaved Read-Solomon' <strong>de</strong> corrección <strong>de</strong> error, el mismo posibilita<br />

corregir múltiples errores.<br />

En lugar <strong>de</strong> usar pits y lands para 0's y 1's directamente, se proce<strong>de</strong> a<br />

reservar las transiciones pit-lands o land-pits para representar un 1. El<br />

intervalo entre dos transiciones <strong>de</strong>fine cuantos ceros están presentes entre los<br />

dos "unos". El dato se agrupa <strong>de</strong> a 24 bytes, el cual se expan<strong>de</strong> (el byte) <strong>de</strong> 8 a<br />

14 bits usando el Read-Solomon Co<strong>de</strong>, tres bits se adicionan entre cada grupo<br />

(bits especiales) y un byte <strong>de</strong> sincronización se aña<strong>de</strong> para formar un frame<br />

(cuadro). Un grupo <strong>de</strong> 98 frames forma un bloque conteniendo 2 Kb <strong>de</strong> dato, el<br />

cual es la unidad (celda) direccionable básica. Aunque complicado y consumidor<br />

<strong>de</strong> área <strong>de</strong> disco es extremadamente confiable en medios <strong>de</strong> bajo costo.<br />

La información se escribe usando un espiral continuo único a diferencia <strong>de</strong><br />

los múltiples cilindros <strong>de</strong> un disco magnético. Cada CD-ROM contiene 270.000<br />

bloques <strong>de</strong> datos, para una capacidad total <strong>de</strong> 553 Mb. El dato se lee a una<br />

velocidad real constante <strong>de</strong> 75 mseg (a partir <strong>de</strong> ir <strong>de</strong>crementando la velocidad a<br />

medida que la cabeza se aleja <strong>de</strong>l centro), lo que da una velocidad <strong>de</strong><br />

transferencia <strong>de</strong> 153,6 Kb/seg.<br />

Dada la gran capacidad <strong>de</strong> almacenamiento, por ejemplo una enciclopedia<br />

ilustrada podría entrar en un único disco, sus posibilida<strong>de</strong>s <strong>de</strong> aplicación están<br />

solamente por nuestra imaginación.<br />

Dado que no son escribibles limita esto su aplicación como dispositivo <strong>de</strong><br />

almacenamiento. Una posibilidad, 'WORM' (Write Once, Read Many), correspon<strong>de</strong> a<br />

una segunda fase. La tercera fase es 'ERASABLE', en él se combinan el láser y el<br />

magnetismo.<br />

Marcos Meli<br />

MarcosMeli@gmx.net<br />

37

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!