¿Qué es la sincronización de procesos?
La sincronización de procesos es la tarea de coordinar la ejecución de los procesos de manera que dos procesos no puedan tener acceso a los mismos datos y recursos compartidos.
Es especialmente necesario en un sistema multiproceso cuando varios procesos se ejecutan juntos y más de un proceso intenta obtener acceso al mismo recurso o datos compartidos al mismo tiempo.
Esto puede conducir a la inconsistencia de los datos compartidos. Por lo tanto, el cambio realizado por un proceso no se refleja necesariamente cuando otros procesos acceden a los mismos datos compartidos. Para evitar este tipo de inconsistencia de datos, los procesos deben estar sincronizados entre sí.
En este tutorial del sistema operativo, aprenderá:
- ¿Qué es la sincronización de procesos?
- ¿Cómo funciona la sincronización de procesos?
- Secciones de un programa
- ¿Qué es el problema de la sección crítica?
- Reglas para la sección crítica
- Soluciones a la sección crítica
¿Cómo funciona la sincronización de procesos?
Por ejemplo, el proceso A cambia los datos en una ubicación de la memoria mientras otro proceso B está tratando de leer los datos desde la misma 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
A continuación, se muestran 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.
- Sección de Salida: La sección de Salida permite que el otro proceso que está esperando en la Sección de Entrada, ingrese a las Secciones Críticas. También comprueba que un proceso que finalizó su ejecución debe eliminarse a través de esta Sección.
- Sección Restante: Todas las demás partes del Código, que no se encuentran en 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 se puede acceder mediante un proceso de señal en un momento específico. La sección consta de recursos de datos compartidos a los que otros procesos debían acceder.
- 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 proceso. Otros procesos, que esperan para ejecutar su sección crítica, necesitan 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 extendidos. No se puede ejecutar más de un proceso en su sección crítica a la vez.
- Progreso: esta solución se usa cuando nadie está en la sección crítica y alguien quiere ingresar. Entonces esos procesos que no están en su sección de recordatorio deben decidir quién debe ingresar, en un tiempo finito.
- Espera limitada: cuando un proceso solicita ingresar a la sección crítica, existe un límite específico sobre la cantidad de procesos que pueden ingresar a su sección crítica. Entonces, cuando se alcanza el límite, el sistema debe permitir que la solicitud al proceso entre en su sección crítica.
Soluciones a la sección crítica
En la Sincronización de Procesos, 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 ampliamente utilizada para problemas de secciones críticas. Este algoritmo fue desarrollado por un científico informático Peterson, por eso se denomina solución de Peterson.
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 único proceso en la sección crítica en un momento específico.
Ejemplo
PROCESS PiFLAG[i] = truewhile( (turn != i) AND (CS is !free) ){ wait;}CRITICAL SECTION FLAG[i] = falseturn = j; //choose another process to go to CS
- Suponga que hay N procesos (P1, P2,… PN) y cada proceso en algún momento requiere ingresar a la Sección Crítica
- Se mantiene una matriz FLAG [] de tamaño N, que por defecto es falsa. Entonces, siempre que un proceso requiera ingresar a la sección crítica, debe establecer su bandera como verdadera. Por ejemplo, si Pi quiere ingresar, establecerá BANDERA [i] = VERDADERO.
- Otra variable llamada TURN indica el número de proceso que actualmente espera ingresar en la CS.
- El proceso que entra en la sección crítica al salir cambiaría 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 mientras sale del turno = 3 y, por lo tanto, P3 sale del bucle de espera.
Hardware de sincronización
Algunas veces, los problemas de la Sección Crítica también se resuelven mediante hardware. Algunos sistemas operativos ofrecen una funcionalidad de bloqueo donde un proceso adquiere un bloqueo al ingresar a la sección Crítica y lo libera después de salir.
Entonces, cuando otro proceso está tratando de ingresar a la sección crítica, no podrá ingresar porque está bloqueado. Solo puede hacerlo si está libre adquiriendo la cerradura.
Cerraduras Mutex
El hardware de sincronización no es un método simple de implementar para todos, por lo que también se introdujo un método de software estricto conocido como Mutex Locks.
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 candado.
Solución de semáforo
El semáforo es simplemente una variable que no es negativa y 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, que puede ser señalado por otro hilo.
Utiliza dos operaciones atómicas, 1) esperar y 2) señal para la sincronización del proceso.
Ejemplo
WAIT ( S ):while ( S <= 0 );S = S - 1;SIGNAL ( S ):S = S + 1;
Resumen:
- La sincronización de procesos 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.
- Cuatro elementos de la sección crítica son 1) Sección de entrada 2) Sección crítica 3) Sección de salida 4) Sección de recordatorio
- Una sección crítica es un segmento de código al que se puede acceder mediante un proceso de señal en un momento específico.
- Tres reglas obligatorias que deben hacerse cumplir por sección crítica son: 1) Exclusión mutua 2) Solución del proceso 3) Espera limitada
- La exclusión mutua es un tipo especial de semáforo binario que se utiliza para controlar el acceso al recurso compartido.
- La solución de proceso se utiliza cuando nadie está en la sección crítica y alguien quiere entrar.
- En la solución de espera limitada, después de que un proceso solicita ingresar a su sección crítica, hay un límite para la cantidad de otros procesos que pueden ingresar a su sección crítica.
- La solución de Peterson es una solución ampliamente utilizada para problemas de secciones críticas.
- Los problemas de la sección crítica también se resuelven mediante la sincronización del hardware
- El hardware de sincronización no es un método simple de implementar para todos, por lo que también se introdujo el estricto método de software conocido como Mutex Locks.
- El semáforo es otro algoritmo o solución al problema de la sección crítica.