Soluciones al primer parcial, curso 1997/98
1 (2,50 ptos).
Responda a cada una de las siguientes cuestiones. En la respuesta a cada una emplee como máximo 5 líneas (en caso de utilizar más sólo se evaluará lo expuesto en la 5 primeras).
1.1. Diferencie entre llamada al sistema operativo y función del sistema.
Una llamada al sistema operativo es una implica generalmente el cambio de modo usuario de ejecución a modo sistema e implica que actúe el gestor de llamadas al sistema (parte del núcleo del SO). En cambio, la invocación a una función del sistema no tiene por qué implicar un cambio de modo de ejecución y no produce la invocación al gestor de llamadas al sistema.
1.2. Enumere tres acciones que sólo las pueda llevar a cabo el sistema operativo con el objeto de garantizar el buen funcionamiento del sistema informático.
Cambiar de modo de ejecución entre modo usuario y modo sistema y viceversa, operar con los dispositivos de Entrada/Salida y acceder a cualquier posición de la memoria del sistema.
1.3. En la ejecución de operaciones de Entrada/Salida, ¿qué ventajas aporta el uso de interrupciones frente a su no uso?
Permite que el procesador pueda ser asignado a otra tarea mientras la tarea que la tiene asignada realiza una operación de Entrada/Salida. También facilita el control de las operaciones de Entrada/Salida, pues su uso evita el estar continuamente comprobando el estado de la operación mientras esta se realiza (espera activa).
1.4. Explicar la diferencia entre proceso e hilo de ejecución
Un proceso (en el sentido tradicional) equivale a una tarea con un único hilo; en cambio, un hilo es la unidad básica de ejecución (utilización del procesador) que posee poco estado compartido frente al proceso tradicional, de ahí que la conmutación de contexto es más fácil llevarla a cabo con hilos que con procesos.
1.5. Enumere dos diferencias entre la planificación de procesos a bajo nivel y nivel intermedio.
La planificación a bajo nivel tiene por misión gestionar el procesador o procesadores del sistema, en cambio la planificación de nivel intermedio decide que proceso debe ser suspendido para garantizar el buen funcionamiento del sistema. Otra diferencia es la frecuencia de ejecución de dichas tareas de planificación, la de bajo nivel se lleva a cabo más frecuentemente que la de nivel intermedio.
1.6. ¿Cuando la función UNIX semop (operación sobre un vector de semáforos) provoca el bloqueo del proceso invocador?.
Cuando no se ha especificado el flag IPC_NOWAIT en la invocación a semop y el campo operación es 0 y el valor del semáforo es distinto de 0, o bien, el campo operación es un valor negativo cuyo valor absoluto es mayor que el valor del semáforo.
1.7. ¿Cuándo la función UNIX msgsnd (envío de un mensaje a una cola) provoca el bloqueo del proceso que la invoca?.
Cuando no se ha especificado el flag IPC_NOWAIT en la invocación a msgsnd y se han alcanzado los límites de capacidad de la cola (tamaño en bytes y número máximo de mensajes) de mensajes utilizada.
1.8. ¿Cuándo la función UNIX msgrcv (recepción de un mensaje desde una cola) provoca el bloqueo del proceso invocador?
Cuando no se ha especificado el flag IPC_NOWAIT en la invocación a msgrcv y no existe mensaje alguno del tipo especificado en la invocación.
1.9. Explique en qué consiste la condición de progreso que toda solución al problema de la sección crítica debe cumplir.
La condición establece si ningún proceso se está ejecutando en su sección crítica y hay otros procesos que desean entrar en las suyas, entonces sólo aquellos que no se están ejecutando en su sección restante pueden participar en la decisión de cuál será el siguiente en entrar, y esta decisión no puede postergarse indefinidamente.
1.10. ¿Puede el uso de semáforos dar lugar a un problema de inanición? justifique su respuesta.
Dependerá de la política de gestión de la cola de procesos bloqueados que todo semáforo tiene asociada. Por ejemplo, para una política FIFO este problema no se da, en cambio para una política LIFO (ultimo en llegar primero en salir), sí se podría dar este problema.
2 (1,50 ptos).
Considere el siguiente conjunto de procesos, cuyas duraciones de ráfagas de CPU en milisegundos son:
Proceso |
Duración de ráfaga |
Tiempo de llegada |
P1 |
4 |
0 |
P2 |
2 |
1 |
P3 |
3 |
2 |
P4 |
1 |
2 |
Calcule los tiempos medios de espera y retorno para las políticas:
- SJF apropiativa
- Round-Robin con cuanto de 3 milisegundos
- SJF apropiativo:
Diagrama de Gantt:
P1 |
P2 |
P2 |
P4 |
P3 |
P3 |
P3 |
P1 |
P1 |
P1 |
Proceso |
Tiempo de retorno |
Tiempo de espera |
P1 |
10 |
6 |
P2 |
2 |
0 |
P3 |
5 |
2 |
P4 |
2 |
1 |
Tiempo medio |
4,75 |
2,25 |
o también:
P1 |
P2 |
P2 |
P4 |
P1 |
P1 |
P1 |
P3 |
P3 |
P3 |
Proceso |
Tiempo de retorno |
Tiempo de espera |
P1 |
7 |
3 |
P2 |
2 |
0 |
P3 |
8 |
5 |
P4 |
2 |
1 |
Tiempo medio |
4,75 |
2,25 |
- Round-Robin (cuanto 3 milisegundos):
Diagrama de Gant:
P1 |
P1 |
P1 |
P2 |
P2 |
P3 |
P3 |
P3 |
P4 |
P1 |
Proceso |
Tiempo de retorno |
Tiempo de espera |
P1 |
10 |
6 |
P2 |
4 |
2 |
P3 |
6 |
3 |
P4 |
7 |
6 |
Tiempo medio |
6,75 |
4,25 |
3 (1,50 ptos).
Suponga un disco de 200 cilindros, numerados de 0 a 199, la cabeza se encuentra atendiendo una petición en el cilindro 52. La cola de solicitudes posee las peticiones (expresadas en número de cilindro):97, 182, 37, 121, 13, 124, 64, 67. ¿Cómo se atenderían las solicitudes anteriores al aplicar las políticas:a) SSTF
b) LOOK
Nota: Cuando requiera asumir un sentido del recorrido de la cabeza en el que se atienden peticiones, asuma el sentido ascendente.
a) SSTF
64, 67, 37, 13, 97, 121, 124, 182
o bien
64, 67, 97, 121, 124, 182, 37, 13
b) LOOK
64, 67, 17, 121,124, 182, 37, 13
4 (2,25 ptos).
Utilizando sólo monitores dar una solución al problema de los filósofos comensales en la que no se puedan producir situaciones de interbloqueo.
type filosofos_comensales = monitor
var estado: array[0..4] of (pensando, hambriento, comiendo);
var palillo: array[0..4] of condition;
Procedure Entry Tomo_Palillo(i:0..4)
Begin
estado[i] := hambriento;
Test(i);
If (estado[i] != comiendo ) Then palillo[i].wait;
End;
Procedure Entry Libero_Palillo(i:0..4)
Begin
estado[i] := pensando;
Test(i-1 mod 5);
Test(i+1 mod 5);
End;
Procedure Test(k:0..4)
Begin
if ( (estado[(k-1) mod 5] != comiendo) and
(estado[k] = hambriento) and
(estado[(k+1) mod 5] != comiendo) ) Then
Begin
estado[k] = comiendo;
palillo[k].signal;
End;
End;
Begin
for j:=0 to 4 do estado[j] := pensando;
End.
5 (2,25 ptos).
Describa algoritmicamente una función que nos informe si un sistema se encuentra en estado de interbloqueo. la función debe devolver el valor 1 si existe interbloqueo y 0 si no existe. En el sistema donde se debe ejecutar la función existen varias posibilidades de un mismo tipo de recurso y los procesos pueden solicitar varias posibilidades de distintos tipos a la vez.
Constantes
M número de tipos de recursos del sistema
N número de procesos
Estructuras de datos
Disponible: Vector de longitud M que indica las disponibilidades de cada tipo de recurso. Dipsonible(j) = k, entonces existen k posibilidades del tipo de recurso j.
Asignado: Matriz de N filas y M columnas que registra el núemro de posibilidades de cada tipo de recurso que cada proceso tiene asignado. Asignado(p,j) = k, entonces el proceso p tiene asignado k posibilidades del tipo j.
Peticiones: Matriz de N filas y M columnas que registra el núemro de posibilidades de cada tipo de recurso que cada proceso solicita. Peticiones(p,j) = k, entonces el proceso p solicita k posibilidades del tipo de recurso j.
Algoritmo:
Trabajo y acabado son vectores de longitud M y N respectivamente.
Trabajo = Disponible
Para p=1 Hasta N Hacer
Si ( Asignado(p) != 0 ) Entonces
Acabado(p) = falso;
Si no
Acabado(p) = verdadero;
Fin si
Fin Para
Paso 2: Encontrar un proceso "p" tal que:
Acabado(p) = falso y Peticiones(p) <= Trabajo
"Si" (no se encuentra un proceso p) "Entonces" ir Paso 4
Trabajo = Trabajo + Asignado(p);
Ir Paso 2
Paso 4: "Si" (existe algún proceso p tal que Acabado(p) = falso) "Entonces"
El sistema está en estado de interbloqueo
"Si no"
El sistema no esta en interbloqueo
"Fin Si"