Proceso Synccronización: Problema de sección crítica en el sistema operativo
⚡ Resumen inteligente
Proceso SyncLa cronificación consiste en coordinar la ejecución de procesos para que ningún proceso acceda simultáneamente a los mismos datos o recursos compartidos. Previene la inconsistencia de datos en sistemas multiproceso controlando el acceso a la sección crítica.

¿Qué es el proceso? Sync¿hronización?
Proceso Synchronización es la tarea de coordinar la ejecución de procesos de manera que dos procesos no puedan tener acceso a los mismos datos y recursos compartidos.
Resulta especialmente necesario en un sistema multiproceso cuando varios procesos se ejecutan simultáneamente y más de un proceso intenta acceder al mismo recurso o dato compartido al mismo tiempo.
Esto puede provocar inconsistencias en los datos compartidos. Por lo tanto, un cambio realizado por un proceso no se refleja necesariamente cuando otros procesos acceden a los mismos datos. Para evitar este tipo de inconsistencia, los procesos deben estar sincronizados entre sí.
Cómo proceso Sync¿Funciona la cronización?
Por ejemplo, el proceso A está cambiando los datos en una ubicación de memoria mientras otro proceso B está tratando de leer los datos de la mismo Ubicación de la memoria. Existe una alta probabilidad de que los datos leídos por el segundo proceso sean erróneos.
Secciones de un programa
Aquí están los cuatro elementos esenciales de la sección crítica:
- Sección de entrada: Es parte del proceso que decide la entrada de un proceso en particular.
- Sección crítica: Esta parte permite que un proceso ingrese y modifique la variable compartida.
- Salir de la sección: La sección de Salida permite que los demás procesos que esperan en la Sección de Entrada accedan a la Sección Crítica. Asimismo, verifica que un proceso que haya finalizado su ejecución deba ser eliminado a través de esta sección.
- Sección restante: Todas las demás partes de la CodeLas secciones que no pertenecen a la Sección Crítica, de Entrada y Salida se conocen como la Sección Restante.
¿Qué es el problema de la sección crítica?
Una sección crítica es un segmento de código al que solo puede acceder un proceso en un momento específico. Esta sección contiene recursos de datos compartidos a los que deben acceder otros procesos.
- La entrada a la sección crítica es manejada por la función wait() y se representa como P().
- La salida de una sección crítica está controlada por la función signal(), representada como V().
En la sección crítica, solo se puede ejecutar un único proceso. Otros procesos, que esperan ejecutar su sección crítica, deben esperar hasta que el proceso actual complete su ejecución.
Reglas para la sección crítica
La sección crítica debe hacer cumplir las tres reglas:
- Exclusión mutua: La exclusión mutua es un tipo especial de semáforo binario que se utiliza para controlar el acceso al recurso compartido. Incluye un mecanismo de herencia de prioridad para evitar problemas de inversión de prioridad extendida. No se puede ejecutar más de un proceso en su sección crítica a la vez.
- progreso: Esta solución se utiliza cuando nadie se encuentra en la sección crítica y alguien desea entrar. En ese caso, los procesos que no estén en su sección restante deberán decidir quién debe entrar, en un tiempo finito.
- Espera obligada: Cuando un proceso solicita acceder a la sección crítica, existe un límite específico en cuanto al número de procesos que pueden acceder a dicha sección. Por lo tanto, cuando se alcanza este límite, el sistema debe permitir que el proceso acceda a su sección crítica.
Soluciones a la sección crítica
En proceso Synccronización, la sección crítica juega el papel principal para que el problema se resuelva.
A continuación se muestran algunos métodos ampliamente utilizados para resolver el problema de la sección crítica.
Solución Peterson
La solución de Peterson es una solución muy utilizada para problemas de secciones críticas. Este algoritmo fue desarrollado por un científico informático llamado Peterson, de ahí su nombre.
En esta solución, cuando un proceso se ejecuta en un estado crítico, el otro proceso solo ejecuta el resto del código y puede suceder lo contrario. Este método también ayuda a garantizar que solo se ejecute un proceso en la sección crítica en un momento específico.
Ejemplo
PROCESS Pi
FLAG[i] = true
while( (turn != i) AND (CS is !free) ){ wait;
}
CRITICAL SECTION FLAG[i] = false
turn = j; //choose another process to go to CS
- Supongamos que hay N procesos (P1, P2, … PN) y que cada proceso, en algún momento, necesita entrar en la Sección Crítica.
- Se mantiene un array FLAG[] de tamaño N, cuyo valor predeterminado es falso. Por lo tanto, cada vez que un proceso necesita acceder a la sección crítica, debe establecer su indicador en verdadero. Por ejemplo, si Pi quiere acceder, establecerá FLAG[i]=TRUE.
- Otra variable llamada TURN indica el número de proceso que actualmente está esperando para ingresar al CS.
- El proceso que ingresa a la sección crítica al salir cambiaría el TURN a otro número de la lista de procesos listos.
- Ejemplo: el turno es 2, luego P2 entra en la sección crítica y al salir el turno=3 y por lo tanto P3 sale del bucle de espera.
SyncHardware de cronización
En ocasiones, los problemas de la sección crítica también se resuelven mediante hardware. Algunos sistemas operativos ofrecen una función de bloqueo en la que un proceso adquiere un bloqueo al entrar en la sección crítica y lo libera al salir de ella.
Entonces, cuando otro proceso intente ingresar a la sección crítica, no podrá ingresar porque está bloqueado. Sólo podrá hacerlo si queda libre adquiriendo el propio candado.
Cerraduras Mutex
SyncLa cronificación mediante hardware no es un método sencillo de implementar para todos, por lo que también se introdujo un método de software estricto conocido como bloqueos Mutex.
En este enfoque, en la sección de entrada del código, se obtiene un BLOQUEO sobre los recursos críticos utilizados dentro de la sección crítica. En la sección de salida se libera ese bloqueo.
Semaphore Solución
Semaphore Es simplemente una variable no negativa que se comparte entre hilos. Es otro algoritmo o solución al problema de la sección crítica. Es un mecanismo de señalización, y un hilo que espera en un semáforo puede recibir una señal de otro hilo.
Utiliza dos operaciones atómicas: 1) esperar y 2) enviar una señal para la sincronización del proceso.
Ejemplo
WAIT ( S ): while ( S <= 0 ); S = S - 1; SIGNAL ( S ): S = S + 1;


