Guía - Universidad de Carabobo

Anuncio
Universidad de Carabobo
Facultad Experimental de Ciencias y Tecnología
Departamento de Computación
Sistemas Operativos
Prep. Carlos I. Buchart I.
Nombre:___________________________________
Práctica previa al Segundo Parcial
Teoría
1. ¿Qué son los procesos cooperativos? Defina condición de competencia y explique cómo ocurre en los
procesos cooperantes. ¿Estos son los únicos que pueden generarla?
2. Durante el desarrollo de la práctica se utilizará el término recurso, es útil recordar esta definición. Defina
recursos: consumibles, reutilizables, expropiables, no expropiables.
3. Defina la sección crítica. ¿Por qué se habla del problema de la sección crítica?
4. Explique los tres (3) requerimientos que debe poseer una solución válida al problema de la sección crítica.
¿Qué problema se generaría si no se respetase cada uno de estos requisitos?
5. Compare las diferentes aproximaciones de Dekker y la solución de Peterson. Indique con cuáles de los
requerimientos cumplen, y con cuáles no, mencionando un contraejemplo.
6. ¿Cuáles son las instrucciones de hardware que se pueden emplear para la solución del problema de la
sección crítica?
7. Defina atomicidad. ¿Puede la atomicidad ser implementada por software si ésta no está disponible en el
hardware? Explique. ¿Se podrá resolver el problema de la sección crítica utilizando nada más la
atomicidad?
8. La inhabilitación de interrupciones representa una solución “desde la raíz” al problema de la sección crítica.
Mencione algunas deficiencias y peligros de esta técnica.
9. Dos de las principales técnicas que se utilizan comúnmente cuando un proceso no puede entrar a su
sección crítica son la espera activa y la espera bloqueada. ¿Qué ventajas y desventajas presentan? ¿Es
siempre la espera activa menos eficiente que la espera bloqueada, en términos de uso del CPU?
10. Defina semáforos, sus tipos y cómo se utilizan en la solución del problema de la sección crítica.
11. ¿Cómo se utilizan las instrucciones test&set y swap en la solución del problema de la sección crítica?
Indique el número de procesos que pueden ser controlados.
12. ¿Qué otros mecanismos de sincronización importantes suelen ofrecer los sistemas operativos? Defínalos.
13. Explique el funcionamiento de las tuberías sin nombre (pipes) y con nombre (FIFO). ¿Cómo se utilizan en la
sincronización de procesos?
14. Explique el paso de mensajes directo e indirecto, con bloqueo y sin bloqueo. ¿Qué ventajas y desventajas
ofrece cada uno?
15. ¿En qué se diferencian los monitores de los semáforos? Ejemplifique.
16. ¿Qué es el bloqueo mutuo o interbloqueo? Explique las condiciones que originan un interbloqueo.
17. ¿Por qué se consideran las tres primeras condiciones (exclusión mutua, retención y esperar, no
apropiación), condiciones necesarias más no suficientes para el interbloqueo? ¿Qué implicaciones tiene en
los métodos para manejar los bloqueos mutuos?
18. ¿Puede producirse un bloqueo mutuo entre procesos que comparten un solo recurso? Explique.
19. Explique el esquema de prevención de bloqueos mutuos. ¿Por qué no puede prevenirse la exclusión
mutua?
20. El esquema de evitación de interbloqueos requiere información acerca de los recursos a utilizar por parte de
cada proceso. Mencione algunas situaciones en las cuales esto no es posible.
21. Si un sistema operativo no implementa ni la prevención ni la evitación de interbloqueos puede originarse
uno. Explique las diferentes técnicas de recuperación, sus ventajas y desventajas.
22. Explique la solución integrada de Silberchatz y Galvin para la solución del problema del bloqueo mutuo.
Práctica
1. La segunda aproximación de Dekker a la solución del problema de la sección crítica para dos procesos, se
implementó en lenguaje Java de la siguiente forma:
public class Dekker_2 extends ModeloExclusion {
private volatile boolean[] m_bFlag = new boolean[2];
public Dekker_2() {
m_bFlag[0] = false;
m_bFlag[1] = false;
}
public void entrarSC(int iId) {
int other = 1 - iId;
m_bFlag[iId] = true;
while (m_bFlag[other] == true)
Thread.yield();
}
public void salirSC(int iId) {
m_bFlag[iId] = false;
}
}
Modifique el código para soportar N procesos.
2. Considérese el siguiente programa:
int block[2];
// booleano
int turn=0;
// turn=0..1
void P(int id) {
// id=0..1
while(1) {
block[id]=1;
while(turno!=id) {
while(block[1-id]);
turno=id;
}
// Sección crítica
block[id]=0;
// Sección no crítica
}
}
Encuentre un contraejemplo que demuestre que esta solución es incorrecta. Es interesante destacar que
incluso en las Comunicaciones de la ACM se equivocaron con esta solución. (STALLINGS. Sistemas Operativos –
Segunda edición. Pág. 219).
3. La Universidad de Carabobo está trabajando en el desarrollo de un mini-kernel completamente nuevo,
llamado UCIX. Un grupo de diseñadores ha propuesto que los semáforos binarios y los monitores sean
implementados utilizando la instrucción test&set, mientras que otro grupo ha propuesto realizarlos mediante
el paso de mensajes. Esto condujo a una acalorada discusión y se ha decidido que usted realice un análisis
de ambas soluciones y determine cuál deberá ser utilizada. Para ello debe realizar la implementación de
ambos esquemas y compararlos.
4. Un problema clásico en el estudio de sincronización entre procesos es el problema del productorconsumidor. Este problema puede ser generalizado bajo dos esquemas: productores-consumidores (en el
cual se posee un buffer limitado para almacenar los objetos producidos), y escritores-lectores (con buffer
ilimitado). Este último ejemplifica perfectamente lo que sucede en una base de datos, donde algunos
procesos pueden estar realizando solicitudes de lectura y otros de escritura. Diseñe un algoritmo,
empleando monitores, que evite el caos en un servidor de bases de datos. Las políticas a seguir son:
a. En un mismo momento pueden coexistir varios procesos lectores.
b. Para que un proceso pueda escribir en la base de datos, deberá tener acceso exclusivo a la misma.
c.
Un proceso escritor tendrá, inicialmente, prioridad sobre un proceso lector, pero éste último no
debería morir de inanición, por lo que no deberán escribir más de cuatro (4) procesos antes de que
él pueda realizar su lectura.
5. Suponga ahora que la comunicación bajo UCIX se realiza únicamente mediante tuberías. Desarrolle un
algoritmo que permita emular un “pseudo-paso de mensajes” entre dos procesos. Además, investigue las
llamadas al kernel de Linux relacionadas con el uso de tuberías e implemente su algoritmo en C.
6. En práctica se estudió la solución al problema de los filósofos comensales. Para evitar el bloqueo mutuo se
restringió la cantidad de filósofos que en un momento dado podrían estar compitiendo por sus chopsticks.
¿Qué esquema de control de interbloqueo fue utilizado? Desarrolle otra propuesta diferente para evitar el
interbloqueo en este problema.
7. Otro problema de sincronización es el de los fumadores de cigarrillos (SILBERCHATZ-GALVIN-GAGNE. Sistemas
Operativos – Sexta edición. Pág. 223). Existen tres (3) fumadores que continuamente enrollan cigarrillos y luego se lo
fuman. Para un cigarrillo se necesita una cierta cantidad de papel, tabaco y un fósforo para encenderlo.
Cada fumador posee dotación ilimitada de un solo ingrediente (uno papel, otro tabaco y otro fósforos).
Existe un (1) agente que posee cantidad ilimitada de todos los ingredientes. Alternativamente, éste va
colocando dos ingredientes en una mesa y entonces, el fumador que posee el ingrediente faltante los
recoge y fuma su cigarrillo. Luego indica al agente que ha terminado y éste repite la operación. Realice un
programa en Java que sincronice a los fumadores y el agente.
8. ¿Qué enfoque de recuperación de interbloqueos usaría usted si estuviera a su cargo el sistema de control
de las válvulas de presión de la Refinería El Palito? Razone su respuesta.
9. ¿Puede un sistema detectar si un proceso está sufriendo de inanición? En caso afirmativo, explique cómo
puede hacerlo. En caso negativo, indique cómo puede entonces manejar el problema de la inanición.
(SILBERCHATZ-GALVIN-GAGNE. Sistemas Operativos – Sexta edición. Pág. 249).
CB/cb
Descargar