Sistemas operativos

Soluciones del examen de junio,

curso 1997/98

(primera parte)

 

Cuestión 1

a.

Protección: Garantizar que ciertas funciones, consideradas privilegiadas, sólo las pueda realizar el módulo de control del sistema (Monitor residente).

 

b.

El diseño de mecanismos y políticas de forma que se garantice que los procesos cumplan sus restricciones temporales.

 

c.

Evitar la espera activa cuando se debe actuar ante la ocurrencia de un determinado evento.

 

d.

Esquema de cómputo en entornos donde existen varios procesadores en el que a cada procesador se le asignan tareas específicas.

 

e.

Los mecanismos determinan cómo realizar algo, las políticas deciden qué se hará.

 

f.

Que un programa en ejecución (proceso) solicite algún servicio que sólo lo puede realizar el sistema operativo.

 

g.

El bloqueo indefinido se produce cuando se espera indefinidamente por un suceso. Un estado de bloqueo mutuo ocurre cuando dos o más procesos esperan indefinidamente un suceso que sólo lo puede producir uno de esos procesos.

 

h.

Compartir recursos (tanto físicos como lógicos), acelerar cálculos, modularidad y comodidad.

 

i.

Aumentar la prioridad de un proceso a medida que aumenta el tiempo de espera de éste por tomar un determinado recurso

 

j.

En primera instancia, para la declaración de uso por parte de los proceso, cada recurso se identifica por una clave única. Internamente en el sistema, cada recurso se identifica por un descriptor numérico del sistema.

 

k.

En base al identificador de usuario que intenta acceder al recurso (a través de un proceso) y los permisos que éste posee (lectura y escritura) para cada categoría (propietario, grupo y demás usuarios)

 

l.

No haber especificado el flag IPC_NOWAIT en cada una de las siguientes operaciones y circunstancias: intentar decrementar y no poder porque éste tomaría un valor negativo, o preguntar si es cero y no lo es.

 

m.

No haber especificado el flag IPC_NOWAIT en cada una de las siguientes operaciones: intentar enviar un mensaje a un cola cuya capacidad máxima se ha alcanzado o intentar recibir un mensaje de un tipo que no existe aún en la cola.

 

n.

Operación que tiene por finalidad leer los atributos de control (permisos, operaciones realizadas, fecha/hora de operaciones, etc.) del recurso, o alterar algunos de estos atributos (no todos se pueden alterar).

 

 

Cuestión 2.

En esta implementación se tendrá que para el semáforo entero a implementar, se le asociará la siguiente estructura:

estructura semáforo_entero {

valor entero sin signo;

exclusión_mutua, bloqueo semáforo binario;

num_bloq entero sin signo;

}

 

El campo valor se utiliza para almacenar el valor del semáforo entero.

 

Los campos exclusión_mutua y bloqueo son semáforos binarios que se utilizarán para lo siguiente:

exclusión_mutua para garantizar la exclusión mutua en las operaciones P y V a implementar sobre el semáforo enteros. Inicialmente este semáforo debe poseer el valor de 1.

bloqueo para bloquear un proceso cuando intenta decrementar el valor del semáforo entero (operación P) y este posee un valor de cero. Inicialmente este semáforo debe poseer el valor de 0.

 

El campo num_bloq se utiliza para contabilizar el número de procesos que han quedado bloqueados al intentar realizar una operación P.

 

Las operaciones P y V a implementar para un semáforo entero las llamaremos P_Entero y V_Entero para así distinguirlas de la operaciones P y V que actúan sobre semáforos binarios.

 

La operación P_Entero sobre un semáforo entero sería de la siguiente forma:

P_Entero( semáforo: estructura semáforo_entero)

{

P(exclusión_mutua);

"Si" ( semáforo.valor > 0 ) "Entonces"

semáforo.valor = semáforo.valor - 1;

"Si no"

semáforo.num_bloq = semáforo.num_bloq+1;

V(exclusión_mutua);

P(bloqueo);

"Fin Si"

V(exclusión_mutua);

}

 

La operación V_Entero sobre un semáforo entero sería de la siguiente forma:

V_Entero(semáforo: estructura semáforo_entero)

{

P(exclusión_mutua);

"Si" ( semáforo.num_bloq > 0 ) "Entonces"

semáforo.num_bloq = semáforo.num_bloq-1;

V(bloqueo);

"Si no"

semáforo.valor = semáforo.valor + 1;

V(exclusión_mutua);

"Fin Si"

}

 

Observe que en esta implementación un semáforo entero nunca podrá tomar valores negativos. Si quisiéramos que pudiese adoptar valores negativos habría que retocar los algoritmos de P_Entera y V_Entera anteriormente descritos.

 

 

Cuestión 3

 

Proceso

Tiempo de llegada

Duración de ráfaga

P0

0

3

P1

1

5

P2

3

2

P3

4

4

 

* Primero el más corto apropiativo:

P0

P0

P0

P2

P2

P3

P3

P3

P3

P1

P1

P1

P1

P1

 

Tiempo de espera:

Proceso

Tiempo de espera

P0

0

P1

8

P2

0

P3

1

 

Tiempo medio de espera: 9/4

 

 

* Round-Robin (q=2):

 

Admite dos soluciones correctas:

 

A)

P0

P0

P1

P1

P0

P2

P2

P3

P3

P1

P1

P3

P3

P1

 

Tiempo de espera:

Proceso

Tiempo de espera

P0

2

P1

8

P2

2

P3

5

 

Tiempo medio de espera: 17/4

 

B)

P0

P0

P1

P1

P0

P2

P2

P1

P1

P3

P3

P1

P3

P3

 

Tiempo de espera:

Proceso

Tiempo de espera

P0

2

P1

6

P2

2

P3

6

 

Tiempo medio de espera: 16/4