Está en la página 1de 8

Examen de Sistemas Operativos,

12 de febrero de 2007.

Cuarto curso de Ingeniera de Telecomunicacion, URJC.

Problema 1 (3 puntos)
Un famoso firma autografos en una tienda. El famoso solo puede firmar un autografo
a la vez. La sala donde se firma tiene un aforo limitado de 20 plazas. El famoso dice que
solo saldra a firmar autografos si en la sala hay mas de 5 personas. Si no hay al menos
5 personas en la sala, dormira hasta que las haya (en el momento que haya 4 personas
o menos se pondra a dormir). Las personas que quieran firmar y no puedan entrar a la
sala por rebasar el aforo permitido se iran sin poder recibir el autografo, las que reciban
el autografo abandonaran la sala.
El famoso y los fans se representan como procesos ligeros que pueden tener variables
compartidas. Se pide programar famoso y fans utilizando semaforos de modo que modelen
bien este escenario y que no haya problemas de concurrencia.

Soluci
on 1
Variables compartidas y semaforos:

int fansensala=0;
semaforo mutex=1;
/* para garantizar exclusion mutua en acceso a fansensala */
semaforo esperoFans=0;
/* para que los fans esperen hasta que les llega su turno */
semaforo esperoAutografo=20; /* para que el famoso espere al numero minimo de fans */
FAMOSO----------------------loop
wait(mutex);
if (fansensala<5)
signal(mutex);
wait(esperoFans);
else
firmoAutografo;
fansensala=fansensala-1;
signal(esperoAutografo);
signal(mutex);
endloop

/* libero al fan al que acabo de firmar el autogra

FAN------------------------/* observese que no hay loop, este es el pseudocodigo que ejecutara cada fan */
wait(mutex);
1

if (fansensala>=20)
signal(mutex);
me-voy-de-la-tienda;
else
fansensala=fansensala+1;
if (fansensala==5) signal(esperoAutografo);
/* despierta al famoso */
signal(mutex);
wait(esperoAutografo);
/* me pongo a la cola de los autografos */

Problema 2 (2 puntos)
Cierto sistema operativo posee un algoritmo de planificacion de CPU basado en colas
multinivel realimentadas (3 colas). Todos los trabajos cuando llegan al sistema son colocados en la cola-1 (la mas prioritaria), la cual se planifica de acuerdo a un algoritmo
Round-Robin con cuanto de tiempo igual a 2 ms. En esta cola, un trabajo permanecera si despues de ejecutar su primera rodaja de CPU, su siguiente rafaga es inferior a
2ms. En otro caso pasara a la cola-2 o la cola-3.
Pasara a la cola-2 si la siguiente rafaga esta entre 2 y 6ms, donde permanecera hasta
que termine su ejecucion y se planifica seg
un un Round Robin con cuanto igual a 3ms.
Pasara a la cola-3 (la menos prioritaria) si la siguiente rafaga es de mas de 6 ms, donde
permanecera hasta que termine su ejecucion y se planifica seg
un un FIFO.
La carga de trabajo es la siguiente. El proceso P1 empieza en el instante 0, ejecutara instrucciones durante 4ms, E/S durante 2ms, CPU durante 4ms, E/S durante 3ms y
finalmente 1ms de CPU. El proceso P2 empieza en el instante 5, ejecuta 4ms de CPU, E/S
durante 4ms y 2ms de CPU. El proceso P3 empieza en el instante 1 y ejecuta instrucciones
durante 10ms.
a) Calcula la evolucion temporal y estado de los procesos.
b) Cual es el tiempo medio de espera?

Soluci
on 2
La evolucion temporal se muestra en el siguiente cronograma, junto con la cola en la
que se encuentran los procesos en cada instante. El n
umero en la fila superior indica el
instante, en milisegundos, en el que comienza ese intervalo.

ms
P1

0
e
1

1
e
1

2
r
2

3
r
2

4
e
2

r
1

e
1

e
1

r
3

P2
P3

5
r
2
e
1
r
3

6
r
2
e
1
r
3

7
e
2
r
2
r
3

8
b
2
e
2
r
3

9
b
2
e
2
r
3

10
e
2
b
2
r
3

1
e
2
b
2
r
3

2
e
2
b
2
r
3

3
e
2
b
2
r
3

4
b
2
e
2
r
3

5
b
2
e
2
r
3

6
b
2

7
e
2

20

e
3

r
3

e
3

e
3

e
3

e
3

e
3

e
3

e
3

El Proceso1 ha tenido que esperar 4 milisegundos, 1ms el Proceso2 y 14ms el Proceso3.


La media son (4 + 1 + 14)/3 = 6,3 milisegundos.

Problema 3 (3 puntos)
Una maquina utiliza un sistema de gestion de memoria basado en paginacion bajo
demanda donde el tama
no de pagina es de 4KB y el procesador genera direcciones logicas
de 32bits. La memoria fsica direccionable en esta maquina es de 2GB. La MMU maneja
tablas de paginas de dos niveles, con 512 entradas en la tabla de primer nivel. El algoritmo
de sustitucion de paginas es el de la segunda oportunidad, con asignacion local. Responder
justificadamente las siguientes preguntas:
a) Nos disponemos a cargar un ejecutable cuyo codigo ocupa 399KB, los datos 801KB y
la pila 38KB. Que tama
no en bytes tendra como maximo la tabla de paginas de
dicho proceso? Y si la MMU usara tablas mononivel de paginas?
b) Indicar la evolucion de la tabla de paginas para un proceso al que el sistema operativo
ha asignado 3 marcos y cuya secuencia de acceso a memoria es la siguiente: 0
(instruccion), 16MB+1 (lectura dato), 1 (instruccion), 16MB+4KB (escritura dato),
2 (instruccion), 4KB+2 (instruccion), 16MB+1 (lectura dato), 4kB+3 (instruccion),
3 (instruccion). Indica los fallos de pagina y los accesos a disco necesarios. Se
nala
tambien en las tablas los bits de valido/invalido, modificacion y referencia.

Soluci
on 3
a) Un poco de aritmetica de tama
nos y direcciones para situarnos: las direcciones logicas
ocupan 32 bits, de los cuales 12 se dedican al desplazamiento dentro de las paginas
(puesto que estas son de 4KB). De los 20 bits restantes 9 son para indexar en la
tabla de primer nivel (puesto que tiene 512 entradas) y los 11 restantes son para
indexar en la tabla de segundo nivel que toque.
La tabla de primer nivel tiene 512 entradas. Cada entrada tiene la direccion fsica
de la tabla de segundo nivel correspondiente y alg
un bit de gestion. Por ejemplo,
imaginemos que solo necesita el bit de presente-ausente, de modo que ocupara 31
+ 1 bits, es decir, 4Bytes. En este caso, la tabla de primer nivel ocupara 512 * 4B
= 2KB.
Las tablas de segundo nivel tienen 2048 entradas cada una, puesto que se usan 11
bits para indexar dentro de ellas. Cada entrada de las tablas de segundo nivel ocupa,
pongamos, 5 bytes, ya que debe guardar la direccion fsica (=31 bits, puesto que
la memoria fsica son 2GB) y unos cuantos bits asociados a la pagina (proteccion,
modificacion, presente-ausente...). Por tanto, cada tabla de segundo nivel ocupa
2048 * 5B = 10KB.
Siendo las paginas de 4KB, el ejecutable necesitara: 100 paginas para el codigo, 201
paginas para los datos y 10 paginas para la pila. Es decir 311 paginas. Si da la mala
suerte de que cada una de esas paginas cae en una tabla de segundo nivel diferente,
3

entonces ese ejecutable necesitara 311 tablas de segundo nivel y 1 tabla de primer
nivel. En bytes: 311*10KB + 1 * 2KB.
Lo anterior ocurre solo en el caso peor, cuando todas las paginas estan muy dispersas
por el espacio logico de direcciones del proceso. Lo habitual es que todas las de
codigo esten juntas, al igual de las de datos, y las de la pila. En ese caso todas las
paginas de codigo pueden estar apuntadas desde la misma tabla de segundo nivel (se
necesitan 100 y las tablas de segundo nivel tienen 2048 entradas). De esta manera
es habitual que entonces se necesite una tabla de segundo nivel para las paginas de
codigo, otra para las de datos y otra para la pila. En bytes: 3*10KB + 1 * 2KB =
32 KB.
En el caso de manejar una tabla de un u
nico nivel, habra 220 entradas, cada una
de ellas con 5Bytes (31bits para almacenar la direccion fsica del marco, y algun bit
mas para la gestion). La tabla ocupara 5 MB.
b) Instante inicial Al ser una poltica bajo demanda, inicialmente la tabla de primer
nivel esta vaca, no se ha cargado ninguna pagina a
un, ni ninguna tabla de
segundo nivel (figura 1). Todos los bits de validez estan a 0.
0
1
2
3
...
511

#tablas 2do nivel


X
X
X
X
...
X

V
0
0
0
0
0

Figura 1: Tablas en el instante inicial


Instrucci
on en 0 Al acceder a la instruccion en la direccion logica 0, cae en la
primera pagina logica del proceso, que no ha sido cargada en memoria a
un.
Ocurre un fallo de pagina para traerla, y de paso se reserva la primera tabla
de segundo nivel, cuya entrada 0 contendra la direccion del marco fsico en el
que se ubica la pagina (por ejemplo el 33). (Figura 2). Por lo tanto 1 acceso
a disco. Observese que la tabla de primer nivel tiene 512 entradas y las de
segundo nivel 2048.
0
1
2
3
...
511

#tablas 2do nivel


343142 (=b)
X
X
X
...
X

V
1
0
0
0

0
1
...
2047

#marco
33
X
...
X

V
1
0

R
1
0

M
0
0

(b)

(a)
Figura 2: Tablas tras instruccion en 0

Lectura dato, 16MB+1 : como la pagina en la que cae esta direccion no esta cargada en memoria, provoca un fallo de pagina. Cae en la tercera entrada de la
tabla de primer nivel, y se necesita una nueva tabla de segundo nivel, que
se actualiza convenientemente. Justo en su primera entrada. Suponemos que
la pagina con ese dato se ubica finalmente en el marco 55, que estaba libre
(Figura 3). Es decir un nuevo acceso al disco, para leer esa pagina y cargarla
en el marco 55.
Cada entrada de la tabla de primer nivel tiene la direccion fsica de la tabla
de segundo nivel correspondiente. En cada tabla de segundo nivel hay 2048
entradas (=2Kentradas), cada entrada apunta a un marco de 4K, de modo
que los primeros 8MB de la memoria logica del proceso se apuntan desde la
primera tabla de segundo nivel, desde la direccion 8MB a la 16MB se apuntan
desde la segunda tabla de segundo nivel, y as sucesivamente.
0
1
2
3
...
511

tablas 2do nivel


343142 (=b)
X
540928 (=c)
X
...
X

V
1
0
1
0

0
1
...
2047

marco
33
X
...
X

V
1
0

R
1
0

M
0
0

0
1
...
2047

marco
55
X
...
X

(b)

V
1
0

R
1
0

M
0
0

(c)

(a)
Figura 3: Tablas tras lectura dato, 16MB+1
Instrucci
on, 1 La lectura de la instruccion en la direccion logica 1 no provoca
ning
un fallo de pagina, ni ning
un acceso al disco, pues esa pagina ya fue cargada
con anterioridad. Se lee esa instruccion de la memoria fsica sin problema. Los
bits de presencia y modificacion no se alteran.
Escritura dato, 16MB+4KB Esta escritura provoca un fallo de pagina. Como
a
un hay un marco libre, desencadena un u
nico acceso al disco, para traer
la nueva pagina. Se carga en el marco 59, por ejemplo, y se escribe el dato
requerido en la posicion oportuna dentro de esa pagina. El bit de modificacion
se pone a 1, para reflejar esa escritura. Con este se completan los tres marcos
que el Sistema Operativo asigna a este proceso, el 33, el 55 y el 59 (Figura 4).

0
1
2
3
...
511

tablas 2do nivel


343142 (=b)
X
540928 (=c)
X
...
X

V
1
0
1
0
0

0
1
...
2047

marco
33
X
...
X

V
1
0

R
1
0

M
0
0

0
1
...
2047

marco
55
59
...
X

(b)

(a)
Figura 4: Tablas tras escritura dato, 16MB+4KB

(c)

V
1
1

R
1
1

M
0
1

Instrucci
on, 2 Esta lectura de instruccion no provoca fallo de pagina, ni acceso
alguno al disco, puesto que ya esta cargada en memoria. Se lee sin problemas
la instruccion y se refresca si acaso el bit de referencia de ese marco.
Instrucci
on, 4KB+2 Esta lectura de instruccion provoca fallo de pagina. Como
los tres marcos asignados estan ocupados, hay que elegir vctima. El algoritmo
de segunda oportunidad parte del orden FIFO para elegir un vctima tentativa.
Inicialmente se elige como candidata la primera pagina logica (marco 33), pero
como tiene el bit de referencia a 1, se pone a 0 y se le perdona la vida,
pasando a explorar el siguiente candidato. Como el marco 55 y el 59 tienen el
bit de referencia a 1, a ellos tambien se les da una segunda oportunidad. De
modo que el turno vuelve al marco 33, que ahora tiene el bit de referencia a 0.
Se le elige como vctima y como esa pagina no ha sido modificada desde que
se trajo a memoria (tiene el bit de modificacion a 0), el fallo de pagina solo
desencadena un u
nico acceso al disco, para traerse la nueva pagina. Las tablas
quedan como indica la figura 5.
0
1
2
3
...
511

tablas 2do nivel


343142 (=b)
X
540928 (=c)
X
...
X

V
1
0
1
0

0
1
...
2047

marco
X
33
...
X

V
0
1

R
0
1

M
0
0

0
1
...
2047

(b)

marco
55
59
...
X

V
1
1

R
0
0

M
0
1

(c)

(a)
Figura 5: Tablas tras instruccion, 4KB+2
Lectura dato, 16MB+1 Esta lectura de instruccion no provoca fallo de pagina,
ni acceso alguno al disco, puesto que cae en una pagina ya cargada. S se
refresca el bit de referencia de la pagina ubicada en el marco 55 (figura 6).
0
1
2
3
...
511

tablas 2do nivel


343142 (=b)
X
540928 (=c)
X
...
X

V
1
0
1
0
0

0
1
...
2047

marco
X
33
...
X

V
0
1

R
0
1

M
0
0

0
1
...
2047

(b)

marco
55
59
...
X

V
1
1

R
1
0

M
0
1

(c)

(a)
Figura 6: Tablas tras lectura dato, 16MB+1
Instrucci
on, 4KB+3 Esta lectura de instruccion no provoca fallo de pagina ni
acceso alguno al disco duro. Se lee sin problema de la pagina almacenada en
el marco 33, se refresca el bit de referencia si acaso.
Instrucci
on, 3 Esta direccion cae en una pagina que ahora mismo no esta cargada
en memoria, hay fallo de pagina y hay que elegir vctima nuevamente, pues
6

los 3 marcos disponibles estan ocupados. El algoritmo de segunda oportunidad


parte del orden FIFO de paginas para considerar la primera vctima tentativa.
Ese orden FIFO corresponde a los marcos 55-59-33. Como la pagina alojada en
el marco 55 ha sido usada recientemente (como indica su bit de referencia a 1),
se le perdona la vida y se pasa al siguiente candidato. Ese es el 59, que como
tiene el bit de referencia a 0, se elige como vctima. Como ha sido modificada
desde su carga, hay que escribir esa pagina en disco antes de cargar en ese
mismo marco la nueva pagina. Por lo tanto este fallo de pagina desencadena
dos accesos al disco: un swap-out de la vctima y un swap-in de la nueva. Las
tablas de paginas quedan como muestra la figura 7.
0
1
2
3
...
511

tablas 2do nivel


343142 (=b)
X
540928 (=c)
X
...
X

V
1
0
1
0

0
1
...
2047

marco
59
33
...
X

V
1
1

R
1
1

M
0
0

0
1
...
2047

(b)

marco
55
X
...
X

V
1
0

R
1
0

M
0
0

(c)

(a)
Figura 7: Tablas tras instruccion, 3

Problema 4 (2 puntos)
Tenemos en el desvan un obsoleto disco duro de 8 MB que queremos recuperar para
un ordenador donde tenemos instalada una version muy antigua de Unix. El tama
no del
bloque es 1 KB, y el tama
no de la direccion de un bloque es 2 bytes. Cada i-nodo tiene
metainformacion sobre el fichero, 10 entradas de referencia directa a bloque, 4 indirectas
simples y 2 indirectas dobles.
a) Cual es el tama
no maximo efectivo de un archivo en este sistema de ficheros?
b) Cuando se abre el fichero /home/federico/practica.c por primera vez, cuantos accesos
a disco conlleva la llamada al sistema open() en este sistema de ficheros? Describe
para que es cada uno de ellos.

Soluci
on 4
a) En primer lugar, el enunciado nos dice que el tama
no de las direcciones a los bloque
de datos del disco ocupan 16 bits. Esto significa que se pueden direccionar como
maximo hasta 2**16 = 64K bloques de datos. Como los bloques son de 1KB, eso
implica que como maximo un fichero podra ser de 64k * 1KB = 64 MB.
En segundo lugar, el disco es de 8MB, por lo tanto no puede contener ficheros
mayores a 8MB.

Y en tercer lugar, tendremos que calcular si la estructura de nodo-i del sistema


de ficheros impone o no mas restricciones a este n
umero maximo. Veamos cuantos
bloques de datos pueden ser direccionados desde un nodo-i como el descrito en el
enunciado. Con los 10 enlaces directos podemos direccionar 10 bloques. Como los
bloques de datos ocupan 1koctetos y las direcciones ocupan 2 octectos, entonces
el n
umero de direciones de bloques de datos que caben en un bloque de datos
es de 512. Con el enlace de indireccion simple podemos direccionar 1 bloque que
contiene 512 direcciones a bloques. Con el enlace de indireccion doble podemos
direccionar 1 bloque que contendra 512 direcciones de bloques conteniendo cada
uno 512 direcciones a bloques de datos, esto es, 512*512=256K bloques de datos. Es
decir que los nodos-i nos permitiran direccionar (10 + 4 * 512 + 2 * 256K) bloques,
a 1KB de datos por bloque nos permitirian ficheros de unos 514MB+10KB.
De los tres maximos vistos, el menor es el tama
no del disco, y es el que pone lmite
al tama
no maximo de un fichero en este sistema: 8MB. Habra que descontar alg
un
bloque que se dedicara a almacenar su i-nodo.
b) La operacion del codigo open("/home/federico/practica.c",O\_RDWR) tiene como
objetivo traer a memoria principal el nodo-i del fichero "/home/federico/practica.c".
Si suponemos que el nodo-i del directorio "/" ya esta en memoria principal el n
umero de accesos al disco necesarios sera:
1 acceso para traer a memoria principal el primer bloque de datos del directorio
"/" cuya direccion buscaremos en el nodo-i del directorio "/".
1 acceso para traer a memoria principal el nodo-i del directorio "/home" cuya
direccion en disco buscaremos en el bloque de datos del directorio "/".
1 acceso para traer a memoria principal el primer bloque de datos del directrio
"/home" cuya direccion buscaremos en el nodo-i del directorio "/home".
1 acceso para traer a memoria principal el nodo-i del fichero "/home/federico"
cuya direccion en disco buscaremos en el bloque de datos del directorio "/home"
1 acceso para traer a memoria principal el primer bloque de datos del directrio "/home/federico" cuya direccion buscaremos en el nodo-i del directorio
"/home/federico".
1 acceso para traer a memoria principal el nodo-i del fichero "/home/federico/practica.c"
cuya direccion en disco buscaremos en el bloque de datos del directorio "/home/federico"
Por tanto el n
umero de accesos a disco sera 6.

También podría gustarte