Conceptos Fundamentales de Sistemas Operativos: Procesos, Threads y Sincronización

Conceptos Básicos de Ejecución

¿Qué es un thread?

Es la unidad básica de ejecución de un programa. Contiene su propio contador de programa (PC), registros, pila (stack) y contexto de ejecución.

¿Qué es un proceso?

Es una instancia de un programa formada por un espacio de direcciones (address space) protegido y uno o más threads.

Diferencia entre proceso y thread

  • Proceso: Posee memoria independiente y mayor aislamiento.
  • Thread: Comparte memoria y recursos dentro del mismo proceso.

Sincronización y Concurrencia

¿Qué es una sección crítica?

Parte del código que accede a recursos compartidos y que solo puede ejecutar un thread simultáneamente.

¿Qué es exclusión mutua?

Mecanismo que garantiza que solo un thread entre en la sección crítica a la vez.

¿Qué es un lock?

Mecanismo de sincronización utilizado para proteger recursos compartidos, evitando accesos concurrentes.

¿Qué es una operación atómica?

Operación indivisible que se ejecuta completamente sin posibilidad de ser interrumpida a mitad de su proceso.

¿Qué hace test-and-set?

Instrucción atómica que lee y modifica una variable para implementar locks y sincronización.

Gestión de Errores y Estados

¿Qué es deadlock?

Situación en la que varios threads esperan recursos entre sí, formando una espera circular infinita.

Diferencia entre deadlock y starvation

  • Deadlock: Espera circular que no puede resolverse sin intervención externa.
  • Starvation: Un thread espera indefinidamente recursos mientras otros siguen avanzando.

Planificación y Ciclo de Vida

¿Qué es scheduling?

Proceso mediante el cual el sistema operativo decide qué thread o proceso obtiene la CPU.

¿Qué es un context switch?

Cambio de ejecución entre threads o procesos guardando y restaurando el contexto de CPU.

¿Qué hace el dispatcher?

Realiza cambios de contexto y entrega la CPU al siguiente thread seleccionado.

Estados típicos de un thread

Ready (listo), Running (en ejecución), Waiting (esperando) y Finished (finalizado).

¿Qué es CPU burst?

Periodo durante el cual un thread ejecuta instrucciones usando la CPU antes de bloquearse o cederla.

Gestión de Procesos (API)

¿Qué hace fork()?

Crea un nuevo proceso hijo copiando el proceso actual. Ambos continúan ejecutándose desde el punto del fork.

  • >0: Estamos en el padre y devuelve el PID del hijo.
  • 0: Estamos en el hijo.
  • <0: Error al crear el proceso.

¿Qué hace exec()?

Reemplaza el programa actual por otro nuevo manteniendo el mismo proceso.

¿Qué hace wait()?

Bloquea al proceso padre hasta que finaliza uno de sus hijos.

Comunicación y Optimización

¿Qué es productor-consumidor?

Problema clásico de sincronización donde unos procesos insertan datos en un buffer y otros los extraen.

¿Qué problema tiene el busy-waiting?

El thread consume CPU continuamente mientras espera un recurso o lock.

¿Qué ventaja tiene futex?

Evita llamadas innecesarias al kernel cuando el lock está libre, mejorando el rendimiento.

¿Qué es un pipe?

Mecanismo IPC que permite comunicar procesos mediante un canal unidireccional de datos.

Diferencia entre pipes y colas

  • Pipe: Flujo continuo de datos.
  • Cola: Mensajes independientes almacenados en orden.

¿Qué hace poll()?

Permite esperar eventos de múltiples descriptores de fichero simultáneamente.

Conceptos Avanzados

¿Qué es un semáforo?

Mecanismo de sincronización basado en un contador usado para coordinar threads o procesos.

Diferencia entre mutex y semáforo

  • Mutex: Solo el thread dueño puede liberarlo.
  • Semáforo: Funciona mediante contador y señalización.

¿Qué es una condición de carrera (race condition)?

Situación donde el resultado depende del orden de ejecución de los threads.

¿Qué significa dormir un thread (sleep/block)?

El thread deja la CPU y pasa a estado de espera hasta que ocurra un evento.

Diferencia entre concurrencia y paralelismo

  • Concurrencia: Varias tareas progresan aparentemente a la vez.
  • Paralelismo: Varias tareas ejecutándose físicamente al mismo tiempo.