x - Escuela de Ingeniería Civil en Informática

Anuncio
Visión general
Escuela de Ingeniería Civil en Informática Universidad de Valparaíso, Chile http://informatica.uv.cl
1
Visión general
C:
Java:
auto *a = malloc(sizeof(auto));
a->kilometraje = 100;
a->litros_bencina = 17;
float kph = get_kph(a);
free(a);
Lenguaje assembler
Lenguaje máquina
Auto a = new Auto();
a.setKilometraje(100);
a.setlitros_bencina(17);
float kph = a.getKph();
getMpg:
pushq %rbp
movq %rsp, %rsp
. . .
popq %rpb
ret
01010101010110001010
. . .
010101010100010111010
Sistema opera=vo
Sistema Computacional
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
2
Visión general
Código
Fuente
.c
Código
Fuente
.c
Bibliotecas
.h
Compilador
Código
Fuente
.c
Bibliotecas
.h
Bibliotecas
.h
Código
Assembler
.s
Código
Assembler
.s
Código
Assembler
.s
Código
Objetvo
.o
Código
Objetvo
.o
Código
Objetvo
.o
Ensamblador
Librerías
del
sistema
Linker
(enlazador)
Ejecutable
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
3
Hardware: Modelo lógico
CPU
Memoria
Disco Duro
Teclado
Monitor
USB
Controladores de HW
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
4
Hardware: Modelo lógico
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
5
Hardware: Vista Física
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
6
Ejecución/desempeño de programas
Registros
Banco de
Registros
R1
R2
Caché
Interna
Rn
CPU
Memoria
RAM
Pocos Man=enen los datos de ejecución del programa
Desempeño NO depende sólo de la velocidad del procesador
Capacidad de canal (Ancho de Banda) entre CPU y Memoria puede limitar el desempeño en la ejecución de programas
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
7
Memoria, Datos y direccionamiento
Representación de la información
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
8
Codificación
Binario
Ejemplo: 001010112 =32+8+2+1=4310
Hexadecimal
Dígitos: 0 al F
Cada dígito hexadecimal son 4 dígitos binarios
Ejemplo: FA1D38E16
Ejemplo: 0xFA1D38E
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
9
Palabras de Máquina
Cada arquitectura =ene un “tamaño de palabra”
Es el tamaño nominal del =po de dato entero. Define la can=dad de registros de memoria que puede direccionar.
Máquinas de palabras de 32 bits
#registros= 232
Máquinas de palabras de 64 bits
#registros= 264
Por compa=bilidad, los procesadores actuales soportan dis=ntos tamaños de palabra, siempre de la forma 2n.
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
10
Memoria Organización orientada al Byte
Arreglo, cuyo índice se llama “Dirección de memoria”. Cada lugar del arreglo, con=ene exactamente 1 byte de datos.
Los programas referencian esas direcciones para guardar/sacar datos. Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
11
Memoria Organización orientada a la palabra
La dirección de memoria apunta a un conjunto de bytes
La dirección es la dirección del primer bytes de la palabra
La dirección siguiente difiere por 4 (caso 32 bit) u 8 (caso 64bit)
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
12
Memoria, Datos y direccionamiento
Organización y direccionamiento de datos en memoria
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
13
Direcciones y punteros
Dirección:
Localización en memoria
Puntero:
dato que con=ene una dirección
Por ejemplo
La dirección 0x004 almacena el valor 0x0000015F
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
14
Direcciones y punteros
Dirección:
Localización en memoria
Puntero:
dato que con=ene una dirección
Por ejemplo
La dirección 0x004 almacena el valor 0x0000015F
El puntero a la dirección 0x004 se almacena en la dirección 0x001C
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
15
Direcciones y punteros
Dirección:
Puntero:
Localización en memoria
dato que con=ene una dirección
Por ejemplo
La dirección 0x004 almacena el valor 0x0000015F
El puntero a la dirección 0x004 se almacena en la dirección 0x001C
El puntero al puntero de la dirección 0x004 se almacena en la dirección 0x0024
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
16
Direcciones y punteros
Dirección:
Puntero:
Localización en memoria
dato que con=ene una dirección
Por ejemplo
El valor almacenado en 0x0014, ¿es un puntero?, ¿podría ser un puntero?, ¿no es un puntero?
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
17
Direcciones y punteros
Tamaño de los =pos de datos (bytes)
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
18
Orden de los bytes
¿Qué dato está almacenado en la dirección 0x004?
0x0000015F
0x5F010000
Dos convenciones
Big Endian
Lille Endian
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
19
Orden de los bytes
Big Endian
Byte más significa=vos en las direcciones más bajas (PowerPC, sun, Internet)
Lille Endian Byte más significa=vos en las direcciones más altas (intel)
Ejemplo
Variable de 4 Bytes: 0x01234567 La dirección es 0x100.
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
20
Orden de los bytes
Ejemplo código “detector”
#include <stdio.h>
#include <stdlib.h>
int main() {
union {
short s;
char c[sizeof(short)];
} un;
un.s = 0x0102;
if(sizeof(short) == 2){
if(un.c[0] == 1 && un.c[1] == 2)
printf("big-endian\n");
else if(un.c[0] == 2 && un.c[1] == 1)
printf("little-endian\n");
else
printf("unknown\n");
}
else{
printf("sizeof(short) = %lu\n", sizeof(short));
}
return(EXIT_SUCCESS);
}
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
21
Orden de los bytes
Ejemplo
Complemento 2
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
22
Manipulación de datos en memoria
Escuela de Ingeniería Civil en Informática Universidad de Valparaíso, Chile http://informatica.uv.cl
23
Direcciones y punteros en C
Declaración de variables
int x,y;
&: dirección de un valor * : valor en una dirección
Encuentre dos localizaciones de memoria en las que almacenará 2 enteros (en 1 palabra cada uno)
Declaración de punteros
int *pa;
Declara que pa es un puntero a un dato que es un entero.
Asignación a un puntero
pa = &x;
Asigna a pa un puntero a la dirección en la que x está almacenada.
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
24
Direcciones y punteros en C
Aclaraciones
*pa : es el valor en la dirección de memoria dada por el valor de pa Ejemplos: int x,y; int *pa; x=100; pa = &x;
&: dirección de un valor * : valor en una dirección
y = *pa + 1 ¿cuánto vale y?
¿A qué es equivalente *(&x) ?
pa = pa +1;
Si ptr = 0x500, cuánto vale pa=pa+1? Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
25
Asignaciones en C
Estructura genérica
Lep-­‐Hand-­‐Side = Right-­‐Hand-­‐Side
LHS debe contener un localización de memoria (AKA variable)
RHS debe contener un valor. (Puede ser una dirección)
Ejemplo 1
x vale 0x0 y vale 0x3CD02700
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
26
Asignaciones en C
Estructura genérica
Lep-­‐Hand-­‐Side = Right-­‐Hand-­‐Side
LHS debe contener un localización de memoria (AKA variable)
RHS debe contener un valor. (Puede ser una dirección)
Ejemplo 1
x vale 0x0 y vale 0x3CD02700
int x,y; x = y + 3; Tome el valor de y, súmelo 3 y guárdelo en la dirección de memoria x
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
27
Asignaciones en C
Estructura genérica
Lep-­‐Hand-­‐Side = Right-­‐Hand-­‐Side
LHS debe contener un localización de memoria (AKA variable)
RHS debe contener un valor. (Puede ser una dirección)
Ejemplo 1
x vale 0x0 y vale 0x3CD02700
int x,y; x = y + 3; Tome el valor de y, súmelo 3 y guárdelo en la dirección de memoria x
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
28
Asignaciones en C
Estructura genérica
Lep-­‐Hand-­‐Side = Right-­‐Hand-­‐Side
LHS debe contener un localización de memoria (AKA variable)
RHS debe contener un valor. (Puede ser una dirección)
Ejemplo 2
x vale 0x0 y vale 0x3CD02700
int *x,y; x = &y + 3;
¿¿??
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
29
Asignaciones en C
Estructura genérica
Lep-­‐Hand-­‐Side = Right-­‐Hand-­‐Side
LHS debe contener un localización de memoria (AKA variable)
RHS debe contener un valor. (Puede ser una dirección)
Ejemplo 2
x vale 0x0 y vale 0x3CD02700
int *x,y; x = &y + 3;
&y = 0x0018 3 => 3*4 = 0x0C x = 0x000024 Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
30
Asignaciones en C
Estructura genérica
Lep-­‐Hand-­‐Side = Right-­‐Hand-­‐Side
LHS debe contener un localización de memoria (AKA variable)
RHS debe contener un valor. (Puede ser una dirección)
Ejemplo 3
x vale 0x0 y vale 0x3CD02700
int *x,y; x = &y + 3;
*x = y;
¿¿??
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
31
Asignaciones en C
Estructura genérica
Lep-­‐Hand-­‐Side = Right-­‐Hand-­‐Side
LHS debe contener un localización de memoria (AKA variable)
RHS debe contener un valor. (Puede ser una dirección)
Ejemplo 3
x vale 0x0 y vale 0x3CD02700
int *x,y; x = &y + 3;
*x = y;
copie el valor de y a la dirección que apunta x.
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
32
Asignaciones en C
Estructura genérica
Lep-­‐Hand-­‐Side = Right-­‐Hand-­‐Side
LHS debe contener un localización de memoria (AKA variable)
RHS debe contener un valor. (Puede ser una dirección)
Ejemplo 3
x vale 0x0 y vale 0x3CD02700
int *x,y; x = &y + 3;
*x = y;
copie el valor de y a la dirección que apunta x.
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
33
Arreglos en C
Representan localizaciones de memoria adyacentes que almacenan el mismo =po de dato.
int arreglo[128]
¿Cuántos bytes adyacentes =ene asignado la estructura arreglo?
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
34
Arreglos en C
Representan localizaciones de memoria adyacentes que almacenan el mismo =po de dato.
int arreglo[128]
Entonces:
a)
b)
Esta declaración asigna 512 bytes adyacentes en memoria.
Supongamos que arreglo está en la dirección 0x00FF0000
int* p_arreglo;
p_arreglo = arreglo;
c)
p_arreglo = &arreglo[0];
d) p_arreglo
p_arreglo = &arreglo[3];
= &arreglo[0] + 3;
¿p_arreglo?
&arreglo[i] es equivalente a (arreglo + i),
&arreglo[0] + i*sizeof(arreglo[0]);
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
35
Arreglos en C
Representan localizaciones de memoria adyacentes que almacenan el mismo =po de dato.
int arreglo[128]
Entonces:
a)
b)
Esta declaración asigna 512 bytes adyacentes en memoria.
Supongamos que arreglo está en la dirección 0x00FF0000
int* p_arreglo;
p_arreglo = arreglo;
c)
p_arreglo = &arreglo[0];
d) p_arreglo
p_arreglo = &arreglo[3];
= &arreglo[0] + 3;
¿p_arreglo?
&arreglo[i] es equivalente a (arreglo + i),
&arreglo[0] + i*sizeof(arreglo[0]);
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
36
Examinando Representaciones de Datos
Cualquier =po de dato puede ser tratado como un arreglo de bytes, casteándolo a char.
void show_bytes(char *start, int len) {
int i;
for (i = 0; i < len; i++)
printf("%p\t0x%.2x\n", start+i, *(start+i));
printf("\n");
}
void show_int (int x) {
show_bytes( (char *) &x, sizeof(int));
}
int a = 0x3039;
printf("int a = %d;\n”,a);
show_int(a);
Arquitectura de Computadores – Ingeniería Civil Informática informatica.uv.cl
37
Descargar