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()ypthread_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» }
