Buenas vengo con otra duda.
Estoy haciendo un ejercicio de Memoria que dice asi:
- Segmentacion con paginacion bajo demanda
- Memoria fisica total de 16 mb, de los cuales solo hay disponibles 16384 bytes para 3 procesos
- La memoria disponible se divide en 16 marcos, exclusivos para los 3 procesos
- Cada proceso se divide en 8 segmentos como maximo y cada segmento en 8 paginas como maximo
- Asignacion variable con reemplazo global
Proceso 1
Segmento Pagina Marco Present
0 0 1 1
0 1 4 1
0 2 10 0
1 0 5 0
1 1 6 0
Proceso 2
1 0 7 1
1 1 2 1
2 0 6 1
2 1 4 0
2 2 4 0
Proceso 3
1 0 8 1
1 1 10 1
1 2 3 1
1 3 5 1
2 0 8 0
Funcion del SO que elige victimas:
int ya_fuiste()
{
static int victima = 13;
int pepito = 1;
if (pepito) victima = victima - 3;
if (victima < 0) victima = 10;
return (victima);
}
Traza de ejecucion de los procesos:
Proceso 1
P©
leer 02A7
leer 0554
leer 083A
leer 201E
V©
V(B)
P(D)
leer 6057
Proceso 2
P(B)
leer 47FF
leer 4BF8
V(B)
V(A)
P(E)
leer 2057
V(D)
Proceso 3
P(A)
leer 27F8
leer 42FE
V(A)
V(E)
Semaforos: A, B, D, E = 0 y C = 1
Tengo varias dudas:
son 3 bits para el n° de segmento, 3 bits para el n° de p seagina y 10 bits para el desplazamiento?
siendo asi:
la primera instruccion a leer seria 0000001010100111, donde el segmento seria 0 y la pagina 1? En este caso no hay reemplazo de pagina? Es esto correcto?
Siguiente con la ejecucion, en el momento que toque 6057:
seria 0110000001010111 segmento 3 pagina 0? En este caso esto no esta en la tabla, deberia usar la funcion ya fuiste?
Si es asi da 10, que es 10? el n° de marco? como reemplazo? como lo pongo en la tabla??
Lo que vengo planteando tiene algun sentido o estoy errado completamente?