Documente Academic
Documente Profesional
Documente Cultură
1 (1’50 puntos) Responda a estas dos cuestiones, empleando hasta 150 palabras para cada una:
a) ¿Qué es una rutina de servicio de interrupción y qué relación tiene con el sistema operativo?
Tal y como hemos visto en la asignatura, una R.S.I. es una sección de código máquina (rutina) que la
CPU invoca de forma automática cuando recibe una interrupción hardware o software. La relación de
la R.S.I. con el sistema operativo es que, estructuralmente, la R.S.I. habitualmente es parte integrante
del código del S.O.; y funcionalmente, es el mecanismo de activación del sistema operativo (las
interrupciones fuerzan la ejecución de las R.S.I.
2 (1,50 puntos) Queremos gestionar la cola de espera de una impresora que atiende las peticiones de
los trabajadores de una empresa. Hay unas 10 personas que diariamente imprimen unos 200
documentos en conjunto. Cada petición a la impresora consiste en un documento en formato PDF. Se
proponen cuatro posibles algoritmos para la gestión de esta cola: a) un FCFS; b) un Round Robin con
Q=10 segundos; c) un SJF no expulsivo; d) un SJF expulsivo. Para el SJF, se usará el número de páginas
del documento PDF como un estimador del tiempo de la tarea.
Realice una valoración comparativa de la adecuación de estos cuatro algoritmos al problema
planteado, indicando las ventajas e inconvenientes de cada uno.
En la respuesta a esta pregunta hay que resaltar varias características de los algoritmos propuestos.
Primero, que los SJF postergarán a los trabajos con más páginas y no tienen garantizado que se
impriman en un cierto tiempo. Segundo, que los algoritmos expulsivos (Round Robin y SJF expulsivo)
pueden retirar de la impresora a un documento que está a medio imprimir. Esto complica la
localización de los documentos, cuando los usuarios los quieran recoger.
Teniendo en cuenta las anteriores consideraciones, el Round Robin parece generar más
inconvenientes que beneficios, máxime cuando el algoritmo es más complejo que el FCFS (hay que
gestionar un temporizador, hay que guardar y recuperar el estado de la impresión que se deja a
medio…).
· Página 1 de 3
En el enunciado se dice que se imprimen unos 200 documentos al día. Si asumimos una jornada de
12 horas, nos sale en promedio un documento cada 4 minutos, así que no parece que en general haya
que preocuparse mucho por la cola de impresión. Por ello el FCFS puede resultar una solución
adecuada, ya que además es el algoritmo más simple y entendible por los usuarios. Se puede optar
por un SJF si en la empresa se dan con frecuencia conflictos cuando alguien quiere imprimir un
documento pequeño y urgente, pero se encuentra con que la impresora tiene en cola documentos muy
voluminosos.
NOTA: lo importante aquí no es responder exactamente en el sentido que hemos dado en los
anteriores párrafos, sino demostrar que se están aplicando los conocimientos sobre los algoritmos de
planificación a un caso real, usando además el sentido común (imprescindible para cualquier
profesional).
3 (1 punto) Hemos escrito un pequeño programa en C para que se ejecute en un sistema operativo
multihilo que corre sobre un ordenador tipo PC. El programa lanza exactamente DOS hilos. Ambos
hilos ejecutan la función un_hilo() que se muestra en el cuadro inferior. El código utiliza una variable
compartida «dentro», de la forma en la que se muestra en el cuadro. La variable dentro solamente se
manipula en el código que se muestra aquí (no se toca en ningún otro sitio).
// variable global
int dentro = 0;
¿Qué valores diferentes puede adquirir la variable «dentro» a lo largo de la vida del programa?
Justifique con claridad su respuesta.
Los dos hilos ejecutan continuamente las instrucciones de incremento y decremento de la variable
«dentro». Si solamente hubiera un hilo en ejecución, el valor de «dentro» iría fluctuando entre 0 y 1 de
forma alternativa. Al haber dos hilos concurrentes, los incrementos y decrementos se pueden
entrelazar. Es importante observar qué ocurre cuando los dos hilos quieren modificar simultáneamente
la variable «dentro». Caben dos escenarios: a) que las operaciones sean atómicas (un hilo completa
«dentro++» o «dentro--» sin que el otro hilo interfiera); o b) que las operaciones no sean atómicas y
que puedan interferir entre sí.
En el escenario (a), de operaciones atómicas, puede demostrarse que la variable «dentro» solamente
puede adquirir los valores 0, 1 y 2. Dejamos al estudiante la demostración, que puede hacerse
mostrando todas las posibles secuencias de ejecución de las dos instrucciones «dentro++» y «dentro--
» por parte de cada hilo.
En el escenario (b) la cosa es más complicada, porque puede darse el caso que hemos descrito al
inicio del Tema 3, cuando varios procesos modifican simultáneamente una variable compartida. Por
ejemplo, si dentro=0 y los dos hilos quieren incrementarla al mismo tiempo, puede ocurrir lo siguiente:
En este caso, la variable «dentro» pasa a valer 1, aunque se han intentado hacer dos incrementos,
que si no se hubieran entrelazado habrían dado el resultado final de 2. Como se «pierde» uno de los
Página 2 de 3
Nombre y apellidos DNI/NIE
incrementos, los dos decrementos posteriores pueden dejar en «dentro» el valor -1. Como este suceso
puede ocurrir repetidas veces, es fácil demostrar que «dentro» puede adquirir cualquier valor negativo.
Análogamente, este mismo escenario puede darse cuando los dos hilos intentan decrementar al
mismo tiempo la variable. De ahí se sigue que, a lo largo del tiempo, la variable «dentro» puede
adquirir cualquier valor entero.
Página 3 de 3
1 2 3 NOTA
Fundamentos de los Sistemas Operativos
Convocatoria ordinaria – segunda parte
28 de mayo de 2018
Nombre y apellidos DNI/NIE
SOLUCIONES
void Suministro( )
Las unidades de ejecución que simulan a los camiones cisterna invocan a esta función para
suministrar combustible a la gasolinera. La función provocará el bloqueo de la unidad de
ejecución que la invoca si no se puede suministrar combustible. Su retorno significa que se ha
producido el suministro de combustible.
· Página 1 de 6
Solución simple: No cumple el enunciado al 100%. No hay garantías de la preferencia de los camiones
cisterna (Se propone una calificación máxima de un 60% si se implementa una versión en esta línea).
// Variables globales
Mutex cerradura = new Mutex();
Condition cola_vehículo = new Condition(cerradura);
int litros_sut = 1000;
// Esta función la invocan los vehículos // Esta función la invocan los camiones
void Repostaje(int litros_repostaje) void Suministro( )
{ {
return;
}
Página 2 de 6
Nombre y apellidos DNI/NIE
Solución más elaborada garantizando la preferencia de los camiones cisterna una vez que dejan
constancia de su llegada.
// Variables globales
Mutex cerradura = new Mutex();
Condition cola_vehículo = new Condition(cerradura);
Condition cola_camion = new Condition(cerradura);
boolean vehiculo_repostando = false;
boolean hay_cam = false;
int litros_sut = 1000;
// Esta función la invocan los vehículos // Esta función la invocan los camiones
void Repostaje(int litros_repostaje) void Suministro( )
{ {
return; return;
} }
2 (2 puntos) Responda a las siguientes cuestiones, empleando hasta 150 palabras para cada una:
a) (0,5 puntos) ¿Qué diferencia hay entre realizar una operación Lock sobre un cerrojo y una
operación Wait sobre una variable condición?
Pauta de la respuesta à La operación Lock sobre un cerrojo dejará bloqueado al hilo o
proceso si este se encuentra adquirido por otro hilo o proceso. En caso contrario el hilo
adquiere el cerrojo y continua su ejecución. En cambio, en el caso de una variable condición, la
operación de Wait siempre provocará el bloqueo del hilo o proceso que la invoque.
b) (0,5 puntos) ¿Cuál es el motivo por el que hay que garantizar la atomicidad en la
implementación de las operaciones sobre cerrojos y variables condición?
Pauta de la respuesta à En su implementación se emplean variables compartidas, siendo por
tanto a su vez un problema de sección crítica. Si las operaciones no fueran atómicas, no habría
garantías de exclusión mutua en caso de que varios hilos o procesos compartan el mismo
cerrojo o variable condición.
Página 3 de 6
c) (0,5 puntos) Explique dos ventajas de un esquema de gestión de memoria paginada frente a un
esquema de gestión de memoria contigua.
Pauta de la respuesta à Elimina el problema de la fragmentación externa. Permite establecer
niveles de protección a nivel de página. Facilita la compartición de memoria entre varios
procesos.
d) (0,5 puntos) Alguien afirma que en un sistema de gestión memoria virtual paginada que
emplea como política de reemplazo de páginas el algoritmo LRU, para una cadena de
referencias a memoria dada, ha obtenido un número de fallos de página mayor que el obtenido
con el algoritmo de segunda oportunidad. ¿Es posible? Justifique su respuesta.
3 (4 puntos) Suponga un sistema informático con memoria virtual y con las siguientes características:
• Su bus de direcciones es de 64 bits.
• Posee instalados 4 Gbytes de memoria principal.
• El tiempo medio de acceso a la memoria principal es de 100 nseg.
• Su memoria es paginada de un único nivel, con páginas de 4 Kbytes.
• Posee una TLB, con una tasa promedio de acierto del 95%.
• El tiempo de acceso a la TLB es de 10 nseg.
• El espacio lógico máximo direccionable por un programa es de 32 Gbytes.
• Los módulos del sistema operativo cargados en memoria ocupan de manera contigua el primer
Gbyte de la memoria principal.
• Se ha observado que por término medio un fallo de página se produce cada 1000 accesos a
memoria.
• En caso de fallo de página, el sistema consume 20 mseg en resolver el fallo.
• La asignación de páginas a los procesos se realiza por demanda.
• El sistema operativo permite que como máximo 4 páginas de un proceso estén en memoria al
mismo tiempo, siendo la política de reemplazo de páginas local.
Responda a las siguientes cuestiones:
a. (0,25 puntos) ¿Cuál es la cantidad máxima de memoria principal que se puede instalar en el
sistema?
264 bytes
Página 4 de 6
Nombre y apellidos DNI/NIE
Sin embargo, cada entrada de la tabla de páginas ocupa 52 bits (número de bits necesarios
para direccionar un marco físico en un bus de 64 bits y tamaño de marco 212 bytes), es decir,
se necesitan como mínimo 7 bytes para cada entrada. Dado que el tamaño de página son 212
bytes y nos dicen que se trata de un sistema paginado de un nivel, el tamaño de la tabla de
páginas estará limitado por el tamaño de página, puesto que según el espacio lógico de
direcciones, el tamaño máximo de la tabla de páginas de un proceso sería 223 entradas x 7
bytes cada entrada = 223 x 7 bytes, tamaño muy superior al tamaño de página. Realmente el
número de entradas máximo de la tabla de página que caben en un marco físico son 212/7 =
585,14, es decir, 585 páginas, siendo 585 por tanto el número máximo de entradas de la tabla
de páginas de un proceso.
e. (0,5 puntos) En el caso de que sólo se encuentre el sistema operativo en memoria principal,
¿en qué estado estará la tabla de marcos de página?
Dado que nos indican que el SO ocupa el primer Gbyte de la memoria, ocupara 230 bytes / 212
= 218 marcos de página. Por tanto, las primeras 218 entradas de la tabla de marcos de página
indicará que dichos marcos están ocupados y el resto estarán marcados como libres (desde la
entrada 218 hasta la entrada 220-1).
Página 5 de 6
f. (1 puntos) ¿Cuál sería el tiempo medio efectivo de acceso a una dirección de memoria virtual?
Tiempo medio efectivo de acceso a memoria =
TTLB + PTLB×TRAM + (1-PTLB-PF) × (2×TRAM) + PF×TF
Donde:
Página 6 de 6
1 2 3 test extra NOTA
Fundamentos de los Sistemas Operativos
Examen parcial – 9 de abril de 2018
· Página 1 de 4
Página 2 de 4
Nombre y apellidos DNI/NIE
2 (1’50 puntos) Responda a estas dos cuestiones, empleando hasta 150 palabras para cada una:
a) ¿Cuál es la diferencia entre un sistema de tiempo compartido y un sistema de tiempo real?
Ponga algún ejemplo práctico y realista en el que un sistema de tiempo compartido no puede
resolver un requisito de tiempo real.
El objetivo central de un sistema de tiempo compartido es repartir la CPU entre los procesos de
manera que den una experiencia interactiva a los usuarios, mientras que un sistema de tiempo real
trata de garantizar que cada proceso finalice en un plazo de ejecución determinado. La cuestión es
que un sistema de tiempo compartido no está concebido para garantizar plazos de finalización: no da
prioridad a los procesos que tienen más urgencia por finalizar.
En esta pregunta se puede responder con ejemplos en los que un sistema de tiempo compartido
fracasa con una exigencia de tiempo real, si el sistema está muy cargado y un proceso de tiempo real
no disfruta de suficientes rodajas de CPU para poder acabar a tiempo. Por ejemplo en un Round
Robin con Q=1 milisegundo, una tarea que debe finalizar en 2 milisegundos se mete en la cola de
preparados junto con otros 5 procesos. Esta tarea no tiene garantizado finalizar en el plazo marcado.
Podríamos aplicar este ejemplo general a múltiples situaciones reales: reproducción de archivos
multimedia, ejecución de un proceso crítico en respuesta a un evento de E/S (ej. alarma contra
incendios, en un automóvil explosionar el airbag ante una deceleración brusca, en un portátil pasar a
modo hibernación cuando la batería alerta de que está a punto de agotarse, etc.).
b) Describa cómo puede protegerse la zona de memoria del núcleo mediante los registros base y
límite.
Aquí hay que explicar el mecanismo de los registros base y límite y cómo se puede aplicar para
delimitar la zona de memoria a la que puede acceder un proceso de usuario. En la respuesta hay que
dejar claro que la CPU distingue un modo privilegiado de un modo usuario en el cual se controlan los
accesos a memoria; que el control se realiza mediante hardware; y que el sistema debe dar valores a
estos registros para que se obligue al proceso de usuario a acceder a una zona determinada.
3 (1’25 puntos) Se propone el siguiente algoritmo para resolver el problema de sección crítica para
dos procesos:
// Variables compartidas
bool flag[2] = { false, false };
flag[0]=true; flag[1]=true;
while (flag[1]) { while (flag[0]) {
flag[0]=false; flag[1]=false;
sleep(1); sleep(1);
flag[0]=true; flag[1]=true;
} }
flag[0]=false; flag[1]=false;
} }
¿Se trata de una solución válida para el problema? ¿Por qué? Justifíquelo en relación con las
propiedades que debe cumplir un algoritmo válido para el problema de la sección crítica.
El algoritmo planteado asegura la exclusión mutua entre ambos procesos, ya que ninguno de los dos
avanza a su sección crítica si observa que el otro ha declarado su interés en entrar. Sin embargo,
cuando los dos procesos quieren entrar al mismo tiempo, puede ocurrir que ambos se queden
atascados en un bucle infinito (livelock), poniendo a FALSE y TRUE sus respectivos flags y
observándose mutuamente como interesados en entrar en la sección crítica. Por tanto no se garantiza
el progreso del algoritmo, aunque la situación descrita es poco probable: en un sistema real, lo más
probable es que alguno de los dos procesos acabe entrando.
Por último, hay que destacar que el algoritmo no garantiza la espera limitada de un proceso.
Supongamos que el proceso 0 está dentro de la sección crítica y que el proceso 1 quiere entrar. El
proceso 1 se mantiene en el bucle de espera. Supongamos que mientras el proceso 1 está en el
«sleep», con su flag a FALSE, el proceso 0 abandona la sección crítica y vuelve de inmediato a
solicitar entrar en sección crítica: podrá entrar, ya que flag[1] está a FALSE. Si el proceso 1 se
despierta y vuelve a evaluar flag[0], observará que está a TRUE y volverá a esperar. Esta situación,
teóricamente, se puede dar una y otra vez, sin garantía de que el proceso 1 vuelva a entrar en sección
crítica.
El algoritmo se podría mejorar de muchas formas, por ejemplo obligando a que el sleep() fuera
aleatorio (disminuiría la probabilidad de un atasco eterno o livelock), o bien utilizando una variable que
deshaga el empate si los dos procesos están interesados en entrar (como ocurre en el algoritmo de
Peterson), etc.
Página 4 de 4
1 2 3 4 test extra NOTA
1 (1’25 puntos) A un planificador de CPU llegan tres procesos, proceso llegada duración
según el cuadro adjunto. Aplica las dos políticas SRTF (SJF expulsivo) Pa 0 10
y RR (Q=3) y, para cada una de ellas, obtén lo siguiente: Pb 2 6
• Diagrama de Gantt o similar con la planificación. Pc 5 2
• Tiempo de espera y de retorno de cada uno de los procesos.
• Número de cambios de contexto realizados durante la planificación.
Solución en la figura inferior:
· Página 1 de 6
3 (1 punto) Muchos informáticos sostienen que uno de los beneficios del sistema operativo es que los
desarrolladores de aplicaciones no tienen que estar modificando su software cada vez que hay un
cambio en las tecnologías hardware, especialmente cuando aparece una nueva tecnología de
almacenamiento (ej. discos SSD). Elabora unos argumentos que apoyen esa afirmación. No uses más
de 150 palabras en tu exposición.
Pregunta de aplicación de conceptos trabajados en el Tema 1. Imprescindible mencionar que el SO
actúa como intermediario entre las aplicaciones y el hardware de E/S a través de una interfaz de
programación (API). Esta API se diseña de manera que sea independiente del dispositivo,
abstrayendo detalles que puedan variar según las características del hardware. Si se puede
desarrollar un manejador interno del SO que adapte el nuevo hardware a la misma API, las
aplicaciones no necesitan ninguna modificación, ya que la API del SO permanece inalterada. Sólo hay
que actualizar el SO.
4 (1’25 puntos) En una tienda de pájaros tenemos una jaula con canarios que revolotean en su
interior. Regularmente cada canario quiere comer de un comedero de alpiste, en el que solamente
puede haber tres pájaros al mismo tiempo. Si un pájaro quiere comer y el comedero está lleno, se
debe esperar a que haya hueco. Por su parte, el encargado de la tienda de vez en cuando repone el
alpiste del comedero. Mientras el encargado está reponiendo, ningún pájaro puede estar comiendo: el
encargado debe esperar a que se quede vacío el comedero y, una vez vacío, ningún pájaro entra a
comer hasta que el encargado termina de reponer.
El algoritmo general de un pajarito y del encargado se muestra en el siguiente cuadro.
TAREA. Tienes que arreglar el algoritmo para que los pajaritos y el encargado se sincronicen entre
todos ellos conforme al enunciado expuesto. Puedes utilizar variables de estado y operaciones básicas
de sincronización (entradas y salidas en sección crítica, colas de espera, etc.). Si ya conoces el uso de
semáforos, puedes resolverlo con ellos si lo prefieres (no habrá diferencia en la calificación de la
pregunta).
NOTA. Escribe tu intento aunque no tengas la solución completa y perfecta para todos los escenarios.
En ese caso, describe las limitaciones que sepas que tiene tu propuesta.
Página 2 de 6
Nombre y apellidos DNI/NIE
Este algoritmo en realidad es una variante simplificada del «problema de los lectores y escritores», con
un máximo de tres lectores (los pájaros) y un solo escritor (el encargado de la tienda). Cualquier
solución al problema de los lectores y escritores puede adaptarse con facilidad a este ejercicio.
Variables compartidas:
int comiendo = 0; // cantidad de pájaros que están comiendo
bool reponiendo = false; // ¿quiere el encargado reponer?
ENTRARSC();
comiendo--;
DESPERTAR();
SALIRSC();
}
}
Es importante dejar la operación COMER() fuera de una sección crítica. Si la envolvemos dentro de
una S.C., no se permitirá a más de un pájaro estar en el comedero y por tanto no se cumpliría
eficazmente la característica de que puedan comer hasta tres juntos.
Ojo, en la anterior solución no hace falta usar la variable reponiendo, ya que el encargado mientras
está reponiendo alpiste retiene el uso de la sección crítica e impide a los pájaros usar el comedero.
Pero esta variable impide el bloqueo indefinido del encargado en caso de que continuamente lleguen
pájaros: los pájaros que intenten comer después de que reponiendo==true se quedarán bloqueados
en el bucle while.
Página 3 de 6
Segunda versión, con semáforos
El código equivalente al anterior algoritmo, pero utilizando semáforos, podría ser así:
Semáforo mutex = 1;
Semáforo cola = 0;
int esperando = 0;
void bloquear() {
esperando++;
V(mutex);
P(cola);
P(mutex);
}
void despertar() {
while (esperando>0) {
esperando--;
V(cola);
}
}
P(mutex);
comiendo--;
despertar();
V(mutex);
}
}
Página 4 de 6
Nombre y apellidos DNI/NIE
El segundo algoritmo con semáforos se puede optimizar para situar en colas distintas el
bloqueo/desbloqueo del encargado y los pajaritos. La optimización lleva a un código más difícil de
entender y verificar. El siguiente código se ofrece solamente como referencia para el estudio; no es un
código que se pueda elaborar fácilmente durante la realización de un examen.
Página 5 de 6
Cuarta solución con semáforos, compacta
Variable compartida:
Semáforo comedero = 3;
En este algoritmo, el encargado acapara todos los créditos para poder usar el comedero, con lo cual
impide que mientras repone alpiste pueda haber algún pájaro. Si el encargado se encuentra con uno o
varios pájaros comiendo, se quedará esperando a que los pájaros liberen sus semáforos.
Eso sí, este algoritmo no resuelve el problema de que continuamente lleguen pajaritos al comedero y
con ello impidan trabajar al encargado (los otros algoritmos sí lo resuelven, por medio de la variable
reponiendo).
Página 6 de 6
1 2 3 test extra NOTA
1 (1’25 puntos) Responde a cada apartado. Usa como máximo 100 palabras por respuesta.
• En la planificación de procesos, ¿cuál es el problema que tienen los algoritmos basados en
prioridades? ¿Cómo se puede abordar ese problema?
Pauta de la respuesta à Riesgo de inanición o postergación indefinida de los procesos con baja
prioridad. Se soluciona con envejecimiento (aging).
• ¿Qué beneficios aportan los métodos de planificación multicola respecto a los de una sola
cola?
Pauta de la respuesta à Podemos dar un tratamiento diferente a procesos de distinto tipo, ej.
interactivos, por lotes, de tiempo real, de mucha prioridad, etc. Cada uno con una política de
planificación distinta.
2 (1’50 puntos) Explica cada uno de estos aspectos sobre la técnica de multiprogramación.
Desarrolla cada apartado en menos de 150 palabras.
• Cómo consiguió la multiprogramación aumentar el rendimiento de los sistemas con un solo
procesador.
Pauta de la respuesta à evitando que la CPU se quede ociosa si el proceso en curso queda
bloqueado; se aprovecha y se ejecutan fragmentos de procesos que estén dispuestos a ejecutar
instrucciones; se solapa la ejecución de instrucciones en CPU con la realización de operaciones de
E/S
3 (1’25 puntos) En una carretera tenemos un puente controlado por un sistema de sensores. Cada
sensor se encarga del extremo de un carril y ejecuta un proceso independiente que detecta cuándo
entra o sale un vehículo del puente. Cada evento modifica un contador compartido por todos los
sensores. En total hay seis sensores (tres carriles, un sensor en cada extremo). Además de los
procesos sensores, un proceso monitor se encarga de consultar periódicamente el contador y alerta
si se alcanza el límite máximo de vehículos dentro del puente.
El sistema software se implementa en lenguaje C. El código sigue este esquema (la variable
“contador” está inicializada a cero):
· Página 1 de 2
Sensor de entrada Sensor de salida Monitor
while (true) { while (true) { while (true) {
... esperar una entrada ... esperar una salida sleep(1);
contador++; contador--; if (contador>MAX) {
} } alerta();
}
}
El sistema se instala y se observa que funciona bien durante un tiempo, pero al cabo de unas horas
el monitor no detecta cuándo se alcanza el límite máximo. Haciendo trazas se observa que la
variable “contador” acaba adquiriendo valores incorrectos. Incluso a veces se observan valores que
no deberían darse nunca, por ejemplo un -1. Los dispositivos electrónicos se han comprobado y
estos sí que funcionan perfectamente, no parece haber errores físicos de lectura.
¿Qué explicación puede tener este comportamiento del algoritmo? ¿Por qué el contador adquiere
valores incorrectos? ¿Hay alguna solución algorítmica al problema?
El problema viene de las modificaciones concurrentes a la variable contador, que no están
protegidas para que se ejecuten de forma atómica. Si dos procesos incrementan o decrementan al
mismo tiempo contador, se puede perder una de las dos operaciones.
Existen formas algorítmicas de remediar este problema, y es conseguir que las modificaciones a
contador sean atómicas, lo cual se puede conseguir con cualquier algoritmo válido de sección
crítica. O con un semáforo tipo mutex, si disponemos de esa herramienta.
(extra) También se puede atenuar el problema si cada sensor utiliza una variable propia, ej.
entrada1, entrada2, entrada3, salida1, salida2, salida3. Y el monitor sume y reste los valores de
esas seis variables para ofrecer el balance general de entradas y salidas. El problema de esta
técnica es que con el tiempo los contadores se saldrían del rango de valores del tipo manejado.
Además, no soluciona del todo el problema, porque como el monitor no lee todos los valores al
mismo tiempo, la suma puede dar un resultado que no se corresponda con la realidad.
Página 2 de 2
1 2 3 test extra NOTA
1 (1’25 puntos) Un sistema de archivos trabaja con bloques de datos de 1KiB y enlaces de 16 bits.
Este sistema emplea una política de asignación de espacio indexada simple, con un único bloque de
datos para los índices.
¿Cuál es el tamaño máximo que puede llegar a tener un archivo en este sistema?
El tamaño máximo está condicionado por el número de enlaces que caben en el bloque de índices.
Como el bloque es de 1KiB y los enlaces son de 2 bytes (16 bits), en el bloque caben 1024/2 = 512
enlaces. Cada enlace apunta a un bloque de 1KiB, así que el tamaño total del archivo con 512
enlaces es de 512×1024 bytes = 512 KiB.
Se desea que el sistema admita archivos más grandes y con este fin se proponen estas dos
intervenciones: a) Duplicar el tamaño de los bloques de datos (pasar a 2KiB); b) permitir que el
bloque de índices ocupe dos bloques de datos. ¿Cuál de las dos intervenciones elegirías tú y por
qué?
Si duplicamos el tamaño del bloque de datos (2048 bytes), en el bloque de índices cabrán el doble
de enlaces: 1024 enlaces de 2 bytes. Por tanto un archivo puede llegar a tener 1024 bloques de
2048 bytes, que son 1024×2048 = 210×211 = 221 = 2 MiB.
Por su parte, si permitimos que el bloque de índices ocupe dos bloques de datos, duplicaremos la
cantidad de enlaces que puede almacenar, o sea que también pasamos a 1024 enlaces. Como los
bloques siguen siendo de 1 KiB, el tamaño máximo del archivo será de 1024×1 KiB = 1 MiB.
Observando cómo resultan los tamaños máximos de ambas intervenciones, está claro que la
primera opción (duplicar el tamaño del bloque de datos) aumenta mucho más el límite.
2 (1’5 puntos) En un sistema de memoria virtual paginada tenemos esta secuencia de referencias a
páginas virtuales de un proceso: 1, 2, 3, 4, 2, 5, 1, 3, 4, 5, 3, 1, 5. El proceso tiene tres marcos
asignados, inicialmente vacíos. Planifica esta secuencia con estos dos algoritmos: óptimo (OPT) y
segunda oportunidad. Indica en cada caso cuándo se produce un fallo de página y qué página se
reemplaza.
Esta es la planificación según el algoritmo óptimo.
acceso 1 2 3 4 2 5 1 3 4 5 3 1 5
marcos 1-- 12- 123 124 124 154 154 354 354 354 354 154 154
víctima 3 2 1 3/4
fallo F F F F F F F
· Página 1 de 3
Esta es la planificación según la «segunda oportunidad».
acceso 1 2 3 4 2 5 1 3 4 5 3 1 5
marcos »1+ »1+ »1+ 4+ 4+ »4+ 4- 3+ »3+ 3- 3+ »3- »3-
2+ 2+ »2- »2+ 2- 1+ »1+ 1- 5+ 5+ 5- 5+
3+ 3- 3- 5+ »5+ 5- 4+ »4+ »4+ 1+ 1+
víctima 1 3 2 4 5 1 4
fallo F F F F F F F F F F
3 (1’25 puntos) Tenemos un baño público en el que cabe un número ilimitado de personas. Cada
cierto tiempo un empleado realiza la limpieza del baño, actuando de la siguiente forma: pone un
letrero para impedir que entren personas al baño, se espera a que quienes están dentro acaben y
salgan, y una vez que el recinto está vacío, realiza la limpieza. Cuando termina de limpiar, retira el
letrero y se marcha, quedando el baño libre para que entren nuevos usuarios.
Se quiere implementar un software que simule este baño, con hilos que implementan a las
personas que interactúan con él. A continuación se muestran los bocetos de las funciones que
ejecutarán los hilos usuarios y el hilo limpiador:
TAREA. Tienes que añadir al boceto de código las acciones de sincronización necesarias para
cumplir con las especificaciones descritas arriba. Utiliza semáforos como herramienta de
sincronización.
NOTA. Si te cuesta implementar el problema con semáforos, utiliza las herramientas de “esperar” y
“despertar” que vimos en clase, o al menos expresa algorítmicamente cómo hay que sincronizar los
procesos. Así podrás tener algo de puntuación en este ejercicio.
El sistema planteado no es más que una variante del problema de los lectores y escritores. Es
una variante con prioridad a los escritores (el limpiador) y con la característica de que solamente
hay un proceso escritor. Por tanto, puede servir como solución cualquier algoritmo que resuelva el
segundo problema de los lectores y escritores, o en general que dé prioridad a los escritores.
Aquí se muestra una posible implementación, adaptada a las especificaciones del enunciado. La
solución utiliza un mutex y dos colas de espera: una para el limpiador y otra para los usuarios que
se encuentren con que se está limpiando el baño.
Página 2 de 3
Nombre y apellidos DNI/NIE
int usuarios_esperando = 0;
int usuarios_dentro = 0;
bool letrero_puesto = false;
Semáforo mutex = 1;
Semáforo usuarios = 0;
Semáforo limpiador = 0;
void usar_baño() {
P(mutex);
// Bloquearse si el limpiador ha puesto
// el letrero
while (letrero_puesto) {
usuarios_esperando++;
V(mutex);
P(usuarios);
P(mutex);
}
usuarios_dentro++;
V(mutex);
P(mutex);
usuarios_dentro--;
// Si es el ultimo usuario en salir
// y el letrero está puesto, avisa al limpiador
if (usuarios_dentro==0 and letrero_puesto) {
V(limpiador);
}
V(mutex);
}
void limpiar_baño() {
P(mutex);
letrero_puesto = true;
// Bloquearse mientras haya usuarios dentro del baño
if (usuarios_dentro>0) {
V(mutex);
P(limpiador);
P(mutex);
}
letrero_puesto = false;
// Si hay usuarios esperando, hay que desbloquearlos
while (usuarios_esperando>0) {
usuarios_esperando--;
V(usuarios);
}
V(mutex);
}
Página 3 de 3
1 2 3 4 test extra NOTA
· Página 1 de 2
4 (1’25 puntos) Estamos desarrollando una void entra_grupo (int npersonas) {
aplicación para gestionar el acceso a un parque … si se supera la capacidad del parque,
natural, en el que solo puede haber dejar al hilo esperando
simultáneamente 200 visitantes. El acceso se hace … aumentar el número de personas que
por grupos de personas. La API para controlar el hay en el parque
acceso define dos operaciones: entra_grupo(N) y }
sale_grupo(N), respectivamente para registrar la void sale_grupo (int npersonas) {
entrada o la salida de un grupo de N personas. … reducir el número de personas que hay
Estas operaciones pueden ser invocadas por hilos en el parque
concurrentes. Se quiere grantizar un … desbloquear otros grupos en espera,
comportamiento seguro, de manera que un hilo si es necesario
que trate de hacer entrar un número de personas }
que desbordaría la capacidad del parque, tendrá
que quedar en espera hasta que haya hueco suficiente. La operación de salir se ejecutará siempre sin
bloqueos (salvo que sea un error, p.ej. dejar el parque con una cantidad negativa de personas).
TAREA. Debes implementar mediante semáforos las acciones de sincronización de estas dos
operaciones. Introduzca las variables auxiliares que considere necesarias. NO hay que implementar el
sistema completo, ni los hilos: sólo el código de sincronización de estas dos operaciones. El algoritmo
debe estar libre de interbloqueos, pero no tienes que remediar la posible inanición de grupos grandes.
Página 2 de 2
1 2 3 4 test extra NOTA
1 (1’25 puntos) El algoritmo Round-Robin para la planificación de CPU surgió cuando los
computadores solamente disponían de un procesador. En la actualidad, los multiprocesadores son
cada vez más baratos y es normal que la CPU de un PC o un móvil cuente con varios núcleos. Si lo
habitual es que un computador actual tenga ocho o más procesadores, ¿sigue teniendo sentido utilizar
el algoritmo Round-Robin?
2 (1 punto) Has sido contratado por la Operating Systems Technology Innovation Agency (O.S.T.I.A.),
para asesorarle sobre su último proyecto, que consiste en un sistema operativo que soporte al mismo
tiempo las API de Windows y de Linux. La O.S.T.I.A. se debate entre dos arquitecturas (ver la figura). En
una propuesta, se dispone de dos módulos independientes para Windows y Linux, cada uno de los
cuales accede directamente a los recursos del hardware. La otra propuesta incluye una capa de
software básica, que está en contacto directo con el hardware y que atiende las peticiones de los
subsistemas Windows y Linux. Hay discusiones sobre los beneficios e inconvenientes de cada una de
las dos aproximaciones. Ayuda a la O.S.T.I.A. y aporta tu opinión experta: ¿qué arquitectura te parece
más conveniente? ¿Qué ventajas e inconvenientes le ves a cada una?
Subsistema Subsistema
Subsistema Subsistema Windows Linux
Windows Linux
Subsistema común
Hardware Hardware
· Página 1 de 1
1 2 test extra NOTA
1 (2 puntos) Cuando un programador en C utiliza llamadas al sistema, estas tienen el mismo aspecto
que cualquier otra función de biblioteca, como en este ejemplo de Linux:
#include <math.h>
#include <stdio.h>
#include <unistd.h>
main() {
double raizDeDos = sqrt(2.0); // biblioteca math.h
printf (“la raíz cuadrada de 2 es %lf\n”, raizDeDos); // biblioteca stdio.h
int fd = open(“mifichero.txt”,O_RDWR); // Llamadas al sistema
write(fd, “hola”, 4);
close(fd);
}
La apariencia de las llamadas al sistema es la misma, pero hay grandes diferencias en la forma como se
ejecutan internamente. ¿Puedes explicar las peculiaridades que tiene la ejecución de una llamada al
sistema, comparada con la ejecución de una función corriente de biblioteca?
Para probar el algoritmo, la O.S.T.I.A. ha preparado una carga de trabajo como la que se muestra a
continuación (los tiempos están en milisegundos).
a) Simular la ejecución del nuevo algoritmo con esta carga de trabajo, así como con un Round
Robin convencional con Q=2 milisegundos. Mostrar los diagramas de Gantt correspondientes.
b) Comparar los resultados de los dos algoritmos. ¿Qué diferencias se observan?
c) Hacer una valoración general del nuevo algoritmo propuesto. ¿Crees que merece la pena?
¿Aporta algo interesante? ¿Tiene algún inconveniente?
· Página 1 de 1
1 2 test extra NOTA
1 (1’5 puntos) Responde a las siguientes cuestiones de forma breve y justificando adecuadamente tus
argumentos.
a) ¿Por qué el tamaño de página debe ser siempre una potencia de 2?
b) En un sistema multiprogramado, cuando ocurre un cambio de contexto lo normal es limpiar el
contenido actual de la TLB. ¿Cuál puede ser el motivo?
2 (2’5 puntos) Tenemos una cuenta bancaria compartida, sobre la que hay procesos que ingresan y
retiran dinero, mediante estas tres operaciones:
La cuenta tiene un saldo inicial de E euros. Si un proceso intenta retirar_efectivo() y no hay saldo
suficiente para sacar el dinero deseado, el proceso se quedará bloqueado hasta que haya saldo
suficiente. La operación cargar_recibo(), al contrario que la anterior, nunca bloquea al proceso, incluso
si la cuenta se queda en números rojos.
Los accesos a la cuenta deben hacerse en exclusión mutua para que no se corrompa el valor del saldo.
TAREA: escribir el código de estas tres operaciones, resolviendo mediante semáforos la sincronización
aquí planteada.
· Página 1 de 1
1 2 test extra NOTA
1 (1’5 puntos) Responde a las siguientes cuestiones de forma breve y justificando adecuadamente tus
argumentos.
a) ¿Por qué el tamaño de página debe ser siempre una potencia de 2?
b) ¿Una dirección física puede corresponderse simultáneamente con varias direcciones lógicas?
Pon ejemplos.
2 (2’5 puntos) Tenemos un depósito de agua compartido por varios procesos que meten y extraen
líquido, mediante estas tres operaciones:
TAREA: escribir el código de estas tres operaciones, resolviendo mediante semáforos la sincronización
aquí planteada.
· Página 1 de 1
1 2 3 4 NOTA
2 (2 puntos) A un computador con un único procesador llega la carga de trabajo que se muestra
en la tabla. Planifica esta carga de trabajo con estos tres algoritmos: Round Robin (Q=2), SJF y SJF
expulsivo (SRTF). Para cada algoritmo, obtén el diagrama de Gantt, el tiempo medio de espera, el
número de cambios de contexto y el rendimiento de la CPU.
3 (2 puntos) Tenemos una arquitectura de memoria que utiliza paginación de un solo nivel, con
las siguientes características: direcciones lógicas de 24 bits, direcciones físicas de 32 bits, tamaño
de página de 1KiB y tamaño de cada entrada en la tabla de páginas igual a 3 bytes.
(1p) En este sistema, ¿cuántos bytes ocupará la tabla de páginas de un proceso que maneja un
espacio lógico de 100 MiB? ¿Cuántos marcos de página podrá ocupar ese mismo proceso?
(0,75p) Este mismo sistema utiliza una TLB, para la que se observa una tasa de aciertos del 95%. Si
el tiempo de acceso a la TLB es de 2 nanosegundos y el tiempo medio de acceso a la RAM es de 40
nanosegundos, ¿cuál será el tiempo medio efectivo de acceso a un dato en memoria?
(0,25p) En este mismo sistema, se observa que hay 3 procesos en ejecución: uno maneja un
espacio lógico de 100 MiB, otro maneja 200 MiB y el tercero maneja 50MiB. Se observa que el
espacio físico que consumen es de 275MiB, bastante menos que la suma de los tres espacios
lógicos. Teniendo en cuenta que el sistema NO utiliza memoria virtual, ¿a qué puede ser debida
esta diferencia de tamaños?
· Página 1 de 2
NOTA: puedes escribir tu solución en seudocódigo, no hace falta que tu algoritmo sea compilable.
1 struct Documento {
2 // ... campos con el contenido del documento
3 };
4
5 // función para imprimir directamente sobre la impresora
6 // (comprobado que funciona correctamente)
7 void imprime_documento(struct Documento* doc);
8
9 // funciones auxiliaries para manejar una cola FIFO
10 // (también funcionan correctamente)
11 void cola_añade (struct Documento* doc);
12 struct Documento* cola_extrae();
13
14 int peticiones_en_cola = 0;
15
16 // rutina del servidor de impresión
17 void servidor_impresora() {
18 while (true) {
19 while ( peticiones_en_cola == 0 ) {}
20 struct Documento* doc = cola_extrae();
21 imprime_documento(doc);
22 peticiones_en_cola--;
23 }
24 }
25
26 // función para que un proceso envíe
27 // un documento a la cola de impresión
28 void envía_cola_impresión (struct Documento* doc) {
29 peticiones_en_cola++;
30 cola_añade (doc);
31 }
Página 2 de 2
1 2 3 test extra NOTA
· Página 1 de 5
2 (1 punto) Los diseñadores de sistemas operativos, cuando idean políticas para gestionar el acceso a
un recurso, no pueden en general encontrar un algoritmo que optimice al mismo tiempo el
rendimiento, la seguridad y la justicia en el reparto del recurso: deben encontrar algoritmos que
lleguen a un balance entre todos estos criterios.
TAREA. Ilustre este problema con un ejemplo concreto. No use más de 200 palabras en su exposición.
Hay varios casos que se han visto en la asignatura y que se pueden aprovechar para responder a esta
cuestión. Algunos ejemplos:
Lo que ocurre cuando queremos planificar la CPU: si queremos optimizar el tiempo de espera medio,
el mejor algoritmo es el SJF, pero a cambio perjudica enormemente a los procesos de larga duración.
Si queremos dar un reparto justo y equilibrado, podemos intentar un Round Robin, pero incurre en un
mayor número de cambios de contexto y por tanto disminuye el rendimiento de la CPU respecto a
SJF. No hay una política que sea óptima en rendimiento y en justicia a la vez.
También está el caso de los algoritmos de sección crítica, que los podemos diseñar muy sencillos,
pero sin ninguna garantía de que se cumpla la exclusión mutua. En este caso, la seguridad nos hace
aumentar la complejidad de nuestras políticas. En el caso de la instrucción “test-and-set” y similares,
es fácil diseñar un algoritmo de sección crítica que cumpla sólo la exclusión mutua, pero asegurar la
espera limitada exige un algoritmo más complejo y que tarda más en ejecutarse.
Los mismos casos anteriores se pueden aplicar a cualquier recurso al que varios procesos quieran
acceder, pero que se deba utilizar de forma excluyente. Por ejemplo, una impresora. Podemos
gestionar la cola de acceso de manera que se saque más trabajo por unidad de tiempo, pero a costa
de un reparto injusto. Etcétera.
Página 2 de 5
Nombre y apellidos DNI/NIE
TAREA. Tiene usted que añadir el código que sea necesario para sincronizar al hilo predictor con los
hilos estimadores, utilizando semáforos como herramientas de sincronización.
Si lo considera necesario, puede crear nuevas variables o cambiar el código, siempre que se mantenga
la arquitectura general aquí expuesta.
Página 3 de 5
Para sincronizar los procesos, basta con utilizar un semáforo inicializado a cero, sobre el que el
proceso predictor hace dos operaciones WAIT consecutivas. Cada proceso estimador, según termina,
ejecuta una operación SIGNAL sobre el semáforo. De esa forma se garantiza que el predictor sigue
adelante cuando dos estimadores han finalizado.
Se adjunta un ejemplo de código que implementa esta estrategia. También se implementa la recogida
de las estimaciones desde el vector compartido.
hilo estimador(int i) {
// Calcula la estimación por el método "i"
estimaciones[i] = valor_estimado;
hilo predictor() {
// espera a que terminen al menos dos estimadores
WAIT(terminado);
WAIT(terminado);
predicción = media;
}
Página 4 de 5
Nombre y apellidos DNI/NIE
hilo estimador(int i) {
// Calcula la estimación por el método "i"
hilo predictor() {
// espera a que terminen al menos dos estimadores
WAIT(puede_predecir);
Página 5 de 5
1 2 3 test extra NOTA
·∙
Página
1
de
2
2 (1’25
puntos)
Explique
los
beneficios
que
se
derivan
de
que
el
sistema
operativo
ofrezca
una
interfaz
de
acceso
a
la
E/S
que
sea
independiente
del
dispositivo
físico.
No
use
más
de
200
palabras
en
su
exposición.
Se trata de resaltar las ventajas que tiene en cuanto a hacer independiente el código de las
aplicaciones de los detalles concretos de implementación de los dispositivos, consiguiendo una
interfaz más simple y abstracta, y por tanto más fácil de usar para un desarrollador de aplicaciones.
Con esto aumenta la productividad de los desarrolladores y las aplicaciones resultan más sostenibles
en el tiempo: los cambios en las tecnologías de los dispositivos son resueltos por el SO sin necesidad
de reescribir las aplicaciones de usuarios. El SO también puede aprovechar para proporcionar una
interfaz más robusta (ej. que aplique control de errores físicos e incluso los corrija, o que aplique
directivas de seguridad), todo ello de forma transparente a los usuarios.
Ver diapos del primer bloque: 14, 15, 22, 23, 24.
3
(1’5
puntos)
Analice
la
validez
de
este
algoritmo
de
gestión
del
problema
de
la
sección
crítica
para
dos
procesos.
Demuestre
razonadamente
las
conclusiones
a
las
que
llegue.
//
variables
globales
bool
quiere1=false,
quiere2=false;
Puede verse que si uno de los dos procesos observa que el otro tiene interés en entrar en sección crítica
(línea 3), abandona durante un tiempo aleatorio la contienda (líneas 4 y 5), para a continuación volver a
intentar entrar (líneas 6 y 3). El algoritmo asegura la exclusión mutua: si el proceso 1 ejecuta la línea 3, se
cumple que quiere1==true. Si quiere2==true, el proceso 2 está entre las líneas 3 y 8 del código, y el
proceso 1 no va a entrar en sección crítica hasta que el proceso 2 ejecute la línea 9 (por tanto, abandona la
sección crítica), o la línea 4 (el proceso abandona la lucha por entrar). Si quiere2==false, el proceso 1
podrá entrar en sección crítica y el proceso 2, si alguna vez quiere entrar en s.c., tendrá que ejecutar las
líneas 2 o la línea 6, y se mantendrá en espera en la línea 3, ya que quiere1==true. Todo este
razonamiento se puede aplicar intercambiando los procesos 1 y 2 y las respectivas variables quiere1 y
quiere2. Todo lo anterior lleva a concluir que se cumple la exclusión mutua.
Con respecto a la propiedad de progreso, puede darse el caso de que los dos procesos quieran entrar a la
vez y estén ejecutando la pausa temporal (líneas 4, 5 y 6) de manera totalmente síncrona, con pausas
idénticas. Esto provocaría que siempre las comprobaciones de la línea 3 serían ciertas y por tanto, ambos
procesos entrarían en un bucle perpetuo de verificar-abandonar por un tiempo-volver a intentarlo. Esto
implica que no se puede garantizar plenamente la propiedad de progreso. Sin embargo, si las pausas de la
línea 5 son lo bastante aleatorias, la probabilidad de que se produzca un atasco perpetuo es virtualmente
nula, así que podríamos considerar que hay progreso a efectos prácticos.
Finalmente, la propiedad de espera limitada no se puede garantizar al 100%, ya que un proceso que
acaba de salir de la sección crítica mientras el otro está interesado en entrar puede volver a entrar en
sección crítica una y otra vez. Por ejemplo, el proceso 1 puede estar en la línea 8 y el proceso 2 en la línea
5, haciendo una pausa antes de volver a intentar entrar en sección crítica. El proceso 1 podría salir de
sección crítica (línea 9) y, antes de que el proceso 2 se pueda dar cuenta, volver a ejecutar el código de
entrada (líneas 2, 3 y 7). Por tanto entraría de nuevo en sección crítica. Estos pasos se pueden dar una y
otra vez, con lo que se postergaría indefinidamente la entrada del proceso 2 en sección crítica. No
obstante, al igual que con la propiedad de progreso, la posibilidad real de que esta situación se mantenga
indefinidamente tiende a cero, con lo cual en un escenario práctico se podría considerar que no va a haber
esperas indefinidas.
Página
2
de
2
1 2 3 test extra NOTA
Dispone
de
dos
horas
para
realizar
el
examen.
Justifique
las
respuestas
que
haga
a
estos
ejercicios.
Lea
las
instrucciones
para
el
test
en
la
hoja
correspondiente.
1
(1,25
puntos)
Se
quiere
dar
formato
a
una
memoria
USB
de
4
gigabytes
con
un
sistema
FAT.
El
tamaño
de
los
grupos
(clusters)
o
bloques
de
datos
será
de
4
KiB.
Se
está
dudando
si
utilizar
FAT16
o
FAT32
(16
o
32
bits
por
enlace),
ya
que
por
un
lado
FAT16
permitiría
usar
menos
espacio
para
la
FAT,
pero
se
teme
que
no
sea
capaz
de
direccionar
toda
la
unidad.
• ¿Podemos
usar
FAT16,
o
necesariamente
nos
tenemos
que
ir
a
FAT32?
• ¿Cómo
cambiaría
su
respuesta
si
el
USB
se
formateara
usando
un
tamaño
de
bloque
de
datos
de
64KiB?
Para saber si podemos usar FAT16, debemos calcular el número de bloques que contiene el
dispositivo y si estos pueden ser manejados con 16 bits, que dan 216 combinaciones.
El dispositivo tiene 4 gigabytes = 4×230 = 232 bytes. Los bloques miden 4 KiB = 212 bytes. Por tanto hay
un total de 232 ÷ 212 = 220 bloques. Claramente, 16 bits son insuficientes para direccionar esta cantidad
de bloques, así que tendríamos que usar FAT32.
Si el tamaño de bloque fuera de 64 KiB, habría un total de de 232 ÷ 216 = 216 bloques, que sí se podrían
direccionar con 16 bits, así que en ese caso sí se podría utilizar FAT16.
Este
USB
se
quiere
emplear
en
una
cámara
de
fotos,
que
genera
archivos
JPEG
de
un
tamaño
medio
de
3
megabytes
(el
tamaño
exacto
varía
en
función
de
la
foto).
Suponiendo
que
usamos
grupos
de
64KiB,
alguien
afirma
que
al
guardar
una
foto,
en
promedio
se
desperdicia
en
torno
a
un
1%
del
espacio
asignado
en
el
disco
por
culpa
de
la
fragmentación
interna.
¿Es
correcta
esta
afirmación?
Si tenemos un archivo de 3 megabytes (3×220 bytes), ocupará aproximadamente 3×220 ÷ 216 = 3×24 =
48 bloques. La fragmentación interna ocurrirá siempre en el último bloque de datos del archivo y será
como mucho de un bloque. Esto nos da un porcentaje relativo en torno a la longitud del archivo de
1/48 ≈ 2%, para el peor caso. Si el caso promedio es de desperdiciar medio bloque, el desperdicio es
la mitad, o sea en torno a un 1%. Por tanto la afirmación podría ser correcta, siempre dependiendo de
cómo se distribuyen las diferentes longitudes de las fotos.
2 (1,25
puntos)
¿Es
técnicamente
posible
que
un
procesador
maneje
un
espacio
de
direcciones
lógicas
de
64
bits
y
direcciones
físicas
de
32
bits?
¿Esto
es
posible
con
segmentación,
paginación
o
con
ambas
técnicas?
¿Qué
utilidad
podría
tener
esta
diferencia
de
tamaño
entre
el
espacio
lógico
y
el
físico?
Los espacios de direcciones lógico y físico pueden ser diferentes en cualquier caso. En el ejemplo
propuesto, si se trata de un sistema paginado con páginas de 2P bytes, cada página lógica de 64-P
bits tendría asociado en la tabla de páginas un marco físico de 32-P bits. En el caso de un sistema
segmentado, las direcciones base de los segmentos serían números de 32 bits. No hay mayor
problema en el circuito de traducción.
Por supuesto, lo anterior implica que un programa con un espacio lógico de más de 232 bytes no
podría ser ubicado completamente en la memoria física. Esta limitación parece inútil, pero no lo es
tanto si estamos implementando un sistema de memoria virtual: un bit de validez nos puede marcar
si una página o un segmento están en la memoria principal, o por el contrario hay que localizarlos en
Otra utilidad del espacio lógico mayor que el físico es permitir trabajar con tecnologías de memoria
limitadas, pero manteniendo una arquitectura de la CPU que siga funcionando igual cuando esta
tecnología permita mayores tamaños. Es lo que ocurre con los actuales sistemas x86, que trabajan
con direcciones lógicas de 64 bits, pero por el momento usan direcciones físicas de 48 bits, suficientes
para las capacidades actuales de los bancos de memoria RAM.
3
(1,5
puntos)
Un
ascensor
tiene
una
capacidad
máxima
de
6
personas
y
450
kilogramos.
Se
void
sube_persona
(float
peso)
{
quiere
simular
el
comportamiento
del
ascensor
…
esperar
si
no
se
puede
subir
mediante
un
conjunto
de
hilos
que
actúan
como
…
subir
al
ascensor
}
personas
que
entran
y
salen
del
aparato.
Para
ello,
tiene
usted
que
implementar
dos
void
baja_persona
(float
peso)
{
operaciones,
sube_persona(peso)
y
…
bajar
del
ascensor
baja_persona(peso).
Estas
dos
operaciones
serán
…
provocar
desbloqueos
}
invocadas
por
los
hilos
que
simulan
las
personas.
La
operación
de
subir
debe
dejar
bloqueado
al
proceso
que
hace
la
llamada
mientras
el
ascensor
esté
lleno,
o
bien
la
carga
en
kilos
no
permita
que
el
proceso
se
monte
en
el
ascensor.
La
operación
de
bajar
debe
actualizar
el
estado
del
ascensor
y,
si
es
el
caso,
inducir
el
desbloqueo
de
otras
personas
que
puedan
estar
esperando
para
entrar.
TAREA.
Debe
usted
implementar
mediante
semáforos
las
acciones
de
sincronización
de
estas
operaciones
de
subir
y
bajar.
Introduzca
las
variables
auxiliares
que
considere
necesarias.
NO
hay
que
implementar
el
sistema
completo,
ni
los
hilos:
sólo
el
código
de
sincronización
de
estas
dos
operaciones.
El problema se puede resolver con la receta clásica de utilizar un mutex más una cola de espera, y
organizar un bucle while en el que se evalúa la condición de bloqueo. Nos podría quedar un código
similar a este:
Página
2
de
3
Nombre
y
apellidos
DNI/NIE
void
baja_persona
(float
peso)
{
WAIT(mutex);
personas_dentro-‐-‐;
peso_dentro
-‐=
peso;
while
(esperando>0)
{
esperando-‐-‐;
SIGNAL(cola);
}
SIGNAL(mutex);
}
En esta solución, cada vez que una persona se baja del ascensor desbloquea a todas las personas
que se encuentran esperando, lo cual puede ser ineficiente (ej. si se libera una plaza y hay 20
personas esperando, es posible que sólo hiciera falta reevaluar la condición para una de las 20
personas). Este algoritmo se podría optimizar de manera que sólo se desbloquee el conjunto de
personas mínimo para que el sistema avance. Esta mejora excede lo que se puede exigir para el
limitado periodo de tiempo de un examen, pero se deja como ejercicio para quien quiera profundizar
en la práctica de la programación concurrente.
Página
3
de
3
Fundamentos de los Sistemas Operativos
Convocatoria extraordinaria, 2 de julio de 2015
Dispone
de
tres
horas
para
realizar
el
examen.
Justifique
las
respuestas
que
haga
a
estos
ejercicios.
Lea
las
instrucciones
para
el
test
en
la
hoja
correspondiente.
1 (1
punto)
Cuando
un
fabricante
introduce
modificaciones
en
la
nueva
versión
del
núcleo
de
un
sistema
operativo,
algunas
modificaciones
requieren
cambios
en
la
API
del
núcleo,
mientras
que
otras
ocurren
de
forma
transparente.
Por
ejemplo,
si
modificamos
la
política
de
asignación
de
espacio
en
disco
de
FAT
a
contigua,
los
procesos
podrán
seguir
utilizando
la
misma
API
para
trabajar
con
ficheros.
Pero
si
en
un
sistema
que
no
utiliza
carpetas
le
añadimos
esa
funcionalidad,
tendremos
que
cambiar
la
API
(por
ejemplo
con
llamadas
para
crear
y
borrar
carpetas).
A
continuación
se
muestran
algunos
escenarios
de
cambio
en
el
núcleo.
Para
cada
uno
de
ellos,
indique
si
la
modificación
requiere
necesariamente
cambios
en
la
API
del
núcleo
y,
en
tal
caso,
en
qué
línea
deberían
ir
los
cambios.
Para
ayudar
a
imaginarse
estos
escenarios,
piense
en
el
sistema
operativo
que
hemos
empleado
en
la
asignatura
(Unix/Linux).
Esta pregunta es bastante abierta y no hay una solución «perfecta y canónica». Si se argumenta
adecuadamente, puede haber contestaciones afirmativas o negativas a cada cuestión. Aquí se dan
algunos ejemplos.
Para considerar como correcta una respuesta, basta con que se responda de forma coherente, no
hace falta dar tanto detalle como en las respuestas aquí escritas.
Se considera totalmente superada esta pregunta si se han respondido correctamente 5 de los 6
escenarios.
b) Se
aumenta
el
máximo
número
de
procesos
que
admite
el
sistema,
de
16
a
256.
No debería cambiar la API.
c) A
un
núcleo
que
sólo
gestiona
procesos
pesados
se
le
añade
la
posibilidad
de
manejar
procesos
ligeros
(hilos).
Hay que proporcionar una nueva API para que el usuario pueda crear y finalizar procesos ligeros
dentro de su proceso pesado.
e) A
un
sistema
de
archivos
que
sólo
trabaja
mediante
acceso
secuencial
se
le
añade
la
posibilidad
de
usar
acceso
directo.
Hay que proporcionar nuevas llamadas para poder hacer accesos directos a cualquier posición dentro
de un fichero.
2
(0,75
puntos)
Se
quiere
dar
formato
a
una
memoria
USB
de
4
gigabytes
con
un
sistema
de
archivos
que
admite
estos
dos
modelos
de
asignación
de
espacio:
indexado
simple
(un
solo
nivel)
y
FAT.
En
ambos
casos,
se
trabaja
con
enlaces
de
16
bits
y
con
bloques
de
datos
de
64
KiB.
Para
cada
uno
de
los
dos
modelos
planteados,
calcule:
• El
tamaño
máximo
que
puede
llegar
a
tener
un
archivo.
• Cuántos
bloques
en
total
ocupará
un
fichero
de
100.000
bytes.
Para el sistema indexado simple, tenemos que los enlaces del archivo se almacenan en un único
bloque de índices, que tendrá 64 KiB. Los enlaces ocupan 16 bits = 2 bytes, así que cada bloque
puede guardar hasta 64 KiB / 2 bytes = 32 Ki enlaces. Por tanto un archivo puede tener hasta 32 KiB
bloques de 64 KiB, lo que da un total de 32Ki×64Ki = 215×216 = 231 bytes = 2 GiB.
El archivo de 100.000 bytes necesita 2 bloques de datos para guardar su contenido. Además hace
falta un bloque para los índices, así que en total este archivo ocupa 3 bloques.
Para el sistema FAT, no hay más restricción para el tamaño máximo que el número de enlaces
posibles, que es de 216. Por tanto un archivo puede llegar a tener 216 bloques, cada uno de 64Ki = 216
bytes, lo que da un total de 216×216 = 232 bytes = 4 GiB.
NOTA: en un sistema FAT real, algunos valores de los enlaces estarán reservados, p.ej. para marcar
el fin de fichero o un bloque erróneo, así que la cantidad real será algo menor.
En el caso de la FAT, el archivo de 100.000 bytes ocupará dos bloques. Aparte se consumirán dos
enlaces de la FAT: esto normalmente no se contabiliza en la ocupación del archivo, ya que la FAT es
una estructura global de tamaño fijo.
Página
2
de
5
Nombre
y
apellidos
DNI/NIE
3
(0,75
puntos)
Describa
cuál
es
la
utilidad
del
bit
de
referencia
en
los
sistemas
de
memoria
virtual.
¿Cuáles
serían
las
consecuencias
de
no
disponer
de
este
bit?
Tal y como se describe en la literatura sobre sistemas de gestión de memoria virtual, el bit de
referencia se creó para poder implementar algoritmos de reemplazo eficientes, que no requieran un
coste de implementación hardware elevado. Mediante el bit de referencia, el hardware marca aquellas
páginas que se han estado accediendo recientemente: de esta forma se pueden implementar
algoritmos que clasifiquen las páginas en función de su patrón de accesos reciente (ej. NRU, algoritmo
del reloj o 2ª oportunidad, WSClock…).
4
(1,5
puntos)
Tenemos
un
depósito
de
agua
con
una
capacidad
de
10.000
litros.
Sobre
este
depósito
se
han
definido
dos
operaciones,
mete_agua(L)
y
saca_agua(L),
respectivamente
para
añadir
o
extraer
una
cantidad
de
agua
(L)
del
depósito.
Estas
operaciones
pueden
ser
invocadas
por
hilos
concurrentes
y
se
quiere
asegurar
un
funcionamiento
sincronizado,
de
manera
que
un
hilo
que
trate
de
meter
más
agua
de
la
que
cabe
en
el
depósito,
deberá
esperarse
hasta
que
haya
hueco
suficiente.
Análogamente,
un
hilo
que
intente
sacar
agua
deberá
esperar
void
mete_agua
(float
litros)
{
a
que
haya
suficiente
cantidad
de
agua.
…
si
el
depósito
se
rebosa,
esperar
TAREA.
Debe
usted
implementar
mediante
…
añadir
el
agua
al
depósito
…
desbloquear
si
hay
otros
hilos
esperando
semáforos
las
acciones
de
sincronización
de
}
estas
dos
operaciones.
Introduzca
las
variables
void
saca_agua
(float
litros)
{
auxiliares
que
considere
necesarias.
NO
hay
que
implementar
el
sistema
completo,
ni
los
…
esperar
hasta
que
haya
agua
suficiente
…
retirar
el
agua
del
depósito
hilos:
sólo
el
código
de
sincronización
de
estas
…
desbloquear
si
hay
otros
hilos
esperando
dos
operaciones.
}
Página
3
de
5
A continuación se presenta una posible solución a este problema. Se emplea el patrón clásico de un
mutex para proteger los datos compartidos y una cola para mantener a los procesos bloqueados. Se
implementan dos colas: una para los procesos que quieren meter agua y otra para los que quieren
sacar agua.
Página
4
de
5
Nombre
y
apellidos
DNI/NIE
Esta es otra solución basada en el algoritmo anterior, pero simplificado para usar una sola cola de
espera.
Página
5
de
5
1 2 3 test extra NOTA
En un sistema real, un algoritmo como este podría tener cierto beneficio para primar a los procesos
recién llegados y a los que consumen muy pocos milisegundos de tiempo de CPU en unas pocas
ráfagas (menos de cuatro ráfagas). Para un caso real, en el que los procesos suelen entrar y salir
muchas veces de la CPU para resolver operaciones de E/S, acabaría ocurriendo que gran parte de los
procesos acabarían rápidamente en la clase 3 y por tanto serían tratados con un FCFS. Por tanto este
sistema no aporta una ventaja clara sobre un Round-Robin simple: más bien lo convierte de hecho en
un FCFS y además con una implementación más compleja.
SOLUCIÓN
El algoritmo propuesto es similar a la solución de Peterson al problema de la sección crítica para dos
procesos. La única diferencia está en la inicialización de la variable turno que cada proceso realiza en
la línea 4. Mientras que en la solución propuesta por Peterson cada proceso asigna a turno el “id” del
otro proceso, en la propuesta que figura en el ejercicio cada proceso inicializa turno a su propio “id”.
Por tanto, al no cumplirse la propiedad de exclusión mutua podemos confirmar que no se trata de una
solución válida al problema de la sección crítica.
Página
2
de
3
Nombre y apellidos DNI/NIE
3 (1,5 puntos) Un ordenador está conectado a un servidor de tres impresoras idénticas. El estado del
servidor se define mediante un vector llamado printers[]. Cada elemento corresponde a una impresora.
El valor -1 inicial significa que la impresora está libre. Un proceso que desea usar la impresora debe ejecutar
un procedimiento Get_Printer(pid). Cuando finaliza debe ejecutar otro procedimiento llamado
Release_Printer(pid). En el cuadro adjunto se muestra el uso típico de una impresora.
TAREA: Escribir el código de ambos procedimientos e //
Variables
enteras
globales
implementar con semáforos las sincronizaciones int
printers[3]=
{-‐1,-‐1,-‐1};
necesarias para que se cumplan estos requisitos:
Proceso
Pn()
{
• Si un proceso quiere utilizar una impresora y no hay
...
ninguna disponible, el proceso debe esperar hasta
Get_Printer(pid);
que alguna impresora quede libre.
//
Usa
la
impresora
• No puede haber más de un proceso utilizando una
misma impresora.
Release_Printer(pid);
• Mientras un proceso está utilizando una impresora,
...
en la posición del vector printers debe }
almacenarse su pid.
SOLUCIÓN
Esta es una posible solución al ejercicio planteado, escrita en C.
#define
NPRINTERS
3
Semáforo
libres
=
NPRINTERS;
Semáforo
cerrojo
=
1;
int
printers[NPRINTERS]
=
{
-‐1,
-‐1,
-‐1
};
void
Get_Printer
(int
pid)
{
P(libres);
P(cerrojo);
for
(int
i=0;
i<NPRINTERS;
i++)
{
if
(printers[i]==-‐1)
{
printers[i]
=
pid;
break;
}
}
V(cerrojo);
}
void
Release_Printer
(int
pid)
{
P(cerrojo);
for
(int
i=0;
i<NPRINTERS;
i++)
{
if
(printers[i]==pid)
{
printers[i]
=
-‐1;
break;
}
}
V(cerrojo);
V(libres);
}
Página
3
de
3
1 2 3 test extra NOTA
b) (0,5 puntos) ¿Cuál es el propósito de las llamadas al sistema y cómo se relacionan éstas con el S.O. y con
el concepto de modo dual de operación?
Las llamadas al sistema son la interfaz del S.O. para los programas en ejecución, es decir, son los
mecanismos que utilizan los programas en ejecución para solicitar servicios al núcleo del sistema
operativo de tal forma que cuando un proceso realiza una llamada al sistema, el S.O. recupera el
control y se conmuta de modo no privilegiado a modo privilegiado.
2 (1,5 puntos) Sea un sistema con dos CPUs (CPU0 y CPU1) y con multiprocesamiento simétrico (SMP).
En un sistema SMP, las CPUs pueden usarse indistintamente para ejecutar cualquier tipo de tarea y una
tarea puede ejecutarse indistintamente en cualquier CPU. Es posible, e incluso probable, que un mismo
proceso use ambas CPU a lo largo de su ejecución, aunque no de manera simultánea. La política de
planificación de este sistema es turno rotatorio (round robin) con cuanto de 3 u.t. Suponga que el sistema
recibe la carga de trabajo que se muestra más abajo.
Teniendo en cuenta lo siguiente:
• Hay una sola cola de preparados.
• Todos los recursos de E/S son compartibles (dos o más procesos pueden hacer uso simultáneo de
cualquier recurso de E/S).
• En caso de que dos procesos deban acceder en el mismo instante a una CPU y sólo haya una
disponible, se le concederá al proceso de menor numeración.
• En caso de que, en un instante dado, un proceso pueda ocupar cualquiera de las dos CPUs (por
encontrarse ambas desocupadas), se le concederá la misma que ocupó por última vez.
Se pide:
• Dibujar el diagrama de Gantt, reflejando claramente qué proceso ocupa qué CPU en cada instante.
Página
1
de
4
• Calcular el tiempo medio de retorno y el tiempo medio de espera.
• Calcular el rendimiento de cada CPU, considerando como tiempo final el instante en el que termina
el último proceso y como tiempo inicial t=0
Carga
de
trabajo
Proceso
Instante
Ráfaga
de
Ráfaga
de
Ráfaga
de
de
llegada
CPU
E/S
CPU
P0
0
4
4
3
P1
2
4
4
4
P2
2
4
3
3
Respuesta:
Tiempos (u.t.)
Espera Retorno
P0 2 13-0=13
P1 3 17-2=15
P2 1 13-2=11
Media 2 13
Rendimientos:
Página
2
de
4
Nombre y apellidos DNI/NIE
3 (1,5 puntos) a) (0,5 puntos) Suponga una propuesta de solución por software al problema de la sección
crítica. Explique y describa las tres propiedades que debe cumplir para considerarla una propuesta válida.
¿Es posible que la solución propuesta cumpla la propiedad de progreso y no se cumpla la propiedad de
espera limitada? Justifique su respuesta.
Para que una solución por software al problema de la sección crítica sea válida, debe cumplir tres
propiedades:
Exclusión mutua: si un proceso está ejecutando una sección crítica, no se permitirá que otros
procesos ejecuten sus secciones críticas.
Progreso: si varios procesos quieren entrar en sus secciones críticas, sólo entrará uno y en la
decisión de cuál será sólo intervendrán los procesos que tienen intención de entrar. Además, esta
decisión se debe tomar en un tiempo finito.
Espera limitada: todo proceso que tenga intención de entrar en su sección crítica, lo hará después de
un número de intentos finito.
Sí es posible. Puede ocurrir que en una solución se cumpla la propiedad de progreso y no se cumpla
la espera limitada. Supongamos que la decisión de entrar en las secciones críticas dependan de los
procesos que desena entrar y que esta decisión se tome en un tiempo finito, es decir, que se cumpla
la propiedad de progreso. Podría ocurrir que la solución propuesta haga que la decisión se tome
siempre a favor de uno o varios procesos y que un proceso pueda quedar postergado indefinidamente.
Se trataría de una situación en la que se estaría cumpliendo la propiedad de progreso pero no la
propiedad de espera limitada.
b) (1,0 punto) Suponga que tenemos un vector global de N elementos enteros que van a ser sumados de
forma concurrente por dos hilos. Empleando semáforos como herramienta de sincronización proponga
una solución que desarrolle la tarea propuesta teniendo en cuenta que:
a. Un mismo número no puede sumarse dos veces.
b. Cada hilo va tomando elementos consecutivos del vector y los va sumando, siempre
asegurándose de no usar elementos que el otro hilo ya haya sumado.
c. Uno de los hilos y sólo uno debe mostrar la suma total.
d. El proceso pesado que crea los hilos debe mostrar un mensaje al comenzar la prueba y otro
cuando los hilos hayan terminado.
NOTA: Se podrá alcanzar una puntación máxima de 1,0 punto si la solución propuesta emplea la biblioteca
pthreads para resolver el problema. En ese caso puede asumir que se dispone de una biblioteca que
implementa semáforos y puede usted elegir la notación que prefiera (por ejemplo, la ofrecida este curso en
la práctica de hilos, semáforo.h). En caso de que opte usted por expresar la solución mediante lenguaje
algorítmico (sin hacer uso de la biblioteca pthreads), la puntuación máxima que se podrá obtener en este
apartado será de 0,75 puntos.
SOLUCIÓN
Esta es una posible solución al ejercicio planteado, escrita en C. La notación usada para expresar las
operaciones con semáforos es la que se ha ofrecido este curso en el fichero semáforo.h.
#include
<stdio.h>
#include
<pthread.h>
#include
<stdlib.h>
#include
“semáforo.h”
Página
3
de
4
//
Variables
globales
const
int
TAM=100;
//
Tamaño
del
vector
int
sum;
//
Variable
que
almacena
la
suma
de
elementos
int
índice;
//
Índice
que
indica
el
siguiente
elemento
a
sumar
int
mostrartotal
//
Flag
que
se
emplea
para
saber
si
ya
se
ha
//
mostrado
el
total
por
parte
de
uno
de
los
hilos
Semaforo
mutex;
//
Semáforo
para
garantizar
la
exclusión
mutua
void*
Hilo_Sumador(void*
nada)
{
while
(true)
{
//
Hacemos
una
operación
WAIT
sobre
mutex
para
garantizar
exclusión
//
mutua
en
el
acceso
al
vector
WAIT(&mutex);
if
(indice==TAM)
{
if
(mostrartotal)
{
printf(“La
suma
total
del
vector
es:
%d\n”,
sum);
mostrartotal=0;
}
SIGNAL(&mutex);
break;
}
sum=sum+vec[indice];
indice++;
SIGNAL(&mutex);
}
}
main()
{
pthread_t
hilo1,
hilo2;
void*
dummy;
//
Inicializamos
la
variables
globales
sum=0;
índice=0;
mostrartotal=1;
INICIASEM
(&mutex,
1)
//
Lanzamos
los
dos
hilos
sumadores
printf("Comienza
la
operación
de
suma
...\n");
pthread_create(&hilo1,NULL,
Hilo_Sumador,NULL);
pthread_create(&hilo2,NULL,
Hilo_Sumador,NULL);
//
Esperamos
por
la
finalización
de
los
dos
hilos
para
mostrar
el
//
mensaje
final
pthread_join(hilo1,&dummy);
pthread_join(hilo2,&dummy);
printf("Fin
de
la
prueba
de
hilos\n");
}
Página
4
de
4
1 2 3 test extra NOTA
1 (2 puntos) Tenemos un búfer compartido en el que depositan elementos dos procesos productores P1 y
P2, y del que extraen elementos dos consumidores C1 y C2, de forma que el consumidor C1 sólo puede
consumir elementos producidos por P1 y el consumidor C2 elementos producidos por P2. El búfer tiene
una capacidad limitada de N elementos. Si un productor se encuentra el búfer lleno, debe esperar a que se
abra un hueco.
Proponer una solución, empleando semáforos como herramienta de sincronización, de forma que los
elementos se consuman siguiendo una política global FIFO, es decir, si existen elementos de los dos tipos
en el vector, deberá intervenir en primer lugar el consumidor cuyo tipo coincida con el tipo del siguiente
elemento a consumir siguiendo un orden FIFO.
SOLUCIÓN
Esta es una posible solución al ejercicio planteado, escrita en C.
//
Variables
globales
#define
TAM_BUFFER
100
typedef
Elemtype
…..;
//
Búfer
para
almacenar
los
elementos
Elemtype
buffer[TAM_BUFFER];
//
Búfer
que
indica
el
tipo
de
elemento
almacenado
en
cada
//
posición:
1
para
elementos
de
tipo
1,
2
para
elementos
de
//tipo
2
y
-‐1
cuando
la
posición
está
libre
int
buffer_type[TAM_BUFFER]=[-‐1,
-‐1,
-‐1,
…….-‐1];
//
Indices
marcadores
de
las
posiciones
de
entrada
y
salida
de
//
elementos
int
in=0,out=0;
//
Semáforo
para
controlar
el
número
de
elementos
tipo
1
//
almacenados
en
el
búfer
Semaforo
full_type1=0;
//Semáforo
para
controlar
el
número
de
elementos
tipo
2
//
almacenados
en
el
búfer
Semaforo
full_type2=0;
//
Semáforo
para
controlar
el
número
de
huecos
libres
en
el
//
búfer
Semaforo
empty=TAM_BUFFER;
//
Cola
de
espera
para
el
consumidor
tipo1
cuando
el
siguiente
//
elemento
a
consumir
es
de
tipo2
Semaforo
queue_type1=0;
//
Cola
de
espera
para
el
consumidor
tipo2
cuando
el
siguiente
//
elemento
a
consumir
es
de
tipo1
Semaforo
queue_type2=0;
//
Semáforo
para
garantizar
exclusión
mutua
en
el
acceso
a
las
//variables
compartidas
Semaforo
mutex=1;
Página
1
de
5
//
Variables
para
indicar
si
los
procesos
consumidores
de
tipo
1
//
y
2
están
bloqueados
en
los
semáforos
queue_type1
y
//
queue_type2
respectivamente
int
c1_bloq=0;
int
c2_bloq=0;
Process
P1()
{
Process
P2()
{
Elemtype
elem;
Elemtype
elem;
while
(true)
{
while
(true)
{
//
Producir
elem
//
Producir
elem
//
Si
el
búfer
está
lleno,
esperamos
//
Si
el
búfer
está
lleno,
esperamos
wait(empty);
wait(empty);
wait(mutex);
wait(mutex);
buffer(in)=elem;
buffer(in)=elem;
buffer_type(in)=1;
buffer_type(in)=2;
in=(in+1)%TAM_BUFFER;
in=(in+1)%TAM_BUFFER;
signal(mutex);
signal(mutex);
//
Avisamos
que
hemos
introducido
un
//
Avisamos
que
hemos
introducido
un
//
elemento
de
tipo1
//
elemento
de
tipo2
signal(full_type1);
signal(full_empty2);
}
}
}
}
Process
C1()
{
Process
C2(){
Elemtype
elem;
Elemtype
elem;
while
(true)
{
while
(true)
{
wait(full_type1)
wait(full_type2)
wait(mutex);
wait(mutex);
if
(buffer_type(out)==2)
{
if
(buffer_type(out)==1)
{
c1_bloq=1;
c2_bloq=1;
signal(mutex);
signal(mutex);
wait(queue_type1);
wait(queue_type2);
}
}
elem=buffer(out);
elem=buffer(out);
buffer_type[out]=-‐1;
buffer_type[out]=-‐1;
out=(out+1)%TAM_BUFFER;
out=(out+1)%TAM_BUFFER;
if
(buffer_type[out]==2
&&
if
(buffer_type[out]==1
&&
c2_bloq)
{
c1_bloq)
{
c2_bloq=0;
c1_bloq=0;
signal(empty_type2);
signal(empty_type1);
}
}
signal(mutex);
signal(mutex);
signal(empty);
signal(empty);
//
Consumir
elem
//
Consumir
elem
}
}
}
}
Página
2
de
5
2 (1 punto) La familia de procesadores de Intel x86 utiliza direcciones lógicas y físicas de 32 bits y una
memoria paginada de dos niveles. La dirección lógica se estructura de la siguiente forma:
0
9
10
19
20
31
Nivel
1
Nivel
2
Desplazamiento
En la alternativa (A) resulta un tamaño de página de 228 = 256 megabytes. Este tamaño parece
desproporcionado para las capacidades típicas de las memorias principales que nos encontramos en
2014. Por ejemplo, una RAM de 8GB tendría 32 páginas: si cada proceso en ejecución debe tener
reservada al menos una página en exclusiva, esto limita muchísimo la cantidad de procesos que
pueden residir en el sistema. Por otro lado, la fragmentación interna alcanzaría dimensiones
excesivas, teniendo en cuenta los tamaños típicos que manejan los procesos en los sistemas
operativos actuales.
En cuanto a las tablas de páginas, se observa que la alternativa (B) genera tablas muy grandes, que
ocupan varias páginas contiguas. Lo podemos ver calculando cuál es el tamaño máximo que puede
tener una tabla en cada alternativa:
.- Alternativa A: 10 bits por nivel. 210 entradas × 8 bytes = 8KB.
.- Alternativa B: 18 bits por nivel. 218 entradas × 8 bytes = 2MB.
.- Alternativa C: 9 bits por nivel. 29 entradas × 8 bytes = 4KB.
En las alternativas (A) y (C), las tablas nunca ocuparán más de una página contigua. Pero en la
alternativa (B), con páginas de 4KB, una tabla puede llegar a ocupar nada menos que 512 páginas
contiguas. Esto complica la gestión del espacio libre, ya que muchas tablas requerirán buscar varios
marcos de página consecutivos.
A grandes rasgos, parece que la alternativa (C) requiere más cambios en el hardware, pero es la que
menos impacta en el aprovechamiento de la memoria principal. Las otras dos alternativas producen
problemas importantes de fragmentación.
NOTA histórica: el esquema definido por la arquitectura x86-64 es precisamente la alternativa (C).
Página
3
de
5
3 (1 punto) Tenemos un sistema de archivos tipo UNIX en el que para localizar los bloques de un archivo
se utilizan 11 entradas directas, una entrada indirecta, una entrada doblemente indirecta y una entrada triple
indirecta. El tamaño de bloque es de 1KiB (1024 bytes) y los enlaces a bloques son de 32 bits.
Para responder a las siguientes cuestiones, asuma que la información del inodo del archivo ya se encuentra
en memoria principal.
a) En función de la información dada, ¿cuál es la longitud máxima que puede tener un fichero en este
sistema? (se puede dar una estimación aproximada).
b) Tenemos un fichero de 10 megabytes de longitud. ¿Cuántos bloques consume del sistema de
archivos? (NOTA: 1 megabyte = 1024 KiB).
c) Al fichero anterior le queremos modificar un byte situado en la posición 1.000.000, relativa al
comienzo del fichero. ¿Cuántos accesos a bloques tenemos que realizar para completar la operación?
a) Para calcular la longitud máxima, hay que obtener cuántos bloques puede llegar a tener un archivo
si utiliza los índices a plena capacidad.
Cada enlace ocupa 32/8 = 4 bytes
Cada bloque de índices puede contener 1024/4 = 256 enlaces
11 entradas directas = 11 bloques de datos
1 entrada indirecta = 256 bloques de datos
1 entrada doble indirecta = 256×256 = 216 bloques de datos
1 entrada triple indirecta = 256×256×256 = 224 bloques de datos
Por tanto, un fichero podría llegar a tener B=224+216+256+11 bloques de datos, que en bytes son
B×1024. B está en torno a 224, así que el tamaño máximo es algo superior a 224×210 = 234 bytes, que
son unos 16 gigabytes.
(no hace falta dar la cifra exacta, ya que no se dispone de calculadora en el examen)
b) 10 megabytes son 10×220 bytes y por tanto requieren 10×220/210 = 10×210 bloques de datos. En
decimal, 10.240 bloques.
Aparte de lo anterior, hay que considerar los posibles bloques de índices, si utiliza entradas indirectas.
El archivo tiene más de 11 bloques y por tanto utiliza al menos el nivel indirecto simple (256 entradas),
que necesita un bloque adicional.
También debe usar el nivel indirecto doble, para las 10240-256-11=9973 entradas restantes. Al menos
deberá consumir un bloque de primer nivel. Del segundo nivel, tendrá que consumir el redondeo
superior de 9973/256=39 bloques.
Este archivo no consume entradas del nivel indirecto triple.
Por tanto, el archivo en total debe consumir 10.240 + 1 + 1 + 39 = 10.281 bloques.
Página
4
de
5
Nombre y apellidos DNI/NIE
Con lo cual, la respuesta a la pregunta es que hacen falta cuatro accesos a bloques para resolver
la operación.
Página
5
de
5
1 2 3 test extra NOTA
SOLUCIÓN
La afirmación puede resultar creíble, ya que la incorporación de multiprogramación puede respetar
totalmente la API del sistema operativo que usaban los programas antiguos. La implementación de la
multiprogramación puede realizarse totalmente por parte del sistema operativo, sin intervención alguna
de los programas de usuario (ej. el sistema operativo utiliza el sistema de interrupciones para decidir
cuándo realiza un cambio de contexto). Por supuesto, el nuevo sistema operativo tendría que resolver
cuestiones tales como el reparto de la memoria entre los distintos procesos, pero eso es técnicamente
posible. En un caso radical, las aplicaciones antiguas podrían correr sobre una máquina virtual que
ejecutara el sistema operativo no multiprogramado, con lo cual para las aplicaciones viejas no habría
ninguna diferencia entre el entorno original y el nuevo.
De hecho, históricamente se han dado casos similares al planteado en la pregunta, como la posibilidad
de ejecutar aplicaciones MS-DOS (no multiprogramado) sobre plataformas Windows
(multiprogramadas).
Por tanto, es posible construir un nuevo sistema operativo que no requiera hacer modificaciones en las
aplicaciones antiguas.
2 (1,5 puntos) Sea un sistema operativo con planificación de procesos mediante dos colas con prioridad.
Teniendo en cuenta lo siguiente:
• Todos los procesos ingresan en la cola Q0 de mayor prioridad, que se planifica mediante un
algoritmo de turno rotatorio (round robin) con un cuanto de 2 u.t.
• Tras haber ocupado dos veces la CPU provenientes de Q0, los procesos son degradados a la cola
Q1, de menor prioridad, y permanecen en ella hasta finalizar su ejecución.
• La cola Q1 se planifica con el algoritmo SRTF.
• En este sistema la E/S se gestiona con una política FIFO. El recurso de E/S no se puede
compartir, por lo que si está ocupado y un proceso necesita usarlo, deberá esperar a que quede libre.
Dada la siguiente carga de trabajo:
Carga de trabajo
Proceso Instante Ráfaga de Ráfaga de Ráfaga de
de llegada CPU E/S CPU
P0 0 4 2 2
P1 1 2 1 3
P2 2 2 2 3
Página 1 de 3
Se pide:
• Dibujar el diagrama de Gantt.
• Calcular el tiempo medio de retorno y el tiempo medio de espera.
SOLUCIÓN
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
P0 RR RR SRTF
P1 RR RR SRTF
P2 RR RR SRTF
E/S P1 P2 P0
3 (1,5 puntos) Empleando semáforos como herramienta de sincronización cree un programa que lance
tres hilos que deberán cooperar para escribir los números del 0 al 99 en orden creciente y cumpliendo los
siguientes requisitos.
a. Un hilo debe escribir solo los números 0, 3, 6, …. Otro hilo debe escribir solo 1, 4, 7, … El hilo
restante debe escribir solo los números 2, 5, 8, …
b. El programa principal debe esperar por la terminación de los tres hilos antes de finalizar.
NOTA: Se podrá alcanzar una puntación máxima de 1,5 puntos si la solución propuesta emplea lenguaje C
y la biblioteca pthreads para resolver el problema. En ese caso puede asumir que se dispone de una biblioteca
que implementa semáforos y puede usted elegir la notación que prefiera (por ejemplo, la ofrecida este curso
en la práctica de hilos, semáforo.h). En caso de que opte usted por expresar la solución mediante lenguaje
algorítmico (sin hacer uso de la biblioteca pthreads), la puntuación máxima que se podrá obtener en este
apartado será de 1,0 puntos.
Página 2 de 3
Nombre y apellidos DNI/NIE
SOLUCIÓN
Esta es una posible solución al ejercicio planteado, escrita en C. La notación usada para expresar las
operaciones con semáforos es la que se ha ofrecido este curso en el fichero semaforo.h.
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include “semaforo.h”
// Variables globales
Semaforo s[3]; // Semáforos para sincronizar los hilos
void* Hilo_impresor(void* id) {
int i;
int myid = (int)id; // Identifica qué semáforo debe usar
for (i=myid; i<100; i+=3) {
// Hacemos una operación WAIT sobre el semáforo para sincronizar
WAIT(&s[myid]);
printf(“%d\n”, i);
fflush(stdout); // Vacía el buffer de salida estándar
SIGNAL(&s[(myid+1)%3]); // Permite proceder al siguiente hilo en la secuencia
}
return NULL;
}
main()
{
pthread_t hilo1, hilo2, hilo3;
void *dummy;
// Inicializamos los semáforos
INICIASEM (&s[0], 1)
INICIASEM (&s[1], 0)
INICIASEM (&s[2], 0)
// Lanzamos los tres hilos impresores
printf("Comienza la impresión de los números ...\n");
pthread_create(&hilo1, NULL, Hilo_impresor, (void *)0);
pthread_create(&hilo2, NULL, Hilo_impresor, (void *)1);
pthread_create(&hilo3, NULL, Hilo_impresor, (void *)2);
// Esperamos por la finalización de los hilos
pthread_join(hilo1, &dummy);
pthread_join(hilo2, &dummy);
pthread_join(hilo3, &dummy);
printf("Fin del programa\n");
}
Página 3 de 3
1 2 3 test extra NOTA
// los dos tipos de calidades
enum TCalidad { CALIDAD_A, CALIDAD_B };
// Coloca una nueva mano al final de la cinta
void ProduceMano (Mano* una_mano, TCalidad calidad);
// Recoge la primera mano de plátanos que está en la cinta
Mano* RecogeMano();
// Rutina que nos dice si la cinta está vacía
bool CintaVacía();
// Rutina que nos dice de qué calidad es la primera mano que hay
// actualmente en la cinta. No modifica el contenido de la cinta.
TCalidad CalidadSiguienteMano();
Página 1 de 9
SOLUCIÓN
Esta es una posible solución que evita al máximo la espera activa.
Pueden plantearse otras múltiples soluciones menos eficientes.
// --- Productor
P(mutex);
bool estabaVacia = CintaVacia();
ProduceMano(mano,calidad);
if (estabaVacia) {
if (esperandoA && calidad==CALIDAD_A) {
esperandoA = false;
SIGNAL(señorA);
}
else if (esperandoB && calidad==CALIDAD_B) {
esperandoB = false;
SIGNAL(señorB);
}
}
V(mutex);
// --- Señor A
// Nos bloqueamos si la cinta está vacía o no hay una mano
// de calidad «A»
P(mutex);
if ( CintaVacia() || CalidadSiguienteMano() != CALIDAD_A ) {
esperandoA = true;
V(mutex);
WAIT(señorA);
P(mutex);
}
mano = RecogeMano();
Página 2 de 9
Nombre y apellidos DNI/NIE
V(mutex);
Semáforo mutex=1;
// --- Productor
P(mutex);
ProduceMano(mano,calidad);
V(mutex);
// --- Consumidor
Mano* consume (TCalidad mi_calidad) {
// bucle de espera activa
// sencillo, pero tremendamente ineficiente
P(mutex);
while ( CintaVacia() ||
CalidadSiguienteMano() != mi_calidad ) {
V(mutex);
// haz una pausa a ver si cambia el estado
P(mutex);
}
mano = RecogeMano();
V(mutex);
return mano;
}
// --- Señor A
mano = consume(CALIDAD_A);
// --- Señor B
mano = consume(CALIDAD_B);
Página 3 de 9
2 (1 punto) a) Un sistema realiza una gestión de memoria virtual mediante paginación por demanda. El
tamaño de página es 512 bytes, el espacio lógico de direcciones 8KBytes y el espacio físico de direcciones
4KBytes. Suponga que en el sistema se encuentra en memoria un solo proceso y que el contenido de los
marcos de página es el siguiente:
Marco
Página
físico
0 Pág. 4
1 Pág. 9
2 Pág. 5
3 Pág. 1
4
5
6
7
Asumiendo una política de reemplazo local de páginas mediante el algoritmo óptimo, y dada la siguiente
secuencia de direcciones lógicas de acceso a memoria 0x0458, 0x066D, 0x0801, 0x026E, 0x0AD8,
represente el estado final de la memoria física y de la tabla de páginas del proceso tras la secuencia de
accesos a memoria.
SOLUCIÓN
Espacio físico de direcciones = 4Kbytes = 212 bytes
Tamaño de página = 512 bytes = 29 bytes.
Por tanto la estructura de las direcciones físicas es la siguiente:
Dirección física (12 bits)
Página Desplazamiento
3 bits 9 bits
Página 4 de 9
Nombre y apellidos DNI/NIE
Página 5 de 9
Como se puede observar se producen dos fallos de página, y la tabla de páginas del proceso quedaría de la
siguiente forma:
Página Marco Bit
lógica validez
0 I
1 3 V
2 I
3 1 V
4 0 V
5 2 V
6 I
7 I
8 I
9 1 I
10 I
11 I
12 I
13 I
14 I
15 I
Si consideramos que al proceso se le pueden asignar los marcos libres de memoria, aplicando la política de
reemplazo óptima, la memoria reflejaría los siguientes cambios:
Página 6 de 9
Nombre y apellidos DNI/NIE
Como se puede observar se producen igualmente dos fallos de página, y la tabla de páginas del proceso
quedaría de la siguiente forma:
b) Se tiene un sistema de memoria virtual con paginación a dos niveles que permite agrupar las páginas en
“directorios de páginas”. Cada directorio de páginas puede contener hasta 256 páginas. Los espacios de
direcciones lógicas de este sistema son de 4Gbytes y el tamaño de página es de 4Kbytes. El espacio de
direcciones físicas es de 1Gb. Describa la estructura de las direcciones lógicas y de las direcciones físicas de
este sistema de memoria virtual. Es un requisito dejar constancia por escrito de su planteamiento.
SOLUCIÓN
Espacio de direcciones físicas = 1 Gb = 230 bytes. Por tanto se necesitan 30 bits para direccionar el espacio
físico de direcciones:
Dirección física
30 bits
Tamaño de página = 4 Kbytes = 212 bytes. Por tanto se necesitan 12 bits para el desplazamiento dentro de
una página:
Espacio lógico de direcciones = 4 Gbytes = 232 bytes. Por tanto se necesitan 32 bits, es decir, 4 bytes para
direccionar el espacio lógico de direcciones y por consiguiente el tamaño de una dirección lógica es 32 bits:
Dirección lógica
32 bits
Página 7 de 9
Cada directorio de páginas puede contener 256 = 28 páginas. Por tanto se necesitan 8 bits para el segundo
nivel de paginación. Si para el desplazamiento se necesitan 12 bits, nos restan 12 bits que serán los
empleados para el primer nivel de paginación:
3 (1 punto) Tenemos un sistema de archivos tipo UNIX en el que para localizar los bloques de un archivo
se utilizan 10 entradas directas, una entrada indirecta, una entrada doblemente indirecta y una entrada triple.
Los bloques tienen un tamaño de 2 Kbytes y el tamaño de los índices (direcciones de bloques de disco) es
de 32 bits.
En este sistema, un programa UNIX crea un fichero y realiza sobre él una operación write() de 55 millones
de bytes.
NOTA: En este ejercicio, dada la dificultad para realizar los cálculos sin poder emplear calculadora,
obtendrán una calificación del 100% aquellos apartados donde la lógica y el razonamiento seguido sea el
correcto aunque no se de el resultado exacto.
a) ¿Cuántos bloques de disco ocupa ahora el fichero, incluyendo bloques de índices?
Si dividimos 55 millones entre el tamaño de bloque (2048 bytes), veremos cuantos bloques serán
necesarios para almacenar esta cantidad de información:
55 millones/ 2048 = 26855,47 => Por tanto, se necesitan 26856 bloques para almacenar los datos, de
forma que del bloque 26856 se ocupan únicamente 960 bytes
Ahora debemos calcular el número de bloques índices necesarios:
Número de bloques a los que podemos apuntar con las entradas directas: 10
Número de bloques a los que podemos apuntar con la entrada indirecta: Tenemos que cada índice
ocupa 4 bytes (32 bits), por lo que el número de índices que caben en un bloque será: 2048 / 4= 2 11 /22
= 29 = 512 índices. Por tanto con la entrada indirecta podemos apuntar a 29 = 512 bloques
Número de bloques a los que podemos apuntar con la entrada doble indirecta: 29 * 29 = 218 bloques =
262144 bloques.
Número de bloques a los que podemos apuntar con la entrada triple indirecta: 2 9 * 29 *29 = 227 bloques.
En nuestro caso, como necesitamos apuntar a 26856 bloques, necesitaremos las 10 entradas directas,
la entrada indirecta (512) y de la entrada doble indirecta necesitaremos 26856 - 512 - 10 = 26334
índices. Para calcular el número bloques índices de la entrada doble indirecta que se necesitan,
dividimos 26334 / 512 = 51,43. Es decir, necesitaremos 52 bloques índices. En resumen necesitamos
1 (bloque índice entrada indirecta)+ 1 (bloque índice de la entrada doble indirecta)+ 52 (bloques
índices de la entrada doble indirecta) = 54 bloques índices.
Por tanto, el total de bloques que ocupará el fichero es 26856 bloques datos + 54 bloques índices =
26910 bloques.
Página 8 de 9
Nombre y apellidos DNI/NIE
Por otro lado, si analizamos el número de bloques al que podemos apuntar con la estructura de control
indicada en el ejercicio, tenemos que podemos apuntar a 10 + 512 + 2 18 + 227 bloques =134.480.394
bloques
Por tanto, el tamaño máximo de un fichero viene determinado por el número de bloques a los que
podemos apuntar con la estructura de control indicada en el ejercicio y será: (10 + 512 + 2 18 + 227
bloques ) * 2048 bytes.
c) Si la gestión del espacio en disco fuera enlazada y el tamaño del disco fuera de 8Terabytes, con el
mismo tamaño de bloque, ¿cuántos bloques de disco ocuparía el fichero anterior tras realizar las
mismas operaciones?
Nos indican que el tamaño del disco es 8Tbytes = 23 * 210 * 210* 210 * 210 = 243 bytes. Para saber el
número de bloques, dividimos el tamaño del disco entre el tamaño de bloque: 243 / 211 = 232 bloques.
Por tanto, para poder apuntar a 232 bloques, el tamaño del puntero debe ser 32 bits, es decir, 4 bytes.
Por tanto, la cantidad de información que se almacena en cada bloque será 2048 – 4 = 2044 bytes.
Para calcular el número de bloques necesarios para almacenar un fichero con 55 millones de bytes,
dividimos la cantidad de información que debemos almacenar entre el número de bytes que se pueden
almacenar en cada bloque: 55 millones / 2044 = 26908,02. Es decir, se necesitarán 26909 bloques.
d) Si el sistema de archivos aquí descrito se emplea en un sistema informático donde el 99% de los
ficheros tiene un tamaño aproximado de 24KBytes, ¿cuál de los dos sistemas de gestión de espacio
en disco emplearía y por qué?
Vamos a analizar en primer lugar el número de bloques necesarios para almacenar un fichero de
24KBytes (24576 bytes) según los dos sistemas de gestión de espacio en disco.
Para el caso de la asignación indexada, necesitamos 24 KBytes / 2 KBytes = 12 bloques. Por tanto,
necesitamos las 10 entradas directas más la entrada indirecta para apuntar a los dos bloques
restantes. Por tanto, en ocupación tendríamos los 12 bloques de datos más el bloque índice indirecto,
es decir, 13 bloques.
En el caso de la enlazada necesitamos 24 Kbytes /2044 = 12,02 bloques, es decir, necesitaremos 13
bloques.
Por tanto, desde el punto de vista del espacio ocupado por los ficheros en ambos casos y sin tomar en
cuenta el espacio ocupado por las estructuras de control de las entradas de directorio, ambos
sistemas de gestión de espacio tendrían aproximadamente el mismo costo. Sin embargo, es cierto que
si el 99% de los archivos tienen este tamaño, en la mayoría de los casos estamos desaprovechando el
espacio ocupado por el puntero doble y triple indirecto en la estructura de control de la indexada.
El ejercicio no da ninguna información sobre los tipos de acceso a los ficheros en el sistema y las
operaciones habituales sobre el sistema de archivos, un dato que es importante para decantarnos por
uno u otro sistema. Por ejemplo, si se realizan con frecuencia accesos directos a los ficheros, el
sistema de gestión indexada sería más eficiente que la enlazada, pues en este último caso sabemos
que penalizamos los accesos directos ya que obligan a leer todos los bloques previos al bloque donde
se encuentra la información a leer o modificar.
Página 9 de 9
1 2 3 4 test extra NOTA
La dirección física 1024 se corresponde con el byte 0 del marco 1 de memoria. Según la información
proporcionada en el enunciado, no se nos da información sobre la página lógica que se encuentra
cargada en ese marco de página, por lo que no es posible averiguar la dirección lógica con la que se
corresponde dicha dirección física.
2 (1,25 puntos) En un sistema operativo se utiliza una estructura de inodes parecida a la de Unix. Los
bloques de datos son de 1024 bytes. Las entradas en los inodes dedican 64 bits al tamaño del archivo y 16 bits
a los punteros de los bloques. Un inode tiene ocho entradas de direccionamiento directo, una de
direccionamiento indirecto simple y otra de direccionamiento indirecto doble.
Sobre esta descripción, indique si cada una de estas afirmaciones es verdadera o falsa. Debe justificar sus
respuestas:
a) El tamaño máximo de un fichero es de 264 bloques.
La afirmación es incorrecta.
Se indican en el enunciado varios parámetros que pueden condicionar el tamaño máximo de un
fichero. Por tanto, es conveniente analizarlos todos ya que el tamaño máximo estará condicionado por
aquel parámetro más restrictivo:
· 64 bits del inode dedicados al tamaño del archivo: un archivo podría tener un máximo de 264 bytes,
es decir, 254 bloques.
· 16 bits para los punteros a bloques: podremos direccionar hasta 216 bloques diferentes.
· Según la estructura del inode, un fichero que ocupe todo el espacio tendrá 8+512+512+(512×512)
bloques, es decir, aproximadamente 218 bloques.
Cualquiera de estas cantidades supera con creces el tamaño de 264 bloques.
La afirmación es incorrecta.
El número de bloques de datos que puede llegar a tener un archivo es de
8+512+512+(512×512)=262664. A esto hay que sumar los bloques asignados al archivo para
mantener sus tablas de índices, que en el peor caso serían 1 indirecto simple + 1 maestro del indirecto
doble + 512 indirectos dobles = 514 bloques de índices. La cantidad total, pues, es superior a la que
indica el enunciado.
Respuesta variable.
Para empezar, no se nos da el dato del tamaño del disco, con lo cual no se puede calcular una cifra.
En segundo lugar, lo normal sería que las estructuras de control del sistema de ficheros se lleven una
·∙
Página
1
de
5
parte del espacio físico, con lo cual no puede existir un archivo «que utiliza todo el disco», al menos en
el sentido literal de la afirmación. Si se toman estas consideraciones, la respuesta debería ser «la
afirmación no tiene sentido» o «no hay datos suficientes para calificar la afirmación».
Si por «disco» entendemos «espacio direccionable», serían 216 bloques de 1024 bytes, por tanto
64MiB. A este espacio ocupado habría que descontarle los bloques necesarios para mantener los
índices, que haría que la longitud del archivo esté por debajo de esos teóricos 64MiB. No obstante, si
la expresión «tamaño de un archivo» se entiende como el «espacio ocupado por un archivo», sí podría
considerarse correcta la afirmación.
3 (1 punto) A continuación se muestran las demandas futuras de CPU y E/S de un conjunto de procesos
secuenciales que arriban simultáneamente a un ordenador con un solo procesador. En cada casilla se
muestra el tiempo requerido para completar una petición de CPU o E/S, en unidades de tiempo arbitrarias.
Las casillas vacías indican que no hay peticiones futuras.
Por ejemplo, el proceso 3 demanda 2 unidades de tiempo de CPU, luego pedirá 4 unidades de E/S, tras lo
que necesita 1 unidad de tiempo de CPU, atendida la cual finaliza.
CPU E/S CPU
Proceso 1 7 1 6
Proceso 2 4 4 4
Proceso 3 2 4 1
Proceso 4 1 7 1
Obtener el diagrama de Gantt, el tiempo medio de retorno y el tiempo medio de espera al aplicar Round-
Robin con cuanto igual a 3 unidades de tiempo como política de planificación.
4 (1,5 puntos) Queremos procesar una imagen de tamaño N×N, siendo N una potencia de 2. El objetivo
es aplicar cierta operación matemática a cada uno de los píxeles de la imagen. Para ello disponemos ya de
una función Process_Pixels(…) , descrita más abajo. El procesamiento se hará concurrente, mediante
M hilos (M es una potencia de 2). Cada hilo ejecutará la misma rutina, llamada ImageThread() , sin
argumentos, que debe usted implementar. La rutina debe estar escrita de forma que cada hilo procese un
subconjunto de píxeles, garantizando que todos los píxeles de la imagen quedan procesados y que no se
procesa un mismo píxel varias veces. Utilice semáforos en caso de que sea necesario aplicar alguna
sincronización entre hilos.
Considere que tanto M como N son cantidades constantes y conocidas de antemano.
Process_Pixels (row,col,npixels) procesa npixels consecutivos de la fila row a partir de la columna col
de la imagen. Esta función no tiene ningún control de concurrencia interno.
Página
2
de
5
Nombre y apellidos DNI/NIE
SOLUCIÓN
Esta es una de las soluciones más simples para el problema. Consiste en que cada hilo toma un bloque de
filas contiguas de la imagen. El número de filas por hilo es N/M, que es un número exacto según se ha
explicado en el enunciado. Aquí está escrita en lenguaje C.
Página
3
de
5
Esta es otra solución más sofisticada, en la que cada hilo va tomando bloques de slice píxeles, empezando
desde la posición (0,0). Para simplificar los cálculos, se asume que el valor de slice es un divisor exacto de N,
para que sean más simples los cálculos.
La solución aquí mostrada tiene varias ventajas sobre la anterior: no necesita conocer cuál es el número de
hilos que participan y rinde mejor tiempo de ejecución si hay diferencias grandes de velocidad entre los
hilos.
Página
4
de
5
3 Solución del ejercicio 3. Esta es una de las posibles soluciones válidas. A lo largo de la simulación pueden producirse entradas y salidas simultáneas de procesos;
dependiendo del orden en que las procesemos, obtendremos diferentes planificaciones.
RR, q=3
tiempo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
CPU P1 P2 P3 P4 P1 P2 P3 P1 P1 P4 P2 P1 P2
P3 P2
E/S P4
P1
Cuando termina un proceso una operación de E/S al mismo tiempo que a otro proceso se le cumple su cuanto y a este último aún que faltan ciclos de disfrute de la
CPU, se ha optado por incluir en primer lugar en la cola de preparados al proceso que termina la operación de E/S. En caso de que varios terminen
simultáneamente sus operaciones de E/S se ha cogido al de menor Pi.
CPU ociosa
1
2
Fundamentos de los Sistemas Operativos 3
Examen Parcial
19 de abril de 2013
Nombre Titulación
SOLUCIONES Grado
d) Las primeras versiones de iOS (sistema operativo del iPad y el iPhone) no ofrecían
multitarea para las aplicaciones de usuario, y sólo recientemente se ha incorporado esa
funcionalidad. ¿Qué motivos puede haber para que un fabricante de sistemas operativos
se resista a incorporar la multitarea, teniendo en cuenta las ventajas que aporta al sistema
y a los usuarios?
Solución
Esta pregunta puede responderse de múltiples maneras, dependiendo de la postura que adopte el estudiante. La cuestión
aquí es saber argumentar la posible posición de la empresa desde las bases teóricas de la asignatura.
No obstante lo anterior, a continuación exponemos una discusión sobre el caso planteado, para dar ejemplos de
argumentos que se podrían usar en la respuesta.
Discusión: La postura de la empresa puede estar fundamentada en que la multitarea favorece un
mayor consumo de recursos, ya que fomenta la existencia simultánea de varios procesos en memoria
y también que el procesador se encuentre más tiempo activo, con lo cual puede haber un mayor
consumo energético, cuestión que es muy crítica en los dispositivos portátiles. Un uso inadecuado de
la multiprogramación podría llevar a un agotamiento prematuro de la memoria y de la batería, lo cual
empeoraría la percepción del usuario hacia el dispositivo (el usuario no pensaría «el planificador de
procesos hace que la batería dure menos», sino más bien «a este cacharro le dura poco la batería»). En
el caso que nos atañe, el fabricante del sistema operativo es también el fabricante del hardware, y sus
ingresos provienen de la venta del hardware. No le interesa favorecer una percepción negativa hacia
su hardware, aunque la causa no sea del propio hardware.
e) Defina brevemente las tres propiedades que debe cumplir una solución válida al problema
de la sección crítica.
Solución
Las tres propiedades son: exclusión mutua, progreso y espera limitada.
Ver definiciones en Silberchatz, séptima edición, pág. 173; diapos tema de concurrencia, página 17.
f) ¿Qué clases de interfaces ofrece un sistema operativo? ¿A qué tipos o perfiles de personas
se las ofrece?
Solución
El sistema operativo es, entre otras cosas, una interfaz con los recursos del hardware. Esta interfaz se
puede ofrecer de muchas formas, que normalmente se agrupan en tres tipos básicos: interfaz de
programación (API); interfaz de línea de órdenes (CLI) e interfaz gráfica (GUI). La API es una
interfaz que se le ofrece al programador. La CLI y la GUI se ofrecen a todos los usuarios del sistema,
aunque la CLI suele estar más orientada a usuarios avanzados (ej. administradores de sistemas,
programadores, etc.)
Nota: no hace falta usar los términos API, CLI y GUI para dar por válida la respuesta. Lo que cuenta
son los conceptos de interfaz para el programador e interfaz para usuarios finales.
Ver Silberchatz, páginas 35-36; diapos temas 1 y 3.
A continuación, se presenta una tabla con las demandas futuras de CPU y E/S de una serie de
procesos, junto con sus tiempos de llegada al sistema.
Se considerará la E/S como un recurso no compartible y gestionado con una política FCFS.
b) Solución
Tiempos de retorno:
P1: 9-0=9
P2: 13-1=12
P3:12-4=8
Media = (9+12+8)/3
Tiempos de espera:
P1: 0
P2: (6-4) + (10-8) = 4
P3: (9-6) = 3
Media = (0+4+3)/3
c) Solución
Desde luego, puede existir inanición, ya que si continuamente están llegando nuevos procesos al
sistema, los que están en la cola Q1 nunca podrán usar la CPU. Para evitar este problema sería
necesario modificar la política de planificación, por ejemplo, permitiendo que los procesos que llevan
mucho tiempo en la cola Q1 pudieran ser promovidos a la cola Q0 de mayor prioridad.
a) Solución
La solución planteada se basa en el uso de dos variables compartidas, flag0 y flag1, con las que cada
proceso advierte al otro que se encuentra en su sección crítica o que pretende entrar en ella. Para que
la solución propuesta sea válida debe cumplir las condiciones de exclusión mutua, progreso y espera
limitada.
La propuesta de solución no es válida ya que aunque cumple la propiedad de exclusión mutua, no
cumple las propiedades de progreso y espera limitada. Si ambos procesos alternan la ejecución de las
sentencias 3, 4, 5, 6 y 9 quedarían en el bucle de forma indefinida. Por tanto, no se cumple la
propiedad de progreso. Tampoco cumple la propiedad de espera limitada, puesto que el código no
ofrece ninguna garantía a un proceso que se encuentre en el protocolo de entrada a la sección crítica,
que terminará accediendo a la sección crítica en un tiempo finito. Por ejemplo, supongamos que el
proceso 0 entra en la sección crítica. En ese caso, si el proceso 1 intenta acceder a la sección crítica,
quedará iterando en el bucle de la sentencia 6. Podría ocurrir que el proceso 0 termine la sección
crítica y vuelva a acceder. Y esto podría suceder de forma indefinida.
b) Solución
c) Solución
A continuación se presenta una posible solución al problema. No pretende ser la única ni la mas
óptima.
1
Fundamentos de los Sistemas Operativos 2
Convocatoria ordinaria – PRIMERA PARTE 3
7 de junio de 2013
1 (5 puntos) Conteste de forma precisa a las siguientes cuestiones. Cada pregunta vale un punto.
a. ¿Cuál es la función del shell en un sistema operativo?
Es el componente que ofrece una interfaz a los operadores y administradores del sistema, para
que puedan trabajar con el sistema a través de órdenes básicas que se teclean en una consola.
Ver Silberschatz, séptima edición, pág. 37; Wikipedia; diapos tema 3, página 10.
b. ¿Cuál es la diferencia entre concurrencia y paralelismo?
El paralelismo es un caso particular de concurrencia en el que hay ejecución simultánea de
procesos, en distintos procesadores.
Ver diapos tema de Concurrencia, páginas 6 y 7.
c. ¿Qué diferencia hay entre interbloqueo e inanición?
En el caso del interbloqueo, se trata de un estado de bloqueo colectivo entre varios procesos
que esperan mutuamente entre ellos. Por su parte, la inanición es el estado de un proceso (o
varios) que queda permanentemente bloqueado en espera de un recurso a causa de la política
de gestión.
Podemos ver que una de las diferencias entre interbloqueo e inanición es que esta última puede
existir un único proceso perjudicado/bloqueado, mientras que en el interbloqueo
necesariamente existirán dos o más procesos bloqueados.
Otra diferencia tiene que ver con la causa del problema. La inanición tiene que ver con la forma
en la que el sistema asigna prioridades de acceso a los recursos; el interbloqueo puede estar
originado por muchos motivos.
Las soluciones a ambos problemas también difieren: la inanición la podemos gestionar
aplicando medidas correctoras al cálculo de prioridad de los procesos (ej. con técnicas de
envejecimiento). Sin embargo, el tratamiento del interbloqueo es mucho más complejo.
d. ¿Qué es un semáforo binario?
Un semáforo binario es aquel que sólo permite contener dos estados o valores, 0 y 1, a
diferencia de un semáforo general, en el que no hay un límite superior al valor que puede
contener.
Ver diapos de concurrencia, página 46.
e. Si una caché puede ser tan grande como el dispositivo para el que se utiliza (ej. memoria
RAM sobre disco duro), ¿por qué no hacerla así de grande y con ello eliminar la necesidad del
dispositivo?
Hay que tener en cuenta la existencia de una jerarquía de memorias, según la cual, las
tecnologías de memoria más rápidas del mercado son también las más caras. La RAM es
mucho más cara que el disco, así que si sustituyéramos el disco por un dispositivo basado en
RAM, nuestro computador sería mucho más costoso. Por otro lado, si se cumple el principio de
localidad y nuestras cachés nos dan una buena tasa de aciertos, es posible que con una
pequeña cantidad de RAM podamos tener un tiempo de acceso medio a disco sólo un poco
superior al tiempo de acceso si los datos estuvieran siempre en RAM, y por un precio
sensiblemente inferior.
Hay otro aspecto que puede influir en descartar la RAM, y es el carácter volátil de esta
tecnología. Para mantener datos en una RAM de forma continuada, necesitamos alimentación
eléctrica permanente, y eso supone otro coste adicional. Las tecnologías de discos no necesitan
suministro de electricidad para mantener la información almacenada.
2 (3 puntos) Un sistema operativo multihilo, con un solo procesador, implementa un algoritmo de
planificación de CPU basado en el Round Robin que funciona de la siguiente forma: a cada hilo que
entra en el procesador se le concede un cuanto de tiempo inversamente proporcional al número de
hilos que tiene el proceso pesado al que pertenece. Expresado algebraicamente, el cuanto de tiempo
concedido es:
𝑄𝑏𝑎𝑠𝑒
𝑄𝑎𝑐𝑡𝑢𝑎𝑙 =
𝑁𝐻𝑎𝑐𝑡𝑢𝑎𝑙
donde Qbase es una constante del sistema y NHactual es el número de hilos que contiene el proceso
actual. Con un ejemplo: si Qbase=12 milisegundos, el proceso PA tiene 2 hilos y el proceso PB tiene
3 hilos, cuando entre en CPU un hilo del proceso PA, se le concederá un cuanto de 12/2=6
milisegundos. Cuando entre un hilo del proceso PB, se le concederá un cuanto de 12/3=4
milisegundos. El cuanto se ajusta dinámicamente a medida que cada proceso crea nuevos hilos o
estos finalizan. Por lo demás, la política funciona como un Round Robin clásico.
TAREA. Tiene usted que redactar un breve informe que valore técnicamente esta política de
planificación. (extensión recomendada: entre 200 y 500 palabras). En su valoración, no olvide tratar
aspectos como estos:
• Cuál puede ser la motivación para que alguien proponga esta política, o qué objetivos puede
perseguir con ella.
• Qué efectos tiene esta política de planificación sobre el sistema en general, especialmente
centrándose en las diferencias con el Round Robin clásico.
• Cómo influye el número de hilos de un proceso en el tratamiento que recibe en el
procesador. Piense en los casos extremos (procesos con muchos hilos o procesos con un
único hilo).
• Si hay aspectos dentro de la política que entrañan riesgos o problemas.
La lista de tópicos anterior es orientativa, no son los «apartados de la pregunta». El objetivo es que
usted redacte un informe, organizado como usted prefiera, siempre que sea claro, correctamente
escrito y que valore razonadamente la política utilizando los conceptos teóricos de la asignatura.
La característica fundamental de esta variante del Round Robin es que el número de hilos de un
proceso afecta a su tiempo de disfrute del procesador. Cuantos más hilos contenga un proceso
pesado, más cortas serán las rodajas de tiempo asignadas a ese proceso. Puede verse que si
todos los hilos de un proceso pesado están en la cola de preparados, en cada ronda de
atención a la cola, el proceso recibirá en conjunto un tiempo de CPU exactamente igual a
Qbase, cantidad que es independiente del número de hilos. Esto significa que si un proceso
tiene muchos más hilos que otro, no recibe más tiempo de CPU por ese motivo. Esto invita a
pensar que uno de los motivos para implementar esta política es equilibrar el reparto de
tiempo de CPU asignado a los distintos procesos, de forma que no se favorezca a los procesos
que tienen muchos hilos, que es algo que sí ocurriría en un Round Robin convencional (más
hilos, más rodajas de tiempo).
Tal y como se expone la política, no se tiene en cuenta el estado de los hilos a la hora de hacer
el cálculo del cuanto. Así, un proceso que tenga N hilos y sólo M de ellos en la cola de
preparados recibirá un total de M/N*Qbase en cada ronda de atención a la cola de preparados.
Esto implica que, en el caso general, cuantos más hilos tenga un proceso pesado, más
probable es que reciba menos CPU en relación con otros procesos que tengan menos hilos.
Por todo lo anterior, esta política también se puede considerar una técnica para penalizar a los
procesos con mucha concurrencia interna, y también para influir en los programadores para
que no abusen de la creación de hilos.
Un posible problema de esta política es que el cuanto de tiempo puede hacerse demasiado
pequeño, para un proceso que tenga una cantidad elevada de hilos. Un proceso que tenga N
hilos en la cola de preparados va a generar N veces más cambios de contexto por unidad de
tiempo que un proceso con un único hilo. Esto puede tener un impacto en el rendimiento
general del sistema, ya que se incrementaría el tiempo dedicado a cambios de contexto (que es
improductivo).
3 (2 puntos) Diseñe una solución para dos procesos al problema de la sección crítica, basada en la
instrucción atómica SWAP(A,B). La solución debe cumplir al menos la propiedad de exclusión
mutua y la de progreso. No hace falta garantizar la espera limitada. Justifique la validez de la solución.
Puede verse una solución en las diapos del Tema 6, página 32.
Calificación
1
2
Fundamentos de los Sistemas Operativos 3
Convocatoria ordinaria – SEGUNDA PARTE
7 de junio de 2013
(+0,5 puntos extras) Indique cuántas preguntas cree usted que ha acertado en el test: _____
Si la desviación entre su respuesta y los aciertos realmente obtenidos es menor o igual que 1, obtendrá usted 0,5 puntos
extras en la calificación del examen. Si la desviación es de 2, obtendrá usted 0,25 puntos extras.
2 (2 puntos) Ayoze y Belinda son compañeros de estudios. Acaban de comprarse sendas memorias
USB de 16GB para guardar el material de sus asignaturas, consistente sobre todo en documentos
ofimáticos y código fuente. Ayoze formatea su memoria mediante FAT32, mientras que Belinda lo
hace con NTFS. Los dos guardan en sus respectivas memorias exactamente los mismos archivos,
pero mientras a Ayoze el sistema le reporta que la memoria tiene 8GB de espacio libre, a Belinda el
sistema le reporta 9GB de espacio libre.
TAREA. Indique qué causas pueden haber provocado que haya una diferencia tan sustancial en el
espacio libre que hay disponible en cada memoria, teniendo en cuenta que la única diferencia entre
ambas es el tipo de sistema de ficheros.
NOTA: no importa que usted no conozca los detalles de FAT32 y NTFS. El objetivo es que usted
señale posibles factores que originan esta diferencia de espacio libre, derivados de las posibles diferencias
en la la implementación del sistema de archivos.
Hay múltiples factores que pueden provocar estas diferencias. Algunos de ellos pueden ser:
• Un sistema de archivos dedica parte del dispositivo de almacenamiento para almacenar
información de estado del sistema (ej. lista de bloques libres, apuntadores a bloques
dañados, i-nodes, FAT, etc.) Cada sistema de archivos tendrá un formato distinto y, en
consecuencia, habrá variaciones en el espacio que quede disponible.
• Cada uno de los sistemas de archivos puede estar empleando un tamaño de bloque
diferente. Por ejemplo, el FAT32 podría estar usando bloques de 64KB y el NTFS,
bloques de 1KB. Esto puede afectar sensiblemente al espacio consumido, sobre todo si
hay muchos ficheros pequeños que ocupan un solo bloque.
• Cada archivo puede consumir un espacio adicional en estructuras relacionadas con sus
atributos (fechas de acceso, permisos de acceso, versiones, etc.), o bien estructuras
necesarias para conocer cuáles son sus bloques de datos. El tamaño de estas
estructuras puede ser bastante diferente entre cada sistema de ficheros.
• También puede haber diferencias si sólo uno de los sistemas de ficheros ha detectado
bloques dañados, aunque este factor depende de diferencias físicas en los dispositivos,
que en el enunciado de la pregunta no se han dado como posibles.
3 (3 puntos + 2 puntos extras) En una fábrica se tienen tres tipos de procesos que modelan una
planta embotelladora de bebidas, y que trabajan en paralelo:
• Varios procesos de tipo «Embotellador» se encargan de preparar botellas de un litro.
• Un único proceso «Empaquetador» se encarga de empaquetar y reponer las cajas donde se
van colocando las botellas y colocarlas en un pale.
• Un único proceso «Almacenista» se encarga de recoger el pale, buscarle un hueco en el
almacén y reponer los pales de forma que los procesos empaquetadores puedan colocar
nuevas cajas.
Cada vez que un embotellador prepara una botella, ésta se coloca en una caja, que tiene una
capacidad de 12 botellas. Si al colocar la botella la caja queda llena, se envía una señal al
empaquetador, que toma la caja, la sella y la coloca en un pale. El empaquetador deposita una nueva
caja de 12 botellas, totalmente vacía. Cada pale tiene una capacidad para 24 cajas. Si al colocar la caja
en el pale, éste queda completo, se envía una señal al almacenista, que toma el pale y lo ubica en el
almacén. El almacenista deposita un nuevo pale, totalmente vacío.
Mientras el empaquetador está haciendo su labor, los embotelladores no pueden colocar sus botellas,
ya que en esos momentos no hay una caja disponible. Mientras el almacenista está haciendo su labor,
el empaquetador no puede colocar cajas, ya que en esos momentos no hay un pale disponible. Se
asume que siempre existirá hueco en el almacén.
En el momento inicial existe una caja vacía y un pale totalmente vacío. Una vez que arrancan, los
procesos ejecutan su actividad una y otra vez en un bucle infinito.
TAREA. Tiene usted que describir los algoritmos del embotellador, el empaquetador y el
almacenista, implementando con semáforos las sincronizaciones que sean necesarias.
Si quiere obtener puntos extras se proponen estas tareas adicionales:
• Extra 1 (+1 punto). Modifique el sistema de tal forma que, cuando se consigan llenar 20
pales, todos los procesos finalicen.
• Extra 2 (+1 punto). Modifique el sistema de tal forma que los procesos embotelladores
puedan colocar botellas mientras el almacenista está realizando su tarea.
EXTRA 1
Semaforo embotella(0), empaqueta(0), almacena(0), alm_empaq(0), mutex(1);
int nlitros=12;
int ncajas=24;
int npales=0;
Proceso EmbotelladorN() { Proceso Empaquetador() {
for(;;) { for(;;) {
// Prepara una botella empaqueta.P();
mutex.P(); // Empaqueta la caja actual;
if (npales==20) { ncajas‐‐;
mutex.V(); if (ncajas==0) {
break; almacena.V();
} alm_empaq.P();
nlitros‐‐; }
if (nlitros==0) { if (npales==20) {
empaqueta.V(); embotella.V();
embotella.P(); break;
} }
mutex.V(); // Pone una caja nueva vacía
} nlitros=12;
} embotella.V();
}
}
Proceso Almacenista() {
for(;;) {
almacena.P();
npales++;
// Coger y colocar pale;
if (npales==20) {
alm_empaq.V();
break;
}
// Poner un nuevo pale vacío
ncajas=24;
alm_empaq.V();
}
}
EXTRA 2
Semaforo embotella(0), empaqueta(0), almacena(0), alm_empaq(0), mutex(1);
int nlitros=12;
int ncajas=24;
Proceso EmbotelladorN() { Proceso Empaquetador() {
for(;;) { for(;;) {
// Prepara una botella empaqueta.P();
mutex.P(); // Empaqueta la caja actual;
nlitros‐‐; // Pone una caja nueva vacía
if (nlitros==0) { nlitros=12;
empaqueta.V(); embotella.V();
embotella.P(); ncajas‐‐;
} if (ncajas==0) {
mutex.V(); almacena.V();
} empaqueta.P();
} }
}
}
Proceso Almacenista() {
for(;;) {
almacena.P();
// Coger y colocar pale;
// Poner un nuevo pale vacío
ncajas=24;
empaqueta.V();
}
}
Calificación
1
2
Fundamentos de los Sistemas Operativos 3
Convocatoria extraordinaria
27 de junio de 2013
Página
1
de
4
6. Sea
un
sistema
multiprogramado,
con
gestión
de
memoria
virtual
por
demanda
de
páginas
con
tamaño
de
página
de
4
KB.
Considere
que
la
Tabla
1
representa
la
tabla
de
páginas
de
un
proceso
P
en
un
instante
dado.
¿Cuál
es
la
dirección
física
correspondiente
a
la
dirección
lógica
0B1F?
Observe
que
todas
las
direcciones
están
expresadas
en
hexadecimal.
a. **
2AB1F.
b. 3BB1F.
c. No
hay
tal
dirección
física,
pues
se
produce
un
fallo
de
página.
d. Con
los
datos
proporcionados
no
es
posible
obtener
una
dirección
física.
7. Considerando
el
mismo
sistema
de
la
pregunta
anterior,
pero
duplicando
el
tamaño
de
página:
a. Empeoraría
el
problema
de
la
fragmentación
externa
y
disminuiría
el
tamaño
de
las
tablas
de
página.
b. **
Empeoraría
el
problema
de
la
fragmentación
interna
y
disminuiría
el
tamaño
de
las
tablas
de
página.
c. Empeoraría
el
problema
de
la
fragmentación
externa
y
aumentaría
el
tamaño
de
las
tablas
de
página.
d. Empeoraría
el
problema
de
la
fragmentación
interna
y
aumentaría
el
tamaño
de
las
tablas
de
página.
8. En
un
sistema
multiprogramado
con
gestión
de
memoria
por
paginación,
donde
los
procesos
tienen
16
KB
de
espacio
lógico,
las
páginas
son
de
1
KB
y
hay
64
KB
de
memoria
física,
sin
memoria
virtual,
la
dirección
lógica
está
formada
por:
a. 4
bits
para
la
página
y
12
bits
para
el
desplazamiento.
b. **
4
bits
para
la
página
y
10
bits
para
el
desplazamiento.
c. 6
bits
para
la
página
y
12
bits
para
el
desplazamiento.
d. 6
bits
para
la
página
y
10
bits
para
el
desplazamiento.
9. Considere
un
sistema
de
gestión
de
memoria
paginado,
con
doble
nivel
de
paginación
y
los
siguientes
parámetros:
tiempo
de
acceso
a
la
TLB
tt
u.t.,
tiempo
de
acceso
a
memoria
tm,
tasa
de
aciertos
de
la
TLB,
ta
%.
¿Cuál
de
las
siguientes
expresiones
corresponde
al
tiempo
medio
de
acceso
a
un
dato
en
memoria?
a. **
! !"" !! !! + !! + !"" − !! !! + !!!
b. 1 100 !! !! + !! + 100 − !! !! + 2!!
c. !! !! + !! + 100 − !! !! + 3!!
d. !! !! + 3!! + 100 − !! !! + !!
10. Dada
la
siguiente
cadena
de
referencias
a
memoria
en
un
sistema
con
tres
marcos
de
página
inicialmente
libres,
¿cuántos
fallos
de
página
se
producen?
0
1
2
4
0
1
3
0
1
2
4
3
a. **
9
fallos
con
la
política
de
reemplazo
FIFO,
9
con
la
de
segunda
oportunidad
y
7
con
la
óptima.
b. 10
fallos
con
la
política
de
reemplazo
FIFO,
9
con
la
de
segunda
oportunidad
y
7
con
la
óptima.
c. 10
fallos
con
la
política
de
reemplazo
FIFO,
8
con
la
de
segunda
oportunidad
y
8
con
la
óptima.
d. 9
fallos
con
la
política
de
reemplazo
FIFO,
8
con
la
de
segunda
oportunidad
y
7
con
la
óptima.
11. El
mapa
de
bits
para
mantener
el
espacio
libre
en
el
disco
ocupará:
a. **
Tantos
bits
como
bloques
tenga
el
disco.
b. Tantos
bits
como
bloques
libres
tenga
el
disco.
c. Tantos
bits
como
bloques
tenga
el
disco,
multiplicado
por
el
número
de
archivos
que
tenga
cada
bloque.
d. Tantos
bits
como
bloques
libres
tenga
el
disco,
multiplicado
por
el
logaritmo
en
base
2
del
tamaño
del
bloque.
12. El
método
de
listas
enlazadas
para
la
asignación
del
espacio
en
disco
presenta
el
siguiente
inconveniente:
a. Es
necesario
conocer
el
tamaño
máximo
de
archivo
en
el
momento
de
su
creación.
b. Genera
una
excesiva
fragmentación
externa
en
el
disco.
c. **
El
acceso
aleatorio
(directo)
a
un
archivo
es
muy
ineficiente.
d. Se
desperdicia
espacio
debido
a
las
tablas
de
índices.
13. Sea
un
sistema
de
ficheros
gestionado
con
i-‐nodos
los
cuales,
entre
otra
información,
contienen
las
siguientes
entradas
a
bloques
de
datos:
16
entradas
directas,
4
entradas
indirectas,
2
entradas
doblemente
indirectas
y
una
entrada
triplemente
indirecta.
Si
h
es
el
número
de
índices
por
bloque,
¿cuál
es
el
tamaño
máximo
que
puede
tener
un
archivo
en
este
sistema?
a. **
16+4h+2h2+h3
bloques.
b. 16+4h+2h+3h
bloques.
c. h(16+4h+2h2+h3)
bloques.
d. 16+4h+22h+23h
bloques.
(+0,5 puntos extras) Indique cuántas preguntas cree usted que ha acertado en el test: _____
Si la desviación entre su respuesta y los aciertos realmente obtenidos es menor o igual que 1, obtendrá usted 0,5 puntos extras en
la calificación del examen. Si la desviación es de 2, obtendrá usted 0,25 puntos extras.
Página
2
de
4
Marco v r m
0 2A 1 0 1
1 0F 1 0 0
2 F1 0 0 0
3 3B 0 0 0
Tabla
1:
Tabla
de
páginas.
v,
r
y
m
se
refieren
al
bit
de
validez,
el
bit
de
referencia
y
el
bit
de
modificado,
respectivamente
2 (3 puntos) La urbanización Residencial SISOP dispone de una cancha de pádel para uso y disfrute de sus
residentes. La política de uso de esta instalación deportiva es muy simple: a medida que van llegando
jugadores a la cancha, estos van ocupando un puesto a la espera de completar el cupo de 4 jugadores,
momento en el que pueden disputar un partido. Solo cuando llega el cuarto jugador, se disputa el partido.
Una vez el partido finaliza, los cuatro jugadores abandonan la cancha, dejándola libre. Si llegan jugadores
mientras se está disputando un partido, estos deberán esperar a que la cancha quede libre.
Se pide escribir un algoritmo jugador de forma que se cumplan las reglas descritas empleando semáforos como
herramienta de sincronización. Puede asumir que la acción de jugar un partido durará un tiempo finito e igual
para todos los jugadores y además puede suponer que continuamente llegan jugadores a la cancha con la
intención de jugar un partido.
SOLUCIÓN. Se presenta un algoritmo para resolver el ejercicio. Pueden existir otras soluciones
igualmente correctas.
//
Variables
globales
Semaforo
court
(4),
mutex
(1),
queue(0);
int
waitingmatch
=
0,
finishingmatch=0;
Proceso
Jugador(){
int
count;
//Protocolo
de
entrada
a
la
cancha
court.P();
//
Reservamos
plaza
mutex.P();
//
Cerramos
semáforo
para
la
modificación/consulta
de
var.
comp.
waitingmatch++;
if
(waitingmatch
<
4
)
{
mutex.V();
//
Abrimos
el
semáforo
para
evitar
interbloqueos
queue.P();
//
nos
mantenemos
bloqueados
hasta
ser
cuatro
}
else
{
//
waitingmatch
=
4,
desbloqueamos
para
jugar
partido
waitingmatch
=
0;
for(count=0;
count<3;count++)
{
queue.V();
//
despertamos
a
los
tres
jugadores
que
esperan
}
mutex.V();
}
//Jugar
partido
//
Protocolo
de
salida
de
la
cancha
mutex.P();
finishingmatch++;
if
(finishingmatch
=
4)
{
//El
último
abre
la
entrada
a
nuevos
jugadores
finishingmatch
=
0;
for(count=0;
count<4;count++)
{
court.V();
//
dejamos
libre
la
entrada
a
otros
cuatro
jugadores
}
mutex.V();
}
Página
3
de
4
3 (1 punto) En un sistema de archivos basado en FAT, tenemos la siguiente información al principio de la
FAT, y en las entradas de directorio de los archivos F1, F2, F3 y F4. ¿Qué bloques componen estos archivos?
¿Encuentra alguna incidencia en el sistema de archivos?
SOLUCIÓN:
F1: bloques 5, 7 y 9
F2: bloques 2 y 3
F3: bloques 6, 11, 12 y 13, pero hay una incidencia: el bloque 13 está marcado como defectuoso
F4: bloque 8
Página
4
de
4
Calificación
1
2
Fundamentos de los Sistemas Operativos 3
Convocatoria extraordinaria
27 de junio de 2013
(+0,5 puntos extras) Indique cuántas preguntas cree usted que ha acertado en el test: _____
Si la desviación entre su respuesta y los aciertos realmente obtenidos es menor o igual que 1, obtendrá usted 0,5 puntos extras en
la calificación del examen. Si la desviación es de 2, obtendrá usted 0,25 puntos extras.
·∙Página
2
de
4
Marco v r m
0 2A 1 0 1
1 0F 1 0 0
2 F1 0 0 0
3 3B 0 0 0
Tabla
1:
Tabla
de
páginas.
v,
r
y
m
se
refieren
al
bit
de
validez,
el
bit
de
referencia
y
el
bit
de
modificado,
respectivamente
2 (3 puntos) La urbanización Residencial SISOP dispone de una cancha de pádel para uso y disfrute de sus
residentes. La política de uso de esta instalación deportiva es muy simple: a medida que van llegando
jugadores a la cancha, estos van ocupando un puesto a la espera de completar el cupo de 4 jugadores,
momento en el que pueden disputar un partido. Solo cuando llega el cuarto jugador, se disputa el partido.
Una vez el partido finaliza, los cuatro jugadores abandonan la cancha, dejándola libre. Si llegan jugadores
mientras se está disputando un partido, estos deberán esperar a que la cancha quede libre.
Se pide escribir un algoritmo jugador de forma que se cumplan las reglas descritas empleando semáforos como
herramienta de sincronización. Puede asumir que la acción de jugar un partido durará un tiempo finito e igual
para todos los jugadores y además puede suponer que continuamente llegan jugadores a la cancha con la
intención de jugar un partido.
SOLUCIÓN. Se presenta un algoritmo para resolver el ejercicio. Pueden existir otras soluciones
igualmente correctas.
//
Variables
globales
Semaforo
court
(4),
mutex
(1),
queue(0);
int
waitingmatch
=
0,
finishingmatch=0;
Proceso
Jugador(){
int
count;
//Protocolo
de
entrada
a
la
cancha
court.P();
//
Reservamos
plaza
mutex.P();
//
Cerramos
semáforo
para
la
modificación/consulta
de
var.
comp.
waitingmatch++;
if
(waitingmatch
<
4
)
{
mutex.V();
//
Abrimos
el
semáforo
para
evitar
interbloqueos
queue.P();
//
nos
mantenemos
bloqueados
hasta
ser
cuatro
}
else
{
//
waitingmatch
=
4,
desbloqueamos
para
jugar
partido
waitingmatch
=
0;
for(count=0;
count<3;count++)
{
queue.V();
//
despertamos
a
los
tres
jugadores
que
esperan
}
mutex.V();
}
//Jugar
partido
//
Protocolo
de
salida
de
la
cancha
mutex.P();
finishingmatch++;
if
(finishingmatch
=
4)
{
//El
último
abre
la
entrada
a
nuevos
jugadores
finishingmatch
=
0;
for(count=0;
count<4;count++)
{
court.V();
//
dejamos
libre
la
entrada
a
otros
cuatro
jugadores
}
mutex.V();
}
·∙Página
3
de
4
3 (1 punto) En un sistema de archivos basado en FAT, tenemos la siguiente información al principio de la
FAT, y en las entradas de directorio de los archivos F1, F2, F3 y F4. ¿Qué bloques componen estos archivos?
¿Encuentra alguna incidencia en el sistema de archivos?
SOLUCIÓN:
F1: bloques 5, 7 y 9
F2: bloques 2 y 3
F3: bloques 6, 11, 12 y 13, pero hay una incidencia: el bloque 13 está marcado como defectuoso
F4: bloque 8
·∙Página
4
de
4
Calificación
1
2
[GII] Fundamentos de los Sistemas Operativos 3
Convocatoria especial
4
10 de diciembre de 2013
1 (2,5 puntos) Tenemos un sistema con tres procesos cuya ejecución sigue un patrón repetitivo: primero una ráfaga
de M milisegundos ejecutando código en la CPU, a continuación una operación de E/S que dura N milisegundos, de
nuevo M mseg. de CPU, otros N mseg. de E/S y así una y otra vez. Los valores de M y N son siempre los mismos para
cada proceso. Los procesos nunca finalizan. Estas son las características de los tres procesos cuando el sistema arranca:
A 0 10 mseg 1 mseg
B 5 5 mseg 5 mseg
C 10 1 mseg 10 mseg
Por ejemplo, el proceso A pretende ejecutar 10 mseg en la CPU, luego 1 mseg en la E/S, luego otros 10 mseg en la
CPU, de nuevo 1 mseg de E/S y así continuamente.
Cada 20 milisegundos, el sistema revisa las prioridades de todos los procesos aplicando esta fórmula:
Nueva = int [ ½ · ( Actual + TCPU ) ]
donde Nueva es el nuevo valor de prioridad del proceso; Actual es la prioridad actual del proceso; TCPU es el tiempo
(en milisegundos) que el proceso ha estado disfrutando de la CPU durante el último periodo de 20 milisegundos. La
función int devuelve la parte entera del argumento.
• Sólo hay un procesador y en cada momento sólo puede haber un proceso disfrutando de la CPU.
• Las operaciones de E/S de varios procesos pueden ejecutarse de forma simultánea.
• El tiempo de cambio de contexto se considera despreciable.
• En caso de haber varios procesos con la máxima prioridad dispuestos a entrar en CPU, se escoge al proceso
que lleve más tiempo esperando por la CPU.
• Calcular cómo evolucionan las prioridades de los tres procesos en los primeros 40 milisegundos de
ejecución: ¿qué prioridades tienen pasados 20 mseg. y pasados 40 mseg?. Justifique debidamente los
resultados.
• Aplicada a un conjunto cualquiera de procesos, ¿consideras que esta política beneficia o perjudica a un
tipo de procesos respecto a otros?
• ¿Qué utilidad podría tener una política como esta en un sistema real?
Página
1
de
5
SOLUCIÓN:
A 0 9 8
B 5 3 6
C 10 5 3
Página
2
de
5
Puede observarse que el sistema tiende a bajar claramente la prioridad del proceso A y elevar la del
proceso C. La evolución del proceso B es más errática.
La revisión de prioridades provoca que los procesos muy intensivos en CPU, como el A, acaben
teniendo una prioridad baja, mientras que los procesos muy intensivos en E/S, como el C, acaban con
alta prioridad. Este sería el comportamiento general del algoritmo con una carga arbitraria de procesos.
La utilidad de un algoritmo como este es precisamente la de penalizar a los procesos intensivos en CPU
y favorecer a los intensivos en E/S, que es recomendable para primar aplicaciones interactivas o
multimedia. Al mismo tiempo, la penalización de los procesos intensivos en CPU no tiene riesgo de
inanición, porque si un proceso pierde presencia en CPU, su prioridad irá aumentando a lo largo del
tiempo (hasta alcanzar el valor cero).
2 (2,5 puntos) N amigos han quedado para jugar un torneo de pádel. El formato de la competición es el
siguiente:
• Uno de los amigos se encarga de gestionar el torneo.
• Antes de comenzar un partido, el gestor realiza un sorteo del que saldrán al azar cuatro jugadores que
disputarán el partido. El gestor debe quedar a la espera de la terminación del partido.
• Cada partido tendrá una duración finita. Puede suponer que cada jugador invoca a un procedimiento
“Jugar_Partido()” del que retornará en un tiempo finito y que simulará la finalización del partido.
• Los jugadores no agraciados deben esperar mientras juegan sus cuatro compañeros.
• Al terminar cada partido, se debe avisar al gestor para que realice un nuevo sorteo.
• Una vez que se disputen diez partidos, los jugadores y el gestor terminan el torneo.
Se pide escribir dos algoritmos: jugador y gestor de forma que se cumplan las reglas descritas empleando
semáforos como herramienta de sincronización.
// Variables globales
semaforo semplayers[N]={0,0,0...0}, waitingmatch(0), mutex(1);
int idraffle[4], finishingmatch=0;
const int MAXMATCHES=10;
bool FindelTorneo=false;
Proceso Jugador(id){
for(;;) {
// Espera aviso del gestor para jugar un partido
semplayers[id].P();
if (FindelTorneo==true) break;
Jugar_Partido();
Página
3
de
5
Proceso Gestor(){
int count, nmatches=0;
for(;;) {
// El gestor realiza el sorteo y como resultado deja en
// el vector idraffle los cuatro identificadores de
// los jugadores agraciados
nmatches++;
if (nmatches== MAXMACHES) {
FindelTorneo=true;
for(count=0; count<N;count++) {
semplayers[cont].V();
}
break;
}
}
}
Página
4
de
5
b) A continuación se presenta la tabla de segmentos de cierto proceso que se está ejecutando en un sistema
que usa segmentación. Dicho sistema tiene 2 Mbytes de memoria física. El tamaño máximo de un
segmento en este sistema es de 8 Kbytes. Responda razonadamente a las siguientes cuestiones:
Dirección Tamaño
Segmento
Base (bytes)
0 10000 4096
1 512 7600
2 32323 1024
Como el tamaño máximo de un segmento es de 8K, son necesarios 13 bits para el desplazamiento. No
tenemos información acerca del número máximo de segmentos que puede soportar el sistema, pero
sabemos que al menos serán tres, dada la tabla de segmentos del enunciado. Así, puede deducirse que
el formato mínimo de dirección lógica requerirá 2 bits para el segmento y 13 bits para el
desplazamiento.
dir. lógica dir. física
(0 : 325) 10000 + 325 = 10325
(0 : 512) 10000 + 512 = 10512
(2 : 1028) ERROR: violación de segmento
(2 : 124) 32323 + 124 = 32447
(0 : 4096) ERROR: violación de segmento
4 (2,5 puntos) Suponer un sistema de archivos parecido al de Unix cuyos bloques son de tamaño 1Kb y los
punteros a bloques son de 4 bytes. Se tienen 10 punteros a bloques directos de datos, un puntero a un bloque
indirecto simple y uno a bloque indirecto doble. Se quiere incrementar el tamaño máximo permitido para los
ficheros de ese sistema. ¿Cuál de estas siguientes acciones permitiría un mayor aumento: añadir un bloque de
triple indirección o incrementar el tamaño del bloque a 4Kb? Justificar detalladamente la respuesta.
SOLUCIÓN:
Con bloques de 1Kb, y punteros a 4bytes tendremos 1024/4 = 256 punteros a bloques de 1kb.
El tamaño máximo del archivo, con los datos del enunciado sería:
(10 + 256 + 256^2) * 1kb = 65802 Kb.
Según las dos opciones planteadas para ampliar el tamaño del archivo tendríamos:
a) opción 1: añadiendo un bloque de triple indirección:
(10 + 256 + 256^2 + 256^3) * 1kb = 16.843.018 Kb
b) opción 2: ampliando el tamaño de bloque de 4Kb => tendríamos para cada bloque 4*256=1024
punteros a bloques de 4kb
(10 + 1024 + 1014^2) * 4kb = 4.198.440 Kb
Lo que resulta que el tamaño se amplie mucho más con la opción de entrar un bloque de indirección
triple (opción 1).
Página
5
de
5
Calificación
1
2
Fundamentos de los Sistemas Operativos (Grado) 3
Examen Parcial
4a
14 de mayo de 2012
4b
Nombre
*** SOLUCIONES ***
Dispone de tres horas para realizar el examen
1 (2 puntos) Contestar de forma precisa a las siguientes cuestiones:
a) Explicar las distintas formas de conectarse los procesadores para formar un sistema
multiprocesador.
Por un lado los sistemas parelelos (estrechamente acoplados) en los que se
comparte una memoria común y otros recursos del sistema y se limita a decenas o
centenares de procesadores. Y por otro lado, los sistemas distribuidos
(débilmente acoplados) que consisten en múltiples procesadores conectados
mediante una red, no comparten memoria ni reloj y es escalable a millones de
procesadores.
b) ¿Qué ventajas tiene utilizar hilos como elemento básico de ejecución frente a los procesos
pesados?
Que son entidades más fáciles de manejar, ya que consumen menos recursos que
los procesos, como por ejemplo memoria. Así, el cambio de contexto entre hilos de un
mismo proceso pesado es menos costoso. Por otro lado, la comunicación entre hilos
es más sencilla (usando la memoria que comparten).
c) Se propone una nueva política de planificación en la que “la CPU se concede al proceso que
menos memoria RAM necesita”. ¿Ofrecería algún beneficio? ¿Algún efecto negativo?
¿Crees que es implementable?
Como se beneficia a los programas de pequeño tamaño, se está estimulando a que
los programadores escriban aplicaciones lo más pequeñas posible (muy deseable).
Asimismo como el PLP ingresaría a los procesos que menos memoria ocupan,
estaríamos aumentando el número de procesos que caben en memoria. Como
aspecto negativo, hay riesgo de inanición para procesos que ocupan mucha memoria.
Es implementable ya que se pueden conocer por anticipado las necesidades de
memoria de un programa (código y datos) o al menos una estimación fiable.
d) ¿Con qué finalidad se emplea la técnica de envejecimiento en la planificación del uso del
procesador?
Se emplea en el contexto de la planificación de procesos por prioridades, con el fin de
evitar que un proceso de baja prioridad quede postergado indefinidamente (nunca se
le cede el procesador) debido a que siempre existan procesos con una mayor
prioridad.
e) ¿Qué tipos de problemas son inherentes al uso de las memorias cachés? Comenta en qué
consisten.
Los problemas que introducen este tipo de memorias son : a) consistencia de las
copias de la memoria cuando el dato está copiado en cachés de distinto nivel, y la b)
coherencia de las copias cuando el dato está copiado en varias copias del mismo
nivel (multiprocesadores, sistemas distribuidos).
1 de 7
2 (3 puntos). Tres procesos, P1, P2 y P3 tienen prioridades de 2, 4 y 8, respectivamente (8
es prioridad más alta que 2). Los procesos ejecutan el siguiente código:
2 de 7
SOLUCIÓN:
a)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
P1 A A X X X X X X B B B B
P2 A A Y Y Y Y Y Y B B B B
P3 A A X X X X X X B B B B
Obsérvese que el proceso P2, en la práctica, ha gozado de más prioridad que P3. Esto se debe a que P3, en el instante 11, quedó en espera por
un recurso retenido por P1 (el semáforo X). A su vez, P1 no podía avanzar, porque P2 tenía más prioridad. El resultado ha sido que P2 ha
impedido indirectamente que P3 progrese. Este fenómeno se conoce como inversión de prioridades. Los sistemas operativos modernos aplican
técnicas para impedir que se produzca la inversión de prioridades. En nuestro caso, se podría haber elevado artificialmente la prioridad de P1,
para que se adelantara a P2 y no se bloqueara injustamente a P3.
b)
P1 36-0 = 36 (18-4)+(32-22) = 24
P2 18-4 = 14 10-8 = 2
P3 32 – 8 = 24 0 **(ver nota)
** No se ha contabilizado como tiempo de espera la espera realizada por el proceso cuando queda bloqueado al intentar entrar en la sección
crítica y queda retenido en la operación wait(X), es decir, se ha asumido que dicho proceso pasa a un estado bloqueado y que el tiempo de
3 (2.5 puntos) Suponga un sistema de archivos que utiliza una política de asignación de
espacio en disco indexada a un solo nivel. Sabiendo que el tamaño de bloque es de 128 bytes y
que cada bloque índice tiene cabida para 32 entradas, conteste a las siguientes preguntas, justificando
su respuesta:
1. ¿Cuál es el tamaño máximo que puede tener un fichero en este sistema?
2. ¿Cuál es el número máximo de bloques que puede usarse en este sistema?
3. ¿Existe fragmentación interna? En caso afirmativo, indicar la cantidad de bytes desperdiciado por un
archivo en el mejor o peor de los casos.
4. Si el sistema operativo usara un vector de bits para la administración del espacio libre ¿cuánta memoria
ocuparía dicha estructura de datos?. Exprésela en bytes o múltiplos de byte.
5. Nombre y describa un sistema alternativo de administración del espacio libre.
Solución:
1) El tamaño de un fichero está determinado por el número de entradas del bloque índice. Por
tanto, un fichero puede tener como máximo 32 bloques, es decir 32 x 128 bytes = 4096 bytes =
4Kbytes
3) Desde luego, puede existir fragmentación interna, y existirá siempre que el tamaño de un
fichero no sea múltiplo de 128, que ese el tamaño del bloque, y así el último bloque de ese
fichero no estará completamente lleno. El peor de los casos lo constituyen los tamaños de
fichero que respondan a la siguiente expresión: x*128+1 bytes, (0 ≤ x ≤31). Observe que, en
este caso, el último bloque del fichero únicamente almacenaría un byte de información.
4) Sabiendo que el número de bloques del disco es 232, habrá que usar (232)/8 bytes de datos
para almacenar el vector de bits. Por tanto, el espacio ocupado será 229 = 29 · 220 = 512 Mbytes
4 de 7
//Variable global
int m=1;
1 Proceso P1() { Proceso P2() {
2 int r1; int r2;
3
4 for(;;) { for(;;) {
5 //Sección no crítica //Sección no crítica
6 do do
7 subc(r1,m); subc(r2,m);
8 while (r1<0); while (r2<0);
9
10 //Sección crítica //Sección crítica
11
12 m=1; m=1;
13
14 //Sección no crítica //Sección no crítica
15 } }
16 } }
¿Es válida la solución anterior? ¿Se podría proponer como solución válida al problema de la
sección crítica para N procesos? Justificar explícitamente la respuesta.
Solución:
La solución anterior no es válida ya que no cumple la propiedad de espera limitada puesto que
se puede comprobar que el proceso P1 podría acceder repetidamente a la sección crítica
impidiendo el acceso del proceso P2. Teniendo esto en cuenta, la solución propuesta cumple
las propiedades de exclusión mutua y progreso tanto en el caso de que tengamos dos procesos
como si tenemos N procesos.
4.b (1,5 puntos) Se dispone de una BD que puede ser usada sólo por 5 procesos al mismo
tiempo. Hay dos tipos de procesos: A y B.
Proponga un protocolo de acceso a la Base de Datos usando semáforos, teniendo en
cuenta que:
§ no puede haber mas de 3 procesos A en la BD al mismo tiempo,
§ no puede haber mas de 4 procesos B en la BD al mismo tiempo.
*****
SOLUCION:
Vamos a dar dos tipos de soluciones, cualquiera de las dos válidas.
SOLUCIÓN A
//Variables globales
//Semáforo de control del número máximo de procesos tipo A que pueden acceder
//concurrentemente a la BD
Semaforo colaA=3;
//Semáforo de control del número máximo de procesos tipo B que pueden acceder
//concurrentemente a la BD
Semaforo colaB=4;
//Semáforo de control del número máximo de procesos que pueden acceder
//concurrentemente a la BD
Semaforo colaAB=5;
5 de 7
Proceso A() {
…
//Controlamos que no accedan concurrentemente mas de 3 procesos tipo A a la BD
wait(colaA);
//Controlamos que no accedan concurrentemente mas de 5 procesos a la BD
wait(colaAB);
Proceso B( ) {
…
…
//Controlamos que no accedan concurrentemente mas de 4 procesos tipo B a la BD
wait(colaB);
//Controlamos que no accedan concurrentemente mas de 5 procesos a la BD
wait(colaAB);
SOLUCION B
//Variables globales
int na=0; //número de procesos tipo A accediendo a la base de datos
int nb=0; //número de procesos tipo B accediendo a la base de datos
int naesperando=0; //número de procesos tipo A esperando para acceder a la base de datos
int nbespetando=0; //número de procesos tipo B esperando para acceder a la base de datos
Semaforo mutex=1; //semáforo para proteger la sección crítica del preprotocolo
Semaforo colaA=0; //semáforo para encolar los procesos tipo A cuando no pueden acceder a la BD
Semaforo colaB=0; //semáforo para encolar los procesos tipo B cuando no pueden acceder a la BD
Proceso A() {
…
// Preprotocolo para comprobar que hay menos de 5 procesos accediendo a la
// BD y no mas de 2 procesos tipo A
wait(mutex);
while (((na + nb) == 5) || (na==3)) {
naesperando++;
signal(mutex);
wait(colaA);
}
na++;
signal(mutex);
6 de 7
// Acceder a la base de datos
Proceso B( ) {
…
// Preprotocolo para comprobar que hay menos de 5 procesos accediendo a la
// BD y no mas de 4 procesos tipo B
wait(mutex);
while (((na + nb) == 5) || (nb==4)) {
naesperando++;
signal(mutex);
wait(colaB);
}
nb++;
signal(mutex);
7 de 7
Calificación
2
Fundamentos de los Sistemas Operativos (GII)
Examen Final
15 de Junio de 2012 - PRIMERA PARTE - 3
Nombre Grupo
SOLUCIONES
1 (6 puntos) Contestar
de
forma
precisa
(máximo
5
líneas)
a
las
siguientes
cuestiones:
1. ¿Por qué es necesario establecer dos modos de ejecución de instrucciones de un procesador?
Ver
apartado
1.5.6
del
libro
de
la
asignatura
2. Se considera el algoritmo de planificación del tipo Round Robin de quantum q. ¿Puede afirmarse que
todo proceso de la cola de preparados disfrutará exactamente de q unidades de tiempo de recurso de
CPU? ¿Puede ocurrir que un proceso llegue a utilizar la CPU n unidades de tiempo sin interrupción,
siendo n>q? Justificar la respuesta.
Primera
pregunta:
no
puede
afirmarse,
ya
que
no
se
conoce
la
duración
de
los
procesos
en
la
cola.
Si
un
proceso
finaliza
su
ejecución
antes
de
cumplirse
el
quantum
q,
abandonará
la
CPU
y
por
tanto
no
se
cumplirá
el
enunciado.
Segunda
pregunta:
puede
ocurrir,
por
ejemplo
si
un
proceso
es
el
único
no
bloqueado
y
reclama
más
de
q
segundos
de
CPU.
El
sistema
lo
mantendrá
en
el
procesador
indefinidamente,
hasta
que
se
bloquee
o
que
entre
otro
proceso
en
la
cola
de
preparados.
3. Se tienen 3 procesos: P1, P2 y P3 con tiempos de ejecución: 85, 45 y 118 mseg respectivamente. Si
actúa el PLP según el algoritmo SJF, ¿qué contiene la cola de preparados antes de que empiece a trabajar
el PCP?
P2,
P1,
P3,
en
ese
orden.
4. Sean dos procesos, P1 con tiempo de ejecución 20 mseg y P2 con 15 mseg. El PCP actúa según un
RR(10mseg) y tiempo de cambio de contexto de 5ms. ¿Cuál es el tiempo de retorno de P1?
NOTA:
durante
el
examen
se
aclaró
que
se
asuma
que
P1
y
P2
acaban
de
llegar
a
la
cola
de
preparados,
y
que
se
consideren
los
dos
casos
posibles
de
ordenación
(P1
antes
que
P2
y
P2
antes
que
P1).
Primer
caso
(P1,
luego
P2):
10(p1)+5+10(p2)+5+10(p1)
=
40
mseg
Segundo
caso
(P2,
luego
P1):
10(p2)+5+10(p1)+5+5(p2)+5+10(p1)
=
50
mseg
5. Estamos desarrollando un intérprete de órdenes o Shell. Necesitamos escribir el código que lanza el
programa que el usuario le encarga ejecutar al Shell. Para ello necesitamos elegir entre lanzar un nuevo
hilo o bien lanzar un nuevo proceso pesado. ¿Cuál de las dos opciones le parece más adecuada, y por
qué?
Un
Shell
va
a
lanzar
una
aplicación
diferente
al
propio
Shell,
cuyo
código
habrá
que
cargar
en
memoria
desde
el
fichero
ejecutable.
Esto
no
se
puede
realizar
con
un
hilo,
que
comparte
el
código
del
proceso
padre.
Debe
realizarse
necesariamente
con
un
proceso
pesado,
para
que
el
Shell
y
la
aplicación
puedan
coexistir
en
el
sistema.
6. Sea un archivo que contiene registros de 250 bytes cada uno. Dicho archivo está almacenado en un
sistema de ficheros con bloques de tamaño 1K y que usa FAT para asignación de espacio. Sabiendo
que el primer bloque ocupado por el archivo es el número 3 y considerando la siguiente tabla FAT,
FSO-‐
examen
20120615
-‐
primera
parte
-‐
p1/5
¿qué bloque(s) hay que leer para acceder registro 4? (los registros se numeran comenzando por 0)
¿Cuántos registros contiene actualmente el fichero?
0 1 2 3 4 5 6 ...
EOF 6 0 4
Primera
pregunta:
son
los
bloques
3
y
6.
El
registro
4
está
ocupando
el
rango
de
direcciones
desde
la
1000
hasta
la
1249
(inclusive),
desde
el
principio
del
archivo.
Estas
se
encuentran
en
el
primer
bloque
asignado
al
archivo
(que
contiene
de
la
0
a
la
1023)
y
el
segundo
(que
contiene
de
la
1024
a
la
2047).
Por
tanto
hemos
de
buscar
dónde
se
encuentran
en
la
FAT
esos
dos
primeros
bloques.
El
primero
ya
nos
lo
da
el
enunciado:
es
el
bloque
3.
El
segundo
es
el
siguiente
apuntado
por
la
FAT,
que
es
el
bloque
6.
Segunda
pregunta:
tal
y
como
muestra
la
FAT,
el
archivo
está
formado
por
los
bloques
3,
6,
4
y
0.
Por
tanto
tiene
4Kb
asignados,
que
dan
una
capacidad
para
4096/250
=
16
registros.
En
realidad
la
ocupación
real
podría
ser
menor
de
16,
ya
que
el
enunciado
no
nos
da
información
sobre
el
uso
efectivo
que
el
archivo
está
haciendo
de
su
espacio
ocupado.
7. En un equipo se ha observado la carga del planificador de procesos y resulta que en los últimos diez
minutos se han estado ejecutando cien procesos. Todos ellos siguen sin finalizar en el momento actual.
Por su parte, el tamaño medio de la cola de preparados ha sido de 0,17 procesos durante ese intervalo.
Habiendo tantos procesos activos, ¿cómo puede explicarse un tamaño tan pequeño para la cola de
preparados?
Este
tamaño
tan
escaso
implica,
lógicamente,
que
la
mayoría
de
los
procesos
han
estado
fuera
de
la
cola
de
preparados.
Pueden
haber
estado
en
dos
lugares:
o
bien
en
algún
procesador;
o
bien
en
una
cola
de
espera
por
algún
dispositivo
o
evento.
Si
es
el
primer
caso,
se
trataría
de
una
máquina
multiprocesadora
con
una
buena
cantidad
de
procesadores.
Si
es
el
segundo
caso,
los
procesos
están
continuamente
reclamando
operaciones
de
E/S
que
les
hacen
estar
bloqueados
con
mucha
frecuencia:
es
decir,
hay
muchos
procesos
intensivos
en
E/S.
8. Un lote de 5 procesos A, B, C, D y E se lleva a ejecución en un sistema informático. Los tiempos de
llegada son, respectivamente, 0, 1, 3, 9 y 12. Las duraciones estimadas son, respectivamente, 3, 5, 2, 5 y
5. Si el PCP emplea la política SRTF, ¿cuál es el tiempo de espera medio y el tiempo de retorno medio?
Para
calcular
las
medias,
hace
falta
obtener
los
tiempos
de
cada
proceso.
La
planificación
habrá
sido:
AAACCBBBBBDDDDDEEEEE
Tiempos
de
espera:
A=0,
B=4,
C=0,
D=1,
E=3.
MEDIA=(0+4+0+1+3)/5
=
8/5
Tiempos
de
retorno:
A=3,
B=9,
C=2,
D=6,
E=8.
MEDIA=(3+9+2+6+8)/5
=
28/5
2 (1,5 puntos)
Un
sistema
de
archivos
utiliza
asignación
indexada
como
método
de
asignación
de
espacio.
La
estructura
de
inodo
consta,
entre
otras
cosas,
de
16
referencias
a
bloques
directos,
4
referencias
a
un
bloque
indirecto
sencillo,
2
referencias
a
un
bloque
indirecto
doble
y
1
referencia
a
un
bloque
indirecto
triple.
Sabiendo
el
tamaño
de
bloque
es
de
2K
y
que
en
el
sistema
de
ficheros
hay
2^64
bloques,
calcula
el
número
máximo
de
bloques
de
datos
que
puede
ocupar
un
archivo.
Si
hay
264
bloques,
para
poder
direccionarlos
necesitamos
al
menos
64
bits,
es
decir,
64/8
=
8
bytes.
Cada
entrada
de
un
bloque
de
índices
ocupa
por
tanto
8
bytes.
Como
los
bloques
de
datos
son
de
2K,
en
cada
bloque
caben
2048/8
=
256
apuntadores
a
bloques.
Con
estos
datos
podemos
hacer
el
cálculo
general:
*
16
referencias
directas,
más
*
4
bloques
indirectos
x
256
apuntadores/bloque
=
210
*
2
bloques
doble
indirecto
x
256
x
256
=
217
*
1
bloque
triple
indirecto
x
256
x
256
x
256
=
224
El
total
es
224+217+210+16
=
16.909.328
bloques
de
datos.
FSO-‐
examen
20120615
-‐
primera
parte
-‐
p2/5
Nombre
3 (2,5 puntos)
a)
(0,75
puntos)
Usando
semáforos,
sincronice
los
siguientes
procesos
de
manera
que
la
secuencia
de
ejecución
de
las
funciones
siga
el
orden
especificado
a
continuación:
B1() --> C1() --> C2() --> A1() --> B2() --> A2()
Utilice
el
menor
número
de
semáforos
posible.
No
olvide
especificar
claramente
la
inicialización
de
los
semáforos.
Proceso A Proceso B Proceso C
A1(); B1(); C1();
A2(); B2(); C2();
La
forma
más
inmediata
de
resolver
el
problema
es
utilizar,
por
cada
punto
de
espera,
una
operación
WAIT
sobre
un
semáforo
inicializado
a
cero.
Y
al
finalizar
la
instrucción
que
desbloquea,
invocar
a
una
operación
SIGNAL
sobre
ese
semáforo.
He
aquí
el
resultado
de
aplicar
esa
técnica:
Semáforos
SA1=0,
SA2=0,
SB2=0,
SC1=0
Proceso
A
Proceso
B
Proceso
C
WAIT(SA1);
B1();
WAIT(SC1);
A1();
SIGNAL(SC1);
C1();
SIGNAL(SB2);
WAIT(SB2);
C2();
WAIT(SA2);
B2();
SIGNAL(SA1);
A2();
SIGNAL(SA2);
Si
se
quiere
reducir
al
mínimo
la
cantidad
de
semáforos,
sin
añadir
más
artefactos
al
programa
(ej.
variables
de
estado),
se
puede
reutilizar
el
semáforo
SC1
para
el
último
acto
de
sincronización.
Semáforos
s1=0,
s2=0,
s3=0
Proceso
A
Proceso
B
Proceso
C
WAIT(s2);
B1();
WAIT(s1);
A1();
SIGNAL(s1);
C1();
SIGNAL(s3);
WAIT(s3);
C2();
WAIT(s1);
B2();
SIGNAL(s2);
A2();
SIGNAL(s1);
El
algoritmo
se
podría
escribir
con
un
solo
semáforo,
pero
requeriría
añadir
una
variable
de
estado,
para
conocer
cuál
es
el
proceso
que
tiene
permiso
para
continuar.
Además,
sería
una
solución
de
espera
activa.
3
b)
(1,75
puntos)
Se
dispone
de
una
sala
de
juegos
y
jugadores.
Para
entrar
a
la
sala
se
necesitan
exactamente
5
jugadores.
A
medida
que
los
jugadores
llegan
esperan
hasta
completar
5
y
luego
entran
a
jugar
a
la
sala.
Suponga
que
la
sala
tiene
una
capacidad
ilimitada,
es
decir,
pueden
ir
entrando
en
tandas
de
5
sin
ninguna
limitación.
Sólo
es
necesario
especificar
el
protocolo
de
entrada
a
la
sala
y
las
pertinentes
declaraciones
e
inicializaciones
de
variables.
Proceso Jugador(){
//Inicialización
//Jugar en la sala
}
NOTA:
el
algoritmo
está
implementado
mediante
semáforos.
Se
utiliza
una
variable
de
estado
que
registra
cuántos
jugadores
están
esperando.
Cuando
un
jugador
llega
y
observa
que
no
hay
todavía
cinco,
se
bloquea
en
un
semáforo
que
hace
de
cola
de
espera.
Cuando
llega
un
quinto
jugador,
desbloquea
a
todos
los
procesos
que
estaban
esperando
y
reinicia
el
contador.
Como
la
variable
de
estado
es
compartida,
debe
ser
accedida
mediante
un
cerrojo
(un
semáforo
inicializado
a
uno).
Variables
globales
Semáforo
mutex
=
1
Semáforo
cola
=
0
int
esperando
=
0;
Código
de
entrada
en
la
sala
WAIT(mutex);
esperando++;
if
(esperando
<
5
)
{
SIGNAL(mutex);
//
liberamos
el
cerrojo
para
evitar
interbloqueos
WAIT(cola);
//
nos
mantenemos
bloqueados
hasta
ser
cinco
}
else
{
//
esperando
=
5,
desbloqueamos
a
todos
esperando=0;
for
i
in
1..4
{
SIGNAL(cola);
}
//
hay
cuatro
compañeros
bloqueados
en
cola
SIGNAL(mutex);
}
Otro
algoritmo
En
este
otro
algoritmo,
el
quinto
jugador
sólo
desbloquea
a
uno
de
los
compañeros
en
cola,
el
desbloqueado
a
su
vez
libera
a
otro
compañero
y
así
hasta
completar
los
cinco.
Los
semáforos
y
variables
de
estado
son
los
mismos
que
en
el
primer
algoritmo.
//
entrar
a
jugar
WAIT(mutex);
if
(esperando
<
4
)
{
esperando++;
SIGNAL(mutex);
//
liberamos
el
cerrojo
para
evitar
interbloqueos
WAIT(cola);
//
nos
mantenemos
bloqueados
hasta
ser
cinco
esperando-‐-‐;
//
uno
menos
para
desbloquear
if
(
esperando
>
0
)
{
//
si
quedan
compañeros
bloqueados,
desbloqueo
a
uno
SIGNAL(cola);
}
else
{
//
si
soy
el
último,
libero
el
cerrojo
SIGNAL(mutex);
}
}
else
{
//
esperando
=
4,
iniciamos
la
secuencia
de
desbloqueo
SIGNAL(cola);
}
5
Calificación
Nombre Grupo
SOLUCIONES
16Kbytes
suponen
2^4*2^10
=2^14
direcciones
lógicas,
por
lo
tanto,
serán
necesarios
14
bits
para
cubrir
todo
ese
espacio
de
direcciones
lógicas.
Por
otra
parte,
sabemos
que
el
tamaño
de
página
es
de
512
bytes,
por
lo
que
serán
necesarios
9
bits
para
poder
direccionar
cualquier
byte
de
una
página.
Luego,
el
espacio
de
direccionamiento
lógico
tiene
la
siguiente
estructura:
5
bits
9
bits
página
desplazamiento
En
la
siguiente
figura
puede
verse
una
traza
del
algoritmo
del
reloj.
La
primera
fila
corresponde
a
la
cadena
de
referencias;
las
siguientes
a
la
traza.
Entre
paréntesis
figura
el
bit
de
referencia
y
en
negrita
el
candidato
inicial
a
víctima.
Los
fallos
de
página
están
señalados
con
el
símbolo
#
en
la
última
fila.
Como
puede
observarse,
se
producen
ocho
fallos
de
página.
2
4
5
4
6
7
4
2
1
4
7
3
2(1)
2(1)
2(1)
2(1)
2(1)
7(1)
7(1)
7(1)
7(1)
7(1)
7(1)
3(1)
4(1)
4(1)
4(1)
4(1)
4(0)
4(1)
4(0)
4(0)
4(1)
4(1)
4(0)
5(1)
5(1)
5(1)
5(0)
5(0)
2(1)
2(1)
2(1)
2(1)
2(0)
6(1)
6(0)
6(0)
6(0)
1(1)
1(1)
1(1)
1(0)
#
#
#
#
#
#
#
#
3. Se
tiene
un
sistema
que
utiliza
gestión
de
memoria
paginada.
El
espacio
de
direccionamiento
virtual
es
de
10
páginas
de
1024
palabras
(1
palabra
=
2
bytes).
La
memoria
física
está
dividida
en
32
marcos.
¿Cuántos
bits
componen
la
dirección
virtual?
Considerando
que
el
direccionamiento
lógico
se
realiza
a
nivel
de
palabra
(no
de
byte)
serán
necesarios
4
bits
para
el
número
de
páginas
(el
enunciado
dice
que
hay
10
páginas
direccionables)
y
10
bits
para
direccionar
el
desplazamiento
dentro
de
la
página.
Por
lo
tanto
la
dirección
virtual
responde
al
siguiente
esquema:
4
bits
10
bits
página
desplazamiento
Para
poder
conocer
la
dirección
lógica,
primero
es
necesario
averiguar
a
qué
marco
de
página
corresponde
la
dirección
física
14661.
Sabiendo
que
la
memoria
física
tiene
65536
bytes
y
que
hay
32
marcos
de
página,
es
inmediato
deducir
el
tamaño
de
página
de
este
sistema:
65536/32
=
2^16/2^5
=
2^11
=
2048
bytes.
De
ahí
se
deduce
que
la
dirección
física
14661
pertenece
al
marco
de
página
número
7;
basta
dividir
14661
entre
2048
para
averiguar
que
el
marco
es
7
(cociente)
y
el
desplazamiento
325
(resto).
El
enunciado
dice
que
la
página
2
está
alojada
en
el
marco
de
página
número
7,
por
tanto,
la
dirección
lógica
será:
<página
2,
desplazamiento
325>,
o
lo
que
es
lo
mismo,
2·∙2048+325
=
4421
5. Un
computador
gestiona
la
memoria
mediante
un
esquema
paginado
de
doble
nivel
con
una
estructura
de
direcciones
de
32
bits.
Si
se
tienen
10
bits
para
páginas
de
un
primer
nivel,
11
para
el
de
segundo
y
11
para
el
desplazamiento
de
página,
¿qué
tamaño
máximo
tendrá
el
espacio
direccionable
de
los
programas?
El
espacio
direccionable
viene
dado
por
el
número
de
bits
que
existen
en
la
dirección,
independientemente
de
los
niveles
de
paginación.
En
este
caso,
como
la
dirección
es
de
32
bits,
el
espacio
de
direccionamiento
es
de
2^32
bytes,
es
decir
4Gigabytes.
6. En
un
sistema
operativo
multitarea,
con
8Kbytes
de
espacio
lógico
de
proceso
y
con
páginas
de
1Kbytes,
y
32Kbytes
de
memoria
física
y
sin
memoria
virtual,
¿cuánto
ocupará
la
tabla
de
páginas?
Si
hay
que
direccionar
8Kbytes
y
el
tamáño
de
página
es
de
1Kbyte,
un
proceso
tendrá
como
máximo
8
páginas
y
por
lo
tanto
el
número
de
entradas
de
su
tabla
de
páginas
es
8.
Falta
averiguar
cuánto
mide
cada
una
de
esas
entradas.
Dado
que
en
ellas
se
aloja
un
número
de
marco
y
sabemos
que
en
este
sistema
hay
32
marcos
de
página,
bastan
5
bits
para
cada
entrada,
estrictamente
hablando.
Así,
la
tabla
de
páginas
de
un
proceso
en
este
sistema
ocupará,
como
máximo,
8·∙5
=
40
bits
=
5
bytes.
7. En
la
tabla
de
segmentos
se
encuentra
que
el
segmento
0
tiene
una
base
de
219
y
una
longitud
de
600.
¿A
qué
dirección
física
se
corresponde
la
dirección
virtual
(0,430)
dado
el
formato
de
dirección
(nº
segmento,
desplazamiento
dentro
del
segmento)?
8. Considera
un
sistema
paginado
bajo
demanda
que
posee
los
siguientes
datos
de
utilización:
el
uso
del
procesador
es
del
20%,
el
del
dispositivo
de
paginación
de
disco
es
del
95,5%
y
el
de
otros
dispositivos
de
E/S
es
del
5%.
¿Qué
crees
que
está
ocurriendo
en
el
sistema?
¿Qué
podríamos
hacer
para
que
se
obtuviera
un
rendimiento
mejor?
La
baja
utilización
de
la
CPU
y
la
alta
utilización
del
dispositivo
de
paginación
hacen
pensar
que
el
sistema
sufre
de
sobrepaginación,
es
decir,
que
gran
parte
del
tiempo
se
está
empleando
en
desalojar
páginas
de
la
memoria
principal
al
dispositivo
de
memoria
secundaria
(swap-‐out)
para
dejar
espacio
a
nuevas
páginas
que
provienen
de
dicho
dispositivo
secundario
(swap-‐in).
Esto
provoca
una
seria
degradación
del
rendimiento
del
sistema
que
puede
corregirse
reduciendo
temporalmente
el
grado
de
multiprogramación,
para
que
al
haber
menos
procesos
compitiendo
por
la
memoria
principal
ésta
pueda
repartirse
de
forma
que
haya
menos
fallos
de
página.
Una
vez
el
sistema
se
recupere
de
la
sobrepaginación,
los
procesos
temporalmente
suspendidos
pueden
volver
a
la
cola
de
preparados
y
continuar
su
ejecución.
9. Te
dan
a
elegir
entre
tres
tamaños
de
página
para
un
sistema
operativo
:
16
bytes,
800
bytes
y
2048
bytes.
El
sistema
trabaja
con
direcciones
de
32
bits
y
el
tamaño
medio
de
un
programa
es
de
4
megabytes.
¿Con
qué
tamaño
de
páginas
te
quedarías?
¿Por
qué?
El
tamaño
de
800
bytes
hay
que
descartarlo
de
antemano,
porque
no
es
potencia
de
dos.
Requeriría
un
hardware
de
traducción
de
direcciones
mucho
más
complejo
que
un
sistema
de
paginación
convencional:
para
calcular
el
número
de
página,
no
basta
con
quedarse
con
los
bits
más
significativos
de
la
dirección,
sino
que
hay
que
realizar
una
división.
FSO
-‐
examen
20120615
-‐
segunda
parte
-‐
p2/5
Nombre
El
tamaño
de
16
bytes
tampoco
es
recomendable,
porque
genera
mucho
espacio
en
tablas
de
páginas.
Un
programa
de
cuatro
megabytes
(un
tamaño
típico,
según
el
enunciado)
ocuparía
222
÷
24
=
218
=
256
Kpáginas,
que
necesitarían
en
torno
a
un
megabyte
de
espacio
(suponiendo
cuatro
bytes
por
cada
entrada
de
la
tabla
de
páginas).
No
parece
sensato
dedicar
a
estructuras
de
gestión
una
cantidad
de
memoria
similar
a
la
que
necesita
el
programa.
Además,
para
garantizar
una
tasa
de
aciertos
alta
en
la
TLB,
ésta
probablemente
necesitaría
bastantes
entradas.
Por
su
parte,
si
usamos
páginas
de
2048
bytes,
un
programa
de
cuatro
megabytes
requerirá
2048
páginas,
128
veces
menos
espacio
que
en
el
caso
anterior.
El
único
inconveniente
de
este
tamaño
de
página
es
la
mayor
fragmentación
interna,
pero
estamos
hablando,
en
el
peor
de
los
casos,
de
2047
bytes
desperdiciados,
que
serían
menos
de
un
0,05%
de
un
programa
de
tamaño
típico
de
4
megas.
Es
decir,
irrelevante.
Así
que
la
mejor
opción
es
el
tamaño
de
2048
bytes.
10. ¿En que consiste la anomalía de Belady? Nombra un algoritmo que la padezca y otro que no.
La
anomalía
de
Belady
se
produce
en
determinados
algoritmos
de
tal
forma
que
al
aumentar
el
número
de
marcos
de
página
no
necesariamente
disminuye
el
número
de
fallos
de
página,
sino
que
puede
incluso
aumentar.
FIFO
es
uno
de
los
algoritmos
que
padecen
dicha
anomalía,
mientras
que
el
algoritmo
LRU,
entre
otros,
está
libre
de
ella.
2
(2
puntos)
Suponga
un
sistema
de
memoria
paginada
que
maneja
direcciones
de
memoria
lógicas
de
24
bits
y
direcciones
físicas
de
32
bits.
El
tamaño
de
página
es
de
1Kbytes.
Se
pide:
El
espacio
de
direccionamiento
de
un
proceso
es
de
24
bits,
por
tanto
puede
direccionar
2^24
bytes,
es
decir,
16Megabytes
2) ¿Cuántos
marcos
de
página
puede
llegar
a
tener
este
sistema?
0.2p
En
esta
arquitectura,
el
espacio
lógico
(2^24
palabras)
es
bastante
más
pequeño
que
el
espacio
físico
(2^32
palabras).
Esto
significa
que
un
proceso
no
puede
direccionar
al
mismo
tiempo
todo
el
espacio
físico.
A
primera
vista,
esto
supone
una
limitación
arbitraria
que
restringe
fuertemente
la
capacidad
de
direccionamiento
de
los
procesos.
Pero
puede
haber
algunas
justificaciones
a
este
esquema.
3
Una
posible
explicación
a
esta
restricción
es
que
en
este
sistema
suele
haber
muchos
procesos
en
ejecución
al
mismo
tiempo
con
distintos
espacios
lógicos
de
memoria,
de
manera
que
aunque
un
solo
proceso
no
aprovecha
todo
el
espacio
disponible,
el
conjunto
de
todos
ellos
sí
lo
hace.
Las
direcciones
lógicas
se
mantienen
cortas
y
así
el
código
máquina
es
algo
más
compacto
que
en
el
caso
de
tener
direcciones
de
32
bits.
Otro
posible
motivo
para
que
este
sistema
esté
así
configurado
es
que
los
procesos
ejecutan
código
de
alguna
arquitectura
antigua
de
24
bits,
mientras
que
el
hardware
es
más
moderno
y
trabaja
con
direcciones
de
memoria
más
anchas.
Sin
necesidad
de
recompilar
los
programas,
podemos
seguir
ejecutándolos
y
aprovechar
mejor
la
memoria
física
de
32
bits
si
tenemos
multiprogramación.
Finalmente,
esta
configuración
también
puede
verse
como
una
medida
(bastante
radical)
para
evitar
que
un
solo
proceso
acapare
demasiada
memoria:
su
asignación
de
espacio
se
le
limita
físicamente
a
16
megabytes.
6) ¿Qué
sistema
de
traducción
de
direcciones
te
parece
más
apropiado
para
este
sistema:
paginado
con
un
solo
nivel
de
paginación
o
con
dos
niveles?
Justifica
la
respuesta
0.3p
En
este
sistema,
un
proceso
de
gran
tamaño
tendrá
una
tabla
de
páginas
que
puede
superar
con
creces
el
kilobyte
que
ocupa
un
único
marco
de
página.
Por
ejemplo,
si
cada
entrada
de
la
tabla
ocupa
3
bytes,
basta
con
que
el
proceso
tenga
400
páginas
para
que
la
tabla
necesite
consumir
dos
marcos.
Si
la
tabla
de
páginas
consume
varios
marcos,
estos
deberán
ser
contiguos
para
que
la
MMU
pueda
realizar
su
trabajo.
Y
como
necesitamos
asignar
varios
marcos
contiguos,
nos
aparece
el
problema
de
la
fragmentación
externa,
que
es
lo
que
la
paginación
debería
resolver
definitivamente.
Este
es
exactamente
el
motivo
por
el
cual
muchos
sistemas
paginan
la
tabla
de
páginas
y
por
tanto
utilizan
un
esquema
de
varios
niveles
de
paginación.
Así
que
en
el
sistema
propuesto,
es
más
recomendable
trabajar
con
dos
niveles
de
paginación,
con
el
fin
de
reducir
el
problema
de
la
fragmentación
cuando
se
asigna
espacio
para
la
tabla
de
páginas.
7) Suponiendo
que
el
sistema
trabaja
con
un
solo
nivel
de
paginación,
¿cuántos
elementos
como
máximo
puede
tener
la
tabla
de
páginas?
0.3p
Tantos
como
páginas,
es
decir,
2^24
/
2^10
=
2^14
=
16.384
elementos
8) En
un
momento
dado,
encontramos
un
proceso
que
direcciona
50
páginas
lógicas,
pero
si
observamos
los
marcos
de
página,
solo
30
de
ellos
están
asignados
a
este
proceso.
¿cómo
es
posible
que
el
proceso
tenga
más
páginas
lógicas
que
marcos
asignados?
0.2p
Una
posible
explicación
es
que
el
proceso
está
compartiendo
marcos
de
página
con
otros
procesos,
o
con
el
sistema
operativo.
Por
ejemplo,
algunas
de
las
páginas
lógicas
pueden
estar
apuntando
a
páginas
de
código
de
una
DLL
que
ha
sido
asignada
a
otro
proceso,
o
a
datos
de
sólo
lectura
del
sistema
operativo,
etc.
Otra
explicación
es
que
algunas
de
las
páginas
lógicas
en
realidad
están
duplicadas,
es
decir,
que
varias
páginas
lógicas
apuntan
al
mismo
marco
físico.
Por
otra
parte,
en
el
enunciado
no
nos
indican
si
el
sistema
utiliza
el
bit
de
validez
y
por
tanto
el
concepto
de
página
inválida.
Si
es
el
caso,
puede
ser
que
nuestro
proceso
direccione
50
páginas,
pero
sólo
30
de
ellas
están
cargadas
en
memoria
principal,
mientras
que
el
resto
están
pendientes
de
cargar
(son
inválidas).
3
(1.5
puntos)
Sea
un
sistema
de
gestión
de
memoria
con
tres
niveles
de
paginación,
en
el
que
cada
nivel
de
paginación
tiene
asociada
una
tabla
de
páginas
independiente
en
memoria.
Sabiendo
que
el
tiempo
de
búsqueda
en
la
TLB
es
de
20
nanosegundos,
que
el
tiempo
de
acceso
a
la
RAM
es
de
100
nanosegundos
y
que
el
tiempo
de
acceso
efectivo
en
este
sistema
es
de
126
nanosegundos,
calcula
la
tasa
de
aciertos
de
la
TLB.
Por
los
datos
del
problema
sabemos
que,
en
caso
de
acierto,
el
tiempo
de
acceso
a
memoria
es:
20
+
100
=
120
ns,
20
ns
por
acceder
a
la
TLB
y
100
ns
para
acceder
al
dato
o
a
la
instrucción
en
la
memoria
principal
Sin
embargo,
en
caso
de
fallo
de
TLB,
el
coste
temporal
de
acceso
al
dato/instrucción
es:
20
+
100
+
100
+
100
+
100
=
420
ns,
desglosados
de
la
siguiente
manera:
20
ns
:
acceso
a
la
TLB
100
ns:
acceso
a
la
tabla
de
páginas
de
primer
nivel,
que
está
en
la
memoria
principal
100
ns:
acceso
a
la
tabla
de
páginas
de
segundo
nivel,
que
está
en
la
memoria
principal
100
ns:
acceso
a
la
tabla
de
páginas
de
tercer
nivel,
que
está
en
la
memoria
principal
100
ns:
acceso
a
la
instrucción/dato,
que
está
en
la
memoria
principal
Por
lo
tanto,
si
llamamos
k
a
la
tasa
de
aciertos:
126
=
k·∙120
+
(1-‐k)·∙420
-‐-‐>
k
=
294/300
=
0,98
=
98%
5
Calificación
2
Fundamentos de los Sistemas Operativos (Grado en Ing. Inf.)
Convocatoria extraordinaria
11 de Julio de 2012 3
Nombre Grupo
SOLUCIONES
Dispones de dos horas y media para completar el examen
1 (3 puntos. Todas las cuestiones puntúan lo mismo) Contestar
de
forma
precisa
a
las
siguientes
cuestiones:
2. ¿Qué acciones realiza típicamente una CPU cuando recibe una señal de interrupción, en un sistema
con interrupciones vectorizadas?
3. En la gestión de procesos, ¿qué función tiene el planificador de largo plazo, también llamado de alto
nivel?
4. En la planificación de procesos con Round Robin, ¿qué efecto se produce si el cuanto de tiempo se
vuelve demasiado largo?
Solución: el algoritmo tiende a parecerse a un FCFS, con lo cual el tiempo de respuesta aumenta,
se va perdiendo interactividad, se penaliza a los procesos intensivos en E/S y puede observarse el
efecto convoy por acaparamiento de los procesos intensivos en CPU.
Solución: deben serlo para evitar que la manipulación concurrente del valor asociado al semáforo dé
lugar a inconsistencias en el comportamiento esperado, por ejemplo que dos procesos realicen una
operación WAIT sobre el mismo semáforo con valor uno, y ambos procesos decidan no bloquearse al
no producirse el decremento del valor de forma secuenciada.
FSO‐
examen
20120615
‐
primera
parte
‐
p1/7
Solución: consiste en la existencia de zonas de espacio libre, pero que no pueden ser asignadas a
procesos que lo solicitan, debido a que las zonas no están contiguas (están fragmentadas) y los
algoritmos de gestión no permiten conceder varios fragmentos para conceder una petición.
7. En las políticas de reemplazo de páginas, ¿qué ventaja tiene el algoritmo LRU sobre el FIFO?
Solución: la ventaja principal es que el algoritmo LRU es una mejor aproximación que el FIFO a la
política óptima: la página menos recientemente usada es más probable que sea la que más tiempo
se tarde en acceder, comparado con la página más vieja (que puede ser una página frecuentemente
accedida). Teniendo en cuenta esto, el LRU tenderá con el tiempo a darnos menos fallos de página
que el FIFO.
8. Tenemos un sistema de ficheros que trabaja con bloques de datos de 1Kbyte y utiliza asignación de
espacio indexada, con un solo bloque para los índices. Cada enlace ocupa 16 bits. Con estos datos,
obtenga el tamaño máximo que puede tener un archivo y cuál es el espacio máximo
Solución: Como cada enlace son 16 bits = 2 bytes, en el único bloque de índices caben 1024/2 =
512 enlaces. Por tanto un archivo puede llegar a tener 512 bloques = 512 Kbytes.
El espacio máximo direccionable viene dado por el tamaño del enlace, que nos da 2 16 combinaciones
= 65.536 bloques = 64 Mbytes.
9. Tenemos estos dos procesos que están continuamente accediendo a una variable compartida x, cuyo
valor inicial es cero:
loop
loop
x
:=
x
+
1;
x
:=
x
‐
1;
end
loop;
end
loop;
a) ¿Cuáles son los posibles valores que puede adquirir x a lo largo del tiempo?
Solución: en general, la variable x contendrá la diferencia de iteraciones entre los dos procesos,
tanto en positivo (ventaja para el proceso de la izquierda) como en negativo (ventaja para el de la
derecha). Cada uno de los dos procesos puede adelantarse al otro un número arbitrario de
iteraciones, ya que el enunciado no establece ninguna especificación sobre cómo se están
repartiendo el tiempo los procesos. Por tanto la variable x puede adquirir cualquier valor entero.
b) ¿Varía su respuesta dependiendo del número de procesadores que tenga el sistema?
10. Mencione alguna diferencia significativa entre el proceso de traducción de direcciones de un sistema
basado en segmentación, respecto al proceso de traducción de un sistema paginado.
FSO‐
examen
20120615
‐
primera
parte
‐
p2/7
Nombre
b) ¿Es posible el acceso directo a los archivos de este sistema? ¿es rentable con esta organización de
disponer de este servicio? (0.5p)
2. Deducir las expresiones y calcular el tiempo que es necesario para leer 5 bloques consecutivos de un
archivo en un sistema con:
a) Asignación contigua. (0.33p)
Solución:
t = tb + tr + (N * tt) = 15+ 10 + (5 * 1.2)
Solución:
t = N * (tb + tr + tt) = 5 * (15 + 10 + 1.2)
3
Solución:
t = (N + 1) * (tb + tr + tt) = 6 * (15+ 10 + 1.2)
3. La siguiente tabla recoge información de cinco procesos que se van a ejecutar en un sistema. Se pide
calcular el tiempo de retorno de cada uno de los trabajos y representar la ejecución en diagramas de
Gantt para los siguientes algoritmos:
a) SJF. (0.2p)
b) Round Robin con cuanto de 2 u.t. considerando que si el cuanto de un proceso en ejecución expira
a la vez que la llegada de un nuevo proceso, entonces el nuevo proceso se añade a la cola de
procesos en espera de ejecutarse antes que el proceso termine. (0.4p)
c) Ídem que el apartado anterior, pero considerando un Round Robin con prioridades, siendo 4 la
máxima prioridad y 1 la mínima. (0.4p)
Trabajo Tiempo de llegada Tiempo de ejecución (u.t.) Prioridad
A 1 8 2
B 2 2 4
C 3 1 3
D 4 2 4
E 5 5 1
Solución:
a) SJF
El diagrama de Gantt simplificado es:
FSO‐
examen
20120615
‐
primera
parte
‐
p4/7
Nombre
4. Supongamos un sistema de gestión de memoria virtual con paginación. Existe un proceso al que se le
asignan 4 marcos durante toda su ejecución y que hace referencia a la siguiente lista de páginas: 4 8 9 7
3 8 4 8 4 6 8 5 8. Indique cuantos fallos de página se originarán si se aplica:
a) El algoritmo de reemplazo de la segunda oportunidad. (0.5p)
4 8 9 7 3 8 4 8 4 6 8 5 8
* 41 * 41 * 41 * 41 30 30 30 30 30 * 30 * 30 51 51
81 81 81 * 80 * 81 80 81 81 81 81 * 81 * 81
91 91 90 90 41 41 41 41 41 41 41
71 70 70 * 70 * 70 * 70 61 61 61 61
F F F F F F F F
5
b) Alguien afirma que aplicando el algoritmo LRU, tanto para esta cadena de referencia como para
cualquier otra, se generaría un número de fallos de página menor o igual que el obtenido al aplicar
el algoritmo de la segunda oportunidad. ¿Es cierta la afirmación anterior? Justifique su respuesta.
(0.5p)
Solución: Sí, el algoritmo de la segunda oportunidad es una aproximación a la política LRU en la que
para evitar sustituir páginas usadas recientemente, se emplea un bit de referencia en lugar de
mantener una ordenación de las páginas en función del momento en el que han sido accedidas,
política que sería mucho mas costosa de implementar.
5. Suponga un sistema operativo multitarea con gestión de memoria virtual que combina la segmentación
y la paginación. Las direcciones virtuales son de 32 bits, de los cuales 8 bits indican el número de
segmento, 12 bits indican la página lógica y 12 bits el desplazamiento.
a) ¿Cuál sería la dirección física asociada a la dirección virtual (20,83400) dada en el formato
(SEGMENTO, DEZPLAZAMIENTO) si el segmento 20 empieza en la dirección física 327680 y
todas sus páginas se encuentran situadas en memoria física de forma consecutiva, siendo el tamaño
de dicho segmento 86016 bytes? (0.6p)
Solución: En primer lugar es necesario comprobar que se trata de una dirección lógica válida. Con
los 8 bits que se emplean para indicar el número de segmento, se pueden direccionar 256
segmentos. Por tanto, el número de segmento 20 está dentro del rango posible. Por otro lado, el
desplazamiento 83400, no supera el tamaño del segmento, que es 86016. Por tanto se trata de una
dirección lógica válida.
Dado que el segmento 20 comienza en la dirección física 327680, y todas las páginas que componen
dicho segmento se encuentran de forma consecutiva a partir de dicha dirección, para obtener la
dirección física será necesario calcular el número de página lógica y desplazamiento correspondiente
a la dirección lógica 83400. En este caso sería, página lógica 20, desplazamiento 1480. Por tanto, la
dirección física correspondiente a la dirección lógica (20,83400) será 327680 + (20 * 4096) + 1480 =
411080.
2 (2 puntos) Supongamos
que
tenemos
5
procesos
de
dos
tipos
:
A1,
A2,
A3,
B1
y
B2.
Implementar
un
programa
usando
semáforos
de
forma
que
los
procesos
siempre
terminen
en
el
orden:
A(cualquiera
de
ellos),
B(cualquiera
de
ellos),
A
(cualquiera
de
ellos),
A
y
B.
Teniendo
en
cuenta
el
código
que
se
muestra
a
continuación
de
los
dos
tipo
de
procesos,
la
salida
por
pantalla
debe
ser
la
siguiente:
Un proceso A ha terminado
Un proceso B ha terminado
Un proceso A ha terminado
Un proceso A ha terminado
Un proceso B ha terminado
FSO‐
examen
20120615
‐
primera
parte
‐
p6/7
Nombre
Solución:
// Variables globales
//Variable empleada para indicar que un proceso B ha
terminado
Bterminado = false;
//El semáforo semA funcionará como cola de espera para los
//procesos de tipo A. Se inicializa a 1 para que un
//proceso A pueda ser el primero en terminar
// El semáforo semB funcionará como cola de espera para
//los procesos de tipo B. Se inicializa a 0 de forma que
//todos los procesos B queden en espera inicialmente hasta
//que un proceso A termine
Semáforo semA=1, semB=0;
7
Calificación
1
2
FUNDAMENTOS DE LOS SISTEMAS OPERATIVOS
Grado en Ingeniería Informática [GII] 3
4
Convocatoria Extraordinaria Especial
28 de noviembre de 2012 5
Nombre
2
Calificación
1
2
SISTEMAS OPERATIVOS (II-ITIS-ITIG)
Examen Final
9 de junio de 2011 - PRIMERA PARTE -
Nombre Titulación
*** SOLUCIÓN ***
Dispone de dos horas para realizar el examen
1 (7 puntos) Test. En cada uno de los siguientes apartados, señale cuál opción es correcta. En caso de que existan
varias opciones ciertas, se considerará como correcta la más completa o precisa. Las preguntas no contestadas no puntúan; las
contestadas erróneamente puntúan negativamente restando un tercio de su valor. Señale sus respuestas rodeando con un
círculo la opción correcta. Si se equivoca, tache la respuesta incorrecta y rodee la opción que considere correcta. Escriba
con tinta negra o azul. Las preguntas respondidas con lápiz o con varios círculos no tachados se considerarán no
contestadas.
1. ¿Cuál de estas técnicas no tiene como fin solapar la ejecución de instrucciones en CPU con la ejecución de
operaciones de entrada/salida?
a) Acceso directo a memoria (DMA)
b) Modo dual de operación
c) Procesamiento fuera de línea (off-line)
d) Spooling
4. Un sistema multiprogramado:
a) Permite gestionar varias tareas interactivas
b) Evita el posible monopolio de la CPU por un proceso del sistema
c) Aumenta el rendimiento del sistema ya que los procesos se ejecutan en paralelo
d) Ninguna de las anteriores
6. ¿Qué parte del sistema operativo se encarga habitualmente de atender las llamadas al sistema?
a) El despachador (dispatcher)
b) El intérprete de órdenes (shell)
c) El núcleo
d) El manejador de dispositivos
9. Se tienen 3 procesos: P1, P2 y P3, con tiempos de ejecución: 65, 45 y 120 ms, respectivamente. Si actúa el
planificador a corto plazo según el algoritmo SJF (Shortest Job First) se obtiene que:
a) Los procesos se encuentran en la lista de preparados en el orden: P2, P1 y P3.
b) Los procesos se ejecutan en el orden: P2, P1 y P3.
c) Los procesos se ejecutan en el orden de llegada al sistema: P1, P2 y P3.
d) Ninguna de las anteriores
14. Para la siguiente tabla, determinar el tiempo de retorno y de espera para P2 al aplicar el algoritmo de planificación a
corto plazo Round Robin (Prioridad Circular) con cuanto de 3s.
2 (3 puntos). Implemente utilizando semáforos una solución a esta variante del problema de los
filósofos. Hay F filósofos (F mayor o igual que cinco); y hay P palillos, que se pueden tomar en
cualquier orden (no están ordenados circularmente en la mesa). Cuando un filósofo quiere comer,
coge un par de palillos cualesquiera y cuando acaba de comer, los devuelve a la mesa.
La solución debe estar libre de interbloqueos.
variables
compartidas:
npalillos
:
entera
=
P
mutex
:
Semáforo
=
1
//
para
controlar
el
acceso
a
la
variable
npalillos
cola
:
Semáforo
=
0
//
para
encolar
a
los
filósofos
en
espera
espera
:
entera
=
0
//
número
de
filósofos
en
espera
por
palillos
Código
de
cualquier
filósofo:
loop
{
...
pensar
...
P(mutex)
while
(npalillos<2)
{
espera++
V(mutex)
P(cola)
}
npalillos
=
npalillos-‐2
V(mutex)
...
comer
...
P(mutex)
npalillos
=
npalillos+2
if
(
espera>0
)
{
espera-‐-‐;
V(cola)
}
V(mutex)
}
Esta otra solución se basa en que los palillos siempre han de tomarse de dos en dos. Así que tenemos un
semáforo cuyo valor inicial es el número de parejas de palillos. Cada vez que un filósofo intenta comer,
hace una operación P o wait sobre este semáforo.
En esta solución se supone que el filósofo, una vez que se ha asegurado que hay palillos suficientes,
accede a algún recurso compartido para actualizar el número de palillos disponibles. Por eso es
necesario un semáforo "mutex" que debe tomarse antes de comer, y también después de comer.
1
2
SISTEMAS OPERATIVOS (II-ITIS-ITIG)
Examen Final 3
9 de junio de 2011 - SEGUNDA PARTE -
Nombre Titulación
*** SOLUCIÓN ***
Dispone de dos horas para realizar el examen
1 (5 puntos) Test. En cada uno de los siguientes apartados, señale cuál opción es correcta. En
caso de que existan varias opciones ciertas, se considerará como correcta la más completa o precisa. Las preguntas
no contestadas no puntúan; las contestadas erróneamente puntúan negativamente restando un tercio de
su valor. Señale sus respuestas rodeando con un círculo la opción correcta. Si se equivoca, tache la
respuesta incorrecta y rodee la opción que considere correcta. Escriba con tinta. Las preguntas
respondidas con lápiz o con varios círculos no tachados se considerarán no contestadas.
1. En un sistema operativo se utiliza una estructura de nodos-i parecida a la de Unix. El tamaño
de bloque es de 1024 bytes y tamaño de los punteros a bloques es de 32 bits. El nodo-i tiene
un cierto número de entradas de direccionamiento directo, una de direccionamiento indirecto
simple y otra de direccionamiento indirecto doble. Sabiendo que el tamaño máximo de un
archivo es de 65800 Kbytes, ¿cuántas entradas directas hay en el i-nodo?
a) 10
b) 12
c) 8
d) Ninguna de las anteriores
2. Un sistema de ficheros que usa asignación enlazada, con un tamaño de bloque de 1 Kbyte y
tamaño de enlace de 2 bytes permite un tamaño máximo de fichero de:
a) 2^16 bloques
b) 65536 Kbytes
c) 65408 Kbytes
d) a) y b) son ciertas
!
5. Para obtener un listado de los nombres de los ficheros que hay en un determinado directorio:
a) Hay que abrir uno a uno los ficheros para averiguar su nombre y después volverlos a
cerrar
b) Los nombres de los ficheros forman parte de las entradas del directorio; basta
con leerlos de él
c) Hay que acceder a la FAT para leer los nombres
d) Hay que acceder primero al i-nodo de cada fichero y después a la FAT
7. Al leer la documentación acerca del sistema de ficheros ISO 9660, usado en CDROMs,
DVDs y otros dispositivos ópticos, puede observarse que se habla de “extents” (extensiones).
¿Qué se deduce de esto?
a) ISO 9660 usa asignación por i-nodos
b) ISO 9660 usa asignación contigua
c) ISO 9660 usa asignación enlazada
d) Todas las anteriores son ciertas
10. En la tabla de segmentos se encuentra que el segmento 0 tiene una base de 219 y una longitud
de 600. ¿A qué dirección física se corresponde la dirección virtual (0, 430) dada en el formato
(nº seg., desplazamiento dentro del seg.)?:
a) 219x0+430=430
b) 219+430=649
c) 219+430=649 ( como el máximo es 600 se produce: Error de direccionamiento)
d) Es necesario conocer el tamaño del marco
SO- examen 20110609 – segunda parte – p2/5
!
2 (2 puntos).Responda a las siguientes cuestiones sobre gestión de memoria. Use únicamente
el espacio dispuesto para ello.
a. En un sistema operativo multitarea, con 16Kb de espacio lógico de procesos, con páginas de 2
Kb y 32Kb de memoria física, sin memoria virtual. La dirección lógica está formada por A
bits para indicar la página y B bits para el desplazamiento.
Respuesta: A= 3 B= 11
b. En un sistema operativo multitarea con 2Mb de memoria virtual, 32Kb de espacio lógico de
los procesos, páginas de 4Kb y 32 Kb de memoria física, la dirección física está formada por
A bits para indicar el marco y B bits para el desplazamiento.
Respuesta: A= 3 B= 12
c. En la tabla de segmentos se especifica que el segmento 1 posee una dirección base de 520 y
una longitud de 300. ¿ A qué dirección física se corresponde la dirección virtual (1,400) dada
en el formato (número segmento, desplazamiento dentro del segmento?
Respuesta: 920, pero se produce un error de direccionamiento, al exceder el límite del
segmento
d. La anomalía de Belady la sufre el algoritmo de reemplazo FIFO y consiste en que, bajo ciertas
condiciones, añadiendo más marcos a la memoria física, el sistema genera más fallos de
página
V Con una política de asignación contigua del espacio de los procesos y particiones fijas se tiene
mas fragmentación interna que en una política de particiones variables
En un sistema de gestión de memoria paginada, la gestión de la memoria libre provoca que los
V procesos tengan fragmentación interna independientemente de cómo se realice la gestión del
espacio libre
!
3 (3 puntos). Sea un sistema de impresión que tiene dos impresoras, una de color y otra de
blanco y negro. Los procesos disponen de dos operaciones, una para cada tipo de impresora.
Cuando un proceso entrega un trabajo para imprimir, el trabajo se encola y el proceso continúa
su ejecución sin bloquearse.
La impresora de color, cuando se libera, intenta primero tomar un trabajo de la cola de color. Si
no hay ningún trabajo pendiente en la cola de color, toma un trabajo de la cola de blanco y negro.
Y si no hay ningún trabajo pendiente, la impresora se bloquea hasta que llegue algún trabajo de
cualquier tipo.
La impresora de blanco y negro, cuando se libera, toma un trabajo de su cola. Si la cola está vacía,
la impresora se bloquea hasta que llegue algún trabajo de blanco y negro.
Para implementar el sistema de impresión, se ha definido un monitor, cuyas especificaciones se
dan a continuación. Tiene usted que desarrollar la implementación del monitor, en lo que atañe a
la sincronización entre procesos (bloqueos y desbloqueos). No hay que implementar los detalles
de cómo se encolan o imprimen los trabajos, sólo marcar esas operaciones con comentarios o
seudofunciones.
monitor SistemaImpresión
{
// Envía un trabajo a la cola de color
public void ImprimeColor (string documento);
Respuesta:
monitor SistemaImpresión
{
int trabajosColor = 0;
int trabajosBN = 0;
condición colaEsperaImpresora;
!
public void ImpresoraColorLibre() {
while ( trabajosColor+trabajosBN == 0 ) {
colaEsperaImpresora.wait();
}
if ( trabajosColor > 0 ) {
trabajosColor--;
// se pone a imprimir un trabajo de la cola
}
else if ( trabajosBN > 0 ) {
trabajosBN--;
// se pone a imprimir un trabajo de la cola
}
else { ERROR(); } // no debería entrar en este código
trabajosBN--;
// se pone a imprimir un trabajo de la cola
}
};
!
Calificación
1
2
Sistemas Operativos (II, ITIG, ITIS) 3
Fundamentos de Sistemas Operativos (Grado en Ing. Inf.) 4
Convocatoria extraordinaria, 7 de julio de 2011
Nombre Titulación
SOLUCIONES
Dispones de tres horas para realizar el examen
1 (4 puntos)
TEST. En
cada
una
de
estos
15
preguntas,
señala
cuál
opción
es
correcta.
En
caso
de
que
existan
varias
opciones
ciertas,
se
considerará
como
correcta
la
más
completa
o
precisa.
Las
preguntas
no
contestadas
no
puntúan;
las
contestadas
erróneamente
puntúan
negaOvamente
restando
un
tercio
de
su
valor.
Señala
tus
respuestas
rodeando
con
un
círculo
la
opción
correcta.
Si
te
equivocas,
tacha
la
respuesta
incorrecta
y
rodea
la
opción
que
considere
correcta.
Escribe
con
Onta.
Las
preguntas
respondidas
con
lápiz
o
con
varios
círculos
no
tachados
se
considerarán
no
contestadas.
1. El
procesamiento
asimétrico
se
refiere
a:
a) Sistemas
en
los
que
la
velocidad
de
la
memoria
principal
es
mucho
mayor
que
la
de
la
memoria
secundaria.
b) Máquinas
con
más
de
un
procesador
en
las
que
todos
los
procesadores
son
equivalentes
y
por
tanto
pueden
realizar
las
mismas
tareas.
c) **Máquinas con más de un procesador en las que no todos los procesadores son equivalentes.
d) Sistemas
operaOvos
en
los
que
unos
procesos
pueden
tener
más
prioridad
que
otros.
2. ¿Qué
componente
del
sistema
operaOvo
permanece
en
la
memoria
principal
desde
que
se
arranca
la
máquina
hasta
que
se
apaga?
a) El
despachador
(dispatcher).
b) **El núcleo.
c) Las
llamadas
al
sistema.
d) el
DMA.
3. Cuando
un
proceso
en
modo
usuario
intenta
ejecutar
una
instrucción
privilegiada,
se
dispara:
a) Una
interrupción.
b) El
modo
dual
de
operación.
c) **Una excepción.
d) Una
llamada
al
sistema.
4. Airbus
Industries
está
consultando
con
expertos
informáOcos
un
nuevo
sistema
operaOvo
para
el
computador
que
maneja
la
aviónica
del
Airbus
A380.
Las
tareas
del
computador
incluyen
la
visualización
de
los
datos
de
los
sensores
de
vuelo,
la
actuación
sobre
los
motores
de
la
aeronave,
el
control
de
la
presión
en
cabina,
del
sistema
de
navegación,
etc.
Si
tuvieras
la
oportunidad
de
dar
tu
opinión
al
respecto,
¿cuál
de
estas
opciones
recomendarías?:
a) **Un sistema operaDvo de Dempo real.
b) Un
sistema
operaOvo
de
Oempo
real
con
gesOón
de
memoria
virtual.
c) Un
sistema
operaOvo
distribuido.
d) Un
sistema
operaOvo
por
lotes
no
mulOprogramado.
5. Oyes
por
los
pasillos
de
la
Escuela
las
siguientes
afirmaciones
referidas
a
la
jerarquía
de
memorias
y
una
de
ellas
te
hace
pensar
que
quien
la
realiza
no
ha
estudiado
suficiente
la
asignatura
de
Sistemas
OperaOvos.
¿Cuál
es?
a) **La memoria más rápida es la caché del procesador.
b) La
aplicación
del
principio
de
caché
permite
mejorar
el
rendimiento
de
los
sistemas.
c) La
capacidad
de
memoria
es
mayor
a
medida
que
el
Oempo
de
acceso
es
mayor.
d) El
coste
por
bit
es
mayor
cuanto
más
rápida
es
la
memoria.
Sistemas Operativos – convocatoria extraordinaria, 7 de julio de 2011 pág. 2/5
6. Una
diferencia
entre
un
semáforo
binario
y
un
semáforo
general
es:
a) En
los
semáforos
binarios,
la
operación
«V»
o
«signal»
puede
llegar
a
bloquear,
bajo
determinadas
circunstancias.
b) Un
semáforo
general
Oene
una
operación
broadcast,
de
la
que
carecen
los
semáforos
binarios.
c) Un
semáforo
binario
sólo
puede
inicializarse
a
valores
iguales
o
superiores
a
1.
d) **Un semáforo binario sólo puede adoptar los valores 0 y 1.
7. Si
un
algoritmo
que
intenta
gesOonar
una
sección
críOca
no
cumple
la
condición
de
progreso:
a) **Se corre el riesgo de inanición de uno o varios procesos.
b) Se
corre
el
riesgo
de
que
haya
varios
procesos
ejecutando
código
de
sección
críOca.
c) Se
corre
el
riesgo
de
que
la
solución
no
sea
implementable
con
semáforos
ni
con
monitores.
d) Todas
las
anteriores
son
ciertas.
8. Las
llamadas
«instrucciones
atómicas»
del
hardware:
a) Evitan
que
exista
interbloqueo
en
los
algoritmos
de
sección
críOca.
b) **Facilitan la implementación de algoritmos de sección críDca y de sincronización entre procesos.
c) Permiten
soluciones
universales
a
los
problemas
de
sincronización,
ya
que
están
disponibles
en
cualquier
procesador.
d) Dependen
del
Opo
de
procesador,
ya
que
hay
instrucciones
Opo
Mesa
y
otras
Opo
Hoare.
9. Imagina
un
sistema
de
archivos
como
el
de
Linux,
con
la
diferencia
de
que
no
se
permiten
enlaces
a
archivos.
En
este
hipotéOco
caso,
la
organización
del
sistema
de
ficheros
sería:
a) De
dos
niveles
recursivos.
b) **De árbol.
c) De
grafo
general.
d) De
grafo
acíclico.
10. Los
disposiOvos
de
cinta
magnéOca
son
de
naturaleza
secuencial.
Si
organizamos
un
sistema
de
archivos
sobre
una
cinta,
¿es
posible
realizar
accesos
directos
sobre
los
archivos?
a) **Es posible, pero sería extremadamente ineficiente.
b) Sólo
es
posible
si
se
trata
de
cintas
en
cartucho
(Opo
casse3e),
no
en
bobina.
c) Sólo
es
posible
si
el
sistema
operaOvo
es
independiente
del
disposiOvo.
d) Es
imposible,
por
la
naturaleza
secuencial
del
disposiOvo.
11. En
un
sistema
de
planificación
por
prioridades
expropiaOvo
llega
un
proceso
en
el
instante
4
con
prioridad
máxima.
Este
proceso
se
ejecuta
durante
2s,
después
realiza
una
operación
de
E/S
durante
3s
y
para
acabar
se
ejecuta
durante
5
s.
¿Cuál
es
el
Oempo
de
retorno
de
este
proceso?
(Despreciar
el
Oempo
de
conmutación
de
tarea).
a) **10s
b) 14s
c) 17s
d) 23s
12. ¿Cuál
de
estas
transiciones
de
estados
de
un
proceso
jamás
se
produce
en
un
sistema
normal?
a) De
«bloqueado»
a
«preparado».
b) **De «preparado» a «bloqueado».
c) De
«en
ejecución»
a
«preparado».
d) De
«en
ejecución»
a
«bloqueado».
13. ¿Cuál
de
las
siguientes
afirmaciones
es
falsa
en
un
sistema
mulOprogramado
con
un
solo
procesador?
a) Se
pueden
ejecutar
varios
procesos
concurrentemente.
b) **Se pueden ejecutar varios procesos en paralelo.
c) Se
pueden
tener
varios
procesos,
cada
uno
definido
según
su
bloque
de
control
de
proceso.
d) Se
pueden
tener
varios
procesos,
tantos
como
indique
el
grado
de
mulOprogramación.
14. Se
Oenen
dos
procesos:
P1
y
P2,
de
Oempos
de
ejecución
25
y
30
ms,
respecOvamente.
El
planificador
a
corto
plazo
actúa
según
el
algoritmo
Round Robin
con
cuanto
de
10
ms.
¿Cuál
será
el
Oempo
medio
de
retorno
de
P1
y
P2,
considerando
que
P1
está
en
el
primer
lugar
de
la
cola?
a) 45
ms
b) **50 ms
c) 65
ms
d) 80
ms
Sistemas Operativos – convocatoria extraordinaria, 7 de julio de 2011 pág. 3/5
15. El
planificador
de
medio
plazo
o
nivel
medio
selecciona
un
proceso:
a) De
entre
los
recién
llegados
para
pasar
a
la
cola
de
preparados.
b) De
entre
los
de
la
cola
de
preparados
para
pasar
a
ejecución.
c) De
entre
los
suspendidos
en
memoria
principal
para
pasar
a
la
cola
de
preparados.
d) **De entre los suspendidos en memoria secundaria para pasar a la cola de preparados.
2 (2 puntos)
Responda
a
las
siguientes
cuesOones
sobre
gesOón
de
memoria.
UOlice
únicamente
el
espacio
dispuesto
para
ello.
a. Se
dispone
de
un
sistema
operaOvo
mulOtarea
con
gesOón
de
memoria
virtual
formada
por
la
combinación
de
la
segmentación
y
la
paginación.
Si
el
tamaño
de
página
es
de
4Kb,
el
número
de
marcos
de
página
direccionables
por
un
proceso
es
4096
y
el
número
de
segmentos
disOntos
direccionables
es
256,
indique
la
estructura
de
la
dirección
lógica.
Número de segmento Número de página Desplazamiento
8 bits 12 bits 12 bits
b. Dada
la
siguiente
cadena
de
referencias
a
páginas:
7,
0,
2,
0,
3,
4,
1,
2,
3,
4,
0,
1,
2,
5,
0,
7,
3,
0,
2.
¿Cuántos
fallos
se
tendrían
al
aplicar
la
políOca
de
la
segunda
oportunidad
si
disponemos
de
cuatro
marcos
de
página?
13
c. La
políOca
de
gesOón
de
memoria
de
un
cierto
sistema
es
del
Opo
«paginación
por
demanda».
El
tamaño
de
una
página
es
de
1
Kbyte,
el
tamaño
máximo
de
la
memoria
virtual
es
de
4
Mbytes
y
el
tamaño
de
la
memoria
>sica
es
de
1
Mbyte.
¿Cuántos
bits
necesita
como
mínimo
una
dirección
>sica?
20
¿Cuántos
marcos
de
página
hay
en
este
sistema?
1024
¿Cuántos
bits
de
la
dirección
>sica
se
emplean
para
el
desplazamiento
dentro
de
la
página?
10
d. ¿Verdadero
o
falso?
Con
una
políOca
de
asignación
conOgua
del
espacio
de
los
procesos
y
parOciones
fijas:
[ V ] Se
Oene
mas
fragmentación
interna
que
en
una
políOca
de
parOciones
variables.
[ F ] Todas
las
parOciones
tendrán
siempre
el
mismo
grado
de
ocupación
[ F ]
Se
necesita
implementar
un
mecanismo
de
compactación
para
tener
un
sistema
eficiente
[ F ]
Únicamente
se
podrá
implementar
si
se
Oene
reubicación
dinámica
Sistemas Operativos – convocatoria extraordinaria, 7 de julio de 2011 pág. 4/5
3 (2 puntos)
Tienes
que
modelar
el
comportamiento
de
un
transbordador
que
cruza
un
río,
siempre
en
el
mismo
senOdo.
Las
personas
que
quieren
cruzar
el
río
se
esperan
en
el
pantalán
hasta
que
aparece
el
transbordador
y
les
recoge.
El
transbordador
aparece
de
cuando
en
cuando.
Al
llegar
el
transbordador,
recoge
a
la
gente
que
está
esperando,
y
sale
siempre
y
cuando
haya
al
menos
cinco
personas
esperando.
De
lo
contrario,
el
transbordador
se
espera
hasta
que
se
alcance
el
cupo
de
cinco
personas.
La
sincronización
de
las
personas
y
el
transbordador
se
quiere
realizar
con
un
monitor,
del
que
se
hace
la
siguiente
especificación.
Tu
misión
es
implementar
el
cuerpo
y
las
operaciones
del
monitor.
monitor Río
{
// llega una persona para cruzar el río. Espera a que el transbordador
// llegue y salga del pantalán.
public void cruzaPersona();
Monitor Río
{
int npersonas = 0;
Condition personas, transbordador;
// llega una persona para cruzar el río. Espera a que el transbordador
// llegue y salga del pantalán.
public void cruzaPersona() {
npersonas++;
if ( npersonas == 5 ) { transbordador.signal(); }
personas.wait();
}
4 (2 puntos)
Responde
a
estas
preguntas
sobre
sistemas
de
archivos.
UOlice
únicamente
los
espacios
dispuestos
para
ello.
a. Sea
un
sistema
de
ficheros
con
asignación
de
espacio
mediante
i-‐nodos,
donde
cada
i-‐nodo
Oene
10
entradas
para
acceso
directo,
3
para
acceso
indirecto
simple,
2
para
acceso
indirecto
doble
y
3
para
acceso
indirecto
triple.
El
tamaño
de
bloque
es
de
2
Kbytes
y
el
tamaño
de
los
índices
es
de
64
bits.
Rellena
la
siguiente
tabla
indicando
el
número
de
bloques
a
los
que
se
puede
acceder.
Directo 10
b. Se
Oene
un
fichero
compuesto
por
5
registros
de
500
bytes
cada
uno.
El
fichero
está
almacenado
a
parOr
del
bloque
1100
de
un
sistema
de
ficheros
con
asignación
de
espacio
conOgua
y
tamaño
de
bloque
de
2
Kbytes.
Calcula
la
ubicación
exacta
del
úlOmo
registro
del
fichero,
diciendo
en
qué
bloques
se
encuentra
y
en
qué
zonas
de
cada
uno
de
los
bloques
(p.ej.
bloque
x,
desde
el
byte
b1
hasta
el
byte
b2,
ambos
incluidos).
Considera
que
el
primer
byte
de
un
bloque
es
el
byte
número
0.
El último registro comienza en el bloque 1100, desde el byte 2000 hasta el 2047, ambos
incluidos; y continúa en el bloque 1101, desde el byte 0 hasta el 451, ambos incluidos.
c.
Responde
a
la
misma
pregunta
del
apartado
anterior,
pero
considerando
que
ahora
el
fichero
se
encuentra
almacenado
en
un
sistema
de
archivos
de
asignación
enlazada,
con
enlaces
de
32
bits
y
sabiendo
que
el
primer
bloque
de
datos
que
se
asignó
al
fichero
fue
el
3100
y
que,
al
crecer
por
el
final,
se
le
asignó
el
bloque
125.
La respuesta depende de dónde se ubican en este sistema los enlaces, ej. al principio de los
bloques o al final.
Si los enlaces van al principio del bloque, la respuesta sería: comienza en el bloque 3100, desde
el byte 2004 hasta el 2047; y continúa en el bloque 125, desde el byte 4 hasta el 459.
Si los enlaces van al final del bloque, la respuesta sería: comienza en el bloque 3100, desde el
byte 2000 hasta el 2043; y continúa en el bloque 125, desde el byte 0 hasta el 455.
Calificación
1
2
3
FUNDAMENTOS SISTEMAS OPERATIVOS (GI)
Convocatoria extraordinaria, 22 de julio de 2011 4
Nombre Titulación
SOLUCIONES
Dispone de tres horas para realizar el examen.
Para superar el examen es necesario tener una puntuación igual o superior a 1,7 en la pregunta 1.
Solo se corregirán las respuestas incluidas en el enunciado del examen en el espacio reservado para ello. Esto no se
aplica a la pregunta 4, cuya respuesta se debe adjuntar en un folio al enunciado entregado. Las justificaciones a las
respuestas de las preguntas 2 y 3 deben adjuntarse obligatoriamente al examen.
PARTE BÁSICA
1 (2,5
puntos) Responda a las siguientes cuestiones en el espacio reservado para ello.
1.- Gracias al uso de interrupciones, los dispositivos pueden avisar al sistema operativo de que
algo ha ocurrido mientras el procesador ejecuta cualquier tarea.
2.- Un búfer es un área de memoria principal para guardar datos durante transferencias de
entrada o salida.
3.- Con la técnica del spooling se utiliza el disco como un enorme búfer.
4.- La multiprogramación permite que varios programas residan en memoria principal al mismo
tiempo.
5.- Las excepciones son un tipo de interrupciones donde el causante es el propio sistema
operativo para, por ejemplo, registrar una división por cero, una violación en los límites de
memoria, etc.
6.- Las llamadas al sistema son un tipo de interrupciones de software que se producen cuando un
programa quiere utilizar un recurso del sistema.
7.- Con el fin de liberar a la CPU de trabajo, se ha desarrollado una técnica para los dispositivos
de entrada/salida orientados a transferencia por bloques, como los discos, que consiste en hacer
que los dispositivos puedan acceder directamente a memoria principal sin intervención de la
CPU. Esto es lo que se conoce como DMA o acceso directo a memoria.
11.- El tiempo transcurrido desde que un programa se presenta en el sistema para su ejecución
hasta que la finaliza se denomina tiempo de retorno.
12.- La estructura de datos del sistema operativo que almacena el estado de un proceso se llama
BCP o bloque de control de proceso.
14.- En el sistema operativo, una unidad de ejecución más elemental que el proceso es el hilo o
proceso ligero.
15.- El tiempo total que un proceso permanece en la cola de procesos listos se denomina tiempo
de espera.
16.- La construcción lingüística de alto nivel que consiste en un tipo abstracto de datos y que
además por definición garantiza la exclusión mutua en todos sus métodos o funciones miembro
se denomina monitor.
17.- Las políticas de planificación en las que es posible desalojar al proceso que está haciendo uso
de la CPU se denominan políticas expulsivas
18.- El planificador que decide si se debe desalojar un proceso de la memoria principal debido a
que el sistema está sobrecargado se denomina planificador de medio plazo o de nivel medio.
20.- [ V | F ] En un sistema multihilo, los hilos de un mismo proceso pesado comparten el mismo
código y tienen la ventaja de que la comunicación entre ellos es sencilla usando la pila, que es
compartida.
21.- La condición que debe cumplir cualquier solución válida al problema de la sección crítica y
que establece que solo los procesos que quieren entrar en sus secciones críticas son los que
intervienen en la elección de cuál entra y que dicha elección de debe realizar en un tiempo finito,
se denomina progreso.
22.- La condición que debe cumplir cualquier solución válida al problema de la sección crítica y
que establece que, una vez que un proceso solicita entrar en su sección crítica, a este no se le
postergará indefinidamente su entrada, se denomina espera limitada.
23.- La herramienta de sincronización variable condición posee entre sus operaciones una que
provoca el bloqueo incondicional del proceso que la invoca.
24.- La condición que debe cumplir cualquier solución válida al problema de la sección crítica y
que establece que solo un proceso puede estar ejecutándose en su sección crítica se denomina
exclusión mutua.
25.- Cuando una operación signal sobre una variable condición despierta a un proceso
bloqueado por haber realizado una operación wait sobre la variable condición y a su vez
bloquea al proceso que invoca dicha operación signal, entonces estamos ante una variable
condición que funciona según el estilo Hoare.
FAT
No. de entrada 0 1 2 3 4 5 6 7
No. de bloque 1 7 0 /
Nota: el símbolo / se usa en la FAT para indicar puntero nulo
b. Sea un sistema de ficheros con gestión de espacio enlazada, bloques de 512 bytes y enlaces de
32 bits:
1) En cada bloque ¿qué porcentaje de espacio se usa para los datos de usuario?
100*(512-4)/512 = 99,21865%
4 (2,5
puntos) El siguiente algoritmo es una solución clásica al problema del búfer finito, que
utiliza semáforos generales para la sincronización. En el sistema hay múltiples procesos
productores que invocan repetidamente a la función produce(); también hay varios procesos
consumidores que invocan repetidamente a consume().
//
Variables
compartidas
…
un
búfer
con
N
elementos
Semáforo
huecos
=
N;
Semáforo
llenos
=
0;
Semáforo
mutex
=
1;
En un momento dado, ocurre que uno de los procesos productores aborta justo antes de
ejecutarse la línea 6 del código fuente. ¿Qué consecuencias tendría eso en la ejecución del
sistema? ¿Seguiría ejecutándose el resto del sistema con normalidad? ¿Habría algún problema?
¿Por qué?
Responda a esas mismas preguntas considerando estos otros tres casos: que el proceso aborta
justo antes de ejecutar la línea 5; justo antes de la línea 7; y justo antes de la línea 8.
1
2
Fac. de Informática / Escuela Univ. Informática
3
SISTEMAS OPERATIVOS
Examen Parcial 4
9 de mayo de 2009
Nombre Titulación
*** S O L U C I O N E S ***
Dispone de tres horas para realizar el examen
1 (2.5 puntos) Comentar la validez de la siguiente solución al problema de la sección crítica para dos
procesos:
Variables compartidas
Int n1=0, n2=0;
process P1() { process P2() {
while (true) { while (true) {
//Sección no crítica //Sección no crítica
n1:=1; n2:=1;
n1:=n2+1; n2:=n1+1;
while(n2<>0) and (n2<n1) do null; while (n1<>0) and (n1<=n2) do null;
//Sección Crítica1; //Sección Crítica2;
n1:=0; n2:=0;
//Sección no crítica //Sección no crítica
} }
} }
Para demostrar que se trata de una solución válida al problema de la sección crítica vamos
a comprobar que se cumplen las propiedades de exclusión mutua, progreso y espera
limitada. Antes de ver cada una de estas tres propiedades conviene resaltar si analizamos el
preprotocolo y postprotocolo de ambos procesos que cada uno de ellos antes de entrar en la
sección crítica, inicializa una variable entera (n1 para P1 y n2 para P2) a 1. Estas variables
funcionan como indicadores a través de los cuales, cuando tienen un valor mayor que cero,
indican la intención de cada proceso de intentar acceder a la sección crítica. La intención de
entrar de cada proceso se manifiesta inicializando su correspondiente bandera a 1, para a
continuación asignarle el valor inmediatamente superior al del proceso opuesto. Dicho de
otra forma, cada proceso coge número antes de entrar, siendo este número el siguiente al
que tiene el proceso opuesto. En definitiva se trata de una versión del algoritmo de la
panadería para dos procesos.
- Exclusión mutua: veamos por ejemplo que ocurre si el proceso P1 accede a la sección
crítica y a continuación el proceso 2 realiza un intento de entrada. Si P1 ejecuta el
preprotocolo de la sección crítica, la variable n1 toma el valor 1 (asumiendo que n2 vale
0 al no haber ejecutado éste el preprotocolo). El proceso P1 rebasaría el bucle “while” ya
que cuando n2 vale 0 se entiende que el proceso P2 no tiene intención de entrar en la
sección crítica y por tanto no hay problema para la entrada del proceso P1. Si estando
P1 en SC el proceso P2 ejecuta el preprotocolo de entrada a la SC, vemos como n2
toma el valor 2 y por tanto el proceso 2 quedaría iterando en el bucle “while” de su
preprotocolo ya que su número es mayor que el del proceso P1 (n2>=n1) y n1 es distinto
de cero (n1<>0). Lo mismo ocurriría exactamente si entra en sección crítica P2 y fuera el
proceso P1 el que intentara entrar en SC.
- Progreso: Se puede ver claramente que si un proceso ejecuta el preprotocolo que para
entrar en SC y el otro proceso está en su sección NO crítica, su bandera sería 0 y ello no
impediría la entrada del proceso que tiene intención de ejecutar la SC. Por tanto la
decisión de entrar en la sección crítica depende exclusivamente de aquellos que quieren
entrar. Si ambos intentaran acceder a la SC concurrentemente y ejecutaran el
preprotocolo, la decisión de quien entra se toma en un tiempo finito dado que aunque los
dos podrían tener el mismo número (igual valor en n1 y n2), las condiciones del bucle
con diferentes: “n2<n1” en el proceso P1 y “n1<=n2” en el proceso P2 y por tanto en ese
caso entraría primero el proceso P1 y a continuación P2.
- Espera limitada: Si ambos procesos en un momento determinado manifiestan intención
de entrar y toman el mismo número, entrará primero el proceso P1 y después aunque
este intente acceder nuevamente a la SC, esperará a que entre P2 ya que tomaría un
número mayor del que dispone el proceso P2.
Por tanto, podemos decir que la solución planteada verifica las tres propiedades y se trata
de una solución por software válida al problema de la sección crítica para dos procesos.
2 (2.5 puntos) Una empresa de logística quiere llevar a cabo un control sistemático de su nave
en la que se almacenan los productos que distribuye. La nave se debe gestionar de la siguiente
manera:
• En la nave se almacenan existencias de un solo producto.
• A la nave acceden vehículos de proveedores y vehículos de compradores. Los vehículos
proveedores solicitan el depósito de la mercancía mediante la función
Solicito_Almacen(cantidad). Los vehículos clientes solicitan retirar un pedido
mediante la función Solicito_Pedido(cantidad). Siendo Cantidad un valor entero
positivo que especifica el número de unidades a depositar o retirar.
• Para que un vehículo proveedor pueda depositar su carga debe haber capacidad en el
almacén para recoger toda su carga. Si no hay capacidad suficiente, entonces el vehículo
debe quedar a la espera hasta que la haya.
• Para que un vehículo cliente pueda retirar su pedido en la nave debe haber existencias
para atender a la totalidad de su pedido. Si no hay existencias suficientes, entonces debe
esperar hasta que las haya.
La diferencia es que en el último ejemplo, las líneas b3 y b4 constituyen una sección crítica
que no está controlada y permite que varios procesos observen al mismo tiempo que la
variable SC_Ocupada está a false (línea b3) y por tanto escapen todos del bucle de espera
y entren simultáneamente en la sección crítica. En el código de ejemplo con test_and_set, la
evaluación y manipulación de SC_Ocupada ocurre en un solo paso indivisible (línea a3). Por
tanto, ante una multitud de procesos que quieran entrar en sección crítica estando
SC_Ocupada a false, sólo uno de ellos se la encontrará con ese valor y podrá escapar del
bucle.
Por tanto, la utilización de test_and_set permite simplificar el diseño de algoritmos que
regulan el acceso a secciones críticas, y ahorrarnos el esfuerzo de construir algoritmos
complejos de entender, ejecutar y mantener.
1)Diagrama de Gantt
A B C
↓ ↓ ↓
tiempo 1 2 3 4 5 6 7 8 9 10 11 12 13
CPU A A B C B C B B A A C C A
Cola 0 A* B* C* C* B* A*
Cola 1 A* A2 B1,A2 B,*A2 A2 C2A2 B1*C2A2 C2A2* C2*
E/S - - - - C B - - - - A A -
Tiempos de Retorno
A 13-0=13
B 8-2=6
C 12-3=9
Tiempos Medios (13+6+9)/3=9,33
Calificación
1
2
Nombre Titulación
7. De los siguientes elementos, cuál no forman parte del bloque de control de procesos ni se
almacena nunca en él:
a) Contador de programa.
b) Identificador del proceso (PID).
c) Gestor de interrupciones.
d) Datos del contexto (registros de la CPU, puntero de pila, ...).
11. Un proceso ejecuta una operación P sobre un semáforo y se queda bloqueado sin
finalizar la operación. ¿Qué conclusión podemos sacar?
a) El semáforo tenía valor cero en el momento de realizar la operación.
b) El semáforo tenía valor uno en el momento de realizar la operación.
c) El semáforo tenía un valor no nulo en el momento de realizar la operación.
d) No podemos concluir nada, ya que depende de si el semáforo está implementado con
espera activa o con colas de espera.
15. Cuando un algoritmo de sección crítica cumple con la condición de progreso, implica
que:
a) Se cumple también la condición de exclusión mutua.
b) Ningún proceso ve postergada continuamente su entrada en la sección crítica.
c) Si varios procesos solicitan entrar en la sección crítica estando esta libre, el sistema
deja entrar a uno de ellos en un tiempo finito.
d) Como mucho puede haber un proceso ejecutando código de sección crítica.
SO – examen 18062009 – segunda parte – pag. 3/5
2 (2,5 puntos, todas puntúan lo mismo) Responda a las siguientes cuestiones:
Cada nivel proporciona primitivas (operaciones) y objetos, de forma que los niveles no utilizan el
hardware directamente, sino las primitivas y objetos del nivel inferior.
Se asume que se trata de un sistema que, al no tener que interactuar con personas no requerirá
interfaces humanas y requerirá servicios que garanticen tiempos de respuesta estrictos, o sea un
sistema de tiempo real. Los sistemas de tiempo real se clasifican en críticos y no críticos. Este
vehículo va a ser manejado de forma autónoma por lo que las tareas que realice siempre
deberán cumplir plazos de terminación: si un sensor detecta un obstáculo, el vehículo deberá
RESPONDER de forma instantánea (o casi) de forma que el sistema operativo deberá ser simple
y de respuesta rápida.
Es por ello que este tipo de sistemas no deberán utilizar: manejo de archivos (o en su caso, uno
muy simple), no manejará gráficos, serán incompatibles con el tiempo compartido, pues
normalmente el proceso que esté en ejecución (navegador autónomo) requerirá toda la atención
SO – examen 18062009 – segunda parte – pag. 4/5
de la CPU. Tampoco utilizará memoria virtual por ser lenta y requerirán utilizar gran cantidad de
memoria principal que es mucho más rápida.
Un mecanismo perfecto para evitar abusos de CPU por parte de procesos podría ser un
temporizador, que mediante una política (por ejemplo) que utiliza un algoritmo de planificación a
corto plazo de un Round Robin, con q como quántum de tiempo, permita “desasignar” cada q
instantes de tiempo la CPU al proceso que la está utilizando. De esta forma lograremos que un
proceso, si existen más en la cola de preparados, no acapare la CPU más de q unidades de
tiempo.
E. ¿Para qué están destinados los sistemas operativos distribuidos? Indicar las
ventajas y las complicaciones de los mismos.
Los Sistemas Operativos Distribuidos son sistemas operativos diseñados para trabajar con
Sistemas Distribuidos, es decir, sistemas con múltiples procesadores conectados mediante una
red, donde varios sistemas informáticos se conectan de forma distribuida para realizar
determinadas funciones, rompiendo la barrera del espacio (los equipos no tienen por qué estar
físicamente juntos, incluso ni siquiera próximos). Estos sistemas están débilmente acoplados: los
procesadores no comparten memoria ni reloj.
Entre las ventajas de utilizar un sistema distribuido encontramos el compartir recursos dispersos.
Al no vernos limitados por el espacio aparece la posibilidad de realizar trabajo cooperativo de
equipos humanos, es decir, varios equipos de investigación situados en distintos laboratorio
pueden realizar partes de un mismo trabajo y compartir información. Así se obtiene un aumento
de velocidad y de la fiabilidad (la tolerancia a fallos es mayor al existir una alta disponibilidad de
equipos, puede suceder que una parte no funcione, y esto no afecta al trabajo que raliza el
resto).
Los sistemas distribuidos tienen varias complicaciones comparados con los sistemas
monoprocesadores, pues no comparten memoria, lo que obliga a que la comunicación sea más
compleja usándose por ejemplo mecanismos como la mensajería que son más lentos y no se
puede tener un estado global visible por todos los nodos al instante, al no tener una tabla global
de todos los sistemas, sino que cada sistema tiene únicamente información sobre sí mismo. El
uso de diferentes equipos produce una heterogeneidad de los nodos, teniendo los sistemas
informáticos distintas características hardware, distintos sistemas operativos y distinto software
de aplicaciones. Por último, otra complicación podría ser la no fiabilidad de la red utilizada como
medio de comunicación entre los nodos.
1
2
3
Nombre Titulación
Dispone de dos horas para realizar el examen, todas las cuestiones puntúan lo
mismo
SOLUCIONES
1 Un museo tiene capacidad para albergar a N visitantes, si se alcanza ese número no
se permiten más visitante en sus instalaciones. Además dispone de D dispositivos que
reproducen explicaciones de las distintas piezas del museo. Cuando una persona desea
visitar el mueso lo solicita en la entrada, especificando además en su solicitud si desea
hacer la visita con uno de los dispositivos reproductores. Si el museo ha alcanzado su
capacidad, entonces espera en una cola de entrada. Si especifica que desea un
reproductor y éste no está disponible, entonces se queda esperando dentro del museo
en una cola; contabilizándose a la hora de verificar si el museo ha alcanzado su
capacidad máxima. A la hora de gestionar los dispositivos, estos se asignan siguiendo el
orden de llegada de las solicitudes. Desarrolle una solución al control de entrada y
salidas de visitantes del museo, así como de los dispositivos reproductores, usando
monitores.
Variables globales
Condición: cola_entrada;
Condición: cola_reproductor;
Entera: visitantes = 0;
Entera: disp_reproductor=D; // Inicialmente hay D disponibles
Una dirección virtual consta de dos campos: número de página y desplazamiento en bytes
dentro de la página. El tamaño del campo número de página se deduce a partir del número de
páginas que ocupa la memoria virtual, que se calcula dividiendo el tamaño de la memoria virtual
entre el tamaño de una página:
4*210/210= 212 páginas
Luego se requieren 12 bits para distinguir entre las 212 páginas de que consta la memoria virtual.
Por otra parte, el desplazamiento corresponde al tamaño de la página 1024 bytes= 210 bytes,
luego el campo desplazamiento requiere 10 bits. Por lo tanto, los campos de una dirección virtual
poseen el siguiente tamaño:
12 bits 10 bits
Nº de página Desplazamiento
Una dirección física consta de dos campos: número de marco de página y desplazamiento en
bytes dentro del marco. Para obtener el tamaño del primer campo hay que calcular el número de
marcos de página en que se divide la memoria principal que se obtiene dividiendo la capacidad
de la memoria principal entre el tamaño de una página:
SO – examen 18062009 – segunda parte – pag. 2/5
220/210= 210 marcos de página
Luego se requieren 10 bits para distinguir entre las 210 marcos de páginas en que se divide la
memoria física. Por otra parte, el desplazamiento corresponde al tamaño del marco de página,
que es igual al de la página: 1024 bytes= 210 bytes, luego el campo desplazamiento requiere 10
bits. Por lo tanto, los campos de una dirección física poseen el siguiente tamaño:
10 bits 10 bits
Nº de marco de página Desplazamiento
B. Suponga un proceso que ocupa 8192 bytes y que tiene cargadas en memoria
principal las páginas lógicas 0 y 3 en los marcos 8 y 2 respectivamente. Dibujar
las tablas de páginas para ese proceso y calcular las direcciones físicas de las
siguientes direcciones virtuales: 3632 y 2648.
El tamaño del proceso es 8192 bytes. Como el tamaño de página es 1024 bytes, el proceso
ocupa 8 páginas. La tabla de páginas tendrá la siguiente información:
Marco de Bit de
página validez
8 1
X 0
X 0
2 1
X 0
X 0
X 0
X 0
Dirección física de la dirección lógica 3632:
La dirección lógica 3632 se corresponde con la página lógica 3, desplazamiento 560
(3632/1024). Según la tabla de página la página lógica 3 se encuentra en el marco 2, por tanto la
dirección base de este marcos es 2*1024= 2048 y la dirección física de la dirección virtual 3632
será 2048+560= 2608
El proceso de mayor tamaño que se puede ejecutar sería aquel que ocupara toda la memoria
virtual, es decir, 4 Mbytes (212 páginas), parte de este espacio estaría dedicado a albergar
algunas estructuras de datos del SO como la propia tabla de páginas del proceso. Como la tabla
de páginas debe tener una entrada por cada página del proceso constará por tanto de 212
entradas. En un sistema con demanda de página una entrada de una tabla página debe tener
como mínimo dos campos: número de marco de página (10 bits) y bit de validez. Luego el
tamaño mínimo de una entrada es de 11 bits. Por lo tanto la capacidad mínima que debe tener la
tabla de páginas del proceso de mayor tamaño que se puede ejecutar en el sistema es
Nota: el espacio ocupado por las estructuras que el SO asocia a un proceso y que se
almacenan en el espacio direccionable del proceso no se ha tenido en cuenta en los cálculos.
Si una referencia a memoria requiere acceder a una tabla de páginas almacenada a memoria
principal, habrá que realizar dos accesos a memoria, uno para leer dentro de la tabla de páginas
el número de marco donde está alojada la página y otro más para acceder a dicho marco. Luego
el tiempo empleado en este caso será 2·100=200 ns. Por el contrario si la tabla de páginas está
en la memoria asociativa, primero se accede a la memoria asociativa para leer dentro de la tabla
de páginas el número de marco donde está alojada la página y luego se accede a la memoria
principal para acceder al marco. Luego el tiempo empleado en este caso será 75+100=175 ns.
Como se sabe que el 80% por ciento de las referencias a las tablas de páginas se encuentran en
la memoria asociativa, entonces el tiempo promedio tr de una referencia a memoria principal es:
El byte a acceder se encuentra en el bloque 524 del archivo, esto se obtiene al obtener el
redondeo superior de la división entre la posición del byte a acceder por el tamaño de bloque del
sistema de archivo, quedándome con el redondeo superior. Como se trata de un sistema tipo
FAT, que es una variante del esquema enlazado en el que los enlaces se almacenan en la
estructura FAT, entonces asumiendo que dicha estructura está cargada en memoria, el número
de accesos será 1.
B. ¿Cuántos accesos a disco se requieren, en el peor de los casos, si se trata de un
sistema de archivos tipo UNIX?
El byte a acceder se encuentra en el bloque 524 del archivo, esto se obtiene al obtener el
redondeo superior de la división entre la posición del byte a acceder por el tamaño de bloque del
sistema de archivo, quedándome con el redondeo superior. Como se trata de un sistema tipo
UNIX, tendremos que obtener cuántos niveles de indexación serán necesarios recorrer para
llegar al bloque 524 y para ello será necesario calcular cuántos índices se almacenan en cada
bloque de índices. Como el sistema de archivos posee 16384, entonces necesitaremos, al
menos, 2 bytes para codificar los índices. Por tanto, cada bloque del sistema de archivo podrá
albergar 512 índices, por ello podemos afirmar que:
Los 10 primeros bloques del archivo se accederán de manera directo, es decir con un solo
acceso (bloques relativos del 0 al 9).
Los siguientes 512 boques (bloques relativos 10 al 521) se accederán mediante una indexación
a un solo nivel, por ello se requerirán dos accesos.
Los siguientes 512 * 512 bloques (bloque 522 al 522 + (512*512) -1) se accederán mediante
una indexación doble, por tanto se requerirán tres accesos. Por tanto, como el bloque 524 se
encuentra en ese rango, el número de accesos serán tres.
C. ¿Cuántos accesos a disco se requieren, en el peor de los casos, si se trata de un
sistema de archivos que gestiona el espacio de manera encadenada con enlace
simple?
Como se trata de un sistema encadenado con enlace simple, tendremos que obtener el tamaño
del enlace que se encuentra en cada bloque. Como el sistema de archivos posee 16384,
entonces necesitaremos, al menos, 2 bytes para codificar los enlaces. Por tanto, cada bloque del
sistema de archivo podrá albergar 1022 bytes de datos, por lo que el byte acceder se encuentra
en el bloque 524, que resulta al calcular el redondeo superior de la división entre la posición del
byte a acceder y 1022 (tamaño efectivo de bloque del sistema de archivo). Por tanto se
requerirán 525 accesos para acceder al bloque deseado desde el primer bloque del archivo.
1
2
3
Nombre Titulación
1 (6 puntos) Test. En cada uno de los siguientes apartados, señale cuál opción es
correcta. En caso de que existan varias opciones ciertas, se considerará como correcta
la más completa o precisa. Las preguntas no contestadas no puntúan; las contestadas
erróneamente puntúan negativamente restando un tercio de su valor. Señale sus
respuestas rodeando con un círculo la opción correcta. Si se equivoca, tache la
respuesta incorrecta y rodee la opción que considere correcta. Escriba con tinta. Las
preguntas respondidas con lápiz o con varios círculos no tachados se considerarán no
contestadas.
1. ¿Por qué un ejecutable preparado para un Linux sobre PC no puede ejecutarse directamente en un
sistema Windows, a pesar de que el código máquina que contiene está preparado para ejecutarse
en un ordenador tipo PC?
a) Porque mientras que el Windows sólo se ejecuta sobre máquinas PC, el Linux también
está preparado para otras arquitecturas tales como el Mac y por tanto contiene
instrucciones de máquina totalmente ajenas al PC
b) Porque el formato del ejecutable Linux no es reconocible en Windows
c) Porque el código máquina de PC es interpretado por distintos núcleos, según se trate de
Windows o Linux
d) Porque el fichero donde está el ejecutable jamás podrá ser localizado dentro de un sistema
Windows
5. El siguiente código pretende gestionar la exclusión mutua en el acceso a una sección crítica,
usando la instrucción atómica swap(a,b) (“bloqueo” es una variable global booleana inicializada a
“false” y “flag” es una variable booleana local a cada proceso).
flag := true;
repeat
swap (bloqueo, flag);
until flag = false;
/* Sección crítica */
bloqueo := false;
La solución propuesta:
a) Cumple las propiedades de exclusión mutua, progreso y espera limitada.
b) Cumple la propiedad de exclusión mutua y progreso pero no la propiedad de
espera limitada.
c) Cumple las propiedades de exclusión mutua y progreso pero presenta el inconveniente de
que solo es válida para dos procesos.
d) Para que cumpla el progreso y la espera limitada, la variable flag debe ser también global.
8. Con el sistema de gestión de memoria mediante particiones fijas de distinto tamaño se produce:
a) Fragmentación interna
b) Fragmentación de tablas
c) Fragmentación externa
d) No se produce fragmentación
9. En la tabla de segmentos se encuentra que el segmento 0 tiene una base de 219 y una longitud de
600. ¿A qué dirección física se corresponde la dirección virtual (0, 430) dada en el formato (nº
seg., desplazamiento dentro del seg.)?
a) 219*0+430 = 430
b) 219+430 = 649
c) 219+430 = 649 > 600 : Error de direccionamiento
d) Es necesario conocer el tamaño del marco
10. Se tienen 3 procesos: P1, P2 y P3, con tiempos de ejecución: 85, 45 y 118 ms, respectivamente. Si
actúa el planificador a largo plazo según el algoritmo SJF (Short Job First) se obtiene que:
a) Los procesos se encuentran en la lista de preparados en el orden de llegada: P1, P2 y P3
b) Los procesos se encuentran en la lista de preparados en el orden: P2, P1 y P3
c) Los procesos se ejecutan en el orden de llegada: P2, P1 y P3
d) Los procesos se ejecutan según la prioridad que posean los procesos
11. Sean dos procesos: P1 con tiempo de ejecución de 20ms y P2 con 15ms. El planificador a corto
plazo actúa según un Round Robin con quanto de 10ms y tiempo de conmutación de tarea de
5ms. Marcar el tiempo de retorno (regreso) de P1.
a) 30 ms
b) 40 ms
c) 45 ms
d) 50 ms
12. ¿Cuál de estas transiciones de estados de un proceso jamás se produce en un sistema normal?
a) De “bloqueado” a “preparado”
b) De “preparado” a “bloqueado”
c) De “activo” a “preparado”
d) Pueden darse cualquiera de las situaciones anteriores
Si mantenemos los permisos tal y como aparecen en el listado anterior, ¿cuál de esos ficheros
podrá borrar el usuario sopa01, sabiendo que pertenece a los grupos grp01 y grp99?
a) Todos los ficheros
b) Todos, excepto fich3.dat
c) Todos, excepto fich2.dat y fich3.dat
d) Sólo el fichero fich1.dat
15. Un sistema de ficheros que utiliza asignación de espacio enlazada por clusters:
a) Tiene mayor fragmentación interna que uno sin agrupación
b) Mejora el rendimiento del disco
c) Requiere menos espacio para la administración de la lista de espacio libre
d) Todas las anteriores son ciertas
SOLUCIÓN:
El 5 del segundo paréntesis se debe a que el sistema utiliza una paginación de cuatro
niveles, por tanto, para acceder a una palabra referenciada por una dirección del espacio
direccionable utilizando las tablas de páginas, se deberán realizar 5 accesos a memoria
(un acceso por cada tabla de páginas más el acceso a memoria una vez obtenida la
dirección de memoria real).
Por tanto, al sustituir los datos que nos dan en el enunciado, se tendrá que:
*monitor* ServidorDescargas {
public void iniciarDescarga (string nombreArchivo);
public void descargaCompleta (string nombreArchivo);
Cada archivo almacenado en el sistema tiene un nombre que consiste en una ristra de
caracteres (string). El protocolo para descargar el archivo es invocar primero a
"iniciarDescarga()", realizar la descarga en sí (con otras rutinas que la empresa ya tiene
implementadas) y a continuación llamar a "descargaCompleta()".
El sistema tiene una restricción, y es que no puede haber descargas simultáneas que
sumen más de 30 gigabytes. Si un proceso intenta iniciar una descarga cuando ese límite
esté rebasado, quedará esperando hasta que se abra hueco suficiente. El monitor debe
ser el responsable de garantizar que se cumple este límite.
Para conocer la longitud de un archivo del servidor, el monitor ofrece la función
"Tamaño()", que supondremos ya implementada.
SOLUCIÓN:
monitor ServidorDescargas {
Condition cola;
long cargaActual = 0;
const long LIMITE = 30 * unGiga;
1
2
Fac. de Informática / Escuela Univ. Informática
3
SISTEMAS OPERATIVOS
Examen Parcial 4
26 de abril de 2008
Nombre Titulación
*** S O L U C I O N E S ***
Dispone de tres horas para realizar el examen
1 (2.5 puntos) Se propone la siguiente solución al problema de los lectores/escritores:
Variables compartidas
Semaphore mutex1(1), mutex2(1);
Semaphore lectores(1), escritores(1);
Int n_lectores=0; int n_escritores=0;
a) ¿Cumple esta solución las especificaciones básicas del problema, es decir, permite la lectura
simultánea de varios lectores e impide que puedan acceder al recurso lectores y escritores o
múltiples escritores en un instante dado? Razona la respuesta indicando trazas concretas que
apoyen tus argumentos. (1.5p)
b) ¿A quién da preferencia el algoritmo anterior: a los lectores, a los escritores o no establece
ninguna preferencia? ¿Es posible la inanición de algún tipo de proceso? (1p)
Solución:
a) Sí. Se trata de una solución que cumple las especificaciones básicas del
problema. Se puede ver fácilmente que si un lector entra, cierra el paso a los
escritores al realizar una operación wait sobre el semáforo “escritores”. Esto hace
que en caso de algún intento de escritura por parte de algún escritor, dicho
escritor quedará bloqueado en la operación de wait sobre el semáforo
“escritores”. Del mismo modo, si existe un escritor escribiendo en el recurso, los
lectores quedarán bloqueados en la operación wait sobre el semáforo “lectores”,
ya que el primer escritor que consigue entrar a escribir al recurso, habrá
ejecutado la operación de wait sobre el semáforo “lectores”. Por tanto, es
imposible que existan lectores y escritores simultáneamente accediendo al
recurso.
Por otro lado, en caso de entrar algún escritor al recurso, se puede observar
fácilmente como nuevos escritores que intenten acceder para escribir quedarán
bloqueados en la operación wait sobre el semáforo “escritores”, impidiendo de
esta forma que puedan estar múltiples escritores escribiendo en el recurso
compartido.
Además, en caso de que exista un lector leyendo del recurso, este no impide el
acceso de nuevos lectores.
b) El algoritmo establece una preferencia clara hacia los escritores. Se puede ver
como al llegar un escritor, si se trata del primero, éste realizará una operación
wait sobre el semáforo “lectores”, lo que provocará el bloqueo de nuevos
procesos lectores en el wait sobre el semáforo “lectores”. Por tanto, en caso de
que lleguen escritores sin cesar, se puede producir claramente inanición de los
procesos lectores.
2 (1.5 puntos) Suponga que se lanzan concurrentemente los procesos P1, P2, P3, P4, P5 y P6:
Proceso Pi() {
//Código del proceso Pi
}
Solución
También se pregunta si el móvil debe ser multiprogramado. Tal y como funcionan los
móviles actualmente, es mejor que el sistema sea multiprogramado, puesto que en muchas
ocasiones ocurre que mientras estamos ejecutando una tarea (ej. escribiendo un mensaje
SMS) ocurren eventos asíncronos que se atienden de inmediato (ej. se recibe una llamada,
o un SMS entrante). Un sistema no multiprogramado no permitiría atender de inmediato
estos eventos, o bien haría el desarrollo de aplicaciones para móviles tremendamente
complicado, puesto que el software que gestiona la escritura de un SMS debería ser capaz
de atender también una llamada entrante (teóricamente posible, pero inviable desde un
punto de vista práctico). Otro ejemplo mucho más evidente es que un móvil con reproductor
de música o con radio permite oír el audio mientras estamos realizando otras tareas (ej.
escribiendo un mensaje).
Por último, se pregunta si este móvil debe ser multiusuario. Este es un asunto más
debatible que los anteriores, y depende mucho de la definición que empleemos para
"multiusuario". En clase hemos utilizado más o menos esta: un sistema que distingue
diferentes privilegios de acceso a los recursos dependiendo de la identidad del usuario que
solicita las operaciones. Según esta definición, un teléfono móvil podría considerarse
multiusuario partiendo del hecho de que tiene un mecanismo para distinguir qué usuario
está utilizando el aparato (la tarjeta SIM) y se le tarifica de forma diferente según qué tarjeta
sea. Esta diferencia entre usuarios es más acusada si estamos usando una tarjeta dual: las
operaciones se pueden realizar con diferentes identidades, y pueden tener distintas
configuraciones e incluso restricciones de uso (ej. una cuenta que sólo puede hacer
llamadas a un grupo cerrado de números de teléfono).
En fin, todo lo anterior no es sino un posible desarrollo (bastante extenso) de las preguntas
formuladas, pero no debe considerarse como la «solución correcta». En esta pregunta no se
trata de llegar a un resultado concreto, sino de cuál es el **camino** que has seguido para
llegar a ese resultado.
d) ¿Por qué crees que deben separarse los mecanismos de las políticas? Justifica debidamente la
respuesta con ejemplos. (0.6p)
Los mecanismos determinan el cómo hacer algo; por el contrario las políticas determinan
qué hacer. Por ejemplo: el temporizador es un mecanismo para asegurar la protección de la
CPU, pero la decisión de cuáles deben ser los datos de temporización para un usuario
concreto es una decisión de política. Las decisiones sobre políticas son importantes para la
asignación de recursos. Cuando es necesario decidir si un recurso se asigna o no, se debe
tomar una decisión de política. Cuando la pregunta es cómo en vez de qué, es un
mecanismo lo que hay que determinar.
Fundamentalmente, deben separarse los mecanismos de las políticas para poder permitir
una mejor portabilidad de un sistema: así en un diseño de un sistema operativo definiremos
las políticas a utilizar (independientes de los dispositivos, genéricos, en dónde se vayan a
ejecutar los sistemas), para obtener un buen rendimiento del mismo, y en la fase de
implementación decidiremos qué mecanismos utilizar dependiendo del tipo de sistema en
donde lo vayamos a ejecutar (aquí ya utilizaremos recursos no genéricos sino específicos).
e) ¿Qué diferencias hay entre una excepción y una interrupción? ¿Pueden generarse excepciones
intencionadamente mediante un programa de usuario? Justificar la respuesta. (0.6p)
Las interrupciones son un tipo de mecanismo que permiten al sistema operativo recibir una
señal (un evento que pueden ser de diversos tipos) para posteriormente tratarla. Podemos
clasificarlas en :
• Interrupciones del hardware, son los eventos producidos por el hardware de los
controladores de los dispositivos de entrada salida, como teclado, floppy, disco duro,
CDROM, tarjeta de sonido etc.
• Interrupciones por software. Destacaremos dos tipos:
o Llamadas al sistema, son un tipo de interrupciones software, que se producen
cuando un programa quiere utilizar un recurso; por ejemplo un programa quiere
leer de un fichero, la instrucción de lectura provocará una llamada al sistema para
que se realice la lectura del fichero. Es el propio sistema quien debe interrumpir
lo que está realizando y atender esta llamada; esto provoca que se ejecute una
instrucción de bajo nivel.
o Excepciones, con este nombre se conoce un tipo de interrupciones donde el
causante es el propio sistema; por ejemplo la CPU detecta una división por cero
en sus registros, o se produce una violación en los límites de memoria, este tipo
de eventos también provoca una interrupción que causa que se ejecute una
instrucción de bajo nivel que provoca un salto al vector de interrupciones.
Por otro lado, un usuario puede perfectamente lanzar una Excepción intencionada
para obligar a que el sistema operativo tome el control. Como ejemplo puede utilizar
las directivas Try y Throw para simular algo en un programa y hacer que se atienda
la excepción que se produce, mediante las rutinas pertinentes de atención a las
excepciones. Ejem: Qué hacer si se produce una división por cero? Pues podríamos
capturar la excepción (si se produjera) para realizar alguna acción posterior, en vez
de utilizar elementos del tipo “if cociente == 0 then … “!
RESPUESTA:
• Como en los procesos que se ejecutan en modo sistema se debe priorizar a aquellos
que se estiman que consumirán menos tiempo del procesador, entonces las colas A y B
se gestionarán siguiendo una política “primero el más corto”. Además como los de cola A
se deben ejecutar sin que se interrumpan, entonces en la política de gestión de esta cola
será no expulsiva, en cambio los de la cola B se planificarán mediante una política
expulsiva.
• Como en los procesos que se ejecutan en modo usuario se deben penalizar a aquellos
que más consuman tiempo del procesador, además no se debe permitir que consuman
más de tres unidades consecutivas de tiempo de procesador y además se deben
minimizar los cambios de contexto, entonces la cola C se planificaría mediante una
variante de Round-Robin, consistente en asignar rodajas de tiempo de duración de tres
unidades de tiempo y gestionando la cola de espera con prioridades dinámicas de forma
que a medida que consume más tiempo del procesador se le disminuye su prioridad que
inicialmente es la misma para todos.
• Como los procesos que se ejecutan en modo sistema deben ejecutarse lo antes posible
y además los de la cola A tienen prioridad sobre el resto y los de la cola B tienen
prioridad sobre los de la cola C, entonces la planificación entre colas es expulsiva (o con
apropiación).
Diagrama de Gantt:
t 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
P 0 1 2 2 2 2 2 3 3 1 1 1 1 1 4 4 4 0 0 0 0 0 0
1
2
3
SISTEMAS OPERATIVOS
Convocatoria de junio, 18 de junio de 2008 – PRIMERA PARTE
Nombre Titulación
Ingeniero
*** S O L U C I O N E S *** en Informática
1 (6 puntos) Test. Marque las opciones correctas de cada apartado. En caso de que existan
varias opciones ciertas, se considerará como correcta la más completa o precisa. Las
preguntas no contestadas no puntúan; las mal contestadas puntúan negativamente restando un
tercio de su valor. Marque la opción correcta rodeándola con un círculo. Si se equivoca, tache
la respuesta equivocada y rodee la opción correcta. Escriba con tinta. Las preguntas
respondidas con lápiz o con varios círculos no tachados se considerarán no contestadas.
1. Tenemos varios procesos que intentan acceder a secciones críticas sobre una zona de datos, y
observamos que varios de ellos se quedan detenidos indefinidamente al intentar entrar en su
sección crítica, tanto si hay otros procesos en sección crítica como si está libre. Eso significa
que la solución a la sección crítica en este sistema es:
a) inválida porque no cumple la condición de exclusión mutua
b) inválida porque no cumple la condición de progreso
c) *inválida porque no cumple la condición de espera indefinida
d) inválida porque no cumple la condición de no interbloqueo
2. ¿Cuál de estas combinaciones de procesos pesados e hilos no se puede dar, en el caso
general?
a) *10 procesos pesados y 5 hilos
b) 5 procesos pesados y 10 hilos
c) 10 procesos pesados y 10 hilos
d) no se puede dar ninguna de las anteriores combinaciones
3. ¿Cuál es la política de gestión de la cola de espera de un semáforo?
a) FIFO
b) prioridades
c) prioridades expulsivas
d) *depende de cómo esté implementado el semáforo
4. Cuando el sistema operativo termina de atender una interrupción:
a) devuelve el control al proceso que estaba activo en el momento de ocurrir la
interrupción
b) devuelve el control al proceso que estaba activo en el momento de ocurrir la
interrupción, salvo que éste pase al estado de bloqueado por causa de la interrupción
que se acaba de atender
c) *devuelve el control a algún proceso que se encuentre en estado preparado
d) devuelve el control a algún proceso que se encuentre en estado bloqueado
5. Suponga un computador de control de un automóvil, encargado de funciones tales como
realizar el sistema antibloqueo de las ruedas, la detonación del airbag cuando hay una
deceleración brusca y visualizar en el salpicadero los datos básicos de la conducción
(velocidad, temperatura del motor, etc.) ¿Qué tipo de sistema operativo sería más adecuado
para este computador?
a) un sistema por lotes
b) un sistema de tiempo compartido
c) *un sistema de tiempo real
d) un sistema distribuido
6. En un planificador de procesos nos encontramos en un momento dado con los siguientes
procesos en estado de preparado: un proceso intensivo en E/S y veinte procesos intensivos en
CPU. Ante este escenario, ¿cuál de las siguientes políticas garantizará una atención más rápida
al proceso intensivo en E/S?
a) FCFS
b) SJF no expulsivo
c) *SJF expulsivo
d) Round Robin
7. Un sistema multiprogramado:
a) permite gestionar varias tareas interactivas
b) evita el acaparamiento de la CPU por un único proceso
c) debe realizar el control de la sincronización entre procesos
d) *ninguna de las afirmaciones es correcta
8. Si varios procesos concurrentes se ejecutan en un sistema, ocurre que:
a) *para su ejecución compiten por el uso de uno o de varios procesadores
b) se ejecutan sobre un sistema operativo multiusuario
c) comparten el mismo código
d) necesitan sincronizarse para acceder a los datos que comparten
9. ¿Cuál de estas llamadas al sistema es menos necesaria en un sistema no multiprogramado?
a) cargar y ejecutar un programa
b) leer la fecha y hora actuales
c) abrir un fichero
d) *crear un semáforo
10. Suponga un planificador de procesos por prioridades expulsivo, en el que a menor número de
prioridad mayor prioridad, y que en caso de igualdad de prioridades se planifica según la política
primero el más corto. Tenemos que el proceso A llega en el instante 0 con prioridad 2 y se prevé
un consumo de CPU de 500 u.t, el proceso B llega en el instante 200 con prioridad 3 y se prevé
un consumo de CPU de 300 u.t, el proceso C llega en el instante 300 con prioridad 1 y se prevé
un consumo de CPU de 400 u.t., el proceso D llega en el instante 500 con prioridad 3 y se prevé
un consumo de CPU de 1000 u.t y el el proceso E llega en el instante 700 con prioridad 2 y se
prevé un consumo de CPU de 600 u.t. Entonces, el tiempo medio de retorno es de:
a) 1000 u.t.
b) 1100 u.t.
c) *1200 u.t.
d) 1300 u.t.
11. Para el mismo caso anterior, el tiempo medio de espera es de:
a) *640 u.t.
b) 650 u.t.
c) 660 u.t.
d) 670 u.t.
12. El núcleo del sistema operativo
a) está construido como un bloque monolítico de software
b) *atiende las interrupciones de los periféricos
c) atiende a los programas del sistema, pero no a los programas de usuario
d) atiende a los programas de usuario, pero no a los programas del sistema
13. ¿Cuál de las siguientes afirmaciones es correcta?
a) Un mecanismo puede utilizarse para implementar políticas completamente diferentes
b) Una política se puede implementar con mecanismos completamente diferentes
c) Un sistema operativo puede ser capaz de aplicar varias políticas diferentes para
gestionar el mismo recurso
d) *todas las anteriores son ciertas
14. En un sistema por lotes, ¿cuál es el objetivo que más importancia tiene de los aquí mostrados?
a) *aumentar la productividad del procesador
b) lograr que los usuarios disfruten de un entorno interactivo
c) garantizar un plazo de ejecución máximo para todos los procesos
d) ofrecer servicios para ejecutar aplicaciones de forma distribuida
Nombre
15. Si un semáforo binario tiene valor cero y un proceso ejecuta una operación V:
a) el proceso se bloquea hasta que otro proceso ejecuta una operación P
b) el proceso se bloquea hasta que otro proceso ejecuta una operación V
c) el proceso se bloquea mientras el valor del semáforo se mantenga a cero
d) *el proceso no se bloquea
2 (2 puntos) Un sistema tiene los siguientes recursos: una CPU, dos discos
(DISC1, DISC2) y una impresora (IMP). Existen dos tipos de trabajos según las
necesidades de utilización de los recursos:
Suponga que el resto de las colas se gestionan con un algoritmo FCFS y que el
primer proceso en el sistema es de tipo 1.
3 (2 puntos) Desarrolle en menos de quinientas palabras (aprox. dos páginas) el
siguiente tema: qué son las llamadas al sistema, cómo se utilizan y qué beneficios
ofrecen a los programadores de aplicaciones.
Si quiere acompañar su exposición con ejemplos, recuerde que puede recurrir al
sistema Nachos utilizado en las prácticas de la asignatura.
1
2
3
4
SISTEMAS OPERATIVOS, 3 de diciembre de 2009 5
Examen de la Convocatoria Especial
¡Error!No
se
encuentra
el
origen
de
la
referencia.
Nombre Titulación
***
S
O
L
U
C
I
O
N
E
S
***
Dispone de tres horas para realizar el examen
1
(1,5
puntos)
Responda
de
forma
concisa
y
jusOficada
a
estas
preguntas.
a. (0,5
puntos)
Gracias
a
la
mulOprogramación,
es
posible
que
dos
procesos
se
completen
en
un
Oempo
menor
que
si
se
ejecutaran
de
forma
secuencial,
incluso
en
un
computador
con
un
solo
procesador.
Explique
por
qué
esto
es
posible,
si
el
procesador
sólo
puede
ejecutar
una
instrucción
en
cada
instante.
Esto es posible porque mientras un proceso está ejecutando instrucciones en el procesador, el
otro puede estar realizando alguna operación con un periférico, o simplemente realizando una
espera que tuviera programada. Como se solapa la actividad del procesador con los
periféricos, el resultado es que la ejecución conjunta de los dos procesos tarda menos que una
ejecución secuencial.
b. (0,5
puntos)
¿Pueden
estar
ejecutándose
simultáneamente
varios
sistemas
operaOvos
en
un
mismo
computador?
¿Qué
uOlidad
podría
tener?
¿Cuáles
podrían
ser
los
inconvenientes?
Sí es posible, y un ejemplo actual lo podemos ver con las máquinas virtuales como VMWare o
Xen. Sobre un sistema operativo se puede instalar una máquina virtual que ejecute un segundo
sistema operativo al mismo tiempo. La utilidad de la convivencia simultánea de varios sistemas
operativos es la posibilidad de ejecutar aplicaciones preparadas para distintas plataformas.
Dentro de los inconvenientes que hay que resolver, encontramos que ambos sistemas
compiten por el acceso directo a los recursos del equipo y emplearán políticas diferentes de
gestión de recursos. Esto puede dar lugar a importantes conflictos, que sólo podemos resolver
si uno de los sistemas operativos se convierte en el principal y el resto recurren a él de forma
subordinada. En el caso particular de las máquinas virtuales, un inconveniente es la
penalización en el rendimiento que acarrea la emulación de la máquina.
c. (0,5
puntos)
Defina
los
siguientes
conceptos:
llamada
al
sistema;
núcleo
o
kernel;
sistema
distribuido;
vector
de
interrupciones.
Son conceptos básicos cuya definición puede consultarse en cualquier texto sobre Sistemas
Operativos.
SO
–
examen
20091203
–
diciembre
–
pag.
1/6
2 (2,5
puntos)
Un
sistema
con
un
solo
procesador
y
con
memoria
virtual
con
paginación
bajo
demanda
posee
un
espacio
direccionable
máximo
de
4
GBytes
y
uOliza
páginas
de
128
bytes.
Actualmente
el
sistema
dispone
de
128
Mbytes
de
memoria
principal.
El
Oempo
de
acceso
a
memoria
es
de
150
nanosegundos,
la
tasa
de
fallos
de
página
es
del
5%
y
el
Oempo
medio
de
servicio
de
fallo
de
página
es
de
6
milisegundos.
La
políOca
de
reemplazo
es
local,
uOliza
la
LRU
y
permite
un
tamaño
máximo
de
área
de
trabajo
por
proceso
de
tres
marcos
de
página.
La
búsqueda
de
marcos
libres
se
realiza
mediante
una
búsqueda
lineal
empezando
por
el
marco
cero.
El
núcleo
del
sistema
operaOvo
Oene
un
tamaño
de
134
216
448
bytes
y
está
ubicado
de
forma
conOgua
a
parOr
del
primer
marco
de
página
de
la
memoria.
En
el
sistema
aquí
descrito
se
ha
ejecutado
un
único
proceso
que
Oene
un
tamaño
de
5300
bytes
y
ha
generado
las
siguientes
direcciones
de
memoria
principal:
898,
100,
150,
260,
127,
400,
110,
515,
180,
420,
120,
425,
256,
175,
270.
A
parOr
de
estos
datos,
responda
a
las
siguientes
cuesOones:
a. ¿Cuál
es
la
estructura
de
una
dirección
virtual
en
este
sistema?
32 bits en total, de lo cuales 25 bits son para el número de página y 7 bits para el
desplazamiento de la página.
b. ¿Cuál
es
el
número
máximo
de
entradas
que
tendrá
la
tabla
de
páginas
de
un
proceso?
El número máximo de páginas es 225 , o sea 33 554 432 páginas.
c. ¿Cuántas
entradas
Oene
la
tabla
de
marcos
de
página?
Como la memoria principal posee 128 Mbytes, se requerirán 1 048 576 marcos de página, con
lo que la tabla de marcos tendrá ese mismo número de entradas.
d. ¿Qué
páginas
del
proceso
estarán
en
memoria
principal
en
cada
momento
de
su
ejecución?
Si el tamaño de cada página es 128 bytes, la secuencia de referencias a páginas es la
siguiente:
7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2
Se nos dice que la política es la LRU y se permite un tamaño máximo de área de trabajo de 3
marcos, o sea que un proceso puede ocupar como máximo tres marcos de memoria principal,
por tanto el número de fallos de páginas es 10.
Referencias
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2
Estado
de
los
marcos
7 7 7 2 2 2 2 4 4 4 0 0 0 1 1
0 0 0 0 0 0 0 0 3 3 3 3 3 3
1 1 1 3 3 3 2 2 2 2 2 2 2
e. ¿En
qué
estado
se
encuentra
la
tabla
de
páginas
del
proceso
después
del
úlOmo
acceso
a
memoria?
Si el sistema tiene 128 Mbytes de memoria principal, entonces requerirá 1 048 576 marcos de
páginas. Como el núcleo del SO ocupa 134 216 448 bytes, ocupará los primeros 1 048 566
marcos de página, o sea desde el marco 0 hasta el marco 1 048 565 (ya que se nos dice que
se carga de forma contigua a partir del primer marco del sistema). Por tanto, quedarán
SO
–
examen
20091203
–
dicOembre
–
pag.
2/6
disponibles para el programa 10 marcos, concretamente los últimos 10 marcos, desde el
marco 1 048 566 hasta el marco 1 048 575. Como el programa tiene un tamaño de 5300 bytes,
se requerirían 42 marcos para albergar a todo el programa, pero se dispone sólo de 10 marcos
libres. Si el sistema no soportase memoria virtual, no se podría ejecutar el programa. Pero se
nos dice que sí soporta la memoria virtual, disponiendo cada programa de tres marcos como
máximo para su ejecución. Suponiendo que cuando se requiere un marco para albergar a una
página de un programa, el sistema hace una búsqueda de marcos libres a partir del marco 0, la
tabla de páginas del proceso quedaría organizada según se muestra en la siguiente tabla:
Instante
del
úl<mo
Página Marco Bit
de
validez
uso
de
la
página
0 1.048.566 0 10
1 1.048.566 1 13
2 1.048.568 1 14
3 1.048.567 1 11
4 1.048.566 0 7
5 ‐ 0 ‐
6 ‐ 0 ‐
7 1.048.566 0 0
8 ‐ 0 ‐
9 ‐ 0 ‐
10 ‐ 0 ‐
3 (2
puntos)
Responda
a
las
siguientes
preguntas
sobre
sistemas
de
ficheros:
a. (0,75
puntos)
Un
determinado
sistema
de
archivos
uOliza
bloques
de
datos
de
1
kilobyte.
Considere
una
parOción
de
disco
que
Oene
4
gigabytes
disponibles
para
datos.
Si
se
uOliza
una
FAT
para
direccionar
esa
parOción,
¿qué
tamaño
mínimo
en
bits
debería
tener
cada
entrada
de
la
FAT?
Tamaño del sistema de archivos: 4 × 230 = 232 bytes
El bloque tiene 1024 = 210 bytes, por tanto el número de bloques que debe gestionar la FAT es:
232 / 210 = 222 bloques
Así pues, para direccionar los 4 gigabytes de datos se necesitaría una FAT con entradas de al
menos 22 bits.
b. (1,25
puntos)
Un
sistema
de
archivos
uOliza
asignación
indexada
como
método
de
asignación
de
espacio.
En
cada
inodo
hay
10
referencias
a
bloques
directos,
3
referencias
a
un
bloque
indirecto
sencillo,
2
referencias
a
un
bloque
indirecto
doble
y
1
referencia
a
un
bloque
indirecto
triple.
El
sistema
de
archivos
permite
un
máximo
de
1024
inodos.
El
tamaño
del
bloque
es
de
1KB
y
el
tamaño
de
las
direcciones
a
bloques
de
disco
es
de
64
bits.
¿Cuántos
bloques
debería
tener
una
parOción
para
permiOr
que
todos
los
ficheros
ocuparan
el
máximo
tamaño
posible?
Hay que calcular cuánto ocupa como máximo un fichero, tanto los datos como el inodo y
los bloques índice.
SO
–
examen
20090910
–
sepOembre
–
pag.
3/6
Cada bloque índice tiene capacidad para apuntar a 8·1024 / 64 = 128 bloques
Cada inodo puede direccionar 2 130 314 bloques de datos:
10 bloques de forma directa
3 · 128 bloques de forma indirecta sencilla
2 · 128 · 128 bloques de forma indirecta doble
1 · 128 · 128 · 128 bloques de forma indirecta triple
Total = 10 + 3·128 + 2·1282 + 1283 = 2 130 314 bloques
Por lo tanto, cada fichero ocupa como máximo 16 775 + 2 130 314 = 2 147 089 bloques
Como puede haber 1024 ficheros, el número total de bloques necesarios para albergarlos
es:
2 147 089 · 1024 = 21 986 191 360
4 (2
puntos)
Tenemos
tres
procesos
que
simulan
una
planta
embotelladora
de
bebidas:
Un
proceso
embotellador
UnLitro,
que
conOnuamente
prepara
botellas
de
un
litro
y
las
deposita
en
una
caja
con
capacidad
de
10
litros.
Un
proceso
embotellador
DosLitros,
igual
que
el
anterior,
salvo
que
las
botellas
que
prepara
son
de
dos
litros.
Un
proceso
Empaquetador,
que
se
encarga
de
empaquetar
las
cajas
que
se
van
llenando
y
de
reponer
las
cajas
a
medida
que
se
empaquetan.
Cada
vez
que
un
proceso
embotellador
prepara
una
botella,
esta
se
coloca
en
una
caja,
que
Oene
una
capacidad
de
10
litros.
Si
al
colocar
la
botella
la
caja
queda
llena,
se
envía
una
señal
al
proceso
Empaquetador,
el
cual
toma
la
caja,
la
sella
y
la
guarda
en
un
almacén.
El
Empaquetador
deposita
una
nueva
caja
de
10
litros,
totalmente
vacía.
Cuando
un
proceso
está
manipulando
la
caja,
ningún
otro
proceso
puede
estar
actuando
sobre
ella.
En
alguna
ocasión
el
proceso
DosLitros
puede
observar
que
sólo
queda
un
litro
libre
en
la
caja.
En
este
caso,
se
debe
esperar
hasta
que
se
añada
una
botella
de
un
litro
y
el
empaquetador
coloque
una
nueva
caja
vacía.
Debe
escribir
el
código
de
los
tres
procesos,
resolviendo
los
problemas
de
sincronización
mediante
semáforos.
SO
–
examen
20091203
–
dicOembre
–
pag.
4/6
//
Regula
el
acceso
en
exclusión
mutua
a
la
caja
Semáforo
caja(1);
//
Para
señalizar
al
empaquetador
Semáforo
empaqueta(0);
//
Litros
disponibles
en
la
caja
int
litros
=
10;
//
Para
controlar
que
el
proceso
"DosLitros"
está
//
esperando
por
un
hueco
de
dos
litros
bool
espera2L
=
false;
Semáforo
despierta2L(0);
Proceso
UnLitro
()
{
loop
{
... prepara una botella de 1L
caja.P();
... coloca la botella en la caja
litros
=
litros‐1;
if
(
litros
==
0
)
{
empaqueta.V();
}
else
{
caja.V();
}
}
}
Proceso
DosLitros
()
{
loop
{
...
prepara
una
botella
de
2L
caja.P();
if
(
litros
==
1
)
{
espera2L
=
true;
caja.V();
despierta2L.P();
}
... coloca la botella en la caja
litros
=
litros‐2;
if
(
litros
==
0
)
{
SO
–
examen
20090910
–
sepOembre
–
pag.
5/6
empaqueta.V();
}
else
{
caja.V();
}
}
}
Proceso
Empaquetador
()
{
loop
{
empaqueta.P();
...
empaqueta
la
caja
actual
...
pone
una
caja
nueva
vacía
litros
=
10;
if
(
espera2L
)
{
espera2L
=
false;
despierta2L.V();
}
else
{
caja.V();
}
}
}
5 (2
puntos)
Un
algoritmo
de
planificación
de
procesos
consta
de
cuatro
clases
de
prioridad
numeradas
del
0
al
3.
El
algoritmo
de
planificación
es
Round‐Robin
para
las
clases
0,
1
y
2;
y
es
FCFS
para
la
clase
3.
La
clase
más
prioritaria
es
la
0.
Los
cuantos
de
Oempo
para
las
clases
0,
1
y
2
son
respecOvamente
1,
2
y
3
unidades
de
Oempo.
El
algoritmo
de
planificación
entre
colas
es
expulsivo.
Los
procesos
que
entran
en
el
sistema
son
admiOdos
inicialmente
en
la
clase
más
prioritaria
(0).
Existe
un
mecanismo
de
degradación
de
la
prioridad
de
tal
forma
que
un
proceso
permanece
en
su
clase
hasta
que
ha
consumido
dos
cuantos
de
Oempo,
tras
lo
cual
es
degradado
a
la
clase
de
prioridad
inmediatamente
inferior.
Todo
proceso
que
llega
a
la
clase
3
permanece
en
ella
hasta
que
termina
su
ejecución.
Se
pide
calcular
el
Oempo
de
retorno
y
la
clase
en
que
terminan
tres
procesos,
P1,
P2,
P3,
que
llegan
en
el
instante
cero
(en
el
orden
P1,
P2,
P3)
y
cuyas
duraciones
respecOvas
son
4,
8
y
12.
Esta es la solución:
P1 P2 P3
Tiempo 8 18 24
retorno
Clase 1 2 2
SO
–
examen
20091203
–
dicOembre
–
pag.
6/6
Calificación
1
2
Nombre Titulación
1 (7,5 puntos) Test. En cada uno de los siguientes apartados, señale cuál opción es
correcta. En caso de que existan varias opciones ciertas, se considerará como correcta
la más completa o precisa. Las preguntas no contestadas no puntúan; las contestadas
erróneamente puntúan negativamente restando un tercio de su valor. Señale sus
respuestas rodeando con un círculo la opción correcta. Si se equivoca, tache la
respuesta incorrecta y rodee la opción que considere correcta. Escriba con tinta. Las
preguntas respondidas con lápiz o con varios círculos no tachados se considerarán no
contestadas.
1. Un computador gestiona la memoria mediante un esquema paginado de doble nivel con una
estructura de direcciones de 32 bits. Si se tienen 10 bits para páginas de un primer nivel, 11 para el
segundo y 11 para el desplazamiento en la página ¿Qué tamaño máximo tendrá el espacio
direccionable de los programas?
a) 2 Gbytes
b) 4 Gbytes
c) 6 Gbytes
d) No puedo afirmar nada sobre el tamaño de dicho espacio
2. Ninguna arquitectura actual implementa tamaños de página entre 800 bytes y 1000 bytes. ¿A qué
cree que es debido?
a) A que los fabricantes de chips de memoria paginan sus bloques de memoria físicos con
unos tamaños prefijados y por tanto no se puede decidir libremente el tamaño de la página
b) Estos tamaños de página obligarían a diseñar una MMU mucho más compleja que
la que se utiliza para trabajar con los tamaños usados realmente
c) Debido al tamaño que tienen las aplicaciones actuales, originan demasiada fragmentación
interna
d) El número de páginas que tendría la tabla de páginas en una arquitectura de 32 bits o de
64 bits sería enorme, y por ello las arquitecturas de memoria prefieren trabajar con
tamaños mayores
6. Suponga que un archivo posee 50 bloques del sistema de ficheros. Cada bloque posee un tamaño
de 1024 bytes. Si se necesita acceder a un registro de 100 bytes que empieza en el byte 1000 del
archivo y se utiliza un política contigua de gestión del espacio en disco, ¿cuántos accesos a bloques
del sistema de ficheros debo realizar asumiendo que la información del directorio donde se
encuentra el fichero está en memoria?
a) 1
b) 2
c) 3
d) 4
7. Si un sistema de archivos tipo FAT posee 65536 clusters, entonces el tamaño mínimo de la FAT
será de:
a) 32 Kbytes
b) 64 Kbytes
c) 128 Kbytes
d) 256 Kbytes
10. Para una dirección lógica con el formato [número de segmento (2 bits), número de página (16
bits), desplazamiento de la página (8 bits)]:
a) El número de páginas por segmento es 224
b) El número de segmentos totales es 2 y el tamaño máximo del segmento es 224 bytes
c) El espacio lógico de direcciones es de 64Mbytes
d) El número de páginas por segmento es 216 pero el tamaño de página depende del tamaño
del segmento
11. Suponga que un archivo posee 50 bloques del sistema de ficheros. Cada bloque posee un tamaño
de 1024 bytes. Si se necesita acceder a un registro de 100 bytes que empieza en el byte 1019 del
archivo y se utiliza un política encadenada de gestión del espacio en disco utilizando doble
encadenamiento con enlaces de 4 bytes ¿cuántos accesos a bloques del sistema de ficheros debo
realizar asumiendo que la información del directorio donde se encuentra el fichero está en
memoria??
a) 1
b) 2
c) 3
d) 4
12. La tabla de páginas de un determinado proceso indica que la página 2 tiene asociado el marco 7.
El tamaño de la memoria física es de 65536 bytes. Si en el sistema tenemos 32 marcos de página,
¿Cuál es la dirección lógica asociada a la dirección física 14661?
a) 7*2*2*1024+325
b) 7*2*1024+1676
c) 2*2*1024+325
d) 7*2*1024+325
13. Conociendo el tamaño de página, entonces el tamaño de la memoria principal lo podría obtener a
partir de:
a) La tabla de páginas
b) La tabla de marcos de páginas
c) La tabla de franjas de página
d) Todas las anteriores son falsas
15. El esquema de gestión de memoria que más facilita la compartición de zonas de memoria es:
a) Contiguo con particiones de tamaño fijo
b) Contiguo con particiones de tamaño variable
c) Segmentado
d) Segmentado - Paginado
3 (2,5 puntos) En una estación de servicio existen tres surtidores, uno para gasolina,
otro para gasoil y otro para biocombustible. En cada surtidor se puede atender a un
solo vehículo en cada instante, estando ubicados en vías de capacidad finita para los
vehículos en espera, específicamente la vía para la gasolina tiene capacidad Cg
vehículos, la del gasoil Cd y la del biocombustible Cb. El reportaje es realizado por el
propietario del vehículo, de forma que cuando un vehículo llega a la estación este
solicita el repostar (Solicitar_Repostaje) mediante una petición en la que especifica el
tipo de combustible que necesita, si la vía asociada al tipo de combustible requerido
está llena, entonces debe irse inmediatamente, en caso contrario deberá esperar si otro
vehículo está respostando o repostar inmediatamente si no hay vehículo repostando. Al
terminar informa de la finalización del repostaje (Finalizar_Repostaje). Los vehículos
deben ser procesos concurrentes. Utilizando monitores (estilo mesa) plantee una
solución que permita el repostaje de los vehículos cumpliendo los requisitos
expresados.
end
1
2
3
SISTEMAS OPERATIVOS 4
Convocatoria de junio, 19 de junio de 2008 – PRIMERA PARTE
Titulación
Nombre
*** S O L U C I O N E S ***
Dispone de dos horas para completar el examen
1 (6 puntos) Test. Marque las opciones correctas de cada apartado. En caso de que existan
varias opciones ciertas, se considerará como correcta la más completa o precisa. Las
preguntas no contestadas no puntúan; las mal contestadas puntúan negativamente restando un
tercio de su valor. Marque la opción correcta rodeándola con un círculo. Si se equivoca, tache
la respuesta equivocada y rodee la opción correcta. Escriba con tinta. Las preguntas
respondidas con lápiz o con varios círculos no tachados se considerarán no contestadas.
1. ¿Cuál de estas políticas es más aconsejable para implementar un sistema de tiempo real
crítico?
a) FCFS
b) Round Robin
c) *Prioridades expulsivo
d) Prioridades no expulsivo
2. Tenemos varios procesos que intentan acceder a secciones críticas sobre una zona de datos, y
observamos que el algoritmo sólo funciona bien cuando hay tres o más procesos interesados en
entrar en su sección crítica al mismo tiempo: si sólo hay dos procesos intentando entrar en la
sección crítica, el algoritmo los deja esperando hasta que se incorpora un tercero.
En este caso, este algoritmo es:
a) válido, suponiendo que aparte de esta incidencia, cumple con la exclusión mutua,
progreso y espera indefinida
b) *inválido, porque no cumple la condición de progreso
c) inválido, porque no cumple la condición de espera indefinida
d) inválido, porque no cumple la condición de exclusión mutua
3. Cuando existen varios procesos en espera por un semáforo y éste queda disponible, ¿cuál de
los procesos en espera se desbloquea?
a) el que lleva más tiempo esperando
b) el que tenga más prioridad
c) el que tenga más prioridad, y en caso de empate, el que lleve más tiempo esperando
de los empatados
d) *depende de la implementación del semáforo
4. Una interrupción se puede atender...
a) sólo si cuando la interrupción ocurre, el procesador se encuentra en modo privilegiado
b) sólo si cuando la interrupción ocurre, el procesador se encuentra en modo usuario
c) *tanto si el procesador se encuentra en modo privilegiado como en modo
usuario, pero al atenderla, el procesador conmuta a modo privilegiado
d) ninguna de las anteriores es cierta
5. ¿Cuál de estas políticas consigue un mejor tiempo medio de espera?
a) FCFS
b) *SJF (expulsivo o no)
c) Round Robin
d) Multicola FCFS + Round Robin
6. Suponga un computador que va instalado dentro de una sonda espacial destinada a explorar la
superficie de Marte. Este computador se encarga del desplazamiento de la sonda, ejecutando
tareas tales como accionar las ruedas, detener la sonda si el nivel eléctrico es bajo y reaccionar
ante choques con obstáculos imprevistos. ¿Qué tipo de sistema operativo sería más adecuado
para este computador?
a) un sistema por lotes
b) un sistema de tiempo compartido
c) *un sistema de tiempo real
d) un sistema distribuido
7. Un sistema multiusuario:
a) debe tener la capacidad para la ejecución concurrente de varios procesos
b) permite que varios usuarios trabajen al mismo tiempo sobre él
c) debe repartir la memoria principal entre los distintos usuarios
d) *ninguna de las afirmaciones es correcta en todos los casos
8. ¿Cuál de estas llamadas al sistema considera usted más esencial en un sistema operativo no
multiprogramado?
a) crear un semáforo
b) solicitar un bloque de memoria libre
c) regresar a la cola de preparados (Yield)
d) *cargar y ejecutar un programa
9. A un planificador de procesos que tiene la cola de preparados vacía llegan al mismo tiempo seis
procesos, todos de duración 2 u.t. Si no ocurren más eventos externos mientras se atiende a
estos seis procesos, ¿cuál será el tiempo medio de espera para este conjunto de procesos?
a) 5 u.t. para FCFS
b) 5 u.t. para FCFS y SJF
c) *5 u.t. para FCFS, SJF y RR con cuanto igual a 2 u.t.
d) 5 u.t. para cualquier algoritmo de planificación
10. Para el caso del apartado anterior, suponga que le añadimos la restricción de que existe un
planificador de largo plazo que no permite que existan más de tres procesos ejecutándose en el
planificador de corto plazo. ¿Variaría en algo la respuesta anterior?
a) *no, la respuesta correcta seguiría siendo la misma
b) la respuesta correcta sería diferente, ya que el tiempo medio de espera sería siempre
mayor que 5 u.t. para cualquier algoritmo
c) la respuesta correcta sería diferente, ya que el RR con cuanto igual a 2 u.t. daría un
tiempo de espera mayor
d) la respuesta correcta sería diferente, ya que el orden de ejecución de los procesos
variaría en los algoritmos planteados en el anterior apartado
11. Gracias a la utilización de máquinas virtuales,
a) podemos hacer que el núcleo de nuestro sistema operativo sea más eficiente, ya que
se utilizan menos pasos intermedios para resolver una llamada al sistema
b) *podemos hacer coexistir simultáneamente varios sistemas operativos sobre el
mismo hardware
c) podemos construir sistemas operativos más resistentes a los fallos del hardware,
especialmente de los periféricos de E/S
d) todas las afirmaciones anteriores son ciertas
12. ¿Cuál de las siguientes afirmaciones es correcta?
a) El modo dual de operación se ha diseñado para que los programas de usuario
obtengan acceso pleno a todos los recursos del sistema con total libertad.
b) *Cuando se produce una interrupción, la CPU conmuta a modo
privilegiado/supervisor.
c) Las instrucciones de desactivación de interrupciones se ejecutan normalmente en
modo de usuario.
d) Las instrucciones lectura del reloj del sistema normalmente deberían ser operaciones
privilegiadas.
13. ¿Cuáles de estas parejas de algoritmos no se pueden combinar para construir un sistema
multicola?
a) FCFS con Round-Robin
b) Un algoritmo expulsivo con un algoritmo basado en prioridades
c) Round-Robin con un algoritmo basado en prioridades
d) *todas las anteriores combinaciones se pueden utilizar
14. ¿Qué módulo del sistema operativo se encarga habitualmente de atender las llamadas al
sistema?
a) la API
b) el dispatcher o despachador
c) el intérprete de órdenes o shell
d) *el núcleo
15. Si un proceso ejecuta una operación P sobre un semáforo binario,
a) el proceso se bloquea hasta que otro proceso invoque una operación P
b) el proceso se bloquea hasta que otro proceso invoque una operación V
c) *el proceso se bloquea solamente si el semáforo tiene valor cero
d) el proceso se bloquea solamente si el semáforo tiene valor uno
¿Y es posible que exista un algoritmo que cumpla los requisitos de exclusión mutua y de
progreso, pero que no cumpla el de espera limitada?
Un algoritmo de sección crítica que cumpla exclusión mutua y progreso, pero no
espera indefinida puede ser la solución básica con instrucciones atómicas (test-and-
set o swap). Este es el algoritmo básico con test-and-set:
P (cerrojo)
... sección crítica ...
V(cerrojo)
¿Por qué la solución consistente en desactivar las interrupciones mientras dura la sección
crítica no se considera una solución universalmente aceptable?
Porque es una solución que depende de la existencia de un sistema centralizado de
control de interrupciones, que no está disponible en todas las arquitecturas. En
particular, esta solución no es aplicable en muchos entornos multiprocesadores, en
los que cada procesador dispone de su propia línea de interrupciones. Cada
procesador puede desactivar sus propias interrupciones, pero no puede hacerlo
simultáneamente en todos los otros procesadores. Como la desactivación
generalizada de las interrupciones en todos los procesadores no será atómica, no
sirve de base para construir una solución a la sección crítica.
4 (1 punto) Suponga que tenemos un sistema con una cantidad de procesadores infinita.
¿Seguiría teniendo sentido que el sistema operativo se preocupe por gestionar este recurso de
capacidad infinita? ¿Qué algoritmos de planificación aplicaría usted en este sistema?
Si el número de procesadores fuera ilimitado, no tendríamos que preocuparnos por
repartir cada procesador entre varios procesos, ni aprovechar el tiempo ocioso de un
procesador cuando el proceso actual se bloquea. Es decir, cada proceso podría tener
asignado un procesador para él en exclusiva, sin límites de tiempo, prioridades
respecto a sus compañeros, etc. El algoritmo de planificación para este sistema
puede ser tan sencillo como dejar ejecutarse de inmediato a cualquier proceso que
pase al estado de preparado. El procesador se le puede asignar en el arranque del
proceso. No haría falta ni siquiera llevar una lista de procesadores libres u ocupados:
tan sólo haría falta numerarlos y concederlos a los procesos en orden ascendente.
En el supuesto sólo nos han mencionado que los procesadores son infinitos, pero no
se nos indica nada al respecto de otros recursos, como por ejemplo la memoria. Si
hubiera recursos escasos, sí que tendría sentido aplicar políticas convencionales de
planificación, para evitar que se sature alguno de esos recursos. Por ejemplo, si la
memoria tiene un tamaño limitado, el número de procesos que pueden estar
presentes también es limitado y por tanto, cuando llega un nuevo proceso, tiene
sentido aplicar una política que limite su ejecución en función de parámetros como su
prioridad, consumo estimado de memoria, etc.
Calificación
1
2
Nombre Titulación
1 (7,5 puntos) Test. En cada uno de los siguientes apartados, señale cuál opción es
correcta. En caso de que existan varias opciones ciertas, se considerará como correcta
la más completa o precisa. Las preguntas no contestadas no puntúan; las contestadas
erróneamente puntúan negativamente restando un tercio de su valor. Señale sus
respuestas rodeando con un círculo la opción correcta. Si se equivoca, tache la
respuesta incorrecta y rodee la opción que considere correcta. Escriba con tinta. Las
preguntas respondidas con lápiz o con varios círculos no tachados se considerarán no
contestadas.
1. La tabla de páginas de un determinado proceso indica que la página 2 tiene asociado el marco 7.
El tamaño de la memoria física es de 65536 bytes. Si en el sistema tenemos 32 marcos de página,
¿Cuál es la dirección física asociada a la dirección virtual 4421?
a) 7*2*2*1024+325
b) 7*2*1024+1676
c) 2*2*1024+325
d) 7*2*1024+325
2. Suponga que desea almacenar un fichero de 35MB de datos para posteriormente realizar un
acceso secuencial al mismo:
a) Emplearía asignación contigua ya que ocuparía el menor espacio en el sistema y
además el acceso es más eficiente
b) Lo mejor sería emplear asignación indexada de un nivel ya que ocuparía el mismo espacio
que en la asignación contigua al ser el fichero muy pequeño
c) Emplearía asignación enlazada con FAT ya que permite el acceso directo si mantenemos
la FAT en memoria y en el caso de archivos pequeños ocupa el mismo espacio que con
asignación contigua
d) Todas las anteriores son ciertas
5. En un sistema de archivos que utiliza asignación encadenada con FAT y tamaño de bloque de
1Kb, ¿Cuántos accesos a disco son necesarios para acceder al byte 7000 de un fichero?
(suponiendo que tanto la tabla de archivos abiertos como la FAT se encuentran en memoria)
a) 2
b) 6
c) 1
d) 7
6. Ninguna arquitectura actual implementa tamaños de página entre 800 bytes y 1000 bytes. ¿A qué
cree que es debido?
a) A que los fabricantes de chips de memoria paginan sus bloques de memoria físicos con
unos tamaños prefijados y por tanto no se puede decidir libremente el tamaño de la página
b) Estos tamaños de página obligarían a diseñar una MMU mucho más compleja que
la que se utiliza para trabajar con los tamaños usados realmente
c) Debido al tamaño que tienen las aplicaciones actuales, originan demasiada fragmentación
interna
d) El número de páginas que tendría la tabla de páginas en una arquitectura de 32 bits o de
64 bits sería enorme, y por ello las arquitecturas de memoria prefieren trabajar con
tamaños mayores
7. Un sistema posee una memoria física de 64 Kb dividida en marcos de página de 512 bytes. Un
programa tiene un código de tamaño 32800 bytes, datos de 16386 bytes y una pila de 15870 bytes.
¿ Se puede cargar este programa en memoria?
a) Imposible
b) Solo el código
c) Posible
d) Se puede si no se carga la pila
10. En la tabla de segmentos se especifica que el segmento 0 tiene como base 500 y longitud 500, el
segmento 3 tiene como base 2634 y longitud 650. ¿A qué direcciones físicas corresponden las
direcciones virtuales (3:558) y (0:950), dadas en el formato (nº de segmento:desplazamiento)?
a) 3192 y error de direccionamiento respectivamente
b) Error de direccionamiento y 1450 respectivamente
c) 3192 y 1450 respectivamente
d) Error de direccionamiento en ambos casos
11. En un sistema operativo multitarea, con 8 Kb de espacio lógico de procesos, con páginas de 1Kb
y 32 Kb de memoria física, sin memoria virtual, la tabla de páginas ocupará como mínimo:
a) 8*5 bits
b) 32*5 bits
c) 8*3 bits
d) 32*3 bits
12. En un sistema operativo se utiliza una estructura de nodos-i similar a la de Unix. Los bloques son
de 2048 bytes. Las entradas en los nodos-i dedican 64 bits al tamaño del archivo y 32 bits a los
punteros de los bloques. El nodo-i tiene 8 entradas de direccionamiento directo, una de
direccionamiento indirecto simple y otra de direccionamiento indirecto doble. La entrada de
archivos abiertos tiene una entrada para cada archivo con un campo de 64 bits que indica el
desplazamiento. En este sistema, el tamaño máximo de un archivo que utiliza todo el disco es:
a) 262664 bloques
b) 232 bloques
c) 253 bloques
d) 264 bloques
15. Suponga un sistema de archivos que utiliza asignación indexada de espacio en disco donde la
representación de espacio libre se lleva a cabo mediante un mapa o vector de bits. Si se reduce el
tamaño de bloque del sistema de archivos
a) Aumentará la fragmentación externa
b) Disminuirá la fragmentación interna
c) Dismunuirá el tamaño del mapa de bits
d) Ninguna de las anteriores es cierta
2 (2,5 puntos) En una fábrica se tienen dos tipos de procesos que modelan una planta
embotelladora de bebidas, y que trabajan en paralelo:
• Los procesos "Embotelladores" se encargan de preparar botellas de un litro.
• Un proceso "Empaquetador" se encarga de empaquetar y reponer las cajas
donde se van colocando las botellas.
Cada vez que los embotelladores preparan una botella, ésta se coloca en una caja, que
tiene una capacidad de N litros. Si al colocar la botella, la caja queda llena, se envía una
señal al empaquetador, que toma la caja, la sella y la guarda en un almacén. El
empaquetador deposita una nueva caja de N litros, totalmente vacía. Mientras el
empaquetador está haciendo su labor, los embotelladores no pueden colocar sus
botellas, ya que en esos momentos no hay una caja disponible. Encontrar una solución
basada en monitores que sincronice el problema de concurrencia citado.
// Código de inicialización
litros = N;
empaquetadoravisado = false;
}
Proceso Embotellador() {
while (dure la jornada de 65 horas semanales) {
// Voy a la fuente a llenar la botella
ControlCajas.PonerBotella();
// Cojo aire para volver a la fuente
}
}
Proceso Empaquetador() {
while (dure la jornada de 65 horas semanales) {
// Me tomo un respiro para cargar la caja y poner una vacía
ControlCajas.RetirarLlenaPonerVacia();
//Llevo la caja al almacén, que está cerca, a 1 KM
}
}
1
2
3
4
SISTEMAS OPERATIVOS, 11 de setiembre de 2008 5
Examen Convocatoria Extraordinaria Especial
Nombre Titulación
SOLUCION
1 (3 puntos) Test. Marque las opciones correctas de cada apartado. En caso de que existan
varias opciones ciertas, se considerará como correcta la más completa o precisa. Las preguntas no
contestadas no puntúan; las mal contestadas puntúan negativamente restando un tercio de su valor.
Marque la opción correcta rodeándola con un círculo. Si se equivoca, tache la respuesta equivocada
y rodee la opción correcta. Escriba con tinta. Las preguntas respondidas con lápiz o con varios
círculos no tachados se considerarán no contestadas.
SOLUCIÓN:
a) 2^24 = 16 megabytes.
d) 3 mebagytes = 3 x 2^20 bytes = 3 x 2^20 / 2^10 páginas = 3 x 2^10 páginas = 3.072 páginas.
e) En esta arquitectura, el espacio lógico (2^24 palabras) es bastante más pequeño que el espacio
físico (2^32 palabras). Esto significa que un proceso no puede direccionar al mismo tiempo todo el
espacio físico. A primera vista, esto supone una limitación arbitraria que restringe fuertemente la
capacidad de direccionamiento de los procesos. Pero puede haber algunas justificaciones a este
esquema.
Una posible explicación a esta restricción es que en este sistema suele haber muchos procesos en
ejecución al mismo tiempo con distintos espacios lógicos de memoria, de manera que aunque un
solo proceso no aprovecha todo el espacio disponible, el conjunto de todos ellos sí lo hace. Las
direcciones lógicas se mantienen cortas y así el código máquina es algo más compacto que en el
caso de tener direcciones de 32 bits.
Otro posible motivo para que este sistema esté así configurado es que los procesos ejecutan código
de alguna arquitectura antigua de 24 bits, mientras que el hardware es más moderno y trabaja con
direcciones de memoria más anchas. Sin necesidad de recompilar los programas, podemos seguir
ejecutándolos y aprovechar mejor la memoria física de 32 bits si tenemos multiprogramación.
Finalmente, esta configuración también puede verse como una medida (bastante radical) para
evitar que un solo proceso acapare demasiada memoria: su asignación de espacio se le limita
físicamente a 16 megabytes.
Nombre
f) En este sistema, un proceso de gran tamaño tendrá una tabla de páginas que puede superar con
creces el kilobyte que ocupa un único marco de página. Por ejemplo, si cada entrada de la tabla
ocupa 3 bytes, basta con que el proceso tenga 400 páginas para que la tabla necesite consumir dos
marcos.
Si la tabla de páginas consume varios marcos, estos deberán ser contiguos para que la MMU
pueda realizar su trabajo. Y como necesitamos asignar varios marcos contiguos, nos aparece el
problema de la fragmentación externa, que es lo que la paginación debería resolver
definitivamente. Este es exactamente el motivo por el cual muchos sistemas paginan la tabla de
páginas y por tanto utilizan un esquema de varios niveles de paginación. Así que en el sistema
propuesto, es más recomendable trabajar con dos niveles de paginación, con el fin de reducir el
problema de la fragmentación cuando se asigna espacio para la tabla de páginas.
g) Como máximo, un proceso puede tener 2^24 / 2^10 = 2^14 = 16.384 páginas. Este número es la
máxima cantidad de elementos que podría llegar a tener una tabla de páginas
h) Una posible explicación es que el proceso está compartiendo marcos de página con otros
procesos, o con el sistema operativo. Por ejemplo, algunas de las páginas lógicas pueden estar
apuntando a páginas de código de una DLL que ha sido asignada a otro proceso, o a datos de sólo
lectura del sistema operativo, etc.
Otra explicación es que algunas de las páginas lógicas en realidad están duplicadas, es decir, que
varias páginas lógicas apuntan al mismo marco físico.
Por otra parte, en el enunciado no nos indican si el sistema utiliza el bit de validez y por tanto el
concepto de página inválida. Si es el caso, puede ser que nuestro proceso direccione 50 páginas,
pero sólo 30 de ellas están cargadas en memoria principal, mientras que el resto están pendientes
de cargar (son inválidas).
3 (1,75 puntos) Suponga un archivo formado por 5 registros de tamaño fijo, siendo dicho tamaño
de 250 bytes. Para cada una de las políticas básicas de gestión del espacio de disco (contigua,
enlazada e indexada), asumiendo que cada bloque del sistema de archivos es de tamaño de 1 Kbyte
y que todos los datos de control del archivo ya se encuentran en memoria, obtenga qué bloques de
sistemas de archivos hace falta acceder para leer el contenido del quinto registro del archivo. Para
cada bloque que se requiera acceder, especifique cuántos bytes forman parte del registro a leer.
Para el caso de la política contigua asuma que el primer bloque asignado al archivo es el 1000. Para
el caso de la política enlazada, o encadenada, asuma que el tamaño del enlace al siguiente bloque del
archivo es de 4 bytes y que al archivo se le asignó en primer lugar el bloque 1000 y posteriormente,
al crecer, el bloque 3000. Por último, para el caso de la política indexada asuma que el primer
bloque asignado al archivo fue el bloque 300 y posteriormente, al crecer, el bloque 245.
SOLUCIÓN:
Asignación contigua
El quinto registro del archivo se encuentra en el bloque relativo:
Br = Parte entera [(4*250) / 1024] = Parte entera [ 1000 / 1024 ] = 0
La posición en ese bloque del primer byte del registro es:
Pr = Resto[(4*250) / 1024] = Resto[ 1000 / 1024 ] = 1000
Por tanto para acceder a todos los bytes del quinto registro necesitaremos acceder a los dos
bloques de datos de sistema de archivos que tiene asignado el fichero. Como es asignación
contigua y nos dicen que el primer bloque es el 1000, entonces se tendrá que acceder al bloque
1000 y 1001.
Asignación indexada
El quinto registro del archivo se encuentra en el bloque relativo:
Br = Parte entera [(4*250) / 1024] = Parte entera [ 1000 / 1024 ] = 0
La posición en ese bloque del primer byte del registro es:
Pr = Resto[(4*250) / 1024] = Resto[ 1000 / 1024 ] = 1000
Por tanto para acceder a todos los bytes del quinto registro necesitaremos acceder a los dos
bloques de datos de sistema de archivos que tiene asignado el fichero. Como es asignación
indexada y nos dicen que el primer bloque es el 300 y el segundo es el 245, entonces del bloque
300 se leerán los primeros 24 bytes del registro y del bloque 245 el resto de bytes del registro.
Nombre
4 (1,75 puntos) Llegadas las fiestas del barrio toca celebrar el tradicional torneo de envite (para
los que no lo conozcan se trata de un juego de cartas). El problema es que para empezar una
partida se necesitan 8 personas según las normas del torneo. La organización dispone de una mesa
con 8 sillas de forma que a medida que llegan posibles jugadores (una vez anunciado
convenientemente mediante megafonía por todo el barrio), estos toman asiento si existe hueco libre.
En caso de que todas las sillas estén ocupadas, implica que ha comenzado una partida y los nuevos
jugadores que lleguen deberán esperar a que termine la partida y todos los jugadores hayan
abandonado su silla. Proponga una solución al problema anterior mediante semáforos especificando
el código que ejecutarían los posibles jugadores del torneo.
NOTA: Puede asumir que la duración de la partida es finita, es decir, las personas una vez que
pasa un tiempo y termina la partida, liberarán su asiento.
SOLUCIÓN:
// Variables globales
int sillasocupadas=0; // Sillas ocupadas por jugadores
int njesperando=0; // numero de jugadores esperando para jugar
bool jugandopartida=false; // indica si existe una partida en juego
Semaphore mutex(1), esperaturno(0);
Jugador-i() {
…
// El jugador llega a la asociación e intenta coger sitio
mutex.P();
// Si hay una partida empezada debe esperar
while (jugandopartida==true) {
njesperando++;
mutex.V();
esperaturno.P();
mutex.P();
}
sillasocupadas++;
// El último jugador que completa los equipos indica el comienzo de la
// partida (ver también ANEXO 1)
if (sillasocupadas==8)
jugandopartida=true;
mutex.V();
if (sillasocupadas==8) {
jugandopartida=true;
for(i=1;i<=7;i++)
empiezaLaPartida.V();
mutex.V();
} else {
mutex.V();
empiezaLaPartida.P();
}
5 (1,75 puntos) Supónganse los siguientes procesos, de los que definimos el momento de su
creación y los tiempos de ejecución completos, detallando la duración de las ráfagas alternas de
CPU y E/S:
Se pide:
a. Calcular los tiempos de espera y de retorno de cada uno de ellos, el porcentaje de
uso de la CPU y la productividad del sistema aplicando la estrategia de planificación
SRTF (Shortest Remaining Time First). (1,25 puntos)
b. ¿A qué conclusiones llegas? (0,5 puntos)
SOLUCIÓN:
Todo proceso preparado tiene entre paréntesis el tiempo de CPU que requiere en la siguiente
ráfaga de uso. El proceso en ejecución tiene entre paréntesis el tiempo de CPU que le queda a la
ráfaga de CPU que está utilizando. En caso de empate usaremos FCFS.
Nombre
Conclusiones: Los tiempos de espera de los procesos P2 y P3 son ambos cero debido al escaso
uso de CPU que hacen en sus correspondiente ráfagas en comparación con el proceso P1, lo que
hace que la estrategia de planificación SRTF les atienda enseguida y deje P1 para más adelante. La
CPU no se está utilizando al 100 %, aunque no se debe a una mala planificación con la estrategia
SRTF, pues siempre que no hay un proceso con menor uso de CPU, P1 es atendido. En el
momento inicial la CPU permanece inactiva debido a que no hay ningún proceso que pueda ser
planificado, y entre el instante de tiempo 2.75 (en el que el proceso P1 pide una E/S) y el instante
de tiempo 3.0 (en el que se produce el fin de la E/S del proceso P2) la CPU también permanece
inactiva, debido en este caso a que sólo hay un proceso y éste está suspendido. Es posible utilizar
ese tiempo en el que la CPU permanece inactiva para que el sistema operativo pueda solucionar
problemas de fragmentación de memoria (por ejemplo, compactación de memoria, etc).
Calificación
1
2
SISTEMAS OPERATIVOS
5 de diciembre de 2008
Examen Convocatoria Extraordinaria Especial
Nombre Titulación
* * * * SOLUCIONES * * * *
3. Suponga la función matemática f(M) que devuelve el número de fallos de página de una
política, dado el número M de marcos de página disponibles. A medida que M aumenta, la
pendiente de f(M)...
a) Tiende a Infinito.
b) Tiende al valor 1
c) Tiende al valor ½
d) Tiende al valor 0.
4. Sea un sistema de memoria virtual con las siguientes especificaciones: el tiempo de
acceso a memoria es de 100 nanosegundos, el tiempo de acceso efectivo es de 25
microsegundos y la tasa de fallos de páginas de 5%, entonces los fallos de páginas se
procesan con un tiempo de:
a) (0,000025 - 0,000000095)/0,05
b) (0,000025 + 0,000000095)/0,05
c) (0,000025 - 0,000000095)/0,05
d) 0,000025 - 0,000000095 + 0,05
9. En un sistema multihilo,
a) Los cambios de contexto entre hilos de un mismo proceso pesado son en general más
costosos que los cambios de contexto entre hilos de diferentes procesos pesados.
b) Los hilos pueden estar soportados e implementados por el propio sistema
operativo o bien pueden ser implementados a nivel de usuario.
c) Los hilos de un mismo proceso pesado comparten las variables globales y por tanto la
comunicación entre ellos se puede realizar mediante la pila.
d) Todas las anteriores son ciertas.
2
Nombre
* * * * SOLUCIONES * * * *
14. Acaba de lanzarse al mercado «todOS», un sistema operativo cuyos creadores afirman
que es capaz de ejecutar al mismo tiempo aplicaciones nativas de Linux, Windows XP y
Mac OS X. ¿Cuál de las siguientes técnicas de construcción de sistemas operativos cree
usted menos probable que se haya empleado en el desarrollo de «todOS»?
a) diseño monolítico
b) diseño por capas
c) micronúcleos
d) máquinas virtuales
3
16. A continuación se muestran cuatro posibles servicios que podría ofrecer un sistema
operativo multiusuario para arquitectura PC. Debe usted quedarse solamente con tres y
excluir necesariamente uno de ellos. ¿Cuál descartaría?
a) sistema de protección de memoria
b) sistema de archivos
c) planificador de procesos
d) sistema de gestión de interrupciones
18. El método de listas enlazadas para la asignación del espacio en disco presenta el siguiente
inconveniente:
a) Es necesario conocer el tamaño máximo de archivo en el momento de su creación.
b) La fragmentación externa resultante en el disco.
c) El acceso aleatorio a un archivo es extremadamente lento.
d) La pérdida de espacio debido a las tablas de índices.
4
Nombre
* * * * SOLUCIONES * * * *
Solución con el monitor:
monitor Guagua {
bool esHoraDeSalir = false;
int viajerosEsperando = 0;
const int CapacidadGuagua = 20;
Condition esperaGuagua;
public MueveGuagua() {
// esperar a que se den las condiciones para moverse
while ( viajerosEsperando < CapacidadGuagua && ! esHoraDeSalir ) {
esperaGuagua.wait();
}
// reiniciar las variables de estado para una futura llegada
viajerosEsperando = 0;
esHoraDeSalir = false;
}
public LlegaViajero() {
viajerosEsperando++;
if ( viajerosEsperando >= CapacidadGuagua ) {
esperaGuagua.signal();
}
}
public AvisaHoraSalida() {
esHoraDeSalir = true;
esperaGuagua.signal();
}
}
5
Calificación
1
Fac. de Informática / Escuela Univ. Informática 2
SISTEMAS OPERATIVOS 3
Examen Primer Parcial 4
5 de mayo de 2007
Nombr Titulació
SOLUCIONES
El tiempo de retorno podría ser mayor, si otro proceso con prioridad máxima se
encuentra en la CPU cuando P1 llega al sistema o cuando finaliza su E/S. En ese
caso, P1 debe esperar por el proceso que está en CPU. Así que la respuesta
correcta es al menos 10 unidades de tiempo.
c) Definir: (1p)
a. BootStrap Planificador a medio plazo
b. Procesadores a. Concurrencia
débilmente b. Efecto convoy
acoplados c. Sección crítica
c. Tiempo de
respuesta
d.
a. BootStrap: programa encargado de leer el sistema operativo desde el
dispositivo donde se encuentra, ubicarlo en memoria principal y ejecutarlo.
b. Procesadores débilmente acoplados: (o sistemas distribuidos) : múltiples
procesadores conectados mediante una red, donde varios sistemas
informáticos, escalable hasta millones de procesadores (ej. Internet), se
conectan de forma distribuida para realizar determinadas funciones,
rompiendo la barrera del espacio, no es necesario que los equipos estén
físicamente juntos, ni siquiera próximos. En estos sistemas los procesadores
no comparten memoria ni reloj.
c. Tiempo de respuesta: tiempo que un proceso bloqueado tarda en entrar en
CPU, desde que ocurre el evento que lo bloquea.
d. Planificador a medio Plazo (PMP): El planificador de medio plazo (PMP) se
encarga de gestionar situaciones en las que el sistema queda escaso de
recursos, normalmente porque los procesos consumen toda la memoria
disponible. En estos casos, suele ocurrir que existen procesos en estado
“bloqueado”, que no van a ejecutar instrucciones en mucho tiempo, y que sin
embargo están ocupando memoria. El PMP se encargará de copiar la imagen
de estos procesos en memoria secundaria (disco) y dejar disponible la
memoria principal que ocupaban para otros procesos que sí necesitan
ejecutar instrucciones.
e. Concurrencia: En informática se habla de concurrencia cuando hay una
“existencia simultanea de varios procesos en ejecución”. Conviene
2 de 8
resaltar el término “existencia simultánea …”, claramente diferente al término
“ejecución simultánea …”. Es decir, hablamos de concurrencia o
multiprogramación (emplearemos ambos términos como sinónimos) cuando
tenemos varios procesos cargados en la memoria del computador.
f. Efecto Convoy : fenómeno indeseable en un sistema por el que un proceso
intensivo en CPU acapara el procesador y hace que otros procesos
intensivos en E/S esperen por éste recurso, motivando en general una baja
utilización de los distintos recursos del sistema.
g. Sección crítica: se define sección crítica de un proceso como un conjunto de
instrucciones que acceden a un dato que es compartido por al menos otro
proceso del sistema de forma que al menos uno de ellos puede modificar la
variable.
Class Gestionador {
Public:
Gestionador( );
3 de 8
~Gestionador();
void Solicito_Recurso( int Mi_Id_Proc );
void Libero_Recurso( int Mi_Id_Proc );
Private:
Semáforo *cerradura, *me_bloqueo[N];
Boolean ocupado, espero[N];
}
Gestionador:: Gestionador()
{
int i;
cerradura = new Semáforo(1);
for ( i=0; i<N; i++) {
me_bloqueo[i] = new Semáforo(0);
espero[i] = false;
}
ocupado = false;
}
Gestionador::~Gestionador()
{
int i;
delete cerradura;
for (i=0; i<N; i++)
delete me_bloqueo[i];
}
4 de 8
if ( i == N ) {
ocupado = false;
}
cerradura->V();
}
Proceso Pi
llave: boolean; //Inicializada a false
j: integer;
begin
repeat
SECCION NO CRITICA
esperando[i]:=true;
llave:=false;
repeat
llave:=Test_and_Set(m);
until (not esperando[i] or llave);
esperando[i]:=false;
SECCION CRITICA
j:=(i+1) mod n;
while (j<>I and not esperando[j]) do
j:=(j+1) mod n;
if (j=i) then
m:=false;
else
esperando[j]:=false;
until false
end.
5 de 8
por lo que saldría del bucle y pasaría a ejecutar la porción de código contenida
en la sección crítica, teniendo por tanto dos procesos ejecutando la sección
crítica. En realidad podrían entrar todos lo que quisieran sin ningún tipo de
trabas.
Por tanto, al no cumplir la exclusión mutua, podemos afirmar que no se trata de
una solución válida al problema de la sección crítica.
SOLUCIÓN:
Estado de la memoria:
t = 0 ⇒ entra A
Proceso Prioridad t CPU restante
A #4 2
t = 3 ⇒ entra C
t = 1 ⇒ entra B Proceso Prioridad t CPU restante
Proceso Prioridad t CPU restante
A #4 1
A #4 1 B #3 2
B #3 4 C #2 4
6 de 8
En t = 5, entra en cola del PLP el proceso D y en t = 6 el proceso E. Estos dos
procesos no pueden entrar de inmediato en la memoria, ya que hasta t=7 continúan
tres procesos en memoria: A, B y C.
A #4 1 A #4 1
B #3 2 B #3 2
D #1 1 E #3 2
F #1 1
a) Diagrama de Gantt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
A B C D B E A F
b) Tiempo de retorno:
A B C D E F
(13-0) (10-1) (7-3) (8-5) (12-6) (15-14)
13 9 4 3 6 1
1394361
TRetorno Medio = = 6 u.t.
6
c) Tiempo de espera:
La respuesta en este caso depende de la definición que se maneje para el concepto
de «tiempo de espera».
Si se utiliza la definición de «tiempo que un proceso permanece en la cola de
preparados», los resultados son los siguientes:
A B C D E F
(11) (6-1) (0) (7-5)-2 (10-6)-2 (0)
11 5 0 2 4 0
7 de 8
1150020
TEspera Medio = = 3 u.t.
6
Si se utiliza la definición de «tiempo que un proceso permanece en espera por el
procesador», hay que contabilizar el tiempo en cola de preparados (PCP) y el tiempo
en la cola de admisión del PLP. Los resultados serán:
A B C D E F
(11) (6-1) (0) (7-5) (10-6) (0)
11 5 0 2 4 0
1150240
TEspera Medio = = 3,67 u.t.
6
Ambas respuestas son válidas.
d) Rendimiento de la CPU:
Debido a que el último proceso F llega en el instante 14 y el sistema acaba con la
ejecución de todos los procesos en el instante 13, hay 1 u.t. en la que la CPU está
idle (ociosa, sin trabajar). Con lo cual en el momento 15 u.t. en el que acaban todos
los procesos de ejecutarse, la CPU ha trabajado 14 u.t. Esto hace que el rendimiento
de la CPU podamos mediarla como:
14
Rend CPU = = 0,933, por lo que el rendimiento de la CPU es de un 93,33 %
15
* * * * *
8 de 8
Calificación
1
2
3
Nombre Titulación
SOLUCION
1 (6 puntos) Test. En cada uno de los siguientes apartados, señale cuál opción es
correcta. En caso de que existan varias opciones ciertas, se considerará como correcta
la más completa o precisa. Las preguntas no contestadas no puntúan; las contestadas
erróneamente puntúan negativamente restando un tercio de su valor. Señale sus
respuestas rodeando con un círculo la opción correcta. Si se equivoca, tache la
respuesta incorrecta y rodee la opción que considere correcta. Escriba con tinta. Las
preguntas respondidas con lápiz o con varios círculos no tachados se considerarán no
contestadas.
2. En un sistema con memoria virtual, cuando una página es elegida como víctima y
guardada en disco por el paginador, al volver a ser invocada
a) Se producirá un fallo de página y se reubicará en algún marco de la memoria
perteneciente a otro proceso
b) Se producirá un fallo de página y se reubicará en el mismo marco que ocupaba
previamente
c) Se producirá un fallo de página y se reubicará en el marco que ocupe otra
página víctima
d) No se producirá ningún fallo de página ya que la página sigue en memoria
5. Suponga que desea almacenar un fichero de 20MB de datos. ¿Con cuál de los
siguientes métodos de asignación ocuparía el menor espacio en el sistema de
almacenamiento?
a) Asignación contigua
b) Asignación enlazada
c) Asignación enlazada con FAT
d) Asignación indexada de un nivel
10. Suponga un sistema de archivos que utiliza asignación indexada de espacio en disco
donde la representación de espacio libre se lleva a cabo mediante un mapa o vector de
bits. Si se reduce el tamaño de bloque del sistema de archivos
a) Disminuirá la fragmentación externa
b) Aumentará la fragmentación interna
c) Aumentará el tamaño del mapa de bits
d) Aumentará el tamaño máximo que puede ocupar un archivo en disco
11. En un sistema de archivos que utiliza asignación encadenada con FAT y tamaño de
bloque de 512 bytes, donde no existe tabla de archivos abiertos ¿Cuántos accesos a
disco son necesarios para acceder al byte 3120 de un fichero? (suponiendo que la
FAT se encuentra en memoria)
a) 2
b) 3
c) 1
d) 8
a)
Número máximo de bloques índices:
Inodo
+ bl. indirecto sencillo
+ (bl. indirecto doble + 256 bl. indirectos sencillos)
+ (bl. indirecto triple + 256 bl. indirectos dobles + 256 * 256 bl. indirectos sencillos)
=
1 + 1 + (1+256) + (1+256 + 256*256) = 66052 bloques
c)
Dada la organización del inodo, se accederá a los bloques de datos de la siguiente
forma:
Bloques del 0 al 9 → a través de los enlaces directos
Bloques del 10 al 265 → a través del bloque indirecto sencillo
Bloques del 266 al 65801 → a través del bloque indirecto doble
Bloques del 65802 al 16843018 → a través del bloque indirecto triple
El acceso al bloque 65802 se realiza a través del bloque indirecto triple, por lo
que son necesarios 1 acceso al inodo, 1 acceso al bloque indirecto triple, 1
acceso al correspondiente doble, 1 acceso al correspondiente sencillo y
finalmente al dato. Total: 5 accesos
3 (2 puntos) Suponga un recurso que debe ser usado de manera exclusiva por parte del
proceso que lo utiliza. En el sistema se ejecutan siempre los mismos procesos que son
N, identificándose cada uno de ellos por un valor entero cuyo rango es de 1 a N. Estos
procesos necesitan para cumplir con su cometido hacer uso del recurso compartido.
Cuando un proceso necesita utilizar el recurso lo solicita mediante la función:
Solicito_Recurso( int Mi_Id_Proc)
De forma que si el recurso está ocupado deberá esperar hasta que quede libre. Cuando
varios procesos solicitan el uso del recurso, entonces se le concederá a aquél proceso
cuyo identificador es el menor. Cuando se libera el recurso, el proceso que lo libera lo
hace con la función:
Libero_Recurso(int Mi_Id_Proc)
// Código de inicialización
ocupado = falso;
nprocesos_esperando = 0;
for (i=0; i<N; i++)
proceso_esperando[i]= falso;
1
2
3
SISTEMAS OPERATIVOS
Convocatoria de septiembre, 12 de septiembre de 2007
Nombre Titulación
SOLUCIONES
Dispone de tres horas para completar el examen
1 (5 puntos) Test. Marque las opciones correctas de cada apartado. En caso de que
existan varias opciones ciertas, se considerará como correcta la más completa o precisa. Las
preguntas no contestadas no puntúan; las mal contestadas puntúan negativamente restando un
tercio de su valor. Marque la opción correcta rodeándola con un círculo. Si se equivoca, tache la
respuesta equivocada y rodee la opción correcta. Escriba con tinta. Las preguntas respondidas
con lápiz o con varios círculos no tachados se considerarán no contestadas.
1. Un sistema multiprogramado:
a) permite gestionar varias tareas interactivas
b) evita el posible monopolio de la CPU por un proceso del sistema
c) debe realizar el control de la sincronización
d) **ninguna de las afirmaciones es correcta
2. Si varios procesos concurrentes se ejecutan en un sistema, ocurre que:
a) ** para su ejecución compiten por el uso de uno o de varios procesadores
b) se ejecutan sobre un sistema operativo multiusuario
c) comparten el mismo código
d) necesitan sincronizarse para acceder a los datos que comparten
3. El bloque de control de proceso (BCP) contiene, al menos:
a) el grado de multiprogramación de un proceso
b) el código, los datos y la pila de un proceso
c) **el estado y el identificador de un proceso
d) todas las afirmaciones anteriores son correctas
4. ¿cuál de las siguientes afirmaciones es correcta?
a) Los sistemas multiprogramados son sistemas de tiempo compartido que permiten
conmutar los trabajos presentes en el sistema.
b) **Los sistemas de tiempo compartido son sistemas multiprogramados en los que
se reparte el uso de la CPU entre los procesos existentes a intervalos regulares
de tiempo.
c) Un sistema de tiempo real es un sistema con tiempos medios de respuesta óptimos
d) Ninguna de las afirmaciones anteriores es correcta
5. Supongamos que para resolver cierto problema de concurrencia empleamos un monitor y
variables condición. En este caso:
a) Una operación wait sobre una de las variables condición empleadas en dicho monitor
provocará que el proceso que la realice se bloquee siempre que no exista otro proceso
en el monitor previamente.
b) Una operación signal sobre una de las variables condición empleadas en dicho monitor
provocará el desbloqueo de otro proceso que haya realizado una operación wait sobre
cualquiera de las variables condición del monitor.
c) Una operación signal nunca provoca el bloqueo del proceso que la realiza.
d) **Todas las anteriores son falsas.
6. ¿Cuál de las siguientes afirmaciones es correcta?
a) El modo dual de operación se ha diseñado para que los programas de usuario obtengan
acceso pleno a todos los recursos del sistema con total libertad.
b) **Cuando se produce una interrupción, la CPU conmuta a modo
privilegiado/supervisor.
c) Las instrucciones de desactivación de interrupciones se ejecutan normalmente en modo
de usuario.
d) Las instrucciones lectura del reloj del sistema normalmente deberían ser operaciones
privilegiadas.
7. A un planificador de procesos que tiene la cola vacía llegan al mismo tiempo ocho procesos de
idéntica duración. Entonces:
a) Si se utiliza SJF, todos los procesos tendrán el mismo tiempo de retorno
b) Si se utiliza un Round Robin con cuanto igual a 1 u.t., se obtendrá un mejor tiempo de
retorno medio que con el SJF
c) Si se utiliza un Round Robin con cuanto igual a 8 u.t., se obtendrá un mejor tiempo de
retorno medio que con el SJF
d) **Si se utiliza FCFS, cada proceso tendrá un tiempo de espera diferente a los
demás
8. ¿Qué cambio de estado no se puede dar durante la vida de un proceso?
a) de «preparado» a «en ejecución»
b) de «en ejecución» a «preparado»
c) **de «preparado» a «bloqueado»
d) de «bloqueado» a «preparado»
9. ¿Qué dos características no se pueden combinar en un algoritmo de planificación?
a) expulsividad y prioridades
b) prioridades y rodajas de tiempo limitadas
c) expulsividad y envejecimiento (aging)
d) **todas las anteriores combinaciones son posibles
10. Un sistema de memoria paginado utiliza direcciones lógicas de 32 bits y tamaño de página 1
kbyte. Cada entrada en la tabla de páginas ocupa 4 bytes. ¿cuál es el número máximo de marcos
de página que se necesitarán para almacenar por completo una tabla de páginas en memoria?
a) 4 ∙ 232 marcos
b) 4 ∙ 222 marcos
c) ** 16 ∙ 210 marcos
d) 4 ∙ 210 marcos
direcciones lógicas de 32 bits
tamaño de página de 1 Kbyte=210 bytes → se necesitan 10 bits para el desplazamiento
El número máximo de páginas será de 2(3210)= 222 páginas
La tabla de páginas ocupará como máximo 222.4 bytes= 16Mbytes
En total haría falta 16Mbytes/1Kbyte=16.210 páginas o marcos
11. Tenemos un sistema de gestión de memoria paginada de un nivel que utiliza una TLB. Se tienen
los siguientes tiempos medios: tiempo de acceso a la TLB: 3 nseg; tiempo medio de acceso a
memoria principal: 42 nseg. Se desea que el tiempo de medio de acceso a memoria a partir de
una dirección lógica sea inferior a 48 nseg. ¿Cuál es la tasa de aciertos mínima de la TLB que lo
garantizaría?
a) ** 93%
b) 97%
c) 85%
d) 90%
t acierto= 3+42=45ns
t fallo=3+42+42=87ns
87 *(1p)+45*p<48
42p>39 → p>0.928 → tasa de aciertos mayor que 93%
12. Cuando realizamos una operación V sobre un semáforo:
a) Se despertará siempre al primer proceso que realizó una operación P, y por tanto, el
proceso que realiza la V se bloquea ya que no es posible que continúen su ejecución dos
procesos por la propiedad de exclusión mutua.
b) En caso de existir algún proceso bloqueado, se despertará a uno de ellos según la
política definida en la implementación del semáforo, y por tanto, el proceso que realiza la
V se bloquea ya que no es posible que continúen su ejecución dos procesos por la
propiedad de exclusión mutua.
c) **En caso de existir algún proceso bloqueado, se despertará a uno de ellos según
la política definida en la implementación del semáforo.
d) Lo dicho en la (c), y además en caso de no existir ningún proceso bloqueado el valor del
semáforo no se alterará.
13. Suponga un archivo perteneciente a un sistema de archivos tipo FAT32 cuyos bloques de datos
poseen un tamaño de 512 bytes. Asumiendo que: el archivo ya ha sido abierto con éxito; el
puntero de acceso al archivo posee el valor 0; y la FAT se encuentra totalmente cargada en
memoria principal, ¿cuántos accesos a disco se requerirán para leer un registro de tamaño de
1024 bytes que comienza en el byte 2048 del archivo?
a) un acceso
b) **dos accesos
c) cuatro accesos
d) seis accesos
14. Suponga un sistema de archivos que soporta las políticas básicas de gestión del espacio en disco.
En este hipotético sistema cuando un usuario crea un archivo, especifica qué política se aplica.
Para un archivo que contendrá las copias de seguridad de los archivos propiedad del usuario
¿qué tipo de política elegiría?
a) **contigua
b) encadenada
c) indexada
d) segmentada
15. Suponga un sistema de archivos que utiliza una política de gestión del espacio en disco
encadenada con doble encadenamiento que contiene 65536 bloques de sistema de archivo,
teniendo cada bloque un tamaño de 1024 bytes. Si un archivo posee 7 bloques, ¿cuál será su
tamaño efectivo máximo?
a) 7168
b) ** 7140
c) 7154
d) 7156
65536 = 216 , por lo que se necesitan 16 bits (2 bytes) para direccionar los 65536
bloques. Dado que nos indican que la gestión es encadenada con doble
encadenamiento, en cada bloque de 1024 bytes se emplearan 4 bytes (2 bytes para
cada puntero) para el encadenamiento de bloques, quedando por tanto 1020 bytes
efectivos para almacenar datos en cada bloque. Por tanto, en un archivo de 7 bloques
se podrán almacenar 1020*7= 7140 bytes de datos.
2 (2,5 puntos) Tenemos un sistema de memoria virtual paginada, con estas características:
● tamaño de página: 1024 bytes
● marcos disponibles en memoria física: 5
● algoritmo de reemplazo: LRU local
Dos procesos A y B se están ejecutando en el sistema, que le asigna un máximo de tres
marcos a A y un máximo de dos marcos a B. Sus tablas de páginas contienen ahora mismo la
siguiente información:
Proceso A Proceso B
marco bit validez marco bit validez
0 i
0 i
1 0 v
1 4 v
2 i
2 i 3 i
3 3 v 4 2 v
4 i
5 i
6 i
7 i
Las últimas referencias a memoria que han ocurrido en el sistema son estas direcciones
lógicas: (B:1500), (A:3333). Tras ello, se realizan los siguientes accesos: (B:2109), (A:207),
(A:4444), (B:2222), (A:2345), (B:3471), (A:88), (B:2000), (A:1055), (B:1093), (B:5008), (A:7815).
Se pide aplicar el algoritmo de reemplazo para esta secuencia de accesos y mostrar lo
siguiente (nota: cada apartado puntúa por un tercio del valor de la pregunta).
a. Cómo quedan las tablas de páginas de A y B al final de la secuencia.
b. Calcular las direcciones físicas a las que dan lugar las direcciones lógicas de la
secuencia.
c. Calcular cuántos fallos de página se provocan e indicar cuáles son los accesos
responsables de esos fallos.
a.
Proceso A Proceso B
marco bit validez marco bit validez
0 i
0 1 v
1 2 v
1 4 v
2 i
2 i 3 i
3 i 4 0 v
4 i
5 i
6 i
7 3 v
b.
Dirección lógica (página:desplazamiento) Dirección Física
B:2109 > 2:61 2048 + 61 = 2109
A:207 > 0:207 1024 + 207 = 1231
A:4444 >4:348 4096 + 348 = 4444
B:2222 > 2:174 2048 + 174 = 2222
A:2345 > 2:297 3072 + 297 = 3369
B:3471 > 3:399 0 + 399 = 399
A:88 > 0:88 1024 + 88 = 1112
B:2000 > 1:976 2048 + 976 = 3024
A:1055 > 1:31 4096 + 31 = 4127
B:1093 > 1:69 2048 + 69 = 2117
B:5008 > 4:912 0 + 912 = 912
A:7815 > 7:647 3072 + 647 = 3719
c.
accesos valor B:2109 A:207 A:4444 B:2222 A:2345 B:3471
inicial 2:61 i
0:207 4:348 2:174 2:297 3:399
FPiv x x x x x
(continuación)
accesos A:88 B:2000 A:1055 B:1093 B:5008 A:7815
0:88 1:976 1:31 1:69 4:912 7:647
FP x x x x
Por tanto se generan en total nueve fallos de página.
(i)Dirección lógica en formato página:desplazamiento.
(ii)Se sustituye la página lógica 4 ya que el ultimo acceso de B se realizó a la página lógica 1
(dirección lógica 1500 según dato del enunciado).
(iii)Se sustituye la página lógica 1 ya que los ultimos accesos de B se realizaron a las páginas
lógicas 3 y 0.
(iv)FP = fallo de página
3 (2,5 puntos) Un desarrollador implementa un programa en C++ para contar cuántos
elementos de un vector tienen valor negativo. Como el programa se va a ejecutar en un
multiprocesador, decide implementarlo con varios hilos concurrentes que realizan búsquedas
parciales en segmentos del vector. Y así queda el código:
// Rutina principal
main () {
rellenar_vector(); // introduce valores en “vector”
for ( int i=0; i<N; i+=100 ) {
Thread* hilo = new Thread();
hilo->Fork ( buscar_negativos, i, i+100 );
}
printf ( “El vector contiene %d valores negativos\n”,
negativos_encontrados );
}
El lanzamiento de los hilos se realiza con una sintaxis similar a la de Nachos. El efecto que
tiene cada llamada a hilo->Fork es que se crea un hilo que ejecuta una llamada a
buscar_negativos(i,i+100), de forma totalmente concurrente y asíncrona con el resto del
código.
La sincronización entre hilos lanzados y el «main» también se puede resolver de
múltiples formas. Una de ellas la hemos expuesto en las clases prácticas de la
asignatura, y consiste en utilizar un contador para saber cuántos hilos han finalizado.
A continuación se muestra una solución completa que utiliza esta técnica y resuelve
también el acceso concurrente a «negativos_encontrados». Todo ello con semáforos.
En azul está el código añadido.
// El vector donde se realizará la búsqueda
const int N = 10000;
int vector [N];
// Rutina principal
main () {
rellenar_vector(); // introduce valores en “vector”
for ( int i=0; i<N; i+=100 ) {
Thread* hilo = new Thread();
hilo->Fork ( buscar_negativos, i, i+100 );
}
// Espera a que todos los hilos finalicen
P (join);
printf ( “El vector contiene %d valores negativos\n”,
negativos_encontrados );
}
Por último, mostraremos la misma solución utilizando un monitor. El monitor obliga a
una mejor organización del código a través de la definición de un tipo abstracto de
datos que regula el acceso a la variable «negativos_encontrados». La solución es más
elaborada, pero al mismo tiempo más modular.
Como el C++ no soporta monitores, utilizaremos una sintaxis ficticia para especificar el
monitor, similar en sintaxis a una clase de C++, pero con la semántica de un monitor.
Esta solución es válida con semánticas Hoare y Mesa.
// El vector donde se realizará la búsqueda
const int N = 10000;
int vector [N];
// Constructor
public: NegativosEncontrados() {
negativos_encontrados = 0;
hilos_pendientes = N / 100;
}
// Rutina principal
main () {
rellenar_vector(); // introduce valores en “vector”
for ( int i=0; i<N; i+=100 ) {
Thread* hilo = new Thread();
hilo->Fork ( buscar_negativos, i, i+100 );
}
// Espera a que todos los hilos finalicen
NegativosEncontrados.Espera();
printf ( “El vector contiene %d valores negativos\n”,
NegativosEncontrados.Valor() );
}
Calificación
1
2
3
Nombre Titulación
SOLUCION
1 (5 puntos) Test. Marque las opciones correctas de cada apartado. En caso de que existan
varias opciones ciertas, se considerará como correcta la más completa o precisa. Las preguntas
no contestadas no puntúan; las mal contestadas puntúan negativamente restando un tercio de
su valor. Marque la opción correcta rodeándola con un círculo. Si se equivoca, tache la
respuesta equivocada y rodee la opción correcta. Escriba con tinta. Las preguntas respondidas
con lápiz o con varios círculos no tachados se considerarán no contestadas.
1. Suponga un sistema de archivos tipo FAT en el que cada cluster posee 2048 bytes y cada entrada
de directorio posee un tamaño de 32 bytes, si el directorio raíz posee 10 archivos y el directorio
“/Mis_Aplicaciones” posee 23 archivos. Si la FAT ya está cargada totalmente en memoria
¿Cuántos accesos a disco se requerirían en el peor de los casos para abrir un archivo ubicado en
“/Mis_Aplicaciones”?
a. Un acceso
b. Dos accesos
c. Veintitrés accesos
d. Treinta y tres accesos
5. Supongamos una política de planificación que actúa de la siguiente forma: cada vez que la CPU
queda libre, se escoge a un proceso al azar de la cola de preparados. ¿Qué podemos afirmar sobre
esta política?
a. el tiempo medio de respuesta de esta política es similar al de un Round-Robin
b. esta política tiene cierto riesgo de inanición
c. esta política perjudica a los procesos con ráfagas de CPU muy largas
d. esta política es expulsiva
6. Suponga un sistema con memoria virtual en el que el área de intercambio se soporta mediante un
archivo de intercambio. Si el sistema permite establecer la política de asignación de espacio en
disco de forma individual cada vez que un archivo se crea ¿qué política utilizaría para el archivo de
intercambio?
a. Asignación contigua
b. Asignación encadenada
c. Asignación indexada
d. Asignación tipo FAT
7. Considere un sistema de archivos tipo UNIX nativo en el que el tamaño de bloque de sistema de
archivo es de 1024 bytes; además dicho tamaño coincide con el tamaño de bloque físico. Para un
archivo con registros de 256 bytes y que posee 2500 registros, acceder al registro 47 requeriría en
el peor de los casos de:
a. Un acceso
b. Dos accesos
c. Veintitrés accesos
d. Cuarenta y seis accesos
9. La tabla de páginas indica que la página 2 tiene asociado el marco número 5. ¿Cuál es la dirección
física para la dirección virtual (5,215) dada en el formato (nº Pág., desplazamiento en la Pág):
a. 5+215
b. 5*1024+215
c. Con los datos del enunciado no es posible obtenerla
d. Si el tamaño del marco es T, la dirección física es 5 x T + 215
Nombre
10. En un sistema operativo multitarea, con 16Kb de espacio lógico de procesos, con páginas de
512bytes y 64 marcos de página, sin memoria virtual. La dirección lógica está formada por:
a. 6 bits para indicar la página y 9 bits para el desplazamiento.
b. 9 bits para indicar la página y 6 para el desplazamiento.
c. Dado que tenemos 16Kb de espacio lógico de procesos y 64 marcos, no tiene sentido
indicar que se trata de un sistema sin memoria virtual.
d. 5 bits para indicar la página y 9 bits para el desplazamiento.
11. ¿En qué nivel de planificación de procesos se encuentra el componente llamado despachador o
dispatcher?
a. en el planificador de corto plazo
b. en el planificador de medio plazo
c. en el planificador de largo plazo
d. dependiendo del sistema operativo, puede estar en el de medio plazo o en el de largo plazo
12. Supongamos que en un momento dado llegan a un sistema N procesos, cada uno de ellos con una
sola ráfaga de CPU y todos ellos con exactamente la misma duración. Cuando se planifica esta
carga de trabajo, dependiendo de la política, podemos afirmar lo siguiente sobre el tiempo medio
de espera:
a. el tiempo medio de espera con SJF y RR será el mismo
b. el tiempo medio de espera con FCFS y SJF será el mismo
c. el tiempo medio de espera con FCFS, SJF y RR será el mismo
d. como las duraciones son iguales, el tiempo medio de espera será el mismo, cualquiera que
sea la política de planificación empleada.
13. Un sistema multiprogramado:
a. Permite gestionar varias tareas interactivas
b. Evita el posible monopolio de la CPU por un proceso del sistema
c. Aumenta el rendimiento del sistema ya que los procesos se ejecutan en paralelo
d. Ninguna de las anteriores
14. La idea básica de mecanismo de E/S por interrupciones consiste en:
a. Disponer de un mecanismo acceso directo a memoria
b. Eliminar el bucle de espera
c. Buscar mecanismos de interactividad
d. Ninguna de las anteriores
15. Los búferes de E/S son:
a. Un dispositivo de gestión de las entradas y salidas de datos al computador
b. El espacio de memoria principal que s reserva para el almacenamiento intermedio
de datos procedentes o con destino a los periféricos
c. E/S controlada por programa
d. Ninguna de las anteriores
16. Un manejador de dispositivos es:
a. Hardware que controla un dispositivo
b. Software que controla un dispositivo
c. Un programa de usuario
d. Ninguna de las anteriores
2 (2,5 puntos) Un computador utiliza gestión de memoria virtual segmentada. La memoria
disponible para los procesos es de 64 bytes y el máximo tamaño de segmento es 32 bytes. En
este computador vamos a ejecutar un proceso cuya imagen de memoria tiene 4 segmentos. En
un determinado instante, la tabla de segmentos indica la siguiente información:
Nº de Segmento Dirección Base Tamaño (bytes)
1 56 = 3816 8
3 16 = 1016 32 = 2016
El segmento 0 tiene un tamaño de 16 bytes y el segmento 2 un tamaño de 24 bytes.
Se realiza la siguiente secuencia de referencias virtuales a memoria: 3016, 0C16, 6E16, 4F16 y 2716.
Teniendo en cuenta que no hay más procesos en el sistema, se pide:
a) ¿Podemos asegurar un formato de dirección virtual y de dirección física? Justificar la
respuesta indicando una propuesta para cada caso. (0.5p)
b) Indicar (con la mayor claridad posible) el contenido de las tablas que se utilizan para
realizar la traducción dinámica de direcciones mediante traducción directa, indicando
además cuándo hay que actualizar cada una de ellas, y el contenido de las mismas antes
de realizar los accesos a memoria. (0.25p)
c) Calcular las direcciones reales correspondientes. Indicar el contenido de las tablas y
estructuras de datos utilizadas en el apartado mientras se ejecuta el proceso. (1p)
d) Calcular la tasa de aciertos de la secuencia de referencias citada. (0.25p)
SOLUCIÓN:
a) Por un lado, como la memoria es de 64 bytes, para direccionarla necesitaremos de 64 = 26, 6
bits para la dirección física de la memoria.
De todas formas, con la información del ejercicio, sólo podemos asegurar un mínimo de bits para
el segmento, que sería 2, pero no una cantidad fija, pues no nos proporciona en ningún lado del
enunciado el número de segmentos máximos a direccionar por los procesos.
Nombre
Seg. 3
Libre 48
56
Seg. 1 64
Memoria
principal
0
Seg. 0
16
Seg. 2
Libre 40
56
Seg. 1 64
núm.aciertos 2
d) Tasa de aciertos = =
núm.accesos 5
3 (2,5 puntos) Escoja y resuelva uno de los dos problemas de concurrencia que se
describen a continuación.
OPCION A. Implemente un monitor que resuelva el primer problema de los lectores y escritores
(prioridad para los lectores, posible inanición de los escritores). La solución deberá utilizar UNA
SOLA variable condición.
Suponga una semántica Mesa. Si lo prefiere, puede utilizar la operación Broadcast().
El monitor deberá tener esta especificación:
monitor BaseDatos
{
public abreLectura (); // cuando un lector quiere empezar a leer
public cierraLectura (); // cuando un lector termina de leer
public abreEscritura (); // cuando un escritor quiere empezar a escribir
public cierraEscritura (); // cuando un escritor termina de escribir
}
NOTA: Sólo hay que implementar las operaciones del monitor, no hay que implementar los
procesos lectores y escritores.
Esta es una posible solución con una sola cola para lectores y escritores.
monitor BaseDatos
{
int lectores = 0;
bool escribiendo = false;
Condition cola;
Nombre
public abreLectura () {
while ( escribiendo ) {
cola.Wait();
}
lectores++;
}
public cierraLectura () {
lectores--;
cola.Signal();
}
public abreEscritura () {
while ( escribiendo || lectores>0 ) {
cola.Wait();
}
escribiendo = true;
}
public cierraEscritura () {
escribiendo = false;
cola.Broadcast();
}
}
OPCION B. Vamos a simular un conjunto de N procesos que juegan al famoso juego adolescente-
alcohólico del «marcianito». En este juego, un grupo de personas se reúnen en círculo; cada una tiene
un número entre 1 y N. El número 1 agita sus dos manos al lado de su cabeza al grito de «marcianito
número 1 llamando a marcianito número XXX», a lo que la persona con el número XXX debe
contestar con un mensaje similar «marcianito número XXX llamando a marcianito número YYY», y
así hasta que alguien se despiste.
Se trata de hacer una simulación del sistema usando semáforos, en la que cada proceso i tendrá la
siguiente estructura (i será un número entre 1 y N):
while (true) {
marcianito ( i, random(1..N) );
}
La rutina marcianito(i,j) debe funcionar así: el proceso i espera a que alguien le ceda el turno; una vez
que le han cedido el turno, imprime por pantalla «marcianito número i llamando a marcianito número
j». Y a continuación, cede el turno al proceso j, que hasta ese momento habrá estado bloqueado
dentro de la rutina marcianito(j,otro_proceso).
Además, el marcianito número 1 es el que arranca el sistema. Es decir, que en su primera iteración, el
proceso 1 no debe esperar a que nadie le ceda el turno.
El problema es muy sencillo de resolver. Cada proceso tiene asociado un semáforo inicializado a
cero en el que se bloquea cada vez que se ejecuta la rutina marcianito. Cuando alguien le cede el
turno, se invoca una operación V() sobre ese semáforo.
El semáforo del proceso 1 se inicializa a uno, para que pueda empezar a caminar sin que nadie le
avise.
// El marcianito i esperará en el semáforo turno[i]
// espera[1] está inicializado a 1, para que el marcianito 1
// pueda iniciar su ejecución sin esperar por nadie
espera : array [1..N] of Semáforo := { 1=>1, others=>0 };
marcianito (i,j)
{
P( espera[i] );
print "marcianito número " + i + "llamando a marcianito número " + j;
V( espera[j] );
}
Calificación:
Sistemas Operativos 3
Examen Parcial, 29 de abril de 2006 4
5
Nombre Titulación
SOLUCIONES
Dispone de tres horas para realizar el examen
1/8
7.Un sistema operativo distribuido
a) permite gestionar recursos dispersos por medio de una máquina central que controle
al resto
b) sólo tiene sentido si el sistema consta de máquinas heterogéneas
c) permite la ejecución de un servicio en una máquina diferente a aquélla donde fue
solicitado
d) todas las anteriores son ciertas
8.¿ Cuál de estos sistemas informáticos no se puede dar ?
a) un sistema monoprogramado por lotes multiusuario.
b) un sistema multiprogramado por lotes monousuario.
c) un sistema monoprogramado de tiempo compartido multiusuario.
d) un sistema multiprogramado de tiempo compartido monousuario.
9.Para garantizar la integridad y la protección de un sistema informático, estas funciones han
de estar necesariamente implementadas en circuitería:
a) temporizador (timer) del sistema
b) guardar en la pila el estado del procesador
c) sistema de ficheros
d) acceso directo a memoria
10.Un sistema operativo nunca...
a) pretende simplificar las tareas del usuario
b) ha de disminuir la capacidad ofrecida por los recursos del hardware
c) permite utilizar directamente los periféricos
d) realiza trabajo productivo para el usuario
11.El modo dual de operación significa o implica que
a) no se puede acceder a la memoria del sistema operativo
b) el sistema protege los ficheros de distintos usuarios
c) determinadas operaciones han de ser privilegiadas
d) se genera una excepción siempre que se pretende acceder a los datos de otro usuario
12. La técnica de buffering permite que:
a) Un proceso no espere debido a que un recurso no compartido esté asignado a otro
proceso.
b) Un proceso nunca espere debido a al lentitud de los dispositivos de E/S.
c) Se solapen operaciones de CPU de un proceso con operaciones de E/S de otro
proceso.
d) Todas las afirmaciones anteriores son falsas.
13. La independencia del dispositivo significa o implica que...
a) el usuario no debe conocer características propias de cada clase de dispositivo.
b) el juego de caracteres empleados por una terminal de caracteres ha de ser ASCII.
c) los dispositivos deberían tener independencia de los procesos de usuario.
d) los procesos de usuario deberían trabajar indirectamente con los dispositivos.
14.¿Con cuál de las siguientes afirmaciones te quedarías?
a) El diseño de un S.O. siguiendo una estructura monolítica permite que se pueda
realizar un mantenimiento y depuración sencillos del mismo.
b) En general, el diseño por capas tiende a ser menos eficiente que el monolítico.
c) El modelo cliente-servidor es equivalente a un sistema que sigue el enfoque
jerárquico donde las capas pueden cambiar su nivel en la jerarquía.
d) El enfoque micronúcleo tiene como dos de sus mejores virtudes la portabilidad y el
menor tamaño del sistema operativo.
15.El intérprete de órdenes:
a) Es un programa del sistema y constituye la única forma de solicitar servicios al SO
b) Ejecuta las órdenes indicadas por el usuario y para ello hace uso a su vez de las
llamadas al sistema
c) Al ser un programa del sistema, no necesita realizar llamadas al sistema
d) Siempre forma parte del núcleo del sistema operativo
2/8
Nombre
25 18 P1 4 3 2 1 0 -1 -2
11 7 P2 3→2 2 1 0 0
12 7 P3 2→1 1 0 -1 -1
10 6 P4 1→0 0 -1 -2 -2
16 10 P5 4→3 2 1 0
14,8 9,6
u.t. u.t.
3/8
Para el problema planteado, existen dos alternativas más, también válidas.
Alternativa2: (Primero se reevalúan las prioridades y luego entra el proceso en la cola
de preparados). En este caso hay dos variantes: en el instante 15, existen
dos procesos con la misma prioridad y el mismo tiempo de espera en
CPU, así que tenemos dos alternativas.
Altenativa2-a: Elegimos primero el proceso P3.
25 18 P1 5 4 3 2 1 0 -1
8 4 P2 3 2 1
9 4 P3 2 1 0
10 6 P4 1 0 --1
16 10 P5 4 3 2 1 0
13,6 8,4
u.t. u.t.
25 18 P1 5 4 3 2 1 0 -1
8 4 P2 3 2 1 1
-1
12 7 P3 2 1 0
10 6 P4 0 0 -1
16 10 P5 4 3 2 1 0
14,2 9
u.t. u.t.
El número de unidades de tiempo que la CPU está ociosa (cuadros sombreados) será
de 7. Para minimizarlo podríamos proponer que el planificador actuara también cuando
un proceso acaba totalmente, de forma que no queden instantes en los que la CPU no
trabajase.
3 (2.5 puntos) Responder y justificar brevemente cada una de las siguientes cuestiones:
menos tiempo del procesador hayan consumido. Proponer una política que se ajuste
a lo solicitado, especificando sus principios de funcionamiento.
Una posible política sería una variante del Round-Robin que consistiría
en ordenar la cola de unidades de ejecución en estado listo utilizando
como criterio de ordenación el tiempo del procesador ya consumido. A
igual tiempo consumido, entonces una ordenación FIFO, o sea, por
tiempo de llegada a la cola.
c) Menciona cinco ejemplos de recursos lógicos o virtuales que
[Conceptos Generales]
ofrece el SO y que no existen físicamente en el hardware.
Archivos, carpetas o directorios, memoria virtual, procesadores
virtuales (lo que se consigue con la multiprogramación),
volúmenes lógicos, cuentas de usuario, semáforos... casi
cualquier recurso que ofrece el s.o. es un recurso virtual.
d) [Conceptos Generales] ¿En qué consiste la estructura de los sistemas operativos
por capas? ¿Qué ventajas y desventajas tienen? Pon un ejemplo de algún
sistema que utilice esta estructura, señalando las distintas capas que lo
componen.
La estructura por capas de un sistema operativo consiste en la
descomposición en varios estratos (niveles), cada uno de ellos
construidos sobre capas inferiores. La capa inferior (capa 0) es el
hardware; la más alta (capa N) es la interfaz con el usuario.
La principal ventaja es la modularidad. Las capas se seleccionan de tal
manera que cada una utilice funciones (operaciones) y servicios
exclusivamente de capas de niveles inferiores. Este enfoque simplifica
la depuración y la verificación del sistema.
La principal desventaja radica en la definición apropiada de las
diferentes capas. Dado que cada nivel sólo puede usar los servicios de
los niveles inferiores, es necesario realizar una planificación cuidadosa.
Además, las implementaciones por niveles tienden a ser menos
eficientes que otros tipos de implementación. Esto es debido a que el
sistema pierde tiempo en la comunicación entre las capas pertinentes.
Ejemplo: Sistema THE con seis niveles: L5: programas, L4: buffering,
L3: consola del operador, L2: gestión de memoria paginada, L1:
planificación de procesos, L0: hardware.
e) [Conceptos Generales] ¿Definir e indicar las diferencias entre los sistemas
fuertemente acoplados y los sistemas débilmente acoplados.
Los sistemas débilmente acoplados son sistemas de procesadores que
no comparten memoria o reloj. En su lugar, cada procesador tiene su
propia memoria local. Los procesadores se comunican entre ellos
mediante varias líneas de comunicación, como buses de alta velocidad
o líneas Telefónicas. Se les llaman también sistemas distribuidos.
Los sistemas fuertemente acoplados son sistemas multiprocesadores
que tienen más de un procesador, compartiendo el bus, el reloj y en
ocasiones la memoria y periféricos.
5/8
4 (1,5 puntos) En una fábrica se tienen dos procesos que modelan una
[Concurrencia]
planta embotelladora de bebidas, y que trabajan en paralelo:
Un proceso "Embotellador" se encarga de preparar botellas de un litro.
•
Otro proceso "Empaquetador" se encarga de empaquetar y reponer las cajas donde se van
•
colocando las botellas.
Cada vez que el embotellador prepara una botella, ésta se coloca en una caja, que tiene una
capacidad de 10 litros. Si al colocar la botella, la caja queda llena, se envía una señal al
empaquetador, que toma la caja, la sella y la guarda en un almacén. El empaquetador deposita una
nueva caja de 10 litros, totalmente vacía. Mientras el empaquetador está haciendo su labor, el
embotellador no puede colocar sus botellas, ya que en esos momentos no hay una caja disponible.
Encontrar una solución basada en semáforos que sincronice el problema de concurrencia citado.
Semáforo empaqueta(0);
Semáforo embotella(0);
int litros = 10;
Embotellador () Empaquetador ()
{ {
loop { loop {
... prepara una botella empaqueta.P();
Sección crítica
número[i] := 0;
Sección restante
Until false
6/8
Nombre
Siendo:
N: número de procesos que intervienen en el problema de sección crítica
i: indica el proceso que quiere entrar en la sección crítica
mín(v0, v1, …, vn) : función que devuelve el valor mínimo
(a,b) < (c,d) : devuelve true si se cumple a<c o ((a=c) and (b<d)), en caso contrario
devuelve false;
Esto puede verse con más claridad si reducimos el problema a N=2 procesos. El
código de los dos procesos quedaría como sigue:
Proceso 0. Proceso 1.
elección[0] := true elección[1] := true
número[0] := 1 número[1] := 1
elección[0] := false elección[1] := false
while elección[1] do no-operar; while elección[0] do no-operar;
Sección Crítica while número[0]==1 do no-operar;
Sección Crítica
número[0] := 0 numero[1] := 0
Sección Restante Sección Restante
7/8
Puede verse que el proceso 0 no tiene en cuenta al proceso 1 para entrar en sección
crítica (sólo se podría bloquear brevemente mientras elección[1] sea cierto, cosa que
sólo ocurre fugazmente, mientras el proceso 1 está fijando el valor de número[1]). En
otras palabras, el proceso 0 entra en la sección crítica cuando quiere, incluso si el
proceso 1 está dentro.
Progreso. Si la cumple ya que, por un lado, sólo los que quieren entrar en la sección
crítica influyen en la elección de quién entra (tendrán sus elementos de número
asociados a valores distinto de cero), y por otro lado, la elección siempre se realiza en
un tiempo finito (en caso de existir varios con un mismo valor de número, entonces
entra el que posea un menor identificador de proceso).
Espera limitada. No la cumple ya que existe la posibilidad de que varios procesos
posean un mismo valor de número debido a la fórmula empleada para su obtención
(que no tiene en cuenta el orden de petición). De hecho, los únicos valores de número
son 0 ó 1. Si esto ocurriese siempre entraría aquél con un identificador menor, por
tanto, se podrían producir un “castigo” a aquellos procesos que posean identificadores
mayores.
* * * * *
8/8
Calificación
1
2
Nombre Titulación
SOLUCIONES
1 (7.5 puntos) Test. En cada uno de los siguientes apartados, señale cuál opción es
correcta. En caso de que existan varias opciones ciertas, se considerará como correcta la
más completa o precisa. Las preguntas no contestadas no puntúan; las contestadas
correctamente puntúan 0,5 puntos y las contestadas erróneamente penalizan 0,25 puntos.
Señale sus respuestas rodeando con un círculo la opción correcta. Si se equivoca, tache la
respuesta incorrecta y rodee la opción que considere correcta. Escriba con tinta. Las
preguntas respondidas con lápiz o con varios círculos no tachados se considerarán no
contestadas.
6.¿Cuál de las siguientes afirmaciones es falsa en un sistema multiprogramado con una única
CPU?
a) Se pueden ejecutar N procesos concurrentemente.
b) Es posible que sea un sistema de tiempo compartido y además multiusuario.
c) Es posible que sea un sistema de tiempo compartido en el que se pueden ejecutar
N procesos en paralelo.
d) Podría ser un sistema multiprogramado y de tiempo compartido pero monousuario.
13.El siguiente código pretende gestionar la exclusión mutua en el acceso a una sección
crítica, usando la instrucción atómica swap(a,b) (“bloqueo” es una variable global
booleana inicializada a “false” y “flag” es una variable booleana local a cada proceso).
flag := true;
repeat
swap (bloqueo, flag);
until flag = false;
/* Sección crítica */
bloqueo := false;
La solución propuesta:
a) Cumple las propiedades de exclusión mutua, progreso y espera limitada.
b) Cumple la propiedad de exclusión mutua pero padece el problema de la espera
activa.
c) Cumple las propiedades de exclusión mutua y progreso pero presenta el inconveniente
de que sólo es válida para dos procesos.
d) Cumple la propiedad de exclusión mutua y progreso pero padece el problema de la
espera activa.
a) FCFS
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
cpu p1 p1 p2 p2 p2 p3 p1 p2 p2 p3 p3 p1 p1 p2 p3 p3
disco p1 p2 p3 p3
impresora p1 p1 p2 p3
espera P1 x x x x x
espera P2 x x x
x x
espera P3 x x x x x x
cola CPU p2 p3 p3 p3 p1 p2 p3 p1 p1 p2 p2 p3
p1 p1 p2 p3
b) RR, q=2
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
cpu p1 p1 p2 p2 p3 p1 p2 p3 p3 p2 p2 p1 p1 p3 p3 p2
disco p1 p3 p3 p2
impresora p1 p1 p3 p2
espera P1 x x x x x
espera P2 x x x x x x x
espera P3 x x x x x
cola CPU p2 p2 p3 p1 p2 p2 p1 p1 p3 p3 p2 p2
p3 p1 p2 p1 p3 p2
1
2
3
SISTEMAS OPERATIVOS - SEGUNDA PARTE
4
Examen Convocatoria Ordinaria, 22 de junio de 2006
Nombre Titulación
SOLUCIONES
1 (2.5 puntos) Supongamos que tenemos una máquina con 16 MB de memoria principal y
un esquema de gestión de memoria virtual paginado con páginas de 4 KB. Un proceso
produce la siguiente secuencia de accesos a direcciones de memoria (mostradas aquí en
hexadecimal):
02D4B8, 02D4B9, 02D4EB, 02D4EB, 02D86F, F0B621, F0B815, F0D963, F0B832,
F0BA23, D9D6C3, D9B1A7, D9B1A1, F0BA25, 02D4C7, 628A31, F0B328, D9B325,
D73425.
El sistema operativo asigna al proceso 4 marcos de memoria principal. Se pide:
a) Dar la cadena de referencia de las páginas accedidas por el proceso. (1 p)
b) Si el sistema operativo utiliza 4 marcos de memoria principal, describir el
comportamiento del gestor de memoria utilizando cada uno de los siguientes
algoritmos de reemplazo de páginas, indicando cuántos fallos de página se
producen con cada algoritmo:
b.1) Algoritmo FIFO. (0.75 p)
b.2) Algoritmo de la segunda oportunidad. (0.75 p)
Solución:
4 KB = 212 bytes, por lo que se necesitan 12 bits para direccionar un byte de una
página.
página desplazamiento
12 bits 12 bits
página desplazamiento
12 bits 12 bits
hex hex hex hex hex hex
0 2 D 4 B 8
b.1) FIFO
02D F0B F0D F0B D9D D9B F0B 02D 628 F0B D9B D73
02D 02D 02D 02D F0B F0D D9D D9B 02D
F0B F0B F0B F0D D9D D9B 02D 628
F0D F0D D9D D9B 02D 628 F0B
D9D D9B 02D 628 F0B D73
F F F F F F F F F
02D F0B F0D F0B D9D D9B F0B 02D 628 F0B D9B D73
02D1 02D1 02D1 02D1 D9B1 D9B1 D9B1 D9B1 D9B1 D731
F0B1 F0B1 F0B1 F0B0 F0B1 F0B0 F0B0 F0B1 F0B0
F0D1 F0D1 F0D0 F0D0 02D1 02D1 02D1 02D0
D9D1 D9D0 D9D0 D9D0 6281 6281 6280
F F F F F F F F
2 (2.5 puntos) Considérese el siguiente estado seguro de un sistema donde existen cinco
procesos (A, B, C, D, E) y cuatro recursos (r1, r2, r3, r4) con un total, respectivamente, de
(6, 7, 12, 12) ejemplares:
Se pide:
a) Si el proceso C solicita un recurso del tipo r1 y otro del tipo r2, ¿cuál sería la
respuesta del sistema si sabemos que utiliza el algoritmo del banquero para tomar
su decisión? (0.75 p)
b) A continuación, el proceso B termina. ¿Qué acciones tomaría el sistema? Una vez
realizadas dichas acciones, ¿quedaría el sistema en un estado seguro? (1.75 p)
a) A partir de los datos del enunciado, teniendo en cuenta los recursos asignados de
cada tipo (4,6,12,11) y los ejemplares totales de cada tipo (6,7,12,12), podemos
determinar el número de ejemplares disponibles (2,1,0,1).
Por tanto el sistema quedaría en un estado seguro y la solicitud del proceso C sería
atendida en este momento, quedando dicho proceso listo para ejecución cuando el
planificador lo decida.
ControlParque:: ~ ControlParque () {
delete espera_residentes;
delete espera_noresidentes;
}
ControlParque:: Entra_Residente () {
if ( nper == aforo ) {
nresbloq++;
espera_residentes->wait();
nresbloq--;
}
nper++;
}
ControlParque:: Entra_NoResidente () {
if (nper == aforo) {
nnresbloq++;
espera_noresidentes->wait();
nnresbloq--;
}
nper++;
}
ControlParque:: Salir () {
nper--;
if (nresbloq>0)
espera_residentes->signal();
else if (nnresbloq>0)
espera_noresidentes->signal();
}
ControlParque miParque(N);
Código de las personas residentes {
…
// Sección de entrada al parque
miParque.Entra_Residente();
… //Jugar en el parque
// Sección de salida del parque
miParque.Salir();
}
…
// Sección de entrada al parque
miParque.Entra_NoResidente();
… //Jugar en el parque
// Sección de salida del parque
miParque.Salir();
}
4 (2.5 puntos) Responder cada una de las siguientes cuestiones sobre ficheros:
a) Supongamos que tenemos un sistema de archivos que trabaja con bloques de
datos de 1 kilobyte y que utiliza una FAT en la que cada enlace ocupa 24 bits.
¿Cuál es el tamaño máximo que podría tener un fichero en este sistema?
Si cada enlace de la FAT ocupa 24 bits, se admiten 224 valores posibles. Si todos los
valores representan direcciones de bloque, tenemos que se pueden referenciar como
máximo 224 bloques de 1 kilobyte, lo que equivale a un fichero que ocupa 224 × 210 =
234 bytes. Es decir, 16 gigabytes.
Nombre
En realidad, el tamaño máximo permitido será algo menor, porque algunos de los
valores en la entrada de la FAT se usarán para indicar otras circunstancias: final de
fichero, bloque dañado, etc.
Sistemas Operativos 2
Examen de la convocatoria de junio, 7 de julio 3
de 2006 4
Parte I: Conceptos generales sobre sistemas 5
operativos 6
7
8
9
10
Nombre Titulación
1 (1,5 puntos, cada cuestión vale lo mismo) Cuestiones. Defina cada uno
de los siguientes términos utilizando 5 líneas como máximo.
1. Monitor residente
Conjunto de módulos software que realizaban tareas comunes (manejo de dispositivos
de E/S, control automático de tareas, control de errores, control del tiempo de
ejecución de tareas) con el objeto de que fueran más eficiente los primeros sistemas
de procesamiento por lotes. Se considera el primer caso de sistema operativo en la
historia de la informática.
2. Procesamiento asimétrico
Modelo de procesamiento con múltiples procesadores, en el que a cada procesador se
le asigna una tarea específica, existiendo un procesador maestro que controla el
sistema y es el responsable de asignar tareas al resto de procesadores.
3. Espera activa
Espera en la que incurren los programas cuando necesitan conocer la ocurrencia de
un evento en el sistema y lo hacen interrogando permanentemente al procesador, de
esta forma y mientras no ocurra el evento, el programa no avanza y hace que el
procesador esté ocupado permanentemente.
4. Confiabilidad
Propiedad característica de los sistemas distribuidos, consistente en tener la
capacidad de sustituir los recursos proporcionados por una de las estaciones del
sistema, debido a un fallo de esta, por los de de otra.
5. Spooling
Técnica de procesamiento de operaciones de E/S que permite que equipos de E/S de
naturaleza no compartida sean tratados por los programas como equipos compartidos.
Esto se consigue utilizando espacio en disco como almacén intermedio de los datos de
E/S. Con esta técnica se permite solapar operaciones de E/S de una tarea con
operaciones de CPU de otra.
1/10
6. Vector de interrupciones
Estructura de datos del núcleo del sistema operativo, que se utiliza para la gestión de
interrupciones. Cada elemento del vector está asociada a una interrupción del sistema
y contiene todos los elementos necesarios para su tratamiento: estado de la
interrupción y dirección a la rutina de tratamiento.
7. Multiprogramación
Modo de procesamiento en los sistemas informáticos consistente en tener varios
programas en memoria que se ejecutan compartiendo los recursos del sistema y
soportando la ejecución concurrente de los programas.
2/10
Universidad de Las Palmas de Gran Canaria
Calificación
Facultad de Informática
1
Sistemas Operativos 2
Examen de la convocatoria de junio, 7 de julio
de 2006
Parte II: Procesos
Nombre Titulación
1. (1,5) Problema.
Sea la siguiente carga de procesos a ejecutar:
Proceso Duración de ráfaga del Prioridad Tiempo
procesador de llegada
0 8 1 0
1 5 3 1
2 2 1 2
3 7 2 3
Obtenga el diagrama de Gant y tiempos medios de espera, al ejecutar cada una de las
siguientes políticas:
a. Planificación por prioridades expulsivo (con apropiación). La prioridad más alta es
la que posee un número de prioridad menor.
b. Primero el más corto expulsivo
Diagramas de Gant
Planificación por prioridades
0 0 0 0 0 0 0 0 2 2 3 3 3 3 3 3 3 1 1 1 1 1
2. (1 punto) Cuestión
Suponga un sistema que planifica el procesador con una política de Round-Robin, entonces
si se produce una interrupción indicando que una operación de entrada/salida ha finalizado
¿cuántos procesos podrán cambiar de estado y en qué consistirán estos cambios de estado?
3/10
Cambiarán dos procesos de estado. Concretamente, el proceso que se ejecuta se
detendría para que se trate la finalización de la operación de entrada salida
(tratamiento de la interrupción asociada), por lo tanto, pasaría de estado “en ejecución”
a estado de “listo”. El otro proceso que cambiaría de estado sería el proceso que
solicitó la operación de entrada/salida, éste cambiaría de estado “bloqueado” a “listo”.
4/10
Universidad de Las Palmas de Gran Canaria
Facultad de Informática
Calificación
1
Sistemas Operativos
Examen de la convocatoria de junio, 7 de julio 2
de 2006 3
Parte III: Concurrencia e interbloqueo
Nombre Titulación
1. (1,5) Problema.
Utilizando regiones críticas condiciones escriba una solución al problema de los filósofos
comensales que garantice que no se produce interbloqueo.
var Filósofo: shared record
Palillo: array [0 .. 4] of bolean;
// Inicialmente todos a “true”
end;
Filósofo i come
2. (1 punto) Cuestión
¿Explique la diferencia entre las variables condición tipo Hoare y tipo Mesa?
La diferencia radica en que una operación de signal sobre una variable tipo
condición, según el estilo de Hoare, implica el bloqueo del proceso invocador, en el
caso de que existan proceso bloqueados por haber realizado previamente una
operación wait, además el proceso despertado toma el control del monitor. En
cambio en el estilo de Mesa, el proceso invocador no se bloquea y el proceso que
despierta, por haber hecho ejecutado una operación de wait previamente sobre la
variable condición, debe competir nuevamente por el control del monitor.
5/10
3. (1 punto) Problema
Si el sistema utiliza el algoritmo del banquero, ¿el estado actual es seguro o inseguro?
Justifique su respuesta.
6/10
Universidad de Las Palmas de Gran Canaria
Facultad de Informática
Calificación
1
Sistemas Operativos
Examen de la convocatoria de junio, 7 de julio 2
de 2006
Parte IV: Memoria y archivos
Nombre Titulación
4. (1,5) Problema.
Suponga un sistema con memoria virtual paginada. Describa de forma algorítmica el
proceso de traducción de una dirección lógica a una física. En su descripción deberá
especificar los recursos físicos requeridos, las estructuras de control empleadas,
especificando los campos que las componen y su significado, y las políticas que se utilizan.
En un sistema con memoria paginada y con memoria virtual, se requieren los
siguientes recursos:
Hardware
TLBs. Tabla de registros asociativo que tiene por finalidad acelerar el proceso de
traducción de direcciones. En casa registro se representa una página y el marco en
memoria principal que la alberga. Existe un repertorio de TLBs por procesador.
Registro que contiene la dirección base de la tabla de páginas del programa que se
ejecuta (RBTP)
Registro límite de la tabla de página (RLTP). Este registro se utiliza para verificar que
los números de pagina existentes en las direcciones no van más allá de las páginas
existentes en el espacio de direcciones lógicas.
Área de intercambio en disco. Esta área es una zona de disco estructurada en bloques
de igual tamaño al de una página y cada bloque contiene a una página de un
programa en ejecución.
Software:
Tabla de páginas (TP). Se trata de una tabla que representa el estado de cada una de
las páginas que forman parte del espacio lógico de direcciones del programa. Por
tanto, cada programa que se ejecuta posee una. Cada entrada está asociada a una de
las páginas del programa y posee los al menos los siguientes campos:
Marco que la contiene.(M)
Bit de validez que indica si la página está en memoria o no lo está. (V)
Bit de modificación, que indica si la página ha sido modificada desde que se cargó en
memoria. (W)
Franja de página que contiene la ubicación de la página en el área de intercambio del
sistema. (F)
Tabla de marcos de página. Se trata de una única tabla que es manejada por el
sistema operativo con el fin de conocer en todo momento el estado de la memoria
principal, o sea, de los marcos. Existirá una entrada por cada marco de memoria
existente.
7/10
Proceso de traducción
En un sistema paginado, toda dirección posee la siguiente estructura:
Algoritmo:
La dirección física a obtener la llamamos A
Actualizar TLB
Fin del proceso de traducción
Fin si
8/10
// Suponemos que la póliticaca de sustitución es local
Ejecutar política de sustitución que nos elige a una página
víctima Q
TP[Q].V = 0 // página inválida
Si TP[Q].W es igual a 1 Entonces
Salvar la página Q en el bloque TP[Q].F del área de
intercambio
Fin si
5. 1 punto) Problema
Suponga un sistema de ficheros tipo FAT. Describa algorítmicamente como9 se traduce
una dirección de registro lógico de archivo, expresada de la siguiente forma (COMIENZO,
LONGITUD), a una dirección de sistema de archivo. Siendo:
COMIENZO: desplazamiento desde el origen del primer byte del registro
LONGITUD: tamaño expresado en número de bytes
El sistema de archivos tipo FAT utiliza una variante del esquema encadenado de
gestión del espacio de disco para ficheros. Básicamente, esta variante consiste en
agrupar los enlaces de los bloques del sistema de archivos, llamados clusters, en una
estructura con forma de tabla llamada FAT. Esta estructura de datos posee tantas
entradas como cluster existan en el sistema de archivos, de forma que cada entrada
se asocia a un cluster. Los cluster se identifican mediante un número entero mayor o
igual que cero. Por ejemplo, el primer cluster tendrá el identificador 0, el segundo el 1 y
así sucesivamente. El número identificador de un cluster se utiliza como índice en la
tabla FAT, de forma que para recorrer los cluster que pertenecen a un archivo se entra
en la FAT a partir del cluster de comienzo del fichero (que se registra en su entrada de
directorio) y luego se recorre la lista siguiendo los enlaces almacenados en la FAT y
que están asociados a la secuencia de cluster pertenecientes al fichero. Entonces para
obtener el primer cluster relativo que contiene datos del registro, se calcula:
CL0 = Parte Entera(COMIENZO/LC)
Siendo LC la longitud expresada en bytes de un cluster.
Análogamente para obtener el último cluster que contiene bytes del registro, se
calcula:
CL1 = Parte Entera[(COMIENZO+LONGITUD)/LC]
9/10
Y para la posición del último byte del registro en el cluster CL1:
CL1 = Resto[(COMIENZO+LONGITUD)/LC]
Si CL0 es igual a CL1, entonces todos los bytes del registro están en el mismo cluster
y la solución al problema sería:
(Cluster_absoluto,D0,D1)
Si CL0 es distinto de CL1, entonces los bytes del registro se encuentran en varios
cluster. Para obtener el cluster_absoluto se procede de la siguiente manera:
Las solución es (Dir0, D0) para el primer cluster y (Dir1,D1) para el segundo
LONGITUD tamaño expresado en número de bytes.
10/10
Calificación
1
2
3
4
SISTEMAS OPERATIVOS 5
Examen Convocatoria Extraordinaria Especial 6
11 de diciembre de 2006
Nombre Titulación
a) El intérprete de órdenes (command interpreter) puede ser una aplicación independiente (ej.
UNIX), o puede estar implementado dentro del núcleo del sistema operativo (ej.
CP/M). ¿Qué ventajas o inconvenientes observa usted en cada alternativa? (0.5p)
a) Ventajas del intérprete en el núcleo: Dado que es una aplicación de uso
muy frecuente, si se tiene el código en el núcleo, la ejecución de las
aplicaciones puede ser más rápida (no hay que cargarla del disco).
b) Inconvenientes del intérprete en el núcleo: El núcleo crece de tamaño.
Cuando no se está utilizando el intérprete de órdenes, se está ocupando
memoria con código que no se emplea. El sistema es menos flexible, ya
que si quisiéramos cambiar la versión del intérprete de órdenes,
tendríamos que reinstalar el núcleo del s.o.
c) Suponga un sistema que emplea el algoritmo del banquero para evitar caer en una
situación de interbloqueo. En un instante dado y ante unas solicitudes de recursos, el
sistema lanza el algoritmo y detecta que si concede los recursos se encontraría en un
estado inseguro. Si, a pesar de esto, el sistema decide conceder los recursos solicitados,
¿puede afirmarse que el sistema se encuentra en
interbloqueo? (0.5p) Estados inseguros
No necesariamente. El conjunto de estados en
los que podríamos afirmar que el sistema se Estados de
interbloqueo
encuentra en una situación de interbloqueo
constituyen un subconjunto de los estados
inseguros; es decir, un estado de interbloqueo
es un estado inseguro pero no todos los
estados inseguros son estados de interbloqueo
(ver figura).
Estados seguros
1 de 6
d) ¿Con qué finalidad se emplea la técnica de envejecimiento en la planificación del uso
del procesador? (0.5p)
Para evitar el riesgo de inanición existente cuando se lleva a cabo una
planificación por prioridades.
e) Un sistema de memoria virtual ha de escoger a una página víctima. Existen tres páginas
candidatas, que sólo se diferencian en el estado del proceso que las posee: hay una
página cuyo proceso está en estado de ejecución; otra cuyo proceso está en estado de
bloqueo; y el proceso de la tercera página está en estado de preparado. ¿Qué página
sería más recomendable escoger como víctima? (0.75p)
Es conocido que la política óptima consiste en escoger como víctima
aquella página que más tiempo tarde en usarse. De las tres candidatas, la
página que más probablemente tarde en accederse es la del proceso que está
en estado de bloqueo. Las otras dos páginas pertenecen a procesos que muy
probablemente hagan accesos a memoria en un futuro inmediato, mientras que
el proceso bloqueado no hará ningún acceso en tanto persista su situación de
bloqueo. Así que esa es la mejor apuesta.
2 de 6
enum tipo_vehiculo {grande, pequeno};
Monitor Montacarga {
Public:
Montacarga();
~Montacarga();
void Montacarga_Subir( enum tipo_vehiculo vehiculo);
bool Montacarga_Lleno();
Private:
condition: *espera_subir, *espera_bajar;
int: vp, vg; //Cuenta vehiculos grandes (vg) y pequeños (vp)
};
Montacarga:: Montacarga() {
espera_subir = new condition;
espera_bajar = new condition;
vp = 0;
vg = 0;
}
Montacarga:: ~Montacarga() {
delete espera_subir;
delete espera_bajar;
}
Montacarga:: Montacarga_Lleno () {
if (((vp==2) && (vg==1)) || (vp==4))
return true;
else
return false
}
Montacarga:: Montacarga_Subir (tipo_vehiculo vehiculo) {
if (vehiculo == grande) {
while (vp>2)
esperar_subir->wait();
vg=1;
}
else
vp++;
if (Montacarga_Lleno()) {
vp=vg=0;
esperar_bajar->broadcast();
}
else
esperar_bajar->wait();
}
Montacarga mi_montacarga;
Código de los vehiculos {
enum tipo_vehiculo vehiculo;
…
// Vehiculo circulando
mi_montacarga.Montacarga_Subir(vehiculo)
} // Vehiculo circulando
3 de 6
3 (1.5 puntos) Sea la siguiente carga de procesos a ejecutar:
Duración de ráfaga Tiempo
IdProceso Prioridad
del procesador de llegada
0 8 1 0
1 5 3 1
2 2 1 2
3 7 2 3
Obtener el diagrama de Gantt, así como los tiempos medios de espera y de retorno, al
ejecutar cada una de las siguientes políticas:
a. Primer el más corto no expulsivo.
b. Round-Robin con quántum de 3 u.t.
Tiempo de Tiempo de
Proceso
retorno espera
P0 8 0
P1 10-1 10-1
P2 15-2 8-2
P3 22-3 15-3
B) Round-Robin q=3ut.
P0 P0 P0 P1 P1 P1 P2 P2 P3 P3 P3 P0 P0 P0 P1 P1 P3 P3 P3 P0 P0 P3
0 3 6 8 11 14 16 19 22
Tiempo de Tiempo de
Proceso
retorno espera
P0 21 8+5
P1 16-1 3+8-1
P2 8-2 6-2
P3 22-3 8+5+2-3
4 de 6
a) Óptima con 3 marcos:
0 1 2 3 0 1 4 0 1 2 3 4
0 0 0 0 0 2 2
1 1 1 1 1 3
2 3 4 4 4
F F F F F F F
Lo que hace un total de 7 fallos de página.
a) Calcular, para cada bloque, cuántos bytes se podrán asignar a datos y cuántos a
punteros a otros bloques. (0.75p)
El disco contiene un total de 30000K bytes, o lo que es lo mismo : 30000 * 1024 bytes
= 30.720.000 bytes
Como los bloques son de 512 bytes, el número de bloques total en el disco es =
30.720.000/512 = 60000 bloques. Como 215 = 32.768 y 216 = 65.536, necesitaremos 16
bits para poder direccionar todos los bloques, o sea 2 bytes. Esto supone que dentro
de un bloque de 512 bytes, 2 bytes serán para los punteros a bloques, y el resto, 510
serán bytes para datos.
5 de 6
c) ¿Qué problema presenta el uso de este tipo de asignación de espacio? ¿Qué método
de asignación lo soluciona? Para este método: ¿Varía el tamaño máximo de los
datos que pueden estar ahora almacenados? ¿Existe pérdida de espacio? Si es así,
calcúlelo. (1p)
El problema más relevante es el tipo de acceso a datos del tipo aleatorio (directo). Así,
para leer el bloque k deben leerse previamente los k-1 para ir accediendo a los
punteros que apuntan al siguiente bloque.
Un tipo de asignación que lo soluciona es el método de asignación indexado. En este
método, el directorio contiene la dirección del bloque donde están los índices a los
bloques de datos del archivo.
Para este tipo de acceso, los bloques no necesitan apuntar a otros bloques,
con lo cual podemos aprovechar todos los 512 bytes de cada bloque para datos. En
nuestro caso, para el archivo examen ocuparía 5 * 512 bytes = 2560 bytes.
La asignación mediante indexación presenta sin embargo pérdida de espacio.
Si la tabla de índices se le asigna un bloque entero, como los índices son de 2 bytes,
el bloque está ocupado por 5 índices x 2 bytes = 10 bytes. Por lo que en el bloque está
desaprovechado : 512 – 10 = 502 bytes para este fichero en concreto.
* * * * *
6 de 6
Universidad de Las Palmas de Gran Canaria
Calificación
Escuela Universitaria de Informática
1
Facultad de Informática
2
Sistemas Operativos 3
Examen Parcial, 7 de mayo de 2005 4
5
Nombre Titulación
SOLUCIONES
Dispone de tres horas para realizar el examen
1 (2,5 puntos) Test. En cada uno de los siguientes apartados, señale cuál opción es
correcta. En caso de que existan varias opciones ciertas, se considerará como correcta la
más completa o precisa. Las preguntas no contestadas no puntúan; las contestadas
erróneamente penalizan un tercio de su valor. Señale sus respuestas rodeando con un
círculo la opción correcta. Si se equivoca, tache la respuesta incorrecta y rodee la opción
que considere correcta. Escriba con tinta. Las preguntas respondidas con lápiz o con varios
círculos no tachados se considerarán no contestadas.
2/7
Nombre
2 (2,5 puntos) A continuación se muestran las demandas futuras de CPU y E/S de un conjunto
de procesos secuenciales que arriban simultáneamente a un ordenador con un solo procesador. En
cada casilla se muestra el tiempo requerido para completar una petición de CPU o E/S, en unidades
de tiempo arbitrarias. Las casillas vacías indican que no hay peticiones futuras.
Por ejemplo, el proceso 3 demanda 2 unidades de tiempo de CPU, luego pedirá 4 unidades de
E/S, tras lo que necesita 1 unidad de tiempo de CPU, atendida la cual finaliza.
CPU E/S CPU E/S CPU
Proceso 1 7 1 6 1 7
Proceso 2 4 4 4 4 4
Proceso 3 2 4 1
Proceso 4 1 7 1 10 2
Obtener el diagrama de Gantt, el tiempo medio de retorno y el tiempo medio de espera al aplicar las
siguientes políticas de planificación:
a) SJF
b) Round-Robin con cuanto igual a 3 unidades de tiempo.
En el caso de dos o más peticiones simultáneas, indique el criterio que ha seguido en la elección.
Considere a la E/S como un recurso compartido de capacidad ilimitada.
3 (2,5 puntos) Resolver el problema del búfer limitado empleando únicamente semáforos
binarios.
class Productor-Consumidor {
Public:
Productor-Consumidor();
~Productor-Consumidor();
void productor( struct registro *dato );
void consumidor( struct registro *dato);
Private:
semaforo: *mutex, *hay_hueco, *nuevo_producto;
integer: huecos_libres, inserto, extraigo;
integer: productores_esperan, consumidores_esperan;
};
Productor-Consumidor:: Productor-Consumidor() {
mutex = new semáforo(1);
hay_hueco = new semáforo(0);
nuevo_producto = new semáforo(0);
huecos_libres = N; // Inicialmente el buffer está vacío;
inserto = 0;
extraigo = 0;
productores_esperan = 0;
consumidores_esperan = 0;
}
3/7
Productor-Consumidor:: ~Productor-Consumidor() {
delete mutex;
delete hay-hueco;
delete nuevo_producto;
}
void productor( struct registro *dato ) {
mutex->espera();
while ( huecos-libres == 0 ) {
productores_esperan++;
mutex->señal();
hay-hueco->espera();
mutex->espera();
productores-esperan--;
}
buffer[inserto] = *dato;
inserto = (inserto+1)%N;
huecos-libres--;
if ( consumidores_esperan > 0 ) nuevo-producto->señal();
mutex->señal();
}
void consumidor( struct registro *dato ) {
mutex->espera()
while ( huecos_libres == N ) {
consumidores_esperan++;
mutex->señal();
nuevo-producto->espera();
mutex->espera();
consumidores_esperan--
}
*dato = buffer[extraigo];
extraigo = (extraigo+1)%N;
huecos-libres++;
if ( productores_esperan > 0 ) hay_hueco->señal();
mutex->señal();
}
Productor-Consumidor buffer;
Código de los productores {
…
// Producir dato
buffer.productor(dato)
}
Código de los consumidores {
buffer.consumidor(dato)
// Consumir dato
…
}
4/7
Nombre
4 (1 punto) Comentar la validez del algoritmo de exclusión mutua del programa siguiente:
int flag1, flag2;
void Proceso_1() void Proceso_2()
{ {
while (true) { { while (true) {
// SECCION NO CRITICA // SECCION NO CRITICA
flag1=0; flag2=0;
while (flag2==0) { while (flag1==0){
flag1=1; flag2=1;
while (flag2==0) while (flag1==0)
NULL; NULL;
flag1=0; flag2=0;
} }
// SECCION CRITICA // SECCION CRITICA
flag1=1; flag2=1;
// SECCION NO CRITICA // SECCION NO CRITICA
} }
} }
6/7
a) SJF
tiempo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
CPU P4 P3 P2 P3 P4 P1 P2 P4 P1 P2 P1
P4 P4 P2 P1
E/S
P3 P2 P1
b) RR, q=3
tiempo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
CPU P1 P2 P3 P4 P1 P2 P3 P1 P1 P4 P2 P1 P2 P1 P4 P1 P2 P1 P2
P3 P2 P4
E/S P4 P1 P2
P1
Cuando termina un proceso una operación de E/S al mismo tiempo que a otro proceso se le cumple su cuanto y a este último aún que faltan ciclos de disfrute de la
CPU, se ha optado por incluir en primer lugar en la cola de preparados al proceso que termina la operación de E/S. En caso de que varios terminen
simultáneamente sus operaciones de E/S se ha cogido al de menor Pi.
CPU ociosa
7/7
Universidad de Las Palmas de Gran Canaria
Escuela Universitaria de Informática Calificación
Sistemas Operativos 1
Examen Convocatoria Ordinaria , 11 de Julio de 2005 2
a
1 PARTE 3
Nombre Titulación
1 (3,5 puntos) Test. En cada uno de los siguientes apartados, señale cuál opción es correcta. En caso de que existan varias
opciones ciertas, se considerará como correcta la más completa o precisa. Las preguntas no contestadas no puntúan; las contestadas
erróneamente penalizan un tercio de su valor. Señale sus respuestas rodeando con un círculo la opción correcta. Si se equivoca, tache la
respuesta incorrecta y rodee la opción que considere correcta. Escriba con tinta. Las preguntas respondidas con lápiz o con varios círculos
no tachados se considerarán no contestadas.
1. Un sistema de interrupciones
a) exige utilizar un vector de interrupciones
b) evita la espera activa por dispositivos
c) protege la memoria donde reside el sistema operativo
d) todas las anteriores son ciertas
2. ¿Cuál de estas técnicas NO tiene como fin solapar la ejecución de instrucciones en CPU con la ejecución de operaciones de
entrada/salida?
a) acceso directo a memoria (DMA)
b) modo dual de operación
c) procesamiento fuera de línea ( off-line)
d) spooling
3. Un sistema operativo distribuido
a) permite gestionar recursos dispersos por medio de una máquina central que controle al resto
b) sólo tiene sentido si el sistema consta de máquinas heterogéneas
c) permite la ejecución de un servicio en una máquina diferente a aquélla donde fue solicitado
d) todas las anteriores son ciertas
4. Sobre planificación de procesos:
a) todos los métodos basados en prioridades tienen riesgo de inanición
b) los métodos multicolas están concebidos para planificar sistemas multiprocesadores
c) el algoritmo FCFS perjudica a los procesos intensivos en CPU
d) los enunciados a, b y c son todos falsos
5. La afirmación de que un sistema operativo es un programa dirigido por eventos implica que
a) responde a interrupciones
b) atiende eventos generados por los periféricos
c) atiende eventos generados por los programas
d) son ciertas todas las anteriores
6. ¿Cuál de estas instrucciones no ha de ser privilegiada?
a) desactivar las interrupciones
b) cambiar de modo usuario a supervisor
c) leer el temporizador
d) solicitar una operación de disco
7. Una llamada al sistema...
a) es atendida por el núcleo, aunque el usuario puede instalar sus propios servicios
b) es un punto de entrada para un servicio del sistema
c) se ejecuta en modo no privilegiado
d) Todas las anteriores son ciertas
8. En el núcleo del sistema operativo reside la implementación de
a) el modo dual de operación
b) las instrucciones privilegiadas
c) los servicios del sistema
d) todas son ciertas
1/4
9. Cuando un proceso intenta acceder a una dirección de memoria fuera de su espacio, se genera
a) una interrupción
b) una excepción
c) un aborto (abort) del proceso
d) la suspensión del proceso
10. Si en un sistema se soporta concurrencia entonces hay
a) multiprogramación
b) paralelismo
c) procesamiento distribuido
d) procesamiento en tiempo real
11. Multiprogramación implica:
a) Tiempo compartido
b) Procesamiento en lote
c) Interactividad
d) Todas las anteriores son falsas
12. Un recurso del sistema operativo es
a) hardware a disposición de los usuarios
b) software a disposición de los usuarios
c) hardware o software a disposición de los usuarios
d) datos que los usuarios pueden utilizar
13. ¿Cuál de estas combinaciones no se puede dar?
a) concurrencia sin tiempo compartido
b) tiempo compartido sin concurrencia
c) tiempo compartido sin paralelismo
d) paralelismo sin tiempo compartido
14. Para resolver el problema de la exclusión mutua, puede emplearse una variable global turno con el identificador del proceso que
tiene derecho a entrar en la sección crítica. Cada vez que un proceso sale de su S.C., cambia el valor de turno al identificador de otro
proceso. Esta solución:
a) es correcta
b) no cumple la propiedad de exclusión mutua
c) no cumple la propiedad de progreso
d) no cumple la propiedad de independencia de la arquitectura
15. El bloque de control de proceso...
a) realiza los cambios de contexto de un proceso
b) almacena los registros del proceso
c) controla el tiempo que un proceso está bloqueado o bien en ejecución
d) todas las anteriores son ciertas
16. El llamado efecto convoy...
a) consiste en una cola de procesos interactivos que compiten con un proceso intensivo en entrada/salida.
b) ocasiona el solape continuado de actividades de E/S con actividades de CPU.
c) puede corregirse por completo con técnicas expulsivas (preemptive).
d) es un problema específico de los métodos multicolas sin realimentación.
17. Un semáforo tiene actualmente el valor 2. Si se ejecuta una operación wait o P sobre él, ¿qué sucederá?
a) El proceso que ejecuta la operación se bloquea hasta que otro ejecute una operación signal o V.
b) Tras hacer la operación, el proceso continuará adelante sin bloquearse.
c) El proceso continuará adelante sin bloquearse, y si previamente existían procesos bloqueados a causa del semáforo, se desbloqueará uno de
ellos.
d) Un semáforo jamás podrá tener el valor 2, si su valor inicial era 0 (cero) y se ha operado correctamente con él.
18. El problema de la sección crítica aparece porque
a) existen sistemas de memoria compartida aparte de los de paso de mensajes
b) la espera activa es insuficiente para resolver la exclusión mutua de procesos concurrentes
c) la ejecución de porciones de código del sistema operativo accediendo a tablas protegidas ha de efectuarse en exclusión mutua
d) varios procesos concurrentes pueden acceder a un mismo conjunto de datos
19. En un sistema multihilo
a) un proceso pesado puede tener varios hilos con distintos espacios de memoria
b) un proceso pesado tiene uno o más hilos con distintos conjuntos de registros
c) por lo general, el tiempo de cambio de contexto es mayor entre hilos que entre procesos pesados
d) dos hilos de un mismo usuario comparten el mismo espacio de memoria
20. Para evitar el acaparamiento de CPU por parte de un único proceso, es condición necesaria que el método de planificación sea
a) basado en prioridades más envejecimiento
b) multicola
c) multicola con realimentación
d) expulsivo (preemptive)
2 (3 puntos) En un sistema informático con un sistema operativo multiproceso se van a lanzar tres procesos,
cuya ejecución si no existieran otros procesos sería la representada en la siguiente figura:
18ms E/S 4ms
Se supone despreciable el tiempo de conmutación de tarea. El tiempo necesario para realizar la operación de
entrada y salida es de 4ms y para simplificar sólo se hace sobre un único dispositivo. En la siguiente tabla se indica
el instante de llegada de cada proceso y el tiempo de CPU requerido.
Obtener el diagrama de Gantt, el tiempo medio de retorno y el tiempo medio de espera al aplicar las siguientes
políticas de planificación:
a) Round-Robin con valor de cuanto de 10ms (1p)
b) Apropiación de prioridades variables basado en un algoritmo que aumenta en una unidad la prioridad de los
procesos que esperan por el recurso por cada unidad de tiempo transcurrida. A mayor valor de prioridad,
mayor prioridad. Cada vez que un proceso ingresa en la cola de espera se le asigna una prioridad inicial de 3,
5 y 6 para los procesos P0, P1 y P2 respectivamente. (1.5p)
3 (4 puntos) Justificar brevemente, y únicamente en el espacio que aparece, cada una de las siguientes
cuestiones:
a) Para que el S.O. funcione correctamente hay que impedir que distintos programas de usuario
puedan realizar libremente ciertas operaciones. ¿Cuál es la problemática a la que se hace referencia?
¿Qué solución proponen los sistemas operativos actuales? ¿en qué se basan? (0.8p)
b) ¿En qué consisten los microkernels? ¿Por qué aparecen? Indicar ventajas y desventajas de su
utilización. (0.8p)
c) ¿Para qué se utilizan las interrupciones? ¿Qué elementos se necesitan para que funcionen? En un
sistema basado en interrupciones, ¿de qué forma puede saberse qué recurso realiza una
interrupción? (0.8p)
d) Para lograr la ejecución concurrente de procesos, es necesario que el sistema operativo sea capaz de
desalojar un proceso de la CPU y asignársela a otro. ¿Cómo se denomina esta operación? ¿De qué
elementos dispone el sistema operativo para realizarlo? Indique para estos elementos sus
componentes y cómo se realiza dicha operación atendiendo a ellos. (0.8p)
2
Sistemas Operativos
Convocatoria Extraordinaria, 12 de diciembre de 2005 3
Nombre Titulación
SOLUCIONES
Dispone de 3 horas para realizar el examen
1 (2,5 puntos) Ciertos sistemas de archivos trabajan con un modelo de «una sola
escritura». Cuando el archivo se crea, se almacena su contenido en disco normalmente. Si el
usuario modifica el archivo, se mantiene intacta la versión antigua del archivo original. El
contenido del archivo modificado se guarda en otro lugar del disco. De esta forma, el
sistema operativo mantiene el histórico de todas las versiones que existieron sobre el
archivo. El usuario puede acceder a las versiones antiguas a través de nombres de archivo
especiales (ej. miArchivo.txt#1, miArchivo.txt#2, etc.).
a) ¿Qué política de asignación de espacio encaja mejor con esta clase de sistemas?
b) ¿Qué ventajas ofrece este sistema? ¿Qué inconvenientes le ves?
En el sistema aquí descrito, una vez que se crea una versión de un fichero, esta
permanece inalterada en el disco. Por tanto, los bloques de datos que se reservan una
vez nunca más se liberan. La política más simple para gestionar el almacenamiento
consiste en ir reservando bloques de forma secuencial. Si N es el primer bloque libre y
se solicitan K bloques, concedemos los bloques del N al N+K-1. El primer bloque libre
pasa a ser N+K. Esta política de asignación de espacio es contigua. No hay que
mantener listas de bloques libres ni ocupados, ya que al no liberarse nunca los
bloques solicitados, los bloques libres siempre forman un grupo compacto.
Las otras políticas de asignación que se han explicado en la asignatura, como la
enlazada y la indexada, son inútiles aquí, dado que no se produce ninguna
fragmentación en el espacio libre ni en el espacio ocupado por los ficheros.
1/5
2 (2,5 puntos) Diseñe una solución al primer problema de los lectores y escritores
(prioridad para los lectores), utilizando MONITORES y añadiendo el requisito de que no
puede haber más de 20 lectores simultáneos.
monitor lectores_escritores
{
int cuentalect = 0;
boolean bloqueo_escritores = false;
condition escr, lect;
const int MAX_LECTORES = 20;
2/5
Nombre
3 (2,5 puntos) Tenemos un sistema de gestión de memoria paginada, con dos niveles de
tablas de páginas. Cada entrada en una tabla de páginas (primaria o secundaria) ocupa
exactamente cuatro bytes. El tamaño de página es de 4 kilobytes. Cada dirección de memoria
tiene 32 bits, que se organizan de la siguiente manera:
Se pide:
a) Realizar el diagrama de Gantt de la ejecución de estos procesos, marcando en cada
instante de tiempo qué parte de código se está ejecutando del proceso
correspondiente (P1_A si es la sección etiquetada como código_A del proceso P1,
P1_X si es la sección etiquetada como código_X del proceso P1, …).
4/5
a)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
P1 A A X X X X X X B B B B
P2 A A Y Y Y Y Y Y B B B B
P3 A A X X X X X X B B B B
Obsérvese que el proceso P2, en la práctica, ha gozado de más prioridad que P3. Esto se debe a que P3, en el instante 11, quedó en espera por
un recurso retenido por P1 (el semáforo X). A su vez, P1 no podía avanzar, porque P2 tenía más prioridad. El resultado ha sido que P2 ha
impedido indirectamente que P3 progrese. Este fenómeno se conoce como inversión de prioridades. Los sistemas operativos modernos aplican
técnicas para impedir que se produzca la inversión de prioridades. En nuestro caso, se podría haber elevado artificialmente la prioridad de P1,
para que se adelantara a P2 y no se bloqueara injustamente a P3.
b)
5/5
Universidad de Las Palmas de Gran Canaria Calificación
1
Escuela Universitaria de Informática 2
Facultad de Informática 3
4
Sistemas Operativos
Convocatoria de Junio, 26 de Junio de 2003
SOLUCIONES
Nombre Titulación
b) ¿En los primeros computadores cada byte de datos de lectura o escritura era
directamente manejado por la CPU, ¿Qué implicaciones tiene esta organización con
respecto a la multiprogramación?
Cuando las operaciones de E/S son manejadas directamente por la CPU, es decir, no
se dispone ni de interrupciones ni de DMA, se requiere la intervención activa del
procesador para transferir los datos entre la memoria y el módulo de E/S. Esto es
especialmente grave en dispositivos de E/S rápidos donde se podría transmitir
información a velocidades cercanas a las de la memoria, lo que en definitiva implica
que el procesador no dispondría de mucho tiempo para la ejecución de procesos en
medio de las operaciones de E/S de un proceso. En cambio, cuando disponemos de
DMA, el procesador sólo se ve involucrado al principio y al final de la transferencia,
estando desocupado en el transcurso de la operación de E/S y pudiendo aprovechar
ese tiempo para ejecutar otro proceso (multiprogramación).
g) ¿Cuáles son las ventajas fundamentales que aportan los hilos frente a los procesos?
La ventaja principal es poder dotar de concurrencia interna a una aplicación, con un
coste reducido. Varios hilos dentro de un proceso pesado comparten el mismo espacio
de memoria (código y datos), así como los recursos que la aplicación tenga asignados.
Por tanto, la comunicación entre hilos es más sencilla y además al ser entidades que
consumen menos recursos que los procesos el cambio de contexto entre hilos es
menos costoso.
Nombre
2 (2,5 puntos) Suponiendo que estamos trabajando con el Nachos, desarrolle una
implementación de las variables de tipo condición, utilizando semáforos, según el estilo de
Mesa.
Entero: contador;
// Para almacenar el número de hilos bloqueados por haber realizado una operación
de “wait” y esperan a que se realice una operación “signal”.
// Su valor inicial es 0
Además todas las variables de tipo condición definidas en un mismo monitor deberán
hacer uso de un semáforo común, que llamaremos “cerrojo”, para garantizar la
exclusión mutua. Asumimos que todo hilo que realice una operación de “wait”, “signal”
o “broadcast” previamente tiene el control de este semáforo.
Operación “wait”:
Sumar 1 a contador;
V(cerrojo):
P(Sbloqueo);
P(cerrojo);
Operación “sígnal”:
“Si” contador > 0 “Entonces”
V(Sbloqueo);
Restar 1 a contador;
“Fin si”
Operación “broadcast”:
“Mientras” contador > 0 “hacer”
V(Sbloqueo);
Restar 1 a contador;
“Fin mientras”
3 (2,5 puntos) Suponga un sistema paginado de memoria virtual en el que una dirección
posee la siguiente estructura: 22 bits para especificar número de página y 10 bits para
desplazamiento de la página. Explique de forma algorítmica el proceso de traducción de
una dirección virtual. En su descripción deberá contemplar el uso de:
o Recursos hardware. Deberá especificar en qué punto se utilizan y para qué.
o Estructuras de datos (tablas y registros). Deberá explicar sus estructuras internas,
así como para qué se utilizan y en qué punto de su descripción.
o Políticas empleadas en caso de ser necesarias su utilización. Deberá especificar
cuándo se utilizan y con que finalidad.
Políticas:
Política de reemplazo de páginas, que decide que página sustituir cuando un
programa referencia a una página y ésta no se encuentra en memoria y además no
existen marcos disponibles.
5.- La dirección final será la suma de la dirección base del marco de página que
contiene a dicha página y el contenido del campo desplazamiento de la dirección
virtual.
Nombre
4 ( 1,5 puntos) Suponga un sistema de archivos que utiliza una política de asignación en
disco indexada a un solo nivel, teniendo la tabla de índices 25 entradas y cada una de ellas
de 4 bytes. Suponga que el tamaño en bytes de un bloque de sistema de ficheros es
DBLOQ. Especifique los pasos e ejecutar y cálculos a realizar para atender a la siguiente
petición de acceso a un registro de fichero de usuario:
Readat( fd, Nreg, buff)
Siendo:
- fd un descriptor de fichero válido que previamente se ha obtenido mediante la
función “open”.
- Nreg el número de registro a acceder, se trata por tanto de un acceso directo a
fichero.
- Buff dirección de memoria dónde depositar el contenido del registro a leer.
LREG es el tamaño de los registros del fichero, cumpliéndose que todos tienen el mismo
tamaño y LREG puede ser menor o igual que DBLOQ.
2.- Obtenemos la posición del primer byte del registro lógico Nreg con respecto al
origen del fichero:
P = Nreg*LREG
3.- Obtenemos el bloque relativo que contiene al primer byte del registro lógico Nreg:
Br = Parte entera (P/DBLOQ)
4.- Obtenemos la posición del primer byte (Desplazamiento) del registro lógico Nreg en
el bloque Br:
D = Resto (P/DBLOQ)
5.- Obtenemos el número de bloque de sistema de archivo del bloque Br a partir del
bloque índice donde se encuentra Nreg:
Bloque1 = INDICE[Br]
7.- La información leída de disco del registro Nreg se guarda en memoria en buff.
Calificación
Universidad de Las Palmas de Gran Canaria 1
2
Escuela Universitaria de Informática
3
Facultad de Informática 4
5
Sistemas Operativos 6
7
Convocatoria de diciembre, 1 de diciembre de 2003
8
9
10
11
Nombre Titulación
3 (0,33 puntos) El intérprete de órdenes es un programa que siempre forma parte del
núcleo del sistema operativo y sirve de interfaz a los programas de usuarios para que estos
puedan realizar llamadas al sistema, ¿Estas de acuerdo con la afirmación anterior? Justifica
tu respuesta.
5 (0,5 puntos) Compare los métodos de asignación contigua, enlazada o indexada desde
el punto de vista de la confiabilidad.
6 (1,5 puntos) Establece las relaciones correspondientes entre los dos grupos de
conceptos que se muestran a continuación y justifícalas:
loop
Sección No Crítica
llave:=true;
loop
swap(cerradura,llave)
cxit when llave=false
cnd loop
Sección Crítica
cerradura:=false;
end loop;
Suponiendo que cerradura esta inicializado a “false”, ¿se trata de una solución
satisfactoria?. Razone la respuesta.
#include<…>
…
Lock cerrojo(“cerrojo”);
Semaphore sem(“sem”,0);
void Hilo1(int which)
{
cerrojo.Acquire();
for(int i=1; i<=3; i++)
{
printf(“Hilo1: Iteración %d”,i);
currentThread->Yield();
}
printf(“Hilo1 terminando….”);
cerrojo.Release();
}
void ThreadTest()
{
Thread *t1=new Thread(“Hilo1”);
Thread *t2=new Thread(“Hilo2”);
t1->Fork(Hilo1,1);
t2->Fork(Hilo2,2);
cerrojo.Acquire();
sem.P();
printf(“Hilo principal terminado…..”);
cerrojo.Release();
}
Calificación
1
Universidad de Las Palmas de Gran Canaria 2
Escuela Universitaria de Informática 3
Facultad de Informática 4
5
Sistemas Operativos
Examen parcial, 11 de mayo de 2002
SOLUCIONES
monitor.reserva (nbytes);
… se ejecuta el proceso …
monitor.devuelve (nbytes);
Implemente las operaciones de este monitor. Para escribir su solución, puede usar un
monitor clásico o bien cerrojos y variables condición.
Nombre
HayEspacio: condition;
N: constant natural := …;
espacio_libre: natural range 0..N := N;
end ReservaMemoria;
const int N = …;
class ReservaMemoria
{
private:
int espacio_libre;
Lock cerrojo;
Condition HayEspacio;
public:
ReservaMemoria ()
: HayEspacio(cerrojo)
{ espacio_libre = N; }
Solución A
P0 P0 P1 P2 P2 P3 P3 P3 P3 P1 P1 P1 P1 P0 P0 P0 P0 P0 P0 P0
Solución B
P0 P0 P1 P2 P2 P1 P1 P1 P1 P3 P3 P3 P3 P0 P0 P0 P0 P0 P0 P0
Solución A:
P0 P0 P0 P1 P1 P1 P2 P2 P0 P0 P0 P3 P3 P3 P1 P1 P0 P0 P0 P3
void Semaphore::P()
{
IntStatus oldLevel = interrupt->SetLevel(IntOff);
while (value == 0) {
queue->Append((void *)currentThread);
currentThread->Sleep();
}
value--;
(void) interrupt->SetLevel(oldLevel);
}
void Semaphore::V()
{
Thread *thread;
IntStatus oldLevel = interrupt->SetLevel(IntOff);
thread = (Thread *)queue->Remove();
if (thread != NULL)
scheduler->ReadyToRun(thread);
value++;
(void) interrupt->SetLevel(oldLevel);
}
Ø El while es necesario, porque cuando el hilo que hizo la P() se recupera del
Sleep(), ingresa en la cola de preparados por el final. Delante de él, en la cola
de preparados, puede haber otros procesos que van a hacer operaciones P()
sobre el mismo semáforo, con lo cual, cuando le llegue el turno de CPU al
proceso despertado, puede ocurrir que el semáforo vuelva a estar a cero. Por
eso tiene que volver a evaluar el valor del semáforo y bloquearse si de nuevo lo
encuentra a cero.
Ø Para sustituir el while por un if, habría que hacer modificaciones en los
algoritmos aquí expuestos.
Calificación
1
Universidad de Las Palmas de Gran Canaria
2
Escuela Universitaria de Informática 3
4
Sistemas Operativos 5
6
Convocatoria de junio, año 2002
21 de junio de 2002
SOLUCIONES
Nombre Titulación
IMPORTANTE: Las seis preguntas suman 12 puntos. Usted deberá descartar al menos
UNA de las preguntas 3, 4, 5 y 6. Es decir, usted puede optar por contestar estos grupos de
preguntas: 12345, 12346, 12356, 12456. No se admitirá ninguna otra combinación.
Dispone de tres horas y media para completar el examen.
1 (2 puntos) Describa mediante un esquema todos los estados por los que atraviesa un
hilo en Nachos y las transiciones entre ellos, indicando cuál es el tipo de evento que
produce cada transición.
Diagrama de estados
hilo->Fork(funcion, param)
scheduler->Run(hilo)
JUST_CREATED
READY RUNNING
currentThread->Yield( )
scheduler->ReadyToRun(hilo) currentThread ->Sleep( )
BLOCKED
delete threadToBeDestroyed
“hilo finalizado”
3. El hilo creado (en adelante “mihilo”) pasará a estado “RUNNING”, es decir, “en
ejecución” cuando el planificador le ceda la CPU:
scheduler->Run(hilo)
situación que puede venir provocada bien porque otro hilo ceda
voluntariamente la CPU (recuerden que la política de planificación de hilos del Nachos
es no expulsiva) o bien porque otro hilo en ejecución termine o quede bloqueado a la
espera de algún evento, situaciones ambas en las que el planificador toma el siguiente
de la cola de preparados. En ambos casos “mihilo” debe ser evidentemente el primero
de la cola de preparados.
5. Por último señalar que para pasar del estado “bloqueado” al estado
“preparado” se debe producir el evento o condición de desbloqueo (para el
caso comentado en el que el hilo quedó bloqueado al realizar una operación
wait sobre una variable condición, el desbloqueo y consecuentemente el paso
a estado preparado se producirá cuando otro hilo ejecute una operación signal
o broadcast sobre dicha variable condición)
Nombre
begin
s := Valor_Inicial;
end;
end.
P0 P1 P2 P2 P3 P3 P0 P0 P0
Solución A:
P0 P0 P1 P2 P2 P3 P3 P0 P0
Solución B:
P0 P0 P1 P2 P2 P0 P0 P3 P3
Asignados Solicitudes
A B C A B C
P0 0 0 1 0 0 0
P1 2 0 0 2 2 0
P2 3 3 0 0 0 0
P3 2 1 1 1 0 0
P4 0 2 0 0 2 0
IMPORTANTE: Las seis preguntas suman 12 puntos. Usted deberá descartar al menos
UNA de las preguntas 3, 4, 5 y 6. Es decir, usted puede optar por contestar estos grupos de
preguntas: 12345, 12346, 12356, 12456. No se admitirá ninguna otra combinación.
Dispone de tres horas y media para completar el examen.
begin
nlec:=0;
escribiendo:=falso;
end;
end.
Ø Que el planificador puede desalojar al proceso que está en CPU. Por ejemplo,
para implementar tiempo compartido y tiempo real, es necesaria una
planificación expulsiva.
Nombre Titulación
Para las siguientes políticas: a)Round-Robin con cuanto igual a 4 y b)primero el más corto
expulsivo. Obtenga el diagrama de Gantt y el tiempo de espera medio por cada política.
Tiempos de espera:
A 0
B 4
C 4
D 5
E 3
2 (1,75 ptos) Tenemos un sistema de gestión de memoria paginada de dos niveles que
utiliza una TLB. Se tienen los siguientes tiempos medios:
• Tiempo de acceso a la TLB: 4 nseg. (1 nseg = 10-9 seg.)
• Tiempo medio de acceso a memoria principal: 33 nseg.
Suponiendo que la TLB tiene una tasa del 98% de aciertos, ¿cuánto es el tiempo medio de
acceso a memoria?
3 (1,75 ptos) Suponga un sistema que emplea el algoritmo del banquero para evitar caer
en una situación de interbloqueo. En un instante dado y ante unas solicitudes de recursos,
el sistema lanza el algoritmo y detecta que si concede los recursos se encontraría en un
estado inseguro. Si, a pesar de esto, el sistema decide conceder los recursos solicitados,
¿puede afirmarse que el sistema se encuentra en interbloqueo?
Estados inseguros
Estados de
interbloqueo
Estados seguros
Nombre
Flexibilidad en la organización lógica de los archivos, pues un mismo archivo puede ser
referenciado con pathname diferentes.
Un archivo posee referencias (pathnames distintos) que realmente ya no son válidas, éste
fenómeno sólo se da en los directorios con estructura de grafo general.
8,1,3,1,4,5,2,3,4,5,1,2,3,6,1,8,4,1,3
Simule la gestión de estas referencias utilizando las siguientes políticas: a)LRU; b)segunda
oportunidad. Suponga que el sistema dispone de tres marcos físicos que inicialmente están
sin asignar.
8 1 3 1 4 5 2 3 4 5 1 2 3 6 1 8 4 1 3
LRU 8 8 8 8 3 1 4 5 2 3 4 5 1 2 3 6 1 8 4
1 1 3 1 4 5 2 3 4 5 1 2 3 6 1 8 4 1
3 1 4 5 2 3 4 5 1 2 3 6 1 8 4 1 3
81 81 81 81 41 41 41 31 31 31 11 11 11 61 61 61 41 41 41
2ª OP.
11 11 11 10 51 51 50 41 41 40 21 21 21 11 11 10 11 10
31 31 30 30 21 20 20 51 50 50 31 31 30 81 80 80 31
6 (1,75 ptos) Construya una solución al segundo problema de los lectores y escritores
(prioridad para estos últimos), con el añadido de que se debe garantizar que nunca puede
haber más de 10 lectores trabajando simultáneamente. Para su implementación puede optar
por alguna de estas herramientas:
• semáforos
• monitores
• cerrojos y variables condición
Nombre
begin
nlec:=0;
nesc:=0;
nescbloq:=0;
escribiendo:=falso;
end;
end.
Calificación
1
2
Universidad de Las Palmas de Gran Canaria 3
Facultad de Informática 4
5
6
Sistemas Operativos
Convocatoria de septiembre, año 2002
9 de septiembre de 2002
Nombre Titulación
Para las siguientes políticas: a)Round-Robin con cuanto igual a 4 y b)primero el más corto
expulsivo. Obtenga el diagrama de Gantt y el tiempo de espera medio por cada política.
Tiempos de espera:
A 0
B 4
C 4
D 5
E 3
2 (1,5 ptos) ¿Qué diferencia una política de planificación de CPU expulsiva de otra no
expulsiva? Ponga algún ejemplo de cada caso. ¿Cree que es posible que exista un sistema de
tiempo compartido que emplea una política de planificación no expulsiva? Justifique su
respuesta.
3 (1,75 ptos) Construya una solución al problema de los filósofos que esté libre de
interbloqueos. Puede usar cualquier primitiva de sincronización de las estudiadas en la
asignatura.
Óptima
Ref. 244 1A1 244 363 244 268 244 1A1 1A2 363
M0 244 244 244 244 244 244 244 244 244 244
M1 1A1 1A1 1A1 1A1 1A1 1A1 1A1 1A1 363
M2 363 363 268 268 268 1A2 1A2
Nombre
LRU
Ref. 244 1A1 244 363 244 268 244 1A1 1A2 363
M0 244 1A1 244 363 244 268 244 1A1 1A2 363
M1 244 1A1 244 363 244 268 244 1A1 1A2
M2 1A1 1A1 363 363 268 279 1A1
Segunda oportunidad
Ref. 244 1A1 244 363 244 268 244 1A1 1A2 363
M0 244 1A1 1A1 363 363 268 268 1A1 1A2 363
M1 244 244 1A1 1A1 244 244 268 244 1A2
M2 244 244 363 363 244 1A1 244
Sabemos que el tiempo medio de acceso viene dado por esta fórmula:
tiempo medio de acceso = Tconfallo*Pfallo + Tsinfallo*Psinfallo
Tconfallo = tiempo de acceso cuando hay un fallo = 20 mseg. + 50 nseg. == 20 miliseg.
Pfallo = probabilidad de fallo de página = incógnita
Tsinfallo = tiempo de acceso cuando no hay fallo = 50 nanoseg.
Psinfallo = probabilidad de no haber fallo de página = 1-Pfallo
Ventajas Desventajas
Asignación contigua • Permite manejar acceso • Encontrar espacio para la
tanto secuencial como creación de un fichero
directo • Fragmentación externa
• Todos los bloques se • Declaración por anticipado
destinan a almacenar datos del tamaño del archivo
(no se destina espacio al
almacenamiento de
punteros)
Asignación Enlazada • No se produce • Eficiente solo para
fragmentación externa archivos de acceso
• No es necesario declarar secuencial
por anticipado el tamaño • Espacio que ocupan los
del archivo punteros
• Confiabilidad: la perdida
de punteros puede
provocar la perdida de
grandes cantidades de
datos
Asignación Indexada • No se produce • Mayor perdida de espacio
fragmentación externa con respecto a la
• No es necesario declarar asignación enlazada
por anticipado el tamaño (bloque/s índices)
del archivo • Confiabilidad: La perdida
• Permite manejar acceso del bloque/s indice/s
tanto secuencial como puede provocar la pérdida
directo de todos los datos.