Text section
Data section
BSS section
Sea un procesador Intel® IA-64 que proporciona un esquema de gestión de memoria que soporta paginación, con direccionamiento a nivel de byte y las siguientes características:
Con todo ello, se pide:
( a ) ¿Tamaño de la página?
( b ) ¿Cuántas páginas diferentes se pueden direccionar?
( c ) ¿Cuántos marcos de página se pueden direccionar?
( d ) ¿Tamaño en bytes del directorio de tablas de página?
( e ) Dada la dirección virtual 0x000056789ABC, indique los valores dedicados a selección de página y desplazamiento dentro de la página.
¿Tamaño de la página?
Hay 30 bits de offset: 1Gb
¿Cuántas páginas diferentes se pueden direccionar?
Hay 9+9 bits dedicados a la selección de página: 218 => 256K páginas
¿Cuántos marcos de página se pueden direccionar?
Hay 22 bits dedicados a la selección de marcos: 222 => 4MB marcos
¿Tamaño en bytes del directorio de tablas de página?
Hay 29 entradas, cada entrada ocupa 23 octetos. La tabla ocupa 212 bytes.
Dada la dirección virtual 0x000056789ABC, indique los valore dedicados a selección de página y desplazamiento dentro de la página.
El desplazamiento son los 30 bits más bajos. 5(0101b) 6789ABC
Página: 1
Desplazamiento: 16789ABC
Ejercicio 1 (20 puntos / 45 minutos)
Un sistema operativo dispone de memoria virtual paginada con las características siguientes:
Suponga ahora que se está ejecutando como único proceso el siguiente código:
Suponga también que el código cabe de forma completa en una única página virtual, por ejemplo, la 0x0000
que tiene asignado el marco 0x3000
y que los datos se ubican a partir de la página virtual 0x1000
en el orden en el que están declarados. Los elementos de los arrays X
y A
se almacenan de forma consecutiva. En el caso de A
se almacenan por filas y en orden creciente del número de fila. Los números enteros (uint32_t
) y en coma flotante (float
) ocupan 4 bytes.
Con todo ello se pide responder, de forma razonada, a las cuestiones siguientes:
Indique las páginas y direcciones virtuales de comienzo de los arrays A
, X
y la variable y
. Indique también las direcciones virtuales de los siguientes datos: A[0,2]
, A[2,0]
y X[128]
(5 puntos)
Comienzo A
:
Comienzo X
:
Localización y
:
A[0,2]
:
A[2,0]
:
X[128]
:
A
: 0x00005000
-> página 5, el vector X ocupa las 4 primeras páginas (1, 2, 3 y 4)X
: 0x00001000
-> página 1y
: 0x00009008
-> página 9, desplazamiento 8, “n” y “x” ocupan los 8 primerosA[0,2]
: 0x00005008
-> Estamos en el tercer elemento de la primera fila, cada uno ocupa 4 octetosA[2,0]
: 0x00007000
-> Cada fila ocupa una página, estamos en la terceraX[128]
: 0x00001200
-> Elemento 128 decimal en la primera página, cada elemento ocupa 4 posiciones0x4000
. Indique cuál será la serie de carga de páginas y los marcos asociados en memoria principal debido a la ejecución de dicho programa. Indique la cantidad de memoria no asignada debido a fragmentación interna. (5 puntos)El vector X
ocupa las páginas 1,2,3 y 4, el array bidimensional A
ocupa otras 4 páginas, 5, 6 ,7 y 8. Las variables n
, x
e y
estarían en la página 9
X
: Página 1 -> Marco 0x4000, Página 2 -> Marco 0x5000, Página 3 -> Marco 0x6000, Página 4 -> Marco 0x7000A
: Página 5 -> Marco 0x8000, Página 6 -> Marco 0x9000, Página 7 -> Marco 0xA000, Página 8 -> Marco 0xB000n
, x
e y
: Página 9 -> Marco 0xC000Las variables n
, x
e y
ocupan 4 octetos cada una, 12 en total. Una página tiene una capacidad de 4096 octetos por lo que se pierden por fragmentación interna 4096 - 12 = 4084 octetos.
En este caso, ¿Cuál sería la dirección real de comienzo de A[0,2]
, A[2,0]
, X[128]
. (2 puntos)
A[0,2]
:
A[2,0]
:
X[128]
:
A[0,2]
: 0x00008008 -> Estamos en el tercer elemento de la primera fila, cada uno ocupa 4 octetosA[2,0]
: 0x0000A000 -> Cada fila ocupa una página, estamos en la terceraX[128]
: 0x00004200 -> Elemento 128 decimal en la primera página, cada elemento ocupa 4 posicionesCadena de referencia | Inicio | ||||||||
---|---|---|---|---|---|---|---|---|---|
Marco 0 | |||||||||
Marco 1 | |||||||||
Marco 2 | |||||||||
Marco 3 | |||||||||
Page out |
El programa copia el contenido del vector X en A, distribuyéndolo en 4 filas de 1024 elementos. X y A ocupan ambas 4 páginas. Para hacer la copia necesitamos las páginas de código, la página de datos origen, la página de datos destino y la página de las variables de control. Inicialmente serían las páginas: 0, 1, 5 y 9.
Página | Estado | |
---|---|---|
Código | 0 | Presente |
X | 1 | Presente |
X | 2 | |
X | 3 | |
X | 4 | |
A | 5 | Presente |
A | 6 | |
A | 7 | |
A | 8 | |
Variables de control | 9 | Presente |
Al finalizar la copia de la primera página de X, se accederá a la segunda página de X que deberá copiarse en la página 6 de A.
La página 2 no está presente. Viendo el código y aplicando un reemplazo optimo sabemos que ya no se accederá a la página 1 de X por lo que podríamos marcarla como no presente y reusar el marco asignado. Otra alternativa sería reemplazar la página 5, ya que tampoco se usará más. Ahora se copiarían datos a la página 6, para ello procedemos al reemplazo con la 5 ( o la 1 si en el caso anterior hubiéramos usado la 5). El estado de la tabla sería:
Página | Estado | |
---|---|---|
Código | 0 | Presente |
X | 1 | |
X | 2 | Presente |
X | 3 | |
X | 4 | |
A | 5 | |
A | 6 | Presente |
A | 7 | |
A | 8 | |
Variables de control | 9 | Presente |
Este proceso se repite para las cuatro páginas que ocupan X y A
Una posible secuencia sería:
Cadena de referencia | Inicio | Página 2 | Página 6 | Página 3 | Página 7 | Página 4 | Página 8 | Final |
---|---|---|---|---|---|---|---|---|
Marco 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Marco 1 | 1 | 2 * | 2 | 3 * | 3 | 4 * | 4 | 4 |
Marco 2 | 9 | 9 | 9 | 9 | 9 | 9 | 9 | 9 |
Marco 3 | 5 | 5 | 6 * | 6 | 7 * | 7 | 8 * | 8 |
Page out | 1 | 5 | 2 | 6 | 3 | 7 |