sistemas numericos y operaciones aritmeticas - Departamento de ...
sistemas numericos y operaciones aritmeticas - Departamento de ...
sistemas numericos y operaciones aritmeticas - Departamento de ...
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