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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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!