Sistemes Operatius - Seminari 2 1. Si el valor de la variable X es inicialmente 10, que valores puede tener X al final de la ejecución del siguiente programa con dos procesos. X:=10 Process P1 … X:=X+2; … end Process P2 … X:=X*2; … end 2. Explica cuales son las condiciones que debe satisfacer el problema del productor consumidor. 3. Explica porque el programa siguiente no soluciona el problema del productor consumidor (bouded-buffer problem) item buffer[BUFFER_SIZE]; int in = 0; int out = 0; int counter = 0; Producer; while (1) { while (counter == BUFFER_SIZE) ; /* do nothing */ buffer[in] = nextProduced; in = (in + 1) % BUFFER_SIZE; counter++; } Consumer; while (1) { while (counter == 0) ; /* do nothing */ nextConsumed = buffer[out]; out = (out + 1) % BUFFER_SIZE; counter--; } 4. Explica cuales son las 3 condiciones que debe satisficer el problema de la sección crítica. 5. Los dos procesos, P0 y P1, comparten las variables turn_0 y turn_1 (inicialmente con valor false). La estructura del proceso Pi (i=0 o 1) se muestra a continuación; el otro proceso es Pj (j=1 o 0).¿El algoritmo satisface los tres requisitos del problema de la sección crítica? Process Pi repeat turn_i := true; while turn_j do no-op; critical section turn_i := false; remainder section until false; 6. Asume turn=0 inicialmente. El siguiente programa con dos procesos P0 y P1 satisface los requisites del problema de la sección crítica?. Process Pi repeat while turn ≠ i do no-op; critical section turn := j ; remainder section until false; 7. Misma pregunta que 6. Process Pi repeat flag [i] := true; turn := j ; while (flag [j] and turn = j) do no-op; critical section flag [i] := false; remainder section until false; 8. (a) Explica cómo puede servir desactivar interrupciones para implementar primitivas de sincronización. (b) Explica por qué esta solución no resulta apropiada en un sistema monoprocesador si hay que usar las primitivas de sincronización en programas de nivel de usuario. 9. Exlica por qué los bloqueos mediante bucle sin fin (spinlocks) no son apropiados para sistemas monoprocesador, aunque se usen con frecuencia en los sistemas multiprocesador.