1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE...

60
1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras Curso Propedéutico Capítulo I. Abstracciones

Transcript of 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE...

Page 1: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

INSTITUTO POLITÉCNICO NACIONALCENTRO DE INVESTIGACION EN COMPUTACION

LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS

Arquitecturas de ComputadorasCurso Propedéutico

Capítulo I. Abstracciones

Page 2: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1Objetivo

Se analizarán aspectos de arquitectura, sistemas operativos y compiladores

Page 3: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1Realidad importante # 1

Los números enteros (int) no son enteros, los números de punto flotante (float) no son realesEjemplos¿Es X2 0?

Con float: ¡Si! Con int:

4000*4000 1600000000 50000*50000 ¿?

Es (x + y) + z = x + (y + z) Con signed int & unsigned int: ¡Si! Con float:

(1e20 + -1e20) + 3.14 3.14 1e20 + (-1e20 + 3.14) ¿?

Page 4: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1Aritmética computacional

No genera valores aleatorios Las operaciones aritméticas tienen propiedades matemáticas importantes

No se puede asumir propiedades “usuales” Debido a la exactitud de las representaciones (Registros) Las operaciones con enteros satisfacen las propiedades de un “anillo”

Conmutatividad, asociatividad y distributividad Las operaciones de punto flotante satisfacen las propiedades de “orden”

Monotonicidad, valores de signoObservaciones

Se necesita entender cuál abstracciones aplicar dependiendo del contexto Es un tema importante para programadores de compiladores y

programadores de aplicaciones serias

Page 5: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1Realidad importante # 2

Se tiene que saber ensambladorEn general, las oportunidades de nunca escribir un programa en ensamblador son grandes

Los compiladores son mucho mejores y más pacientes de lo que son las personas

Entender el lenguaje ensamblador es clave para ejecutar modelos a nivel máquina

El comportamiento de programas en presencia de errores Se analiza el Modelo de lenguaje de alto nivel

Ajustar en desempeño del programa Entender las fuentes de ineficiencia del programa

Implementando software de sistemas Los compiladores tiene código máquina como

objetivo Los sistemas operativos deben administrar el

estado del proceso

Page 6: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Ejemplo de código ensamblador

Contador Registro de 64 bits especial en máquinas compatibles con

procesador Intel Incrementa cada ciclo de reloj Lee con la instrucción rdtsc

Aplicación Medir el tiempo requerido para un procedimiento

En unidades de ciclos de reloj

double t;start_counter();P();t = get_counter();printf("P required %f clock cycles\n", t);

Page 7: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Código para leer el contador

Escribe pequeñas cantidades de código ensamblador utilizando las opciones asm de GCC

Inserta código ensamblador en código máquina generado por el compilador

static unsigned cyc_hi = 0;static unsigned cyc_lo = 0;

/* Set *hi and *lo to the high and low order bits of the cycle counter. */void access_counter(unsigned *hi, unsigned *lo){ asm("rdtsc; movl %%edx,%0; movl %%eax,%1"

: "=r" (*hi), "=r" (*lo) :: "%edx", "%eax");

}

Page 8: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Código para leer el contador

/* Record the current value of the cycle counter. */void start_counter(){ access_counter(&cyc_hi, &cyc_lo);}

/* Number of cycles since the last call to start_counter. */double get_counter(){ unsigned ncyc_hi, ncyc_lo; unsigned hi, lo, borrow; /* Get cycle counter */ access_counter(&ncyc_hi, &ncyc_lo); /* Do double precision subtraction */ lo = ncyc_lo - cyc_lo; borrow = lo > ncyc_lo; hi = ncyc_hi - cyc_hi - borrow; return (double) hi * (1 << 30) * 4 + lo;}

Page 9: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Midiendo el tiempo

Más engañoso de lo que parece Muchas fuentes de variaciones

Ejemplo Suma de enteros de 1 a n

n Ciclos Ciclos/n100 961 9.611,000 8,407 8.411,000 8,426 8.4310,000 82,861 8.2910,000 82,876 8.291,000,000 8,419,907 8.421,000,000 8,425,181 8.431,000,000,000 8,371,2305,591 8.37

Page 10: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1Link del Material del curso

http://www.microse.cic.ipn/?q=ca

10

Page 11: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Realidad importante # 3

La memoria si importa La memoria no es infinita

Debe de ser asignada y administrada Muchas aplicaciones son dominadas por la memoria

El desempeño de la memoria no es uniforme La memoria cache y virtual afectan en gran medida el desempeño de un

programa Adaptar los programas a las características de los sistemas de memoria

puede llevar a mejorar la velocidad

Page 12: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1Ejemplo: Error de referencia a memoria

La versión de Linux da un resultado correcto, pero implementando el programa como una función separada da una falla de segmentación.

main (){ long int a[2]; double d = 3.14; a[2] = 1073741824; /* Out of bounds reference */ printf("d = %.15g\n", d); exit(0);}

main (){ long int a[2]; double d = 3.14; a[2] = 1073741824; /* Out of bounds reference */ printf("d = %.15g\n", d); exit(0);}

Alpha MIPS Linux

-g 5.30498947741318e-315 3.1399998664856 3.14

-O 3.14 3.14 3.14

Page 13: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Errores de referencia a memoria

C y C++ no tienen protección a memoria Las referencias a arreglos pueden estar fuera del límite Se pueden generar valores de apuntadores inválidos Se pueden dar abusos de las funciones de manejo de la memoria malloc/free

Se pueden generar errores graves Los errores pueden tener o no pueden tener efectos que dependen del sistema y el

compilador Acción a distancia

Objetos lógicos corrompidos sin relación con uno que esta siendo accedido El efecto de los errores pueden ser observados mucho después de ser generados

¿Cómo se puede superar esto? Programar en Java, Lisp, o ML Entender las posibles interacciones que pueden ocurrir Utilizar o desarrollar herramientas que detecten referencias a errores

Depuradores

Page 14: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Errores de desempeño de memoria

Implementación de multiplicación de matrices Múltiples formas de anillos anidados

/* ijk */for (i=0; i<n; i++) { for (j=0; j<n; j++) { sum = 0.0; for (k=0; k<n; k++) sum += a[i][k] * b[k][j]; c[i][j] = sum; }}

/* ijk */for (i=0; i<n; i++) { for (j=0; j<n; j++) { sum = 0.0; for (k=0; k<n; k++) sum += a[i][k] * b[k][j]; c[i][j] = sum; }}

/* jik */for (j=0; j<n; j++) { for (i=0; i<n; i++) { sum = 0.0; for (k=0; k<n; k++) sum += a[i][k] * b[k][j]; c[i][j] = sum }}

/* jik */for (j=0; j<n; j++) { for (i=0; i<n; i++) { sum = 0.0; for (k=0; k<n; k++) sum += a[i][k] * b[k][j]; c[i][j] = sum }}

Page 15: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Multiplicación de Matrices 1

15

Para calcular cada elemento de C se requiere la columna de A (indexada por k, i) y el renglón de B (indexada por k, j). El resultado se guarda en la columna C (indexada por i,j)

Columna X Renglón = Columna

/* ijk */for (i=0; i<n; i++) { for (j=0; j<n; j++) { sum = 0.0; for (k=0; k<n; k++) sum += a[i][k] * b[k][j]; c[i][j] = sum; }}

/* ijk */for (i=0; i<n; i++) { for (j=0; j<n; j++) { sum = 0.0; for (k=0; k<n; k++) sum += a[i][k] * b[k][j]; c[i][j] = sum; }}

B

A C

k

k

ji

j

i

Page 16: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Multiplication de Matrices 2

16

B

A C

i

j

j

/* jik */for (j=0; j<n; j++) { for (i=0; i<n; i++) { sum = 0.0; for (k=0; k<n; k++) sum += a[i][k] * b[k][j]; c[i][j] = sum }}

/* jik */for (j=0; j<n; j++) { for (i=0; i<n; i++) { sum = 0.0; for (k=0; k<n; k++) sum += a[i][k] * b[k][j]; c[i][j] = sum }}

k

k

i

Para calcular cada elemento de C se requiere el renglón de A (indexada por k,i) y la columna de B (indexada por k,j). El resultado se guarda en la columna C (indexada por i,j)

Renglón X Columna = Renglón

Page 17: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Desempeño de mult. mat. (Alpha 21164)

0

20

40

60

80

100

120

140

160

matrix size (n)

ijk

ikj

jik

jki

kij

kji

Demasiado grande para Cache L1 Demasiado grande para Cache L2

Page 18: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Desempeño de mult. mat. bloqueado (Alpha 21164)

0

20

40

60

80

100

120

140

160

50 75 100 125 150 175 200 225 250 275 300 325 350 375 400 425 450 475 500

matrix size (n)

bijk

bikj

ijk

ikj

Page 19: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Realidad importante # 4

Hay más que mejorar que la complejidad asintótica

Los factores constantes también importan Se puede ver un rango de desempeño 10:1 dependiendo en la

forma en que el código es escrito Se puede optimizar a múltiples niveles: algoritmos,

representación de datos, procedimientos y anillos Se debe de entender el sistema para mejorar el desempeño

Hay que saber cómo son compilados y ejecutados los programas Hay que saber cómo medir el desempeño de un programa e

identificar los cuellos de botella Hay que saber cómo mejorar el desempeño sin destruir la

modularidad y generalidad del código

Page 20: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Realidad importante # 5

Las computadoras hacen mas que ejecutar programas

Ellas necesitan obtener datos de entrada y salida

La entrada/salida de un sistema es un factor crítico de los programas para la confianza y desempeño

Ellas se comunican con otras a través de redes de computadora

Muchos temas a nivel-sistema surgen en presencia de redes

Operaciones concurrentes por medio de procesos autónomos Copia con medios no confiables Compatibilidad con la plataforma Temas de desempeño complejos

Page 21: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

¿Por qué no se utiliza la base 10 para representar a los números

Es una numeración difícil de almacenar.

La ENIAC (primera computadora) utilizó 10 bulbos (tubo al vacío) por cada dígito.

Se necesita alta precisión para codificar señales de 10 niveles en una simple alambre o medio de comunicación de un solo canal.

Es difícil de implementar funciones lógicas digitales como son suma, multiplicación, entre otras.

Page 22: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Representación binaria

Representación numérica de base 2

1521310 se presenta como 111011011011012

1.2010 se representa como 1.0011001100110011[0011]…2

1.5213104 se representa como 1.11011011011012213

Implementación electrónica Fácil de almacenar con elementos bi-estables. Disponible de se transmitida en medio ruidos o inadecuados. Implementación directa de funciones aritméticas.

Page 23: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

0.0V

0.5V

2.8V

3.3V

0 1 0

Señal Eléctrica de la Representación binaria

Page 24: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Organización de memoria orientada a bytes

Los programas hacen referencia a memorias virtuales

Conceptualmente a arreglos muy grandes de bytes Realmente son implementadas con jerarquías de memoria de diferentes tipos

SRAM, DRAM, discos Sólo destinadas para regiones reales utilizadas por el programa

En Unix y Windows NT, el espacio de direcciones es privado a un “proceso” en particular

Al programa que está siendo ejecutado El programa puede destruir sus propios datos pero no los de otros

Compilador + Tiempo de ejecución del sistema controlan el destino Donde diferentes objetos del programa podría estar almacenados Múltiples mecanismos: estáticos, pila, cima En cualquier caso, todos los destinos están dentro de un espacio de direcciones

virtuales

Page 25: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Codificación de valores de bytes

Byte = 8 bits Binario 000000002 a 111111112

Decimal 010 a 25510

Hexadecimal 0016 a FF16

Representación numérica base 16 Utiliza los caracteres ‘0’ a ‘9’ y ‘A’ a ‘F’ E.g. Se escribe FA1D37B16 en C como 0xFA1D37B >> Ó 0xfa1d37b

Page 26: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

0 0 00001 1 00012 2 00103 3 00114 4 01005 5 01016 6 01107 7 01118 8 10009 9 1001A 10 1010B 11 1011C 12 1100D 13 1101E 14 1110F 15 1111

Hex Decimal Binario

Ejemplo de Representación Numérica

Page 27: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Palabras de las máquinas

Las máquinas tienen un “tamaño de palabra” Tamaño nominal de datos con valores enteros

Incluyendo direcciones La mayoría de las máquinas son de 32 bits (4 bytes)

Su dirección se limita a 4 GB Siendo muy lentas para aplicaciones de memoria intensiva

Sistemas más sofisticados son de 64 bits (8 bytes) Pueden potencialmente direccionar 1.8 1019 bytes

Las máquinas soportan múltiples formatos de datos Fracciones o múltiplos de tamaño de palabra Siempre números enteros de bytes

Page 28: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Organización de memoria orientada a palabras

Las direcciones de una memoria especifican localizaciones de Bytes Se da la dirección del primer byte en la palabra Las direcciones de palabras sucesivas difieren en 4 bytes (32 bits)

u 8 bytes (64 bits)

Page 29: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1000000010002000300040005000600070008000900100011

32-bitWords

Bytes Addr.

0012001300140015

64-bitWords

Addr =??

Addr =??

Addr =??

Addr =??

Addr =??

Addr =??

0000

0004

0008

0012

0000

0008

Page 30: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Abstracción

Un modelo que oculta detalles de bajo nivel de un sistema de computadora temporalmente invisible para facilitar el diseño de un sistema sofisticado.

Wikipedia: La abstracción, es un principio por el cual se aísla toda aquella información que no resulta relevante a un determinado nivel de conocimiento.

Page 31: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

La abstracción consiste en aislar un elemento de su contexto o del resto de los elementos que lo acompañan. En programación, el término se refiere al énfasis en el "¿qué hace?" más que en el "¿cómo lo hace?" (característica de caja negra). El común denominador en la evolución de los lenguajes de programación, desde los clásicos o imperativos hasta los orientados a objetos, ha sido el nivel de abstracción del que cada uno de ellos hace uso.

Los lenguajes de programación son las herramientas mediante las cuales los diseñadores de lenguajes pueden implementar los modelos abstractos. La abstracción ofrecida por los lenguajes de programación se puede dividir en dos categorías: abstracción de datos (pertenecientes a los datos) y abstracción de control (perteneciente a las estructuras de control).

Abstracción

Page 32: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Representación de datos

Tipos de datos en C en un procesador (en bytes)

Tipo de dato en C Compaq Alpha Típico de 32 bits Intel IA32

Int 4 4 4

long int 8 4 4 char 1 1 1 short 2 2 2 float 4 4 4 double 8 8 8 long double 8 8 10/12 char * 8 4 4

>> ó cualquier otro apuntador

Page 33: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Orden de los bytes

¿Cómo deben de ordenarse en memoria las palabras multi-bytes?Convenciones:

Las PC’s y las Alphas son máquinas “Little Endian” El byte menos significativos tienen las direcciones más bajas

Las Sun’s y las Mac’s son máquinas “Big Endian” El byte menos significativo tiene la dirección más grande

Page 34: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Ejemplo de ordenamiento de bytes

La variable x tiene una representación de 4 bytes 0x01234567 La dirección &x está dada por 0x100

Big Endian

Little Endian

0x100 0x101 0x102 0x103

01 23 45 6701 23 45 67

0x100 0x101 0x102 0x103

67 45 23 0167 45 23 01

Page 35: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Leyendo la lista de bytes en reversa

Desensamblado Representación del texto de código máquina binario Generado por el programa que lee el código máquina Ejemplo del fragmento

Dirección Código de la instrucción Código ensamblado 8048365: 5b pop %ebx 8048366: 81 c3 ab 12 00 00 add $0x12ab,%ebx 804836c: 83 bb 28 00 00 00 00 cmpl $0x0,0x28(%ebx)

Descifrando números Valor: 0x12ab Grupo de 4 bytes: 0x000012ab Separado en bytes: 00 00 12 ab Reversa: ab 12 00 00

Page 36: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Examinando la representación de datos

Código para imprimir la representación de datos El apuntador a unsigned char * crea un arreglo byte

typedef unsigned char *apuntador;

void muestra_bytes(apuntador comienzo, int longitud){

int i;for (i=0; i < longitud; i++)

printf(“0x%p\t0x%.2x\n”,comienzo+i, comienzo[i]);printf(“\n”);

}

Directivas Printf: %p: Imprime apuntador%x: Imprime hexadecimal

Page 37: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Ejecución del ejemplo muestra_bytes

int a = 15213;printf(“int a = 15213;\n);muestra_bytes((apuntador) &a sizeof(int));

Resultado (en Linux):

int a = 15213;0x11ffffcb8 0x6d0x11ffffcb9 0x3b0x11ffffcba 0x000x11ffffcbb 0x00

Page 38: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Representando enteros

int A = 15213; Decimal: 15213int B = -15213; Binario: 0011 1011 0110 1101long int C = 15213; Hex: 3 B 6 D

Representación complemento a 2’s.

00000000

6D3B0000

Alpha C

3B6D

0000

Sun C

6D3B0000

Linux C

6D3B0000

Linux/Alpha A

3B6D

0000

Sun A

93C4FFFF

Linux/Alpha B

C493

FFFF

Sun B

Page 39: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Representando apuntadores

int B = -15213;int *p = &B;

Dirección en la AlphaHex: 1 F F F F F C A 0Binario: 0001 1111 1111 1111 1111 1111 1100 1010 0000

Dirección en la SunHex: E F F F F B 2 CBinario: 1110 1111 1111 1111 1111 1011 0010 1100

Dirección en LinuxHex: B F F F F 8 D 4Binario: 1011 1111 1111 1111 1111 1000 1101 0100

Diferentes compiladores y máquinas asignan diferentes localidades a los objetos

FB2C

EFFF

Sun P

01000000

A0FCFFFF

Alpha P

FFBF

D4F8

Linux P

Page 40: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Representando números en punto flotante

Flotante F = 15213.0

IEEE Representación en punto flotante de precisión simple

Hex: 4 6 6 D B 4 0 0Binario: 0100 0110 0110 1101 1011 0100 0000 000015213: 1110 1101 1011 01

No es como la representación de enteros, pero es consistente entre diferentes máquinas.Se puede ver alguna relación en la representación a enteros, pero no es obvio.

00B46D46

Linux/Alpha F

B400

466D

Sun F

Page 41: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Representando cadenas de caracteres

Cadenas en C Representadas por arreglos de caracteres Cada carácter se codifica en un formato ASCII

Codificación en un estándar de 7 bits del conjunto del caracteres Existen otras codificaciones, pero no son comunes El carácter cero “0” tiene el código 0x30

• Digito i tiene el código 0x30 + i La cadena debe de terminar con un carácter nulo

Carácter final = 0 Compatibilidad

El ordenamiento de bytes no es importante Los datos son cantidades de bytes simples

Los archivos de texto son independientes de la plataforma Excepto por diferentes convenios de terminación de líneas de

caracteres

Page 42: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Ejemplo

char S[6] =“15213”

Linux/Alpha S Sun S

3231

3135

3300

3231

3135

3300

Page 43: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Representación de código a nivel máquina

Se codifica un programa como una secuencia de instrucciones Cada operación simple

Operaciones aritméticas Lectura y escritura de memoria Saltos condicionales

Instrucciones codificadas como bytes Las Alpha’s, Sun’s y Mac’s utilizan instrucciones de 4 bytes

• Computadoras con Conjunto de Instrucciones Reducidas (RISC) Las PC’s utilizan instrucciones de longitud variable

• Computadoras con Conjunto de Instrucciones Complejas (CISC) Diferentes tipos de instrucciones como bytes

La mayoría del código binario no es compatible Los programas son también secuencias de bytes

Page 44: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Representación de instrucciones

int sum (int x, int y){

return x + y;}

Para este ejemplo, las Alpha’sy las Sun’s utilizan dos instrucciones de 4 bytesUtilizan diferentes números de instrucciones

en otros casos.

Las PC’s (Intel) utilizan 7 instruccionescon longitudes de 1, 2, y 3 bytesLo mismo para NT y Linux(NT/Linux no son compatibles)en código binario completamente

Diferentes máquinas utilizan instrucciones y codificaciones totalmente diferentes

00003042

Alpha sum

0180FA6B

E008

81C3

Sun sum

90020009

E58B

5589

PC sum

450C03450889EC5DC3

Page 45: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Álgebra Booleana

Fue desarrollada por George Boole en el siglo 19- Es una representación algebráica de la lógica binaria- Codifica “verdadero” como 1 y “falso” como 0AND ORA&B = 1 cuando A|B = 1 cuando A = 1 o B= 1 A = 1 y B = 1

NOT XOR~A = 1 cuando A = 0 A^B = 1 cuando A = 1 o B = 1, pero no ambos

A,B &

00 0

01 0

10 0

11 1

A,B |

00 0

01 1

10 1

11 1

A Ã

0 1

1 0

A,B ^

00 0

01 1

10 1

11 0

Page 46: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Aplicaciones del álgebra de Boole

Fue aplicado a sistemas por Claude Shannon En su tesis de Mestría del MIT en 1937 Razonó acerca de redes de relevadores con interruptores

Se codificaron los interruptores cerrados como 1 y los interruptores abiertos como 0

A

~A

~B

B

Se conecta cuando A&~B | ~A&B = A^B

A&~B

~A&B

Page 47: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Álgebra de enteros

Aritmética de enteros Z, +, *, -, 0, 1 forma un anillo La adición es la operación de “suma” La multiplicación es la operación de “producto” - Es inverso aditivo 0 Es la identidad de la suma 1 Es la identidad del producto

Page 48: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Álgebra Booleana

{0, 1}, |, &, ~, 0, 1 forma un “álgebra de Boole” OR es la operación de “suma” AND es la operación de “producto” ~ Es la operación de complemento (inverso no

aditivo) 0 Es la identidad de la suma 1 Es la identidad del producto

Page 49: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Álgebra Booleana Anillo entero

ConmutatividadA | B = B | A A + B = B + AA & B = B & A A * B = B * A

Asociatividad(A | B) | C = A | (B | C) (A + B) + C = A + (B + C)(A & B) & C = A & (B & C) (A * B) * C = A * (B * C)

Producto distribuido sobre la sumaA & (B | C) = (A & B) | (A & C) A * (B + C) = A * B + B * C

Identidades de suma y productoA | 0 = A A + 0 = AA & 1 = A A * 1 = A

Cero es un producto aniquiladorA & 0 = 0 A * 0 = 0

Cancelación de la negación~ (~ A) = A – (– A) = A

Page 50: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Álgebra Booleana Anillo entero

Booleana: Suma distribuida sobre el productoA | (B & C) = (A | B) & (A | C) A + (B * C) (A + B) * (A + C)

Booleana: IdempotenciaA | A = A A + A A

“A es verdaero” o “A es verdadero” = “A es verdadero”A & A = A A * A A

Booleana: AbsorciónA | (A & B) = A A + (A * B) A

“A es verdadero” o “A es verdadero y B es verdadero” = “A es verdadero”A & (A | B) = A A * (A + B) A

Booleana: Leyes de complementosA | ~A = 1 A + –A 1

“A es verdadero” or “A es falso” Anillo: Cada elemento tiene su inverso aditivo

A | ~A 0 A + –A = 0

Page 51: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Propiedades de & y ^

Anillo Booleano {0,1}, ^, &, , 0, 1 Idéntica a enteros en mod 2 es la operación de identidad: (A) = A

A ^ A = 0 Propiedad Anillo Booleano

Suma conmutativa A ^ B = B ^ A Producto conmutativo A & B = B & A Suma asociativa (A ^ B) ^ C = A ^ (B ^ C) Producto asociativo (A & B) & C = A & (B & C) Producto sobre la suma A & (B ^ C) = (A & B) ^ (B & C) 0 es identidad suma A ^ 0 = A 1 es identidad producto A & 1 = A 0 es producto aniquilador A & 0 = 0 Inverso aditivo A ^ A = 0

Page 52: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Relaciones entre operaciones

Leyes de DeMorgan Expresa & en términos de |, y viceversa

A|B = ~(~A & ~B)• A o B son verdad si ni A ni B son falsos

A & B = ~(~A | ~B)• A y B son verdad si A y B no son falsos

Or exclusivo utilizando OR inclusivo A^B = (~A & B) | (A & ~B)

Exactamente uno A o B es verdadero A^B = (A|B) & ~(A&B)

Ya sea que A sea verdadero, o B sea verdadero, pero no ambos

Page 53: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Álgebras Booleanas generales

Operaciones sobre vectores de bits Las operaciones son aplicadas bit por bit

Todas las propiedades del álgebra Boolena se aplican

01101001& 01010101 01000001

01101001| 01010101 01111101

01101001^ 01010101 00111100

~ 01010101 10101010 01000001 01111101 00111100 10101010

Page 54: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Representación y manipulación de conjuntos

Representación El vector de bits con ancho w representa un subconjunto {0, …,w-1} aj = 1 si j A

01101001 {0, 3, 5, 6}76543210

0101010176543210 {0, 2, 4, 6}

Operaciones & Intersección 01000001 {0, 6} | Unión 01111101 {0, 2, 3, 4, 5,

6} ^ Diferencia simétrica 00111100 {2, 3, 4, 5} ~ Complemento 10101010 {1, 3, 5, 7}

Page 55: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Operaciones en C a nivel de bit

Las operaciones &, |, ~ y ^ están disponibles en C Se aplica a cualquier tipo de dato “entero”

long, int, short, char Se ven los argumentos como vectores de bits Los argumentos se aplican bit a bit

Ejemplos (dato tipo char)~0x41 0xBE~010000012 101111102

~0x00 0xFF~000000002 111111112

0x69 & 0x55 0x41011010012 & 010101012 10000012

0x69 | 0x55 0x7D011010012 | 010101012 011111012

Page 56: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Contraste: Operaciones lógicas en C

Contraste para operadores lógicos &&, ||, !

El 0 se ve como “falso” Cualquier cosa no cero es “verdadero” Siempre regresa 0 ó 1 Terminación temprana

Ejemplos !0x41 0x00 !0x00 0x01 !!0x41 0x01 0x69 && 0x55 0x01 0x69 || 0x55 0x01 p && *p (evita el acceso a apuntador nulo)

Page 57: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Operaciones de desplazamiento de bits

Desplazamiento a la izquierda x << y Desplaza un vector x de bits y posiciones a la

izquierda Elimina los bits extras de la izquierda Llena con 0’s a la derecha

Desplazamiento a la derecha x >> y Desplaza un vector x de bits y posiciones a la

derecha Elimina los bits extras a la derecha

Desplazamiento lógico Llena con 0’s a la izquierda

Desplazamiento aritmético Replica el bit más significativo a la

derecha Es útil en la representación de enteros

con complemento a dos

01100010Argumento x

00010000<< 3

00011000Log. >> 2

00011000Aritm. >> 2

0001000000010000

0001100000011000

0001100000011000

10100010Argumento x

00010000<< 3

00101000Log. >> 2

11101000Aritm. >> 2

00010000

00101000

11101000

00010000

00101000

11101000

Page 58: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Tarea1: Algo interesante con XOR

Operaciones bit a bit con XOR es una forma de suma

Con la propiedad extra de que cada valor es su propio aditivo inverso A ^ A = 0

void divertido(int *x, int *y){ *x = *x ^ *y; /* #1 */ *y = *x ^ *y; /* #2 */ *x = *x ^ *y; /* #3 */}

BAComienzo

BA^B1

(A^B)^B = AA^B2

A(A^B)^A = B3

ABFinal

*y*x

Page 59: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1

Puntos principales

Todo es acerca de Bits y Bytes Números Programas Texto

Diferentes máquinas siguen diferentes convenciones Tamaño de palabra Orden de los bytes Representaciones

Algebra Booleana es la base de matemática computacional La forma básica codifica “falso” como 0 y “verdadero” como 1 Forma general como operaciones bit a bit en C

Buena para representación y manipulación de conjuntos

Page 60: 1 INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACION EN COMPUTACION LABORATORIO DE MICROTECNOLOGÍA Y SISTEMAS EMBEBIDOS Arquitecturas de Computadoras.

1