OrganizacionComputadoras - UNAHUR.Capitulo1.va13 (Desde1ercuatr2020)
OrganizacionComputadoras - UNAHUR.Capitulo1.va13 (Desde1ercuatr2020)
OrganizacionComputadoras - UNAHUR.Capitulo1.va13 (Desde1ercuatr2020)
Sistemas Numéricos:
Sistema decimal; Sistemas de base “r”. Sistema Binario. Conversión entre binario y decimal
(sin coma y con coma/fraccionarios). Los prefijos Kilo, Mega, Giga, Tera y su interpretación
en Computación. Sistemas numéricos Octal y Hexadecimal: conversión a decimal y pasaje
directo a binario, utilidad en el contexto de una computadora binaria. Formatos BCD 8421,
BCD 2421 y XS-3. Códigos ASCII y Unicode. Transmisión Serie y Paralelo, bit de paridad.
Digital viene de “digitos” un número fijo de valores posibles contra el analógico donde la cantidad de valores
posibles entre dos extremos mínimo y máximo es virtualmente infinita;
Los sistemas digitales preven sólo un número finito de valores (por ejemplo si son 2, el 1 y el 0 son BINARIAS
además de digitales) y permiten regenerar las señales (= información), eliminando el ruido que las afecta;
Señal ANALÓGICA
Canal de
Comunicaciones
ó
Circuito Electrónico
RUIDO
Por ejemplo en la figura superior vemos una señal digital de 4 niveles y nos damos cuenta que no es tan fácil
regenerar la señal original cuando aparece el ruido, ya que esos 4 niveles “están demasiado juntos”;
En cambio, la señal que además de digital es BINARIA, esos dos valores están “bien separados” y salvo que el ruido
sea realmente muy grande, siempre es posible recomponer la señal original. Pero en compensación, con la señal
multinivel se puede enviar el DOBLE de bits en el mismo intervalo de tiempo (“velocidad de datos” doble);
Señal DIGITAL NO BINARIA (4 NIVELES)
bits: bits:
01 1,00 V 01
1,00 V
bits: Canal de
11 Comunicaciones
bits: 0,66 V bits: ó
10 10 Circuito Electrónico
0,33 V bits: 0,33 V
00
0,00 V
RUIDO
“1 LÓGICO” “1 LÓGICO”
“0 LÓGICO”
“0 LÓGICO”
Tiempo
CIRCUITO
ELECTRÓNICO
RUIDO
Tiempo
Ing. Martín Vernengo, 2020.
[email protected]
La Computadora Digital
CPU = “Central Processing Unit” o Unidad Central de Procesamiento:
Es el núcleo de toda Computadora Digital y está compuesto por la Unidad Aritmetico Lógica (ALU – Arithmetic Logic Unit), la
Unidad de Control y un banco de registros (memoria interna);
Los dispositivos de entrada/salida (input/output) permiten ingresar datos a ser procesados y obtener los datos-
resultado (teclado, mouse, pantalla, discos magnéticos, impresoras, dispositivos de comunicaciones);
La memoria externa puede ser volátil (normalmente denominada RAM) o permanente (denominada genéricamente
ROM) contiene variables de datos usadas en los programas y las propias instrucciones de programa;
La Unidad de Control es la parte clave que permite el funcionamiento de la CPU al coordinar las tareas de
procesamiento realizadas mediante la ALU sobre los datos e instrucciones de programa intercambiados con la
memoria externa y guardados temporalmente en los registros internos.
Unidad
CPU
Aritmético
Lógica (ALU)
Datos de Datos de
Entrada Salida
(a procesar) (procesados)
Dispositivos Unidad de Dispositivos
de Entrada Control de Salida
Banco de Registros
(Memoria Interna) Señales de Control
Datos Digitales
(Información)
Memoria
Externa
Ing. Martín Vernengo, 2020. (RAM/ROM)
[email protected]
Qué es un “sistema embebido”
Por ejemplo, hoy en día un Aire Acondicionado es un “sistema embebido”, es decir tiene adentro una
computadora para fines específicos que permite medir y controlar parámetros sistemas reales.
De modo que en el mundo actual las computadoras dejaron de ser “dispositivos especiales”
utilizados excusivamente para procesar información digital sino que están presentes en casi el 100%
de los dispositivos tecnológicos utilizados todos los días:
Electrodomésticos (Lavarropas, Aireacondicionados, Microondas, TV’s y dispositivos de audio/video),
dispositivos de comunicaciones (switches para redes de computadores, routers wi-fi) , aparatología utilizada
en medicina, sistemas de control de procesos industriales (PLC), etc. etc. etc….
Micro Controlador
µC / µP ó Micro Procesador
(CPU)
Sensores Actuadores
Analógicos Conversor Analógicos
Microcomputador Conversor
de Entrada A/D de Salida
(termómetro)
ó D/A (compresor/
Microcontrolador motor del AA)
ó
Sensores Procesador Digital Actuadores
Digitales de Señales (DSP) Digitales
de Entrada de Salida
(indicador de
(botonera AA)
temperatura)
Memoria
(Programa de
Control del AA)
Ing. Martín Vernengo, 2020.
[email protected]
Diferencias entre Computadoras y Sistemas Embebidos
En esencia hay dos aspectos que diferencian a una computadora general de los sistema embebidos:
Como ya dicho, los sistemas embebidos siempre requieren conversores A/D y D/A;
Las computadoras son mucho más flexibles en cuanto a los programas con que funcionan (software): deben
serlo ya que tienen un propósito general y no específico.
Sensores Actuadores
Analógicos Conversor Analógicos
Microcomputador Conversor
de Entrada A/D de Salida
(termómetro)
ó D/A (compresor/
Microcontrolador motor del AA)
ó
Sensores Procesador Digital Actuadores
Digitales de Señales (DSP) Digitales
de Entrada de Salida
(indicador de
(botonera AA)
temperatura)
Memoria
(Programa de
Control del AA)
Ing. Martín Vernengo, 2020.
[email protected]
Capas de Abstracción en una Computadora
Por “capas de abstracción” entendemos el análisis que puede hacerse de una computadora digital a
distintos niveles de complejidad denominados “capas”:
A efectos de describir el funcionamiento del sistema, en cada una de esas capas podemos
“abstraernos” de los detalles de la capa inmediatamente inferior;
Esto tiene la ventaja de poder realizar un análisis del problema a resolver de una manera
primero más general o de “alto nivel”, luego pasando paulatinamente a describir la solución a
niveles cada vez más específicos o de “bajo nivel” a medida que vamos hacia capas inferiores.
Algoritmos
Lenguajes de Programación
Sistemas Operativos
Microarquitectura
Transferencias de Registros
Compuertas Lógicas
Circuitos de Transitores
Ing. Martín Vernengo, 2020.
[email protected]
“Alto” y “Bajo” Nivel
Las capas superiores brindan una visión más general o “de alto nivel”:
Esconden las complejidades de la estructura circuital electrónica (“hardware”);
Permiten comandar la CPU a través de un “listado de directivas” ( “programas” ó “software”);
Se las denomina de “alto nivel” pues especifican el funcionamiento con mayor generalidad;
Las capaz inferiores o de “bajo nivel” requieren mayor especificidad cuanto a la forma en la que se
desea que la computadora opere:
De modo que cuanto más abajo se encuentra una capa, más cerca se está de describir el funcionamiento de
los circuitos electrónicos o “hardware”;
Algoritmos
+ Alto Nivel
+ Software
Lenguajes de Programación
Sistemas Operativos
Microarquitectura
+ Hardware
+ Bajo Nivel
Transferencias de Registros
Compuertas Lógicas
Circuitos de Transitores
Ing. Martín Vernengo, 2020.
[email protected]
Algoritmos Algoritmo “Arreglar Lámpara”
Son una lista de pasos o instrucciones que deben ser ejecutados
secuencialmente por una computadora digital para obtener un
modelo de solución para un problema planteado.
Algoritmos
Lenguajes de Programación
Sistemas Operativos
Microarquitectura
Transferencias de Registros
Compuertas Lógicas
Circuitos de Transitores
Ing. Martín Vernengo, 2020.
[email protected]
Lenguajes de Programación
Los lenguajes de “Alto Nivel” como C++, Pascal, Java , etc. contienen las sentencias específicas que
permiten implementar un algoritmo pero que no pueden en general ser ejecutados directamente
por la computadora digital que utiliza “código de máquina” constituido directamente por 1’s y 0’s;
Existe un tipo particular de programa llamado “compilador” que traduce el código de los lenguajes de alto
nivel al código de máquina que puede ejecutar la computadora;
Algoritmos
Lenguajes de Programación
Sistemas Operativos
Microarquitectura
Transferencias de Registros
Compuertas Lógicas
Circuitos de Transitores
Ing. Martín Vernengo, 2020.
[email protected]
Lenguajes de Programación: ejemplo alto nivel
Algoritmo “Arreglar Lámpara” Lenguaje Alto Nivel
input estado_lamp
PROGRAMADOR (humano) If estado_lamp == no_enchufada /* = 0
estado_lamp = enchufada /* = 1
return /* FIN PROGRAMA
input estado_foco
if estado_foco == fallado /* = 0
prox_accion = reemp_foco /* = 1
return /* FIN PROGRAMA
prox_accion = compra_lampara /* = 2
return /* FIN PROGRAMA
Algoritmos
Lenguajes de Programación
Sistemas Operativos
Microarquitectura
Transferencias de Registros
Compuertas Lógicas
Circuitos de Transitores
Ing. Martín Vernengo, 2020.
[email protected]
Lenguajes de Programación: ejemplo bajo nivel
Código “Assembler” Equivalente Lenguaje Alto Nivel
Algoritmos
Lenguajes de Programación
Sistemas Operativos
Microarquitectura
Transferencias de Registros
Compuertas Lógicas
Circuitos de Transitores
Ing. Martín Vernengo, 2020.
[email protected]
Microarquitectura
Antes ya explicamos lo que era el “código de máquina”: instrucciones codificadas en forma digital binaria
que sólo pueden ser “entendidas” fácilmente por la CPU y que no tiene sentido que usen los humanos;
En particular, el área de la CPU encargada de interpretar el
código de máquina es la Unidad de Control;
“Microarquitectura”: es el proceso por el
cual el código de máquina se transforma
órdenes (señales de control) dirigidas al
resto de las partes de la CPU (registros o
memoria interna a del procesador,
memoria externa, Unidad Aritmética-
Lógica o ALU en inglés); señales de
control
Utiliza un tipo de “programación “ de muy muy bajo nivel, sólo utilizado
por los diseñadores de microprocesadores, que se llama
“microprogramación”.
Algoritmos
Lenguajes de Programación
Sistemas Operativos
Microarquitectura
Transferencias de Registros
Compuertas Lógicas
Circuitos de Transitores
Ing. Martín Vernengo, 2020.
[email protected]
Transferencias de Registros
Cuando la Unidad de Control por ejemplo da la orden a través de señales de control para transferir
datos de la memoria externa a la memoria interna (mejor conocida como “registros internos” de la
CPU) o hacia la ALU a la que a su vez le ordena realizar una suma, estamos en el domino de la capa
que hemos denominado “Transferencia de Registros”;
Algoritmos
Lenguajes de Programación
Sistemas Operativos
Microarquitectura
Transferencias de Registros
Compuertas Lógicas
Circuitos de Transitores
Ing. Martín Vernengo, 2020.
[email protected]
Compuertas Lógicas
Este tema será estudiado en detalle más adelante pero por ahora veamos un ejemplo simple de
dos compuertas lógicas con las cuales en rigor podría construirse toda una computadora digital:
Compuerta AND (“Y” en inglés): la salida sólo es un “1” binario si la entrada 1 Y la entrada 2 Y la entrada 3
… Y TODAS las entradas son 1 (o lo que es lo mismo: es “0” si una o más de sus entradas es “0”);
1 1
1 0
… 1 0
…
1 1
Compuerta NOT (“NO en inglés): invierte la salida (de “0” a “1” y viceversa);
1 0
0 1
Algoritmos
Lenguajes de Programación
Sistemas Operativos
Microarquitectura
Transferencias de Registros
Compuertas Lógicas
Circuitos de Transitores
Ing. Martín Vernengo, 2020.
[email protected]
Circuitos de Transistores
En las CPU modernas hay miles de millones de transistores con los que se construyen las
compuertas lógicas (ejemplo de una NOT abajo) que son la base de su funcionamiento.
= R
Salida NOT:
0 Volt = “0”
+
5V
−
= 1
0
0
1
Algoritmos
Lenguajes de Programación
Sistemas Operativos
Microarquitectura
Transferencias de Registros
Compuertas Lógicas
Circuitos de Transitores
Ing. Martín Vernengo, 2020.
[email protected]
Principio de Equivalencia Hardware-Software
Está implícito en el modelo de “capas de abstracción” y nos dice que:
Ejemplo:
Software Modificación ! Hardware
=
if A = 1 AND B = 1 then
C=1
else D
C=0
endif if A = 1 AND B = 1 AND D = 1 then
C=1
else
C=0
endif
Diseños de 1840 y 1842 realizados con un “Telar de Jacquard” Perforadora de Tarjetas de Jacquard Joseph Marie Jacquard
Ada Byron
Condesa de Lovelace
Ing. Martín Vernengo, 2020.
[email protected]
Historia de las Computadoras: George Boole
Nacido en 1815, fue profesor de matemáticas en el
Queen’s College (una Universidad) de Cork, Irlanda;
Se podría decir que es el padre de los operadores lógicos simbólicos y que gracias a su
álgebra hoy en día es posible operar simbólicamente para realizar operaciones lógicas;
Como veremos más adelante, el diseño de los circuitos internos de las computadoras
digitales modernas (la capa que anteriormente denominamos “Compuertas Lógicas”)
utiliza el Álgebra de Boole.
Ing. Martín Vernengo, 2020.
[email protected]
La 2da Guerra Mundial y las primeras computadoras electrónicas
La Segunda Guerra Mundial fue una de principales motores para acelerar el
desarrollo de computadoras digitales y de la computación como ciencia;
Nacido en Londres, Alan Turing (1912-1954) es considerado uno de los padres de
la ciencia de la computación y precursor de la informática moderna.
Proporcionó una influyente formalización matemática de los conceptos de algoritmo y
computación: la máquina de Turing;
Fue el primero en definir, en 1937 qué es y qué limitaciones tiene una computadora, a
la que definió en términos puramente matemáticos como un “Autómata Finito”.
Alan Turing
Turing fue el que decifró los códigos secretos de la Alemania Nazi de la
“Máquina Enigma” y luego los códigos FISH:
Para poner en práctica los algoritmos de desencriptación de mensajes de
Turing, el gobierno británico construyó una de las primeras computadoras
digitales de propósitos específicos , la COLOSSUS MARK I;
La primera COLOSSUS funcionaba con 1500 válvulas y entró en servicio en
Junio de 1944, siendo las ideas de Turing esenciales para su desarrollo;
Los datos (de los mensajes secretos) se leían con una cinta perforada;
No se la puede considerar la primera computadora ya que no era de “fines Teoría de Autómatas
generales” o sea, no permitía resolver cualquier problema planteado;
Konrad Zuse en Alemania desarrolló una computadora, la Z1, que si bien utilzaba relays
(electromecánica) su intención fue utilzar válvulas y sólo no lo pudo hacer por falta de esos
suministros debido a la guerra (el gobierno nazi no financió su proyecto, por suerte);
John Atanasoff (1904–1995) fue un norteamericano que diseñó y construyó la primera
computadora digital binaria con válvulas en 1939 pero tampoco era de “propósitos generales”;
Servía para resolver un problema matemático particular (ecuaciones lineales);
Sin embargo, el trabajo de Atanasoff fue el inspirador para los inventores de la primera computadora
digital de propósitos generales, la ENIAC.
Ing. Martín Vernengo, 2020.
[email protected]
La “Primera Generación”: la ENIAC
Se considera como primera computadora electrónica Folleto del ejército estadounidense ofreciendo
digital (binaria) de propósitos generales la que se trabajo en la ENIAC, 1946.
desarrolló y construyó durante la Segunda Guerra
Mundial financiada por el ejército de EUA, la ENIAC ó
“Electronic Numerical Integrator and Computer”;
La ENIAC fue inventada por J. Mauchly y J. P. Eckert
(profesor y alumno), quienes estaban en una universidad
cerca de Philadelphia, donde el primero era profesor de
Física y deseaba acelerar los cálculos meteorológicos.
Mauchly estaba al tanto del trabajo de Atanassof.
No pudiendo recibir fondos de la universidad, y sabiendo
Mauchly que el ejército de EUA necesitaba acelerar los
cálculos de tablas de trayectorias balísticas, propuso y
obtuvo financiación para el proyecto;
Sin embargo la computadora no pudo ser utilizada durante
la guerra, ya que se puso en servicio recién en el año 1946.
CPU
MEMORIA INTERNA
(REGISTROS)
MEMORIA Sólo
REGISTRO A REGISTRO B
EXTERNA Datos
REGISTRO C REGISTRO D
UNIDAD DE
ALU CONTROL
DISPOSITIVOS
DE ENTRADA / SALIDA
REGISTRO C REGISTRO D
Hubo que agregar un registro interno adicional,
el INSTRUCTION POINTER (IP), también
llamado habitualmente PROGRAM COUNTER DATOS
(PC) para almacenar la dirección de la memoria UNIDAD DE (VARIABLES)
donde está guardado el código de máquina de ALU CONTROL
la próxima instrucción a realizar;
El PC se va incrementando para ejecutar
secuencialmente las instrucciones: Programas
DISPOSITIVOS + Datos
Salvo cuando hay un salto de programa (un “if”) DE ENTRADA / SALIDA 010110101…
en que la ALU se utiliza para incrementar o
decrementar el PC.
Ing. Martín Vernengo, 2020.
[email protected]
El problema de la primera generación de computadoras
Las primeras computadoras digitales, aunque no electrónicas (ejemplo la Z1 de K. Zuse) fueron
construidas con relés, que servían para generar un “1” con llave abierta y un “0” con llave cerrada;
=
resorte para atraer o repeler R + 1 0
la pieza móvil de la llave 5V 0 1
Entrada NOT: Salida NOT: −
PROBLEMAS: 5 Volt = “1” 0 Volt = “0”
- Tamaño grande; 0 Volt = “0” 5 Volt = “1”
- Bajísima velocidad;
- Ultra baja confiabilidad “Computadora Electromecánica”
(contactos defectuosos). (digital, mas no electrónica).
Las válvulas de vacío, inventadas a comienzos del siglo XX mejoraban mucho la velocidad, pero no el
del tamaño y la confiabilidad era aún baja (se quemaban como las lamparitas de luz eléctrica),
Los electrones son atraidos
por la tensión positiva y el Salida NOT:
vacío elimina el aire que 0 Volt = “0”
impediría su movimiento. 5 Volt = “1”
++++
+
5V
−
- - -
Entrada NOT:
5 Volt = “1”
0 Volt = “0”
La reja de mando puede impedir que los electrones
pasen (abre la llave) si se le aplica una tensión
Ing. Martín Vernengo, 2020. negativa respecto del cátodo. “Computadora Electrónica”...
[email protected] … pero a Válvulas.
Los comienzos de la industria de computadoras/IT
La mayoría de las personas centralmente involucradas en el desarrollo de las primeras computadoras
como la ENIAC terminaron fundando compañías propias para fabricar computadoras;
Mauchly y Eckert fundaron EMCC y a la Oficina del Censo de los Estados Unidos para que encargasen
una computadora que se transformaría en la antecesora de la famosa Sperry UNIVAC (UNIVAC =
Universal Automatic Computer), consiguiendo en 1948 un contrato para elaborar el censo de 1950,
aunque no llegaron a tiempo para cumplir el diseño.
La empresa lanzó
un ambicioso
programa para
diseñar y fabricar
computadoras a
gran escala, sin
embargo sólo el
gobierno,
universidades y
megacorporacion
es tenían dinero
para comprar una
computadora;
Uno de los
grandes logros
fue el uso de la
cinta magnética
para
almacenamiento
a gran velocidad;
Crearon un departamento de software con el que desarrollaron aplicaciones, comenzando por el primer
compilador de Lenguaje "Shortcode" del mundo;
Años después la empresa fue comprada y de ella deriva la empresa UNISYS, que sigue en el mercado de IT.
Ing. Martín Vernengo, 2020.
[email protected]
Los comienzos de la industria de computadoras/IT
Ya habíamos visto que Hollerith, el pionero que utilizó
tarjetas perforadas para el censo de EUA en 1890 fue
quien fundó la compañía que años después se llamó IBM;
Pero IBM no estuvo interesada en el negocio de
computadoras hasta 1953, cuando lanzó la IBM 701;
Tenía una memoria (RAM) de hasta 4096 palabras de 36 bits
(lo equivalente a 18 Kilobytes!) ;
IBM fue durante largos años hasta la década del 1980 “la
Coca Cola de la informática”, hablar de esta empresa en
la década del 70 e incluso de los 80 era como desde 1990
en adelante hablar de Microsoft;
Pero al crear la “IBM-PC” en 1981 y licenciar la utilización del firmware BIOS
para la fabricación de PC’s por terceros, terminó perdiendo el control sobre
este mercado de hardware que hoy domina la industria informática a manos
de Intel y Microsoft, los fabricantes del entonces procesador 8088 y el sistema
operativo DOS;
IBM esperaba mantener su posición en el mercado al tener los
derechos de licencia del BIOS, y manteniéndose delante de la
competencia. Desafortunadamente para IBM, otros fabricantes
rápidamente hicieron ingeniería inversa del BIOS y produjeron
sus propias versiones sin pagar derechos de uso a IBM.
Sin embargo, hoy en día IBM sigue siendo una empresa muy
importante en el mercado de la informática, que factura del
orden de 80 mil millones de dólares anuales (el 20% del PBI
Argentino) no obstante muy diversificada hacia el software y
la consultoría informática con sólo alrededor de 10% de su
facturación proveniente de hardware tal como servidores de
alta performance.
Ing. Martín Vernengo, 2020.
[email protected]
La “Segunda Generación”: transistores discretos
Aunque hubo algunas versiones anteriores de transistores (de “efecto de campo”) en la década de
1920 que se pantentaron, no llegaron a ser utilizados;
La primera versión de transistor que tuvo un
impacto directo en la tecnología (los
“transistores bipolares”) y cuyo
funcionamiento pudieron explicar sus
inventores, ganando por ello el premio Nobel
de Física de 1956, surgió en el año 1948;
Utilizaban semiconductores (Germanio, Silicio) que al
ser “contaminados” con impurezas generaban dos tipos John Bardeen, William Shockley y
de portadores carga, los electrones (semiconductor Walter Brattain (Bell Labs, 1948 ).
tipo “N”) y las “lagunas” (semiconductor tipo “P”);
=
+
+ VC
VC +
−
− VB
−
En 1954 , para competir con DEC en el mercado de las minicomputadoras, IBM lanzó el modelo
1401 (US$ 370.000), aunque se podía alquilar a US$ 2500/mes (estos valores hay que
multiplicarlos por 8 para compararlos con precios del año 2020);
La “Tercera Generación”: circuitos integrados
Jack Kilby (en Texas Instruments) primero y Robert Noyce (co-fundador
de Fairchild Semiconductor) 6 meses después, inventaron en 1958 el
“circuito integrado”;
También comunmente llamado “chip” (con referencia a la pastilla
cuadrada de silicio donde se implantaban decenas de transistores);
Kilby recibió el premio Nobel de Física en el año 2000 por este logro ;
Robert Noyce
El de Noyce fue más importante, pues se hizo en Silicio y no Germanio (Kilby);
La idea fue colocar más de un transistor en un chip de silicio mediante el uso
de una máscara fotográfica con la que junto con la utilización de luz
Ultravioleta (UV) se podía controlar en qué zonas se aplicaban contaminantes
de un tipo u otro, para generar zonas de “semiconductor P” y “N” en
espacios cada vez más pequeños y allí donde se quisiera;
Encapsulado
protector de
resina epoxy
(polímero)
En 1972 Intel lanza el 8008, el primer microprocesador de 8 bits y sucesivamente varias compañías
introducen decenas de microprocesadores similares de 8 bits durante la década de 1970:
Ejemplos: Motorola 6800 (1974), Motorola 6809 (1976), Zilog Z-80 (1976);
En 1974 Intel lanza el 8080 (8 bits) y en 1976 el primer microprocesador de 16 bits, el 8086, pero IBM
decide utilizar la versión posterior de 8 bits, el 8088 (1979) para desarrollar la IBM PC;
Como IBM (equivocadamente) utilizó chips de mercado y publicó integralmente la ingeniería de la IBM PC,
además de usar el MS-DOS de la naciente Microsoft como sistema operativo, esto significó el aparecimiento de
los “clones de IBM” y en definitiva de la era actual de computación personal pervasiva.
Ing. Martín Vernengo, 2020.
[email protected]
Paradigma Cliente – Servidor versus…
Actualmente nos encontramos de lleno en la “era del paradigma Cliente-Servidor” en la
arquitectura de los sistemas informáticos;
Es un modelo de diseño de interconexión de hardware e implementación de “software distribuido”, donde
las tareas se reparten entre los proveedores de recursos o servicios, llamados servidores, y los
demandantes, llamados clientes, que por lo tanto son “inteligentes”, ya que tienen su propia CPU, al igual
que el servidor.
Un cliente realiza peticiones a otro programa, el servidor, quien le da respuesta;
El objetivo de esta arquitectura es que muchos usuarios puedan acceder simultáneamente a
servicios compartidos de procesamiento y almacenamiento de datos y programas.
Router IP
Clientes
Internet
Router IP (WAN con protocolo IP) (“inteligentes”)
CPU
Servidor Red de Área Local
Wireless Router (LAN)
(Access Point)
Switch/Hub
Interacción
CPU permanente CPU
CPU
LAN = “Local Area Network”; CPU
WAN = “Wide Area Network”; CPU
Ing. Martín Vernengo, 2020.
[email protected]
Paradigma Cliente – Servidor versus… los “mainframes”
Sin embargo este paradigma no fue el inicial con el que arrancó la historia de la computación y
está en constante evolución (como veremos en las próximas láminas);
En los primeros días de la computación (años 1950) no había recursos que compartir, había siempre un
solo usuario que tenía a su disposición una “gran computadora personal”;
Luego, en los años 1960, cuando bajó el precio de las computadoras de millones de dólares a centenas y
decenas de miles de dólares, creció el número de usuarios y se inventaron los sistemas “batch” ya vistos:
“Batch Processing”
(“Procesamiento por Lotes”)
… Fila de Procesos
(“process queue”)
,
¿Cómo sabemos que es potencia de 10? En realidad no lo sabemos con certeza pero…
LA POTENCIA DE 10 ESTÁ IMPLÍCITA PORQUE TODO EL MUNDO TIENE 10 DEDOS
Y ESE ES EL ÚNICO MOTIVO POR EL QUE 10 ES LA “POTENCIA POR DEFECTO”
En general, un número decimal con n dígitos a la izquierda y m a la derecha se expresa :
,
10 10 10 10 10 10 10 10
( (
r
SOLUCIÓN: ,
, ,
5 1 5 0 5 10 "
Ejemplo:
Pero para ahorrar pasos es mejor memorizar las potencias de 2 al menos hasta el 12
para convertir más rápidamente de binario a decimal:
Ejemplos:
128 32 16 4 1 181
1 1 1
2 0, 5 2 (
0,125
2 2( 8
2 1024
1001101 ? 0,01100101 ?
1010011,101 ? 101101,00110111 ?
10101110,1001 ? 1000000110000,01011 ?
100011011001 ? 1010100001000011,10101 ?
Para los siguientes números decimales expresados con prefijos binarios que se usan
para indicar tamaños de memoria en bytes (por ejemplo) expresarlos directamente en
decimal o utilizando otro prefijo binario, según se pide en cada caso:
10 KB _________ Bytes; 10 KB _________ MBytes
16 MB _________ Bytes; 16 MB _________ GBytes;
16 MB _________ KBytes; 16 GB _________ TBytes;
32 GB _________ KBytes; 32 GB _________ TBytes
32 GB _________ MBytes; 12 TB _________ GBytes
32 GB _________ Bytes; 12 TB _________ MBytes
Para los siguientes números decimales expresados con prefijos binarios que se usan
para indicar tamaños de memoria en bytes (por ejemplo) expresarlos directamente en
decimal o utilizando otro prefijo binario, según se pide en cada caso:
10 KB 10′240 Bytes; 10 KB 0,009765625 MBytes
16 MB 16′777′216 Bytes; 16 MB 0,015625 GBytes;
16 MB 16′384 KBytes; 16 GB 0,015625 TBytes;
32 GB 33′554′432 KBytes; 32 GB 0,03125 TBytes
32 GB 32′768 MBytes; 12 TB 12′288 GBytes
32 GB 34′359′738′368 Bytes; 12 TB 12′582′912 MBytes
5>4 1
76 > 64 12
12 > 8 4
4>4 0
Ing. Martín Vernengo, 2020.
[email protected]
Conversión decimales fraccionarios a binario:
Utilizamos el Método 1: simplemente se continúa sumando las potencias de 2
fraccionarias más próximas a la parte fraccionaria del decimal;
14,8125 14 0,5 0,25 0,0625
Ejemplo: 14,8125 ?
14,75
14,5
14
12
14,8125 1 1 1 0 , 1 1 0 1
14,8125 1110,1101
Pero, puede ocurrir que la cantidad de dígitos binarios necesaria siga incrementándose si
el número decimal fraccionario no se puede aproximar exactamente con la cantidad de
dígitos binarios máxima disponible para manejar con la computadora;
Por ejemplo, si sólo se disponen de 4 dígitos binarios después de la coma, tenemos que convertir
en forma aproximada el siguiente número: 14,8130 * 14,8125 1110,1101 ;
Ing. Martín Vernengo, 2020.
[email protected]
Conversión decimal a binario: ejercicios
Convertir de decimal a binario utilizando el método más conveniente, pero probar con
los dos métodos y comparar al menos en 5 casos a elección y limitando a 5 dígitos
binarios después de la coma como máximo:
29 ? 514 ?
49 ? 555 ?
85 ? 857 ?
103 ? 905 ?
127 ? 953 ?
128 ? 1019 ?
133 ? 1023 ?
198 ? 1024 ?
227 ? 1040 ?
255 ? 27,625 ?
256 ? 21,5625 ?
258 ? 45,4375 ?
297 ? 3,1875 ?
323 ? 3,21875 ?
457 ? 19,23475 ?
506 ?
511 ?
512 ?
donde los N pueden valer cualquiera de los 8 dígitos del 0 al 7 (pero nunca 8 ó mayor!
De hecho, NO NECESITO el dígito 8 en octal, como no se necesita el 2 en binario, ya que:
8 10 &
2 10
Con lo que en este caso general el número X representado en octal sería:
(
8 8 ⋯ (8 8 8 8
(
8 8 (8 … 8 8
Ojo! El 8 y el 9 NO
Ejemplo: , , PUEDEN ESTAR en un
número en octal !!!
Sin embargo, para pasar Binario Octal
de octal a binario, la 0 0 0 0
operación es mucho 0 0 1 1 127,4 & 1 2 7 , 4 &
más simple, pasando 0 1 0 2
cada dígito octal a 0 1 1 3
binario según la tabla: 1 0 0 4 127,4 001 010 111 , 100
&
1 0 1 5
1 1 0 6 Ejercicio - verifique que efectivamente:
1 1 1 7 001 010 111 , 0100 87,5
Ing. Martín Vernengo, 2020.
[email protected]
Conversión binario - octal: ejercicio resuelto
Realice el pasaje directo a octal para el siguiente número binario, realizando las
conversiones binario octal y binario decimal octal, verificando que coinciden:
110100,011 ? &;
Solución:
6 4 3 52,375
(
8 8 2" 2 2
Binario Octal
0 0 0 0 8 2' 2
0 0 1 1 decimal octal:
0 1 0 2 52,375 ? &
0 1 1 3 • Primer dígito: 7 8 56 O 52 ⇒ QR! 7 STUVWXVSY Z V[ST!
1 0 0 4
1 0 1 5 6 8 48 \ 52 ⇒ ]^, ?_` aícdef fgehi j
1 1 0 6 • Segundo dígito: 52,375 > 6 8 4,375 ⇒ kaf aícdef fgehi @
1 1 1 7
• Después de la coma: 4,375 > 4 0,375
4 8 '⁄ 0,5 O 0,375 ⇒ QR! 4 STUVWXVSY Z V[ST!
&
Realice el pasaje directo a octal para los siguientes números binarios, pero elija 3 casos
donde realice la conversión binario decimal octal verificando que coinciden:
100110 ? ? ; 10100110 ? ? ;
101111010 ? ? ; 1001 ? ? ;
1100110 ? ? ;
111100001 ? ? ;
101110,1 ? ? ;
110001000001 ? ? ;
10111001,11 ? ? ;
111100110 ? ? ;
1011110010,10101 ? ? ;
10001 ? ? ;
10,011101001 ? ? ;
11010110 ? ? ;
Ing. Martín Vernengo, 2020.
[email protected]
Conversión binario - octal: ejercicios (soluciones)
Realice el pasaje directo octal binario (tabla memorizada!) cuidando que no haya ceros de más
ni a la izquierda ni la derecha (es decir minimizando la cantidad de bits necesarios para representar el número), y
luego la conversión de binario decimal, vía cálculo con potencias de 2 (memorizadas):
67 &
110111 55 ; 11,43 & 1001,100011 9,546875 ;
516 & 101001110 334 ; 262,55 & 10110010,101101 178,703125 ;
761 111110001 497 ; 36,6 & 11110,11 30,75 ;
&
167,14 & 1110111,0011 119,1875 ;
361 &
11110001 361 ;
741,716 &
111100001 , 11100111 481,90234375 ;
161 1110001 113 ;
& 57,002 &
101111 , 00000001 47,00390625 ;
2170 &
10001111000 1144 ; 3617,524 11110001111 , 1010101 1935,6640625 ;
&
1201 & 1010000001 641 ;
Realice el pasaje directo a octal para los siguientes números binarios, eligiendo 5 casos
donde realice la conversión binario decimal octal y verificando que coinciden:
100110 38 46 &; 10100110 166 246 & ;
101111010 378 572 & ; 1001 9 11 & ;
1100110 102 146 & ;
111100001 378 741 & ;
101110,1 46,5 56,4 & ;
110001000001 3137 6101 & ;
10111001,11 185,75 271,6 & ;
111100110 486 746 & ;
1011110010,10101 754,65625 1362,52 & ;
10001 17 21 & ;
10,011101001 2,455078125 2,351 & ;
11010110 214 326 & ;
Ing. Martín Vernengo, 2020.
[email protected]
Números Hexadecimales
Como vimos, los octales nos permiten “comprimir” la numeración binaria de “3 a 1”, es
decir cada 3 dígitos binarios tenemos un dígito octal.
,
En el sistema hexadecimal, la compresión es aún mayor: 4 a 1;
Esto es lo que se logra con la base 16:
… ( (
(
16 16 16( 16 16 16 16 16 16 16 16
Pero así como en decimal se requieren 10 dígitos del 0 al 9 en base 16 necesitamos igual cantidad de dígitos,
lo que nos obliga a utilizar LETRAS para los N : 0 al 9 y luego A, B, C, D, E, F para los dÍgitos del 10 al 15:
10 A # , 11 B # , 12 C # , 13 D # , 14 E # , 15 F #
Ejemplo:
, ,
Ing. Martín Vernengo, 2020.
[email protected]
Números Hexadecimales: pasaje directo a binario
Utilizando una tabla de conversión similar a la ya vista para octal pero agrupando 4
dígitos binarios en lugar de 3, la conversión es inmediata:
Con octal habíamos visto que: 127,4 & 1 2 7 , 4 &
Binario Hexa
0 0 0 0 0
127,4 & 001 010 111 , 100
0 0 0 1 1
En hexadecimal, útilizando la tabla obtenemos: 0 0 1 0 2
0 0 1 1 3
B65F # B 6 5 F # 0 1 0 0 4
0 1 0 1 5
0 1 1 0 6
B65F # 1011 0110 0101 1111 0 1 1 1 7
Ejercicio – Pase a decimal el número de este ejemplo partiendo del 1 0 0 0 8
valor binario y verifique que es el mismo que el obtenido en la 1 0 0 1 9
página anterior, 46687 .
1 0 1 0 A
Otro ejemplo: 1 0 1 1 B
1 1 0 0 C
1 1 0 1 D
Ejercicio – Pase a decimal el número de este último ejemplo, tanto 1 1 1 0 E
partiendo del valor hexadecimal como del binario.
TWrsTWtV: 2v6w , x06 # 11371,93896484375 1 1 1 1 F
Ing. Martín Vernengo, 2020.
[email protected]
Conversión binario - hexa: ejercicios
Realice el pasaje directo hexadecimal binario (tabla memorizada!) decimal (elegir 5 casos
donde se haga la conversión directa de hexa a decimal y binario a decimal, comparando):
8A #
? ? ; 7C03 # ? ? ;
3C # ? ? ; 8,D3 # ? ? ;
ABE ? ? ; B2,55 # ? ? ;
#
21C, 18 # ? ? ;
1D8 ? ? ;
# 1E3C,E36 # ? ? ;
A4BD #
? ? ;
Realice el pasaje directo octal binario hexadecimal (sugerencia: reagrupe los bits de
grupos de 3 a grupos de 4):
67 ? ? #; 161 &
? ? #;
&
516 & ? ? #; 2170 ? ? #;
&
761 &
? ? #; 1201 & ? ? #;
361 ? ? #;
11,43 & ? ? #;
&
Realice el pasaje directo octal binario hexadecimal (sugerencia: reagrupe los bits de
grupos de 3 a grupos de 4):
67 110111 37 #; 161 &
1110001 71 #;
&
516 & 101001110 14E #; 2170 10001111000 478 #;
&
761 &
111110001 1F1 #; 1201 & 1010000001 281 # ;
361 11110001 F1 #;
11,43 & 1001,100011 9,8C #;
&
El objetivo de estos formatos era permitir que las calculadoras electrónicas realizaran
operaciones de suma y resta de una manera más eficiente, debido a que como se
puede observar tanto en el código “Exceso 3” (XS-3) como el Aiken 2421, todos los
números que en decimal suman 9 tienen los bits 1 y 0 intercambiados;
Aquí no explicaremos el motivo, pero esto termina facilitando las operaciones cuando se
realizan directamente en BCD y no en binario como haremos en las próximas páginas.
Ing. Martín Vernengo, 2020.
[email protected]
Resumen: comparación decimal, binario, octal, hexa, BCD
Para representar números del 0 al 15 decimal:
3 7 10 1 1 2 10
D 1 # 0E #
5 1 & 06 &
1 1 2 10 F 3 15+3
1 9 10 #
1 1 1 3 11 16+2 12 #
Ing. Martín Vernengo, 2020.
[email protected] 7 3 & 10 12 &
Suma binaria – Ejercicios
Partiendo de la suma planteada en decimal, realizarla y luego pasando los sumandos a
binario, realizar la suma en ese sistema, convirtiendo el resultado primero a hexadecimal y
luego a decimal nuevamente (para verificar el primer resultado).
Resuelto:
Decimal Binario
"Carry" 0 1 0 1 1 1 1 1 1 0 0
Sumando 1: 1 0 6 = 64 + 32 + 8 + 2 1 1 0 1 0 1 0
Sumando 2: + 5 5 = 32 + 16 + 4 + 2 + 1 + 1 1 0 1 1 1
Resultado decimal: 1 6 1 Resultado binario: 1 0 1 0 0 0 0 1
hexa: A 1
decimal (verif.): = 10 x 16 + 1 = 161
Resolver:
Decimal Binario
"Carry"
Sumando 1: 1 3 7
Sumando 2: + 7 5 +
Resultado decimal: Resultado binario:
hexa:
decimal (verif.): =
Decimal Binario
"Carry"
Sumando 1: 1 8 5
Sumando 2: + 9 9 +
Resultado decimal: Resultado binario:
hexa:
Ing. Martín Vernengo, 2020. decimal (verif.): =
[email protected]
Suma binaria – más ejercicios
Decimal Binario
"Carry"
Sumando 1: 1 4 5
Sumando 2: + 1 2 3 +
Resultado decimal: Resultado binario:
hexa:
decimal (verif.): =
Decimal Binario
"Carry"
Sumando 1: 1 5 7
Sumando 2: + 3 3 +
Resultado decimal: Resultado binario:
hexa:
decimal (verif.): =
Decimal Binario
"Carry"
Sumando 1: 3 3 4
Sumando 2: + 2 2 5 +
Resultado decimal: Resultado binario:
hexa:
Ing. Martín Vernengo, 2020.
decimal (verif.): =
[email protected]
Números binaros negativos
Hasta aquí hemos visto números binarios de diferentes cantidades de dígitos, llamemos
“n” a esa cantidad y veamos algunos ejemplos:
[ 2: [ 4: [ 6: [ 8: [ 16:
10 0110 010110 01010110 0101101101010110
Ahora bien, en cada CPU en particular, hay una cantidad máxima de bits n almacenados en
cada posición de memoria, que se conoce como “palabra de memoria”; típicamente
cuando n = 8 bits esa palabra de memoria recibe el nombre de “octeto” o “byte”;
En este contexto, si quisiéramos efectuar una resta dentro de la ALU, la metodología sería
definir números negativos binarios que pudieran ser representados también con n bits;
Y luego, una resta como X-Y no sería otra cosa que sumar un negativo: X + (-Y);
[ 2: [ 4: [ 6: [ 8: [ 16:
>10 >0110 >010110 >01010110 >0101101101010110
Sin embargo, el signo menos implica tener un tercer símbolo a almacenar en la CPU;
Y dentro de una CPU sólo tenemos 2 símbolos, el 0 y el 1, no existe posibilidad de un tercero;
Entonces, se decidió que para representar un número negativo es el bit más significativo
del mismo debe valer 1. Es así que para n = 8 bits:
{1010110 sería considerado positivo y ?1111001 sería considerado negativo;
No obstante, la representación de un número negativo –X a partir de un número positivo
X no se hace de ninguna manera poniendo simplemente el bit más significativo en 1:
|W ST}X , rY T~TUr•Y: >00111010 € 10111010
Ing. Martín Vernengo, 2020.
[email protected]
“Complemento a 1” de un número binario
La razón por la que un “número binario negativo” no puede ser simplemente obtenido
cambiando a 1 el bit más significativo es que justamente para que funcione como
negativo debe cumplirse que la suma con su opuesto dé cero, concretamente:
> 0
Y en el ejemplo de la página anterior, esto vemos que claramente no ocurre:
"Carry" 0 0 1 1 1 0 1 0 0
X = 0 0 1 1 1 0 1 0
-X = + 1 0 1 1 1 0 1 0
X + (-X ) 0 1 1 1 1 0 1 0 0
descartado pues la palabra de 8 bits OK pero € 0
memoria tiene longitud 8 y no mayor!
Para poder definir a partir de un número cualquiera otro > tal que sumado al primero
dé cero es que definimos primeramente el “complemento 1” de :
Complemento a 1 de •: ‚? • kƒ > ? > •;
Por ejemplo, para el número del ejemplo de arriba: 00111010 3A #
3 16 10 58 , y ya que n = 8, el complemento a 1 sería:
v 2 >1> 2& > 1 > 58 256 > 1 > 58 197
128 64 4 1 11000101
Ing. Martín Vernengo, 2020.
[email protected]
Obtención del “Complemento a 1”
Comparemos al número de la página anterior y a su complemento a 1 bit a bit:
00111010
v 11000101
Conclusión: el complemento a 1 se obtiene invirtiendo todos los bits del número original
(de ahí el nombre complemento a 1), lo que ya vimos que se corresponde con la
compuerta NOT que definimos durante la Introducción;
Este resultado es lógico ya que 2 > 1 = 2& > 1 255 11111111 ;
Por lo tanto restar de un número con todos sus bits en 1 al número , es decir al
calcular v 2 > 1 > estaremos intercambiando 1s con 0s;
De esta manera, para obtener el complemento a 1 de un número, simplemente lo que
tenemos que hacer es aplicar una “operación NOT bit a bit” sobre , lo que ya vimos que
se puede realizar con un solo transistor de la computadora:
Con lo que podremos escribir:
v 2 >1> NOT X R +
5V
−
= 1
0
0
1
Entrada = 1 bit de :
5 Volt = “1”
0 Volt = “0” Salida = 1 bit de v :
0 Volt = “0”
Ing. Martín Vernengo, 2020. 5 Volt = “1”
[email protected]
Del “Complemento a 1” al “Complemento a 2”
Pero la pregunta que nos queda es: será el “complemento a 1” el número “negativo”
que buscamos, es decir aquél que cumple que > 0 ? Veamos:
"Carry" 0 0 0 0 0 0 0 0 0
X = 0 0 1 1 1 0 1 0
NOT(X ) = + 1 1 0 0 0 1 0 1
X + (-X ) 1 1 1 1 1 1 1 1
⇒ Vemos que hemos logrado que los primeros n bits sean nulos y aunque quedó
un bit final no nulo, éste puede ser descartado ya que si se lo tuviera en cuenta,
el tamaño del número obtenido sería n+1 y excedería el tamaño de la palabra de
memoria (por ejemplo sería de 9 bits que es mayor que un byte).
Por lo tanto el Complemento a 2 es el número
Ing. Martín Vernengo, 2020.
[email protected]
binario negativo que estábamos buscando!
Resta de binarios con suma del “Complemento a 2”
En el siguiente ejemplo, restamos 19 de 21 en decimal y en binario, luego realizando la
misma operación mediante la suma del complemento a 2 de 19, suponiendo n = 6:
Así como el “Carry” debe interpretarse como “me llevo 1”, el “Borrow” se interpreta
como “le pido 1”, que se le resta al dígito a la izquierda del que “pide”;
Decimal Binario: n = 6 Binario: n = 6
"Borrow" 0 1 0 0 0 0 0 1 0 0 "Carry" 1 1 1 1 0 1 0
Minuendo: 2 1 0 1 0 1 0 1 0 1 0 1 0 1
6
Sustraendo: - 1 9 - 0 1 0 0 1 1 C2(19) = 2 -19 = 45 = 2D hex + 1 0 1 1 0 1
Diferencia: 0 2 0 0 0 0 1 0 1 0 0 0 0 1 0
Carry final descartado pues la palabra Bit más significativo nulo
memoria tiene longitud n = 6 y no 7! Indica que el resultado es positivo
En el ejemplo anterior el minuendo es mayor que el sustraendo y el resultado debe
interpretarse como positivo; ¿Y si ocurre lo inverso y restamos 21 de 19? Veamos:
Binario: n = 6
"Carry" 0 0 0 0 1 1 0
0 1 0 0 1 1
6
C2(21) = 2 -21 = 43 = 2B hex + 1 0 1 0 1 1
0 1 1 1 1 1 0
Carry final nulo confirma que Bit más significativo = 1
El resultado es negativo Indica que el resultado es negativo
El resultado es el correcto ya que:
Resultado 111110 3E # 3 16 14 62 2# > 2 v 2 -2
Ing. Martín Vernengo, 2020.
[email protected]
Ing. Martín Vernengo, 2020.
Ya vimos cómo es posible realizar una sustracción en binario a través del complemento a 2
del sustraendo, pero para poder hacerlo en una computadora es necesario que haya una
manera simple de obtener ese complemento.
La respuesta es que esto es muy fácil de lograr a partir del “Complemento a 1” (que ya
vimos que se obtiene con un simple intercambio de bits 1 por 0;
Y ya vimos que v 2 > v 1 , por lo tanto para realizar la resta
>• >• necesitamos simplemente un sumador binario (que ya veremos cómo
diseñar en su momento…) y un inversor de bits (NOT), realizando los siguientes pasos:
1. Invertir todos bits de • para obtener v • NOT • ;
2. Sumar 1 al “complemento a 1” de • para obtener v • v • 1;
3. Realizar la suma v • ;
4. Si el resultado tiene su bit más significativo en 0, es el resultado final positivo pues O •;
5. Si el resultado tiene su bit más significativo en 1, es porque \ •, entonces se debe obtener el
valor positivo correspondiente (agregándole el signo menos al “mostrar en pantalla”) con la
misma operación que se hizo anteriormente:
v TWs•tVSY v TWs•tVSY 1 NOT TWs•tVSY 1;
La implementación en hardware de este procedimiento se verá cuando veamos el tema
de circuitos combinacionales, pero para entenderlo es importante primero ejercitar con
cálculos hechos “por humanos”;
Veamos dos ejemplos en las próximas páginas.
Ing. Martín Vernengo, 2020.
[email protected]
Procedimiento para resta de binarios (Ejemplo 1)
Decimal
Ejercicio – realizar la siguiente resta decimal "Borrow" 0 1 0
en binario, por el procedimiento de “suma Minuendo: 1 1 4
del complemento a 2 del sustraendo”:
Sustraendo: - 9 5 •
Solución: Diferencia: 0 1 9
Primero pasamos minuendo y sustraendo a binario:
• 95 64 + 16 + 8 + 4 + 2 + 1= 01011111 ; 114 64 + 32 + 16 +2 = 01110010 ;
Pasos: NOT
Pasos: NOT
+
binario:
hexa:
decimal (verif.): = x 16 + =
Ing. Martín Vernengo, 2020.
[email protected]
Ing. Martín Vernengo, 2020.
+
binario:
hexa:
Ing. Martín Vernengo, 2020.
decimal (verif.): = x 16 + =
[email protected]
Ing. Martín Vernengo, 2020.
El caso típico de análisis para este tema lo hacemos para n = 8, o sea un byte, pero será
completamente análogo de acuerdo al tamaño de “palabra de memoria” considerado;
Como vimos en todos los ejemplos anteriores, hemos considerado que si el bit más
significativo del byte (= 27) vale 1, el número representado será negativo;
En este supuesto, el número positivo más grande que se puede representar con 8 bits es aquél
que tiene todos sus bits en 1 excepto el más significativo: 01111111 = 127 ;
Este hecho implica que hay 128 números “no negativos” representables con un byte, contando
además de los 127 números positivos el cero = 00000000 ;
Pero como con un byte son 8 bits, tenemos un total de 28 = 256 números posibles de
representar, lo cuál nos deja 256 – 128 = 128 números negativos posibles: del -1 al -128;
Teniendo en cuenta el método del “complemento a 2” deberá ser:
-1 = v 1 = 256 – 1 = 255 = 11111111 ;
-2 = v 2 = 256 – 2 = 254 = 11111110 ;
-3 = v 3 = 256 – 3 = 253 = 11111101 ;
…
-128 = v 128 = 256 – 128 = 128 = 10000000 ;
(es decir, el -128 es el como si fuera un “cero negativo”: esto explica por qué hay un número negativo más que
los positivos , debido a que la combinación con 7 bits nulos ya está utilizada para el 0 en los “no negativos”).
Pero ¿qué pasa si por algún motivo sabemos que NO VAMOS A UTILIZAR NÚMEROS
NEGATIVOS? ¿No sería un desperdicio de bits no poder utilizar las 256 combinaciones de
un binario de 8 bits? Respuesta: un rotundo sí!
Es por ello que un byte se puede definir CON y SIN signo:
Si es SIN signo, sirve para representar 256 números del 0 al 255;
Y si es CON signo, para representar también 256 números pero desde -128 al +127.
Ing. Martín Vernengo, 2020.
[email protected]
Binarios “con signo” y “sin signo”: ejercicio
Complete el rango de números positivos y negativos representables con palabras
definidas con y sin signo para cada cantidad de bits por palabra (se presenta la solución
para 16 bits, debe demostrarse los valores correspondientes):
Bits por
Sin Signo Con Signo
Palabra:
n= De Hasta De Hasta
2
4
8 0 255 -128 127
12
16 0 65535 -32768 32767
20
24
32
48
64
Ya veremos cómo construir un hardware que permita realizar esta “suma bit a bit”, pero remarcamos
aquí el mecanismo de “carry”, que replica lo realizado en una suma realizada manualmente.
Ing. Martín Vernengo, 2020.
[email protected]
Multiplicación y división por 10 en decimal (repaso)
Todos sabemos que en el sistema decimal, multiplicar/dividir por 10 equivale a
“agregar/quitar un 0 a la derecha”…
…o con más rigor correr la coma una posición a la derecha o la izquierda:
302,05 10 3020,5 4172 • 10 417,2
Esta operación se puede justificar en base a una simple cuestión algebraica:
10 ⋯ 10 10 10 10 ⋯ 10
⇒ 10 10 10 ⋯ 10 10 10 10 ⋯ 10 0
10.10N = 10N
⇒ 10 10 10 … 10 10 10 10 … 10 0 10
Por lo que vemos que hay un desplazamiento a la izquierda/derecha de todos los dígitos
en bloque al multiplicar/dividir por 10:
10 10 10 10 10 10 10 10 10 10
0 …
, ( …
0
?{ ?{ • ?{ • ?{
0 …
, ( ' …
0
10 10 10 10 10 10 10 10 10 10
Ing. Martín Vernengo, 2020.
[email protected]
Multiplicación y división por la base numérica “r”
Para una base numérica r = 2, 8, 16, etc. Cualquiera ocurre exactamente lo mismo que al
multiplicar por r = 10:
⋯ ⋯
⇒ ⋯ ⋯ 0
. N = N
⇒ … … 0
Por lo que vemos que hay un desplazamiento a la izquierda/derecha de todos los dígitos
en bloque al multiplicar/dividir por 10:
0 …
, ( …
0
• •
•• ••
0 …
, ( ' …
0
Producto:
Ejercicio – Para las siguientes operaciones planteadas en decimal, convierta los
operandos a binario, multiplique en este último sistema numérico y convierta de nuevo
el resultado a decimal confirmando que el valor es correcto:
18 3 ? ? ? ? ;
18 4 ? ? ? ? ;
27 6 ? ? ? ? ;
36 7 ? ? ? ? ;
Ing. Martín Vernengo, 2020.
[email protected]
Qué necesitamos para una multiplicación binaria
Evidentemente, para realizar una multiplicación
binaria, dado que para ser realizada
manualmente implica la combinación de sumas
con multiplicaciones por 2, también para ser
realizada automáticamente por la ALU de una
CPU digital, requerirá estas dos funciones:
Por lo tanto, necesitaremos implementar
básicamente dos tipos de bloques:
Los “Full Adders” o
“sumadores bit a bit”
interconectados como ya se
explicó en páginas previas y
con la tabla de entradas y
salidas que permite sumar bit
a bit y generar los “carry”;
DESPLAZAR IZQUIERDA
CARGAR DATOS ENTRADA … (
Como vemos, al multiplicar por una potencia positiva de 10, la coma se corre a la
derecha igual cantidad de posiciones que el exponente, mientras que si la potencia es
negativa, la coma se corre lo indicado por el exponente pero hacia izquierda.
Ing. Martín Vernengo, 2020.
[email protected]
Floating Point = “notación científica binaria”
Utilicemos ahora la misma idea de la notación científica decimal pero con números
binarios ― veamos algunos ejemplos ― primero con exponente positivo:
17 16 1 10001 1,0001 2'
1 2 3 4
68 64 4 1000100 1,0001 2#
1 2 3 4 5 6
La idea es siempre expresar el número en floating point comenzando con “1,”, por ende si el
número del que partimos es mayor que 1, necesariamente habrá que multiplicarlo por una
potencia positiva de 2 para que el 1,…. Se haga mayor hasta igualar el número buscado.
Veamos ahora ejemplos con exponente negativo y donde ahora el número inicialmente
presentado es menos que 1:
0,53125 0,5 0,03125 2 2 "
0,10001 1,0001 2
1
0,010001 1,0001 2
2 1
0,0010001 1,0001 2 (
Ing. Martín Vernengo, 2020.
[email protected] 3 2 1
Formato Floating Point: caso con exponente (+)
Volvamos ahora a uno de los ejemplos para el caso de exponente positivo de la lámina
anterior y veamos cómo se expresaría una primera versión de formato FP:
17 10001 1,0001 2' 1, 0001 10 ;
Nota: En este caso, en la expresión más a la derecha, hemos escrito el número utilizando
exclusivamente dígitos 0 y 1, es decir en “binario puro”, incluyend la potencia 2 y su exponente
En esta primer versión de formato FP, que usa sólo 8 bits y ya veremos que no es la final,
la computadora guarda en memoria por separado dos valores:
El “significante” o “mantisa”, que es primer número de la “notación científica binaria” ya vista;
El exponente, quedando implícito que la base a la que se eleva es el 2 (estamos en binario);
0 1 0 1 0 0 0 1
17 1,0625 2'
0,265625
1 0 0 1 0 0 0 1 1,0625 2
7 Exponente Real
“1,” implícito
7 >2
9 1001
Ing. Martín Vernengo, 2020.
[email protected]
Reformulamos el caso con exponente (+)
Ahora nos vemos obligados a corregir el caso de exponente positivo presentado inicialmente, pues no
habíamos incluido el desplazamiento = 7 que estamos utilizando por ahora;
De este modo, el formato FP de apenas 8 bits que estamos utilizando como ejemplo simplificado
quedaría así para:
17 10001 1,0001 2' 1, 0001 10 ;
17 1 0 1 1 0 0 0 1
1,0625 2'
7 Exponente Real
“1,” implícito
7 4
11 1011
Es decir que SIEMPRE se suma el desplazamiento al exponente obtenido (que hemos llamado
“exponente real”) para obtener lo que hemos llamado “exponente almacenado”, ya que es dicho
número el que se guarda en memoria como “formato floating point” (punto flotante).
Para el caso del formato IEEE 754 de precisión simple, las diferencias con los ejemplos
visto hasta aquí son las siguientes:
Exponente: se utilizan 8 bits (en lugar de los 4 bits de nuestros ejemplos previos);
Desplazamiento = 127 (en lugar de = 7 como en las láminas anteriores);
Mantisa: se utilizan 23 bits (en vez de apenas los 4 bits que ejemplificamos antes):
Signo de 1 bit: esto es algo que no tuvimos en cuenta hasta aquí, e implica utilizar un bit 0
cuando el número floating point es positivo y un bit 1 cuando es negativo;
Significante ?, 01 1 2 0 2 1 2
Exponente >3 1 0 0,25 1,25
Pues 0111 1100 7C #
7 16 12 124
⇒ Número 1,25 2 (
Entonces Exponente
124 > 127 >3
desplazamiento
Para realizar operaciones con punto flotante, vamos primeramente a realizar un ejemplo
con números decimales en “notación científica” para entender mejor el método;
Supongamos que realizar las operaciones: suma y producto de 1,5 10 y 3,5 10( ;
Para la suma, primero tenemos que modificar uno de los sumandos para que su exponente
coincida con el del otro y luego sumar las mantisas:
1,5 10k 3,5 10( 0,15 10m 3,5 10( 0,15 3,5 10( 3,65 10(
suma SIN
notación 150 3500 ……………………………………………………………… 3650
científica
1 2 3
Para el producto, por las propiedades de la exponenciación, se multiplican las mantisas y se
suman los exponentes:
1,5 10 3,5 10( 1,5 3,5 10 10( 5,25 10 ( 5,25 10"
150 3500 … … … … … … … … … … … … … … … … … … … … … 525000
Veamos otro ejemplo para suma y producto de 3,4 10 y 10,6 10 ; 1 2 3 4 5
Para la suma, nuevamente modificamos el exponente del primer sumando para que sea igual
al del segundo y sumamos las mantisas:
3,4 10 10,6 10 0,0034 10 + 10,6 10 0,0034 10,6 10 10,6034 10
suma SIN
notación 0,34 1060 …………………… ……………………… …………………… 1060,34
científica
Para el producto, se multiplican las mantisas y se suman los exponentes: 1 2
17 8,5
1,0001 2' 0,10001 2' 1,00010 0,10001 2' 1,10011 2';
0,10001