Diferencia entre revisiones de «Ejercicios sincronización y comunicación»

De Wiki de Sistemas Operativos
Saltar a: navegación, buscar
(otro matíz sobre unidades de ejecución)
(ejercicio 4)
Línea 34: Línea 34:
  
 
[[solución ejercicio 1|Ver solución del ejercicio 1]]
 
[[solución ejercicio 1|Ver solución del ejercicio 1]]
 +
 +
= Ejercicio 2 =
 +
 +
Realice el cronograma temporal que represente la ejecución de dos procesos P1 y P2. El proceso P1 ejecuta el siguiente código:
 +
 +
<source lang="c">
 +
for (int i=0; i<2; i++) {
 +
    down(s1);
 +
    f1();
 +
    up(s2);
 +
}
 +
</source>
 +
 +
Y el proceso P2 ejecuta el siguiente código:
 +
 +
<source lang="c">
 +
for (int i=0; i<2; i++) {
 +
    down(s2);
 +
    f2();
 +
    up(s1);
 +
}
 +
</source>
 +
 +
Para el semáforo s1 el contador vale 1, mientras que para el semáforo s2 el contador vale 0.
 +
 +
Suponga que:
 +
 +
* El planificación emplea turno rotatorio estrícto con quantum de 3 unidades de ejecución.
 +
* Se sabe que el proceso P1 es seleccionado en primer lugar por el planificador para ejecutarse.
 +
* La ejecución de cada línea de código representado anteriormente supone una unidad de ejecución, por tanto, todas las instrucciones toman el mismo tiempo de ejecución.
 +
 +
El cronograma deberá incluir qué instrucción se ejecuta en cada unidad de ejecución.
 +
 +
[[solución ejercicio 2|Ver solución del ejercicio 2]]
 +
 +
= Ejercicio 3 =
 +
 +
En un exámen de sistemas operativos, un estudiante plantea la siguiente solución basada en dos procesos, un proceso P1 productor y un proceso P2 consumidor, en el que el contador de los semáforos s1 y s2 valen inicialmente 0.
 +
 +
<source lang="c">
 +
while(1) {
 +
    down(s1);
 +
    produce();
 +
    up(s2);
 +
}
 +
</source>
 +
 +
Y el proceso P2 ejecuta el siguiente código:
 +
 +
<source lang="c">
 +
while(1) {
 +
    down(s2);
 +
    consume();
 +
    up(s1);
 +
}
 +
</source>
 +
 +
Responda brevemente si la solución que propone es idónea justificando su respuesta.
 +
 +
[[solución ejercicio 3|Ver solución del ejercicio 3]]
 +
 +
= Ejercicio 4 =
 +
 +
Realice el cronograma temporal que represente la ejecución de dos procesos P1 y P2. El proceso P1 ejecuta el siguiente código:
 +
 +
<source lang="c">
 +
for (int i=0; i<2; i++) {
 +
    send(msg);
 +
    recv(msg);
 +
}
 +
</source>
 +
 +
Y el proceso P2 ejecuta el siguiente código:
 +
 +
<source lang="c">
 +
for (int i=0; i<2; i++) {
 +
    recv(msg);
 +
    send(msg);
 +
}
 +
</source>
 +
 +
Suponga que:
 +
 +
* El planificación emplea turno rotatorio estrícto con quantum de 3 unidades de ejecución.
 +
* Se sabe que el proceso P1 es seleccionado en primer lugar por el planificador para ejecutarse.
 +
* La ejecución de cada línea de código representado anteriormente supone una unidad de ejecución, por tanto, todas las instrucciones toman el mismo tiempo de ejecución.
 +
* El comportamiento de la primitiva send() es síncrono y el la primitiva recv() es bloqueante.
 +
 +
El cronograma deberá incluir qué instrucción se ejecuta en cada unidad de ejecución.
 +
 +
[[solución ejercicio 4|Ver solución del ejercicio 4]]

Revisión del 09:39 9 may 2011

Ejercicio 1

Realice el cronograma temporal que represente la ejecución de dos procesos P1 y P2. El proceso P1 ejecuta el siguiente código:

for (int i=0; i<2; i++) {
    down(s1);
    f1();
    if (get(s1) == 0)
        up(s2);
}

Y el proceso P2 ejecuta el siguiente código:

for (int i=0; i<2; i++) {
    down(s2);
    f2();
    up(s1);
}

Para el semáforo s1 el contador vale 1, mientras que para el semáforo s2 el contador vale 0.

Suponga que:

  • El planificación emplea turno rotatorio estrícto con quantum de 3 unidades de ejecución.
  • Se sabe que el proceso P2 es seleccionado en primer lugar por el planificador para ejecutarse.
  • La ejecución de cada línea de código representado anteriormente supone una unidad de ejecución, por tanto, todas las instrucciones toman el mismo tiempo de ejecución.
  • La función get(semáforo s) devuelve el valor del contador del semáforo.

El cronograma deberá incluir qué instrucción se ejecuta en cada unidad de ejecución.

Ver solución del ejercicio 1

Ejercicio 2

Realice el cronograma temporal que represente la ejecución de dos procesos P1 y P2. El proceso P1 ejecuta el siguiente código:

for (int i=0; i<2; i++) {
    down(s1);
    f1();
    up(s2);
}

Y el proceso P2 ejecuta el siguiente código:

for (int i=0; i<2; i++) {
    down(s2);
    f2();
    up(s1);
}

Para el semáforo s1 el contador vale 1, mientras que para el semáforo s2 el contador vale 0.

Suponga que:

  • El planificación emplea turno rotatorio estrícto con quantum de 3 unidades de ejecución.
  • Se sabe que el proceso P1 es seleccionado en primer lugar por el planificador para ejecutarse.
  • La ejecución de cada línea de código representado anteriormente supone una unidad de ejecución, por tanto, todas las instrucciones toman el mismo tiempo de ejecución.

El cronograma deberá incluir qué instrucción se ejecuta en cada unidad de ejecución.

Ver solución del ejercicio 2

Ejercicio 3

En un exámen de sistemas operativos, un estudiante plantea la siguiente solución basada en dos procesos, un proceso P1 productor y un proceso P2 consumidor, en el que el contador de los semáforos s1 y s2 valen inicialmente 0.

while(1) {
    down(s1);
    produce();
    up(s2);
}

Y el proceso P2 ejecuta el siguiente código:

while(1) {
    down(s2);
    consume();
    up(s1);
}

Responda brevemente si la solución que propone es idónea justificando su respuesta.

Ver solución del ejercicio 3

Ejercicio 4

Realice el cronograma temporal que represente la ejecución de dos procesos P1 y P2. El proceso P1 ejecuta el siguiente código:

for (int i=0; i<2; i++) {
    send(msg);
    recv(msg);
}

Y el proceso P2 ejecuta el siguiente código:

for (int i=0; i<2; i++) {
    recv(msg);
    send(msg);
}

Suponga que:

  • El planificación emplea turno rotatorio estrícto con quantum de 3 unidades de ejecución.
  • Se sabe que el proceso P1 es seleccionado en primer lugar por el planificador para ejecutarse.
  • La ejecución de cada línea de código representado anteriormente supone una unidad de ejecución, por tanto, todas las instrucciones toman el mismo tiempo de ejecución.
  • El comportamiento de la primitiva send() es síncrono y el la primitiva recv() es bloqueante.

El cronograma deberá incluir qué instrucción se ejecuta en cada unidad de ejecución.

Ver solución del ejercicio 4