Soluciones del examen parcial, año 2000

(Ingeniero Técnico en Informática de Gestión)

 

Pregunta 1. TEST

Pregunta

Opción correcta

1

d

2

b

3

b

4

b

5

d

6

d

7

d

8

d

9

b

10

d

11

c

12

b

13

d

14

c

15

b

Pregunta 2. Planificación de procesos

  1. SJF no expulsivo
  2. A A A C C B B B B B D D D D D E E E E E 
    0     3   5         10        15       20

     

     

    Tiempo de retorno

    Tiempo de espera

    A

    3

    0

    B

    9

    4

    C

    2

    1

    D

    6

    0

    E

    8

    3

    valor medio

    28/5

    8/5

     

     

     

  3. Round-Robin con cuanto 3 u.t.
A A A B B B C C B B D D D E E E D D E E
0     3     6   8   10    13    16  18 20

 

Tiempo de retorno

Tiempo de espera

A

3

0

B

9

4

C

5

3

D

9

4

E

8

3

valor medio

34/5

14/5

 

Pregunta 3. Implementación de un semáforo con cerrojos y variables condición

En esencia, el semáforo es una variable entera a la que se accede de forma exclusiva mediante un cerrojo. El bloqueo de la operación WAIT del semáforo se consigue con una variable condición.

 

clase Semáforo
{
  operación INICIALIZAR(valor_inicial) { valor=valor_inicial; }
  operación WAIT;
  operación SIGNAL;
 
  int valor; // el valor inicial lo pone el usuario
  Cerrojo cerrojo; // para acceder al valor de forma exclusiva
  Condición espera; // para bloquear a los procesos que intentan
                    // hacer un WAIT con el valor a cero
};
 
operación Semáforo::WAIT()
{
  cerrojo.Acquire(); // acceso exclusivo a "valor"
  // me bloqueo si el valor es cero
  si valor=0 entonces espera.Wait(); fin si;
  valor := valor-1; 
  cerrojo.Release();
}
 
operación Semáforo::SIGNAL()
{
  cerrojo.Acquire(); // acceso exclusivo a "valor"
  valor := valor+1;
  espera.Signal(); // aviso a un proceso bloqueado (si lo hay)
  cerrojo.Release();
}

 

Pregunta 4. Diferencias de términos

  1. sistema distribuido / sistema multiprocesador
  2. En ambos casos hablamos de sistemas con varios procesadores. Sin embargo, el sistema distribuido en un conjunto de equipos conectados a través de una red de intercomunicación, sin que compartan una memoria o un reloj comunes. El sistema multiprocesador es un único equipo con varios procesadores que comparten memoria, reloj y otros dispositivos a través de buses. La diferencia principal estriba en la facilidad de acceso a los datos entre un procesador y otro: en el sistema distribuido, hay que comunicarse a través de una red. Otras diferencias: la cantidad de procesadores que puede soportar un multiprocesador está limitada, cosa que no ocurre en un sistema distribuido.

  3. llamada al sistema / programa del sistema
  4. Una llamada al sistema es un mecanismo para que un programa pueda solicitar un servicio del núcleo del sistema operativo, mientras que un programa del sistema (p.ej. un editor, un compilador) es una aplicación completa e independiente del núcleo del sistema operativo. Hablando en términos vagos, una llamada al sistema es un instrumento para los programas, mientras que un programa del sistema es un instrumento para los usuarios. Una llamada al sistema es un servicio básico, esencial, primitivo; mientras que un programa del sistema es un servicio de más alto nivel, que debe utilizar llamadas al sistema si pretende acceder a servicios del sistema operativo.

  5. inanición / interbloqueo
  6. Ambos conceptos expresan situaciones en las que uno o varios procesos se encuentran en espera indefinida, pero por causas distintas: la inanición ocurre cuando un proceso preparado para ejecutarse queda postergado indefinidamente porque se le adelantan otros procesos (p.ej. al tener estos otros más prioridad); por el contrario, el interbloqueo es una situación en la que varios procesos se encuentran en espera circular, debido a que esperan por recursos que retienen otros procesos del círculo que están en la misma situación.

  7. proceso pesado / hilo
  8. El proceso pesado puede contener uno o varios hilos, nunca a la inversa. Los hilos de un mismo proceso pesado comparten el mismo código y datos. Los hilos son los que realmente se ejecutan, el proceso pesado simplemente es el "contenedor" de los hilos, que proporciona el espacio de memoria en el que se ejecutan, información de privilegios (ej. a qué usuario pertenecen los hilos), etc.

  9. semáforo / variable condición
  10. Ambos son tipos abstractos de datos usados como herramientas de sincronización, y con dos operaciones de nombre similar (Wait y Signal). Sin embargo, el comportamiento es diferente, dado que: a)el semáforo es un valor entero y las operaciones incrementan o decrementan el valor, mientras que la variable condición no tiene ningún valor asociado; b)la operación Wait del semáforo bloquea sólo cuando el valor entero es cero, pero el Wait de la variable condición bloquea siempre; c)la operación Signal de las variables condición no tiene ningún efecto si no hay procesos en espera; en los semáforos, el valor entero se incrementa, con lo cual se deja un "rastro" de los Signal hechos anteriormente; d)las variables condición se suelen utilizar en el contexto de un monitor, mientras que los semáforos son herramientas autosuficientes; etc.

  11. concurrencia / paralelismo

Hablamos de concurrencia cuando existen varios programas en ejecución en un mismo instante de tiempo, y que avanzan de forma simultánea o intercalada. El paralelismo es un caso particular de concurrencia en el cual existe realmente ejecución simultánea de instrucciones (por tanto, para que exista paralelismo hace falta más de un procesador).