Laboratorio interactivo de la Clase 4: condiciones de carrera, mutex, semáforos, interbloqueos y los cuatro problemas clásicos — para tocar, romper y arreglar en vivo.
El planificador reparte la CPU entre procesos que cambian de estado constantemente. Cuando varios tocan el mismo recurso compartido sin coordinarse, aparece el caos: condiciones de carrera e interbloqueos.
Hacé clic en cada transición para verla animada.
Es el fragmento de código donde un proceso accede a un recurso compartido. Para que sea seguro, deben cumplirse tres condiciones:
Solo un proceso a la vez puede estar dentro de la sección crítica.
Nadie que esté afuera puede bloquear a los que quieren entrar.
El que espera para entrar no puede esperar para siempre.
Un semáforo es un contador:
wait()
resta (o bloquea) y
signal()
suma (o despierta). Valor inicial: 3 recursos.
Candado de un solo dueño. Quien lo toma entra a la sección crítica;
el resto espera. En el lab: flock -x y
Mutex.WaitOne().
Contador que regula cuántos procesos acceden. Binario (0/1) ≈ mutex · Contador permite N procesos (ej.: sillas del barbero).
Estructura que combina exclusión mutua + sincronización con métodos sincronizados. El compilador/runtime hace el trabajo sucio.
Recreamos la Parte 2 y 3 del práctico: diez procesos ejecutan en paralelo leer → dormir 0.1s → escribir valor+1 sobre el mismo archivo. ¿Llega a 10? Spoiler: sin lock, casi nunca.
Filósofos comensales, productor–consumidor, el barbero dormilón y un grafo de interbloqueo paso a paso. Cada uno tiene controles, métricas y bitácora en vivo.
Cinco filósofos alternan pensar y comer. Para comer necesitan los dos tenedores, pero solo hay uno entre cada par. En modo caos todos toman primero el izquierdo… y ya sabés cómo termina. 😉
Modo CAOS: todos toman primero el tenedor izquierdo → riesgo de espera circular.
El productor llena el búfer, el consumidor lo vacía. Si está lleno, el productor se bloquea; si está vacío, se bloquea el consumidor. Los semáforos llevan la cuenta.
Si no hay clientes, el barbero duerme 😴. Si llegan, los sienta a esperar; si no hay sillas libres, el cliente se va. Mové el slider para saturar la barbería.
Grafo de asignación de recursos: flecha sólida = recurso asignado, punteada = recurso solicitado. Si se forma un ciclo… game over. También podés ver la solución.
Escenario de la diapositiva: P1 llega en t=0 (ráfaga 6), P2 en t=2 (ráfaga 3) y P3 en t=4 (ráfaga 2). Compará los cuatro algoritmos y sus tiempos de espera.
| Proceso | Llegada | Ráfaga | Fin | Retorno | Espera |
|---|
Todo lo que usamos en el ejercicio, organizado por parte y por sistema operativo. El botón copia el comando al portapapeles.
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
sudo apt install bc (Debian/Ubuntu) o
brew install bc (macOS).
q. Limpiar procesos:
pkill -f "while true" /
Get-Job | Stop-Job.
Tres desafíos con el vocabulario exacto de la clase. Gánalos y los conceptos quedan anclados.
10 preguntas · cada respuesta incluye una explicación breve.
Arrastrá (o clic en ficha y luego clic en casillero) las líneas del incremento sincronizado al orden correcto.
Clic en un concepto y después en su definición. Si falla, tiembla (como un proceso sin scheduler).