Ir al contenido

E1 2024 (I y II)

Ambos traen solucionario oficial. Aquí están resumidos, con los errores del oficial marcados.

P1 (3 pts) · ¿Cuántos «Hello!»? (thread_print)

Sección titulada «P1 (3 pts) · ¿Cuántos «Hello!»? (thread_print)»
Ver solución

7 (opción 2). El oficial no da el número; lo verifiqué con una ejecución de prueba. Recorre el árbol evento por evento en el simulador de fork.

Ver solución

Mutex ✔, deadlock ✘, starvation ✘. Demostración y traza en algoritmos. El intercalador encuentra el deadlock solo.

Ver solución

Hay deadlock: el buyer hace wait(restock) sosteniendo resource. La solución es un semáforo contador de stock que se espera antes de tomar resource. Ver productor–consumidor y el simulador con el escenario «Stock».

Ver solución

Deadlock si toma arete un miembro de cada pareja (por ejemplo G1, G2, G3 y G5). ⚠ El ejemplo oficial «1, 2, 3 y 6» es incorrecto, porque 1 y 6 son pareja. La corrección es pedir los aretes de a pares y como unidad después de la cita. Ver aretes.

Ver solución
  • Operación atómica: indivisible, no puede interrumpirse ni observarse a medias. Ejemplo de spinlock: while (test_and_set(&lock)); SC; lock = 0;.
  • Mutex en rutinas del kernel que no pueden bloquear: spinlocks, porque no duermen y la SC es corta (en monoprocesador, además, se deshabilitan interrupciones).
  • Memory layout: code (instrucciones), data (globales y estáticas), heap (dinámico, crece ↑), stack (llamadas, retornos y locales, crece ↓).
  • Requisitos de mutex: los 6 de Stallings. Ver requisitos.
  • Deadlock: exclusión mutua, hold and wait, no preemption y espera circular. (El oficial solo lista tres; la espera circular es la cuarta.)
Ver solución

4 (opción 1). Explicación paso a paso en fork.

Ver solución

Código oficial limpio, explicación y dos bugs del oficial (la sala incompleta no se reinicia y cust[i] = pthread_create(…)) en cine.

Ver solución

Es el problema de los fumadores: un semáforo por chef y otro para el master. El oficial despierta a los 3 y cada uno revisa la mesa en un do…while. Ver ramen.

Ver solución
  • Monolítico vs microkernel: el monolítico tiene todo en espacio de kernel (rápido, pero un fallo tumba el sistema); el microkernel deja lo mínimo en el kernel y los servicios en espacio de usuario comunicados por IPC (más lento, pero robusto). Para robustez ante fallas: microkernel.
  • Condiciones de deadlock: las 4 de Coffman. ¿trylock evita el deadlock? Rompe hold and wait (si no obtengo el segundo lock, suelto el primero), así que elimina el deadlock, pero puede causar starvation o livelock.

Fuente ·for_partial/E1_OS_2024_I__Respuestas_.pdf · for_partial/E1_OS_2024_II__Solucionario_.pdf