Fundamentos de Sistemas Operativos: Concurrencia, Procesos y Threads

Detección de interbloqueo (Deadlock)

  • sem_wait(): bloquea si el valor es 0.
  • sem_post(): incrementa el valor o despierta a un proceso.
  • Si todos esperan y nadie ejecuta post, se produce un deadlock.
  • Recomendación: leer los procesos en paralelo, no uno entero y luego otro.

Mutex e interbloqueo

  • pthread_mutex_lock() y pthread_mutex_unlock().
  • Garantizan la exclusión mutua.
  • El orden de adquisición de los locks es crítico para evitar deadlocks no deterministas en entornos de ejecución concurrente.

Problema del productor-consumidor con semáforos

  • mutex = 1: protege el acceso al búfer (solo uno entra en la sección crítica).
  • empty = N: cuenta los huecos libres en el búfer.
  • full = 0: cuenta las posiciones ocupadas.

Semáforo binario

  • P(S) = wait(S)
  • V(S) = signal(S) (suma 1)

Gestión de memoria y ejecución

Información de la pila (Stack)

En una llamada a función, el stack almacena las variables locales, parámetros y la dirección de retorno para saber a qué instrucción volver al terminar la función.

Locks en kernel

En locks implementados con sleep/wakeup, Release() debe despertar a un thread bloqueado si existe; solo libera el lock si no hay nadie esperando.

Operaciones atómicas

Una operación atómica se ejecuta completamente e indivisiblemente: ningún otro thread puede interrumpirla ni observar estados intermedios mientras se realiza.

Concurrencia y Threads

Race condition

Una race condition ocurre cuando varios threads acceden y modifican datos compartidos concurrentemente y el resultado depende del orden de ejecución.

Recursos compartidos entre threads

Los threads de un mismo proceso comparten el código, las variables globales y el heap, pero cada thread tiene sus propios registros, PC (Program Counter) y stack.

Threads dentro de un proceso

Los threads permiten ejecutar múltiples secuencias de instrucciones dentro del mismo proceso compartiendo el mismo espacio de direcciones (address space). Nota: los mains también son threads.

TCB y cambio de contexto

El TCB (Thread Control Block) almacena el contexto de ejecución del thread (PC, registros y stack pointer) para poder pausar un thread y reanudarlo después en un cambio de contexto.

Proceso y address space

Un proceso es una instancia de un programa con su propio address space y uno o más threads que comparten recursos como código, heap y variables globales.

System calls y dual mode

Las aplicaciones en modo usuario no acceden directamente al hardware: realizan una system call para que el kernel acceda al dispositivo en modo kernel.

Bootloader y arranque del sistema

El bootloader localiza el kernel, verifica/carga su imagen y le transfiere el control para iniciar el sistema operativo.

Scripts Bash: Argumentos posicionales

  • $0: nombre del script.
  • $1: primer argumento.
  • $2: segundo argumento.
  • $#: número de argumentos.
  • $*: todos los argumentos.
  • $@: todos los argumentos separados individualmente.

Planificación y Concurrencia

Concurrencia en mononúcleo

En un sistema mononúcleo, la concurrencia consiste en compartir la CPU entre threads mediante cambios de contexto rápidos, dando apariencia de ejecución simultánea.

Planificador y TCB

En sistemas 1:1, el planificador trabaja con TCBs, moviendo threads entre estados como Ready, Running y Waiting.

FCFS (First Come First Serve)

En FCFS, un proceso largo puede bloquear la CPU mucho tiempo y hacer que los procesos cortos esperen demasiado (efecto convoy).

Tiempo de espera (Te)

Te = Tf - Ti - TCPU - TE/S
Donde Tf es tiempo de finalización, Ti tiempo de llegada, TCPU tiempo usando CPU y TE/S tiempo haciendo E/S.

Round Robin

  • IR: interrupción de reloj.
  • IH: interrupción hardware de fin de E/S.
  • IS: interrupción software (ej. iniciar E/S o terminar).
  • El quantum se mide en interrupciones de reloj, no en instrucciones.
  • CPU y E/S pueden ejecutarse en paralelo.
  • Las prioridades de interrupción importan (IH > IR > IS).
  • Un proceso bloqueado por E/S vuelve a READY cuando aparece IH.
  • El cambio de proceso ocurre cuando se agota el quantum o por IS (abandono voluntario).
  • Las tablas deben leerse por columnas (instantes de tiempo).

Definiciones finales

Proceso vs. Thread

Un proceso es una instancia de un programa en ejecución y la unidad de aislamiento de memoria; un thread es la unidad de ejecución planificable dentro de un proceso.

Device drivers: Top Half y Bottom Half

El Top Half inicia la operación de E/S y puede dormir esperando el resultado; el Bottom Half atiende la interrupción hardware del dispositivo y despierta al Top Half cuando la E/S termina» }

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.