PDF de programación - Hacia la memoria virtual

Imágen de pdf Hacia la memoria virtual

Hacia la memoria virtualgráfica de visualizaciones

Publicado el 31 de Julio del 2019
529 visualizaciones desde el 31 de Julio del 2019
94,4 KB
13 paginas
Creado hace 5a (16/05/2018)
Hacia la memoria

virtual

Recordatorio: fases de la compilación

int nota[128];
int media[128];
for (i=0;i<128;i++) {
if (i>7 &&i<64) {
nota[i] = media[i]/2;
}
else {
a = nota[i]*media[i]
}
}

Ensamblado




¿Cuántos bloques de cache ocupa el código?
¿Serán bloques consecutivos? ¿Habrá conflictos?

bucleFor: cmp r0,#128

.data
nota: .word 128
media: .word 128
.text
1
2
3
4
5
6
7
8
9
10
11
12
13
14

beq finBucle
cmp r0,#7
bne ramaElse
cmp r0,#64
bge ramaElse
ldr r1,[r4,r0,lsl#2]
lsr r1,r1,#1
str r1,[r5,r0,lsl#2]
b finIf

ramaElse: ldr r1,[r4,r0,lsl#2]

ldr r2,[r5,r0,lsl#2]
mul r3,r1,r2

finIf: add r0,r0,#1

15
16

b bucleFor

finBucle: b .

Enlazado

bucleFor: cmp r0,#128

.data
nota: .word 128
media: .word 128
.text
1
2
3
4
5
6
7
8
9
10
11
12
13
14

beq finBucle
cmp r0,#7
bne ramaElse
cmp r0,#64
bge ramaElse
ldr r1,[r4,r0,lsl#2]
lsr r1,r1,#1
str r1,[r5,r0,lsl#2]
b finIf

ramaElse: ldr r1,[r4,r0,lsl#2]

ldr r2,[r5,r0,lsl#2]
mul r3,r1,r2

finIf: add r0,r0,#1

15
16

b bucleFor

finBucle: b .

Enlazado

Fichero ELF

.data 0x000000000
.text 0x0C0000000
entry 0x0C0000000
Symbol table

0100100010001
0000100101010
….

Sistema real
• El ejecutable se almacenará en el disco

Memoria

CPU

PC

elf

Ejecución

• Escribir parte del ejecutable en memoria

• Al menos, las instrucciones y los datos globales.
• Además, crear espacio para la pila

• Escribir en PC la dirección de la primera instrucción

• El entry point especficiado en el fichero ELF

Memoria

Código
Datos
Pila

CPU

0x0c00000

PC

0

elf

• ¿En qué direcciones de memoria se escriben el código y los datos?

Sobre le ejecución….
• ¿ Y, si antes de que termine esa aplicación, ejecutamos otra?

• El proceso será similar: escribir en memoria las instrucciones y datos…
• ¿En qué direcciones escribiremos su código / datos?

• ¿Puede el compilador asegurar que generará direcciones diferentes
para cada posible aplicación que lancemos?
• ¿Y si ejecutamos dos veces la misma aplicación? (sin dejar que termine la
primera instancia)

Más problemas….
• ¿Y si nuestra aplicación es tan grande (muchas instrucciones, muchos
datos..) que no cabe en memoria principal?
• Recordar el maletín del laboratorio:

• 32 bits de direcciones
• Hasta 4GB de espacio direccionable
• Pero sólo unos pocos MB de memoria SDRAM real
• Y otros pocos Kbytes del espacio dedicados a dispositivos de E/S

¿Quién/cuándo asigna direcciones?

CPU

PC

Cargador

Memoria

datos

código

datos

código

Compilador
(+ enlazado)

App1.elf

código
datos

App2.elf

datos
código

¿Quién/cuándo asigna direcciones?
• ¿Quién?

• ¿Cuándo?

• Compilador/enlazador
• Cargador (parte del SO)

• En tiempo de
compilación/enlazado
• En el momento de la carga del
ejecutable a memoria
• Durante la ejecución

IDEA FUNDAMENTAL
• La aplicación/tarea y el procesador manejan direcciones virtuales
(también llamadas lógicas en algún contexto)
• Son las generadas por el compilador/enlazador

• Durante la ejecución la MMU (Memory Management Unit) traduce
las direcciones virtuales en direcciones físicas
• Las direcciones físicas son las que se envían al controlador de memoria para
solicitar el acceso a memoria principal

¿Con qué granularidad hacemos la
traducción?
• Por secciones

• se traduce la dirección de comienzo de .text, .data….
• Se mantiene la organización interna de cada sección (como la decidió el
compilador)
• A favor: la traducción de cada sección consiste únicamente en sumar una
constante
• En contra: no soluciona el problema de los mapas virtuales grandes.

¿Con qué granularidad hacemos la
traducción?
• Por palabras

• Cada palabra del espacio virtual se traduce a una nueva ubicación en el
espacio físico
• La implementación se haría mediante una tabla con tantas entradas como
palabras tenga nuestro espacio virtual

• Si el procesador es de 32 bits, nuestras aplicaciones pueden tener espacios virtuales de

• CADA aplicación (tarea) necesita una tabla con 230 entradas, cada una de ellas de (por

232 bytes  230 palabras

ejemplo) 4 bytes

• IMPOSIBLE en la práctica

¿Con qué granularidad hacemos la
traducción?
• Por conjuntos de palabras  página

• Cada página del espacio virtual se traduce a una nueva ubicación en el
espacio físico (un marco de página o página física)
• La implementación se haría mediante una tabla con tantas entradas como
páginas tenga nuestro espacio virtual

• Si el procesador es de 32 bits, nuestras aplicaciones pueden tener espacios virtuales de

232 bytes

• Tamaño de página típico: 4Kbytes
• CADA aplicación (tarea) necesita una tabla con 220 entradas, cada una de ellas de (por

ejemplo) 4 bytes

• Aún muy grande, pero veremos cómo hacerlo manejable
  • Links de descarga
http://lwp-l.com/pdf16398

Comentarios de: Hacia la memoria virtual (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad