Guardado ✓
Instrucciones generales para la tarea
Progreso
📋 Descripción oficial

Sistema de facturación — 3 procesos concurrentes, 2 recursos compartidos

Una empresa pequeña tiene un sistema de facturación que ejecuta tres procesos de forma concurrente. Todos compiten por dos recursos que solo admiten uso exclusivo (un proceso a la vez):

R1 — Archivo A (registros.db) R2 — Impresora de red

P1 — Facturador

  1. Adquiere el Archivo A (lee las ventas del día).
  2. Procesa y formatea la factura internamente.
  3. Solicita la Impresora para imprimir la factura.
  4. Imprime y libera la Impresora.
  5. Cierra y libera el Archivo A.

P2 — Auditor

  1. Adquiere la Impresora (imprime la portada del informe).
  2. Solicita el Archivo A para escribir el registro de auditoría.
  3. Lee y escribe los datos de auditoría.
  4. Libera el Archivo A.
  5. Libera la Impresora.

P3 — Respaldo

  1. Espera hasta que el Archivo A quede libre.
  2. Lo adquiere y copia los registros a un archivo de respaldo.
  3. Libera el Archivo A.

No usa la Impresora, pero puede sufrir inanición si P1 y P2 la monopolizan indefinidamente.

⚠ Secuencia problemática — posible interbloqueo El SO intercala los procesos así:
1. P1 adquiere Archivo A → continúa procesando.
2. P2 adquiere Impresora → imprime portada.
3. P1 solicita la Impresorabloqueado (P2 la tiene).
4. P2 solicita el Archivo Abloqueado (P1 lo tiene).
En este punto ninguno puede avanzar: hay espera circular. Además, P3 nunca obtiene el Archivo A mientras dura el bloqueo → riesgo de inanición.
Sección 1 — Entendiendo el escenario de concurrencia
1

Reescribiendo el caso con tus palabras

Concurrencia Procesos / Hilos ⏱ 10–15 min Base conceptual
Ya tienes el caso oficial (bloque azul arriba). La primera tarea es que lo interiorices con tus propias palabras: qué hace cada proceso (P1 Facturador, P2 Auditor, P3 Respaldo), en qué orden usan el Archivo A y la Impresora, y por qué esa combinación puede ser problemática.

Lo que debes hacer

  • Escribe una versión resumida del caso en máximo 8–10 líneas, usando tus propias palabras.
  • Da nombres útiles a los procesos (por ejemplo, Plectura, Pescritura, Pimpresión).
  • Enumera explícitamente qué recursos comparte cada proceso (p. ej. “P1 usa Archivo A y luego Impresora”).
Tu resumen del escenario de concurrencia
★ Tip — Imagina que estás explicándole el caso a alguien que nunca ha visto concurrencia. Si entiende qué hace cada proceso y qué recursos se comparten, el resumen está bien.
Sección 2 — Sección crítica y exclusión mutua
2

Identificando la sección crítica

Sección crítica Exclusión mutua ⏱ 15–20 min Medio
La tarea te pide "identificar la sección crítica" y "definir qué significa exclusión mutua en el caso". Aplícalo al escenario oficial: detecta los fragmentos de los procesos P1, P2 y P3 donde acceden de forma exclusiva al Archivo A o a la Impresora.

Paso 1 — Marca la sección crítica

  • Escribe un pseudocódigo breve de cada proceso, con énfasis en las partes donde entra a recursos compartidos.
  • Usa comentarios para marcar las posibles secciones críticas (por ejemplo, // INICIO sección crítica ... // FIN sección crítica).
Pseudocódigo de procesos con secciones críticas marcadas

Paso 2 — Define exclusión mutua en tu caso

  • Explica con tus palabras qué significaría violación de exclusión mutua en este escenario.
  • Describe al menos un problema concreto que ocurriría (datos inconsistentes, sobrescrituras, impresión corrupta, etc.).
Definición de exclusión mutua en este escenario
★ Extra — Intenta diferenciar entre “región crítica por datos” (variables compartidas) y “región crítica por dispositivo” (como la impresora física que sólo puede usar un proceso a la vez).
Sección 3 — Traza de eventos, interbloqueo e inanición
3

Construyendo una traza de pasos y detectando interbloqueo

Interbloqueo Inanición ⏱ 25–30 min Medio
La tarea te pide "determinar si aparece interbloqueo o riesgo de inanición, y justificar la respuesta usando una traza de pasos". Usa la secuencia problemática descrita en la descripción oficial (pasos 1–4 del bloque rojo) para completar la tabla: registra cada acción de P1, P2 y P3, qué recursos posee cada uno después de cada paso y en qué estado queda.
Traza de eventos — completa según tu caso
Paso Proceso / Hilo Acción sobre recurso Recursos que posee tras la acción Estado del proceso
1
2
3
4
5
6

Paso 1 — Diseña una traza con interbloqueo o riesgo claro

  • Usa la tabla para describir una posible secuencia de ejecución.
  • Incluye al menos un punto donde un proceso quede esperando por un recurso que otro proceso ya tiene.
  • Procura que quede claro qué recursos posee cada proceso en cada paso.
Explica dónde aparece el interbloqueo o la inanición
★ Extra — Si conoces el grafo de asignación de recursos, describe verbalmente cómo sería: qué nodos representarían procesos, qué nodos representarían recursos y qué ciclos identificarías.
Sección 4 — Propuesta de solución: ordenamiento y semáforos
4

Reglas de ordenamiento de recursos y buenas prácticas

Prevención de interbloqueo ⏱ 15–20 min Medio
En el nivel base de la tarea se espera que propongas una solución en términos de reglas de ordenamiento de recursos y buenas prácticas. Para el caso oficial, la pregunta clave es: ¿deberían P1, P2 y P3 pedir siempre primero el Archivo A y luego la Impresora, o viceversa? Explica por qué ese orden rompe la espera circular que ocurre entre P1 y P2.

Reglas de ordenamiento y buenas prácticas

  • Define un orden global de recursos (ejemplo: Archivo A < Impresora).
  • Explica cómo cada proceso debe seguir ese orden para evitar ciclos de espera circular.
  • Menciona al menos dos buenas prácticas adicionales (tiempos de espera, liberación ordenada, evitar secciones críticas demasiado largas, etc.).
Tus reglas de ordenamiento y buenas prácticas
★ Extra — Indica a qué condiciones clásicas de interbloqueo (mutua exclusión, retención y espera, no expropiación, espera circular) afecta tu propuesta.
5

Pseudocódigo con semáforos o monitores (nivel extendido)

Semáforos / Monitores ⏱ 30–35 min Avanzado
El nivel extendido de la tarea solicita que propongas una solución en pseudocódigo usando semáforos o monitores para garantizar exclusión mutua y eliminar el interbloqueo. Adapta el esqueleto de abajo al caso oficial: declara semáforos para el Archivo A y la Impresora, y escribe el código de P1, P2 y P3 respetando el orden global que definiste en el Reto 4.
// Ejemplo de estructura con semáforos (adáptalo a tu caso) semaforo mutexArchivoA = 1 semaforo mutexImpresora = 1 Proceso P1() { while (true) { // trabajo no crítico ... // Orden propuesto: primero Archivo A, luego Impresora wait(mutexArchivoA) // sección crítica sobre Archivo A ... wait(mutexImpresora) // sección crítica que usa Archivo A + Impresora ... signal(mutexImpresora) signal(mutexArchivoA) } } Proceso P2() { while (true) { // trabajo no crítico ... // Sigues el mismo orden global de recursos wait(mutexArchivoA) ... wait(mutexImpresora) ... signal(mutexImpresora) signal(mutexArchivoA) } }

Qué se espera en tu pseudocódigo

  • Declara claramente los semáforos o primitivas de sincronización que vas a usar.
  • Muestra en qué punto del pseudocódigo se entra a la sección crítica y dónde se sale.
  • Respeta el ordenamiento global de recursos que definiste en el reto anterior.
  • Agrega comentarios breves justificando por qué tu diseño evita (o reduce significativamente) la posibilidad de interbloqueo.
Tu pseudocódigo con semáforos / monitores
★ Extra — Si quieres ir más allá, intenta modelar la sección crítica con un monitor con condición de espera para la Impresora, o añade un contador de intentos para detectar inanición potencial.
Reflexión final · 10 minutos

Conecta la tarea con sistemas reales

1. Describe un ejemplo de la vida real (fuera del aula) donde dos o más “procesos” compitan por recursos limitados y pueda ocurrir interbloqueo.

2. ¿En qué parte concreta de tu diseño (reglas o semáforos) consideras que se reduce más el riesgo de interbloqueo? Justifica.

3. ¿Qué concepto sientes que aún no dominas bien: exclusión mutua, interbloqueo, inanición o semáforos? ¿Qué pregunta puntual harías en clase?