Introducción de Sincronización de Procesos

 

Sobre la base de la sincronización, los procesos se clasifican en uno de los dos tipos siguientes:

  • Proceso Independiente : La ejecución de un proceso no afecta la ejecución de otros procesos.
  • Proceso cooperativo : Un proceso que puede afectar o ser afectado por otros procesos que se ejecutan en el sistema.

El problema de sincronización de procesos surge en el caso del proceso cooperativo también porque los recursos se comparten en los procesos cooperativos.   

Condición de carrera:

 Cuando más de un proceso está ejecutando el mismo código o accediendo a la misma memoria o cualquier variable compartida en esa condición, existe la posibilidad de que la salida o el valor de la variable compartida sea incorrecto, por lo que todos los procesos corren para decir eso. mi salida es correcta, esta condición se conoce como condición de carrera. Varios procesos acceden y procesan las manipulaciones sobre los mismos datos al mismo tiempo, luego el resultado depende del orden particular en el que se lleva a cabo el acceso. Una condición de carrera es una situación que puede ocurrir dentro de una sección crítica. Esto sucede cuando el resultado de la ejecución de varios subprocesos en la sección crítica difiere según el orden en que se ejecutan los subprocesos. Las condiciones de carrera en las secciones críticas se pueden evitar si la sección crítica se trata como una instrucción atómica. También,   

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 a la vez. La sección crítica contiene variables compartidas que deben sincronizarse para mantener la coherencia de las variables de datos. Entonces, el problema de la sección crítica significa diseñar una forma para que los procesos cooperativos accedan a los recursos compartidos sin crear inconsistencias en los datos. 

critical section problem 

En la sección de ingreso, el proceso solicita ingreso en la Sección Crítica.

Cualquier solución al problema de la sección crítica debe satisfacer tres requisitos:

  • Exclusión mutua : si un proceso se ejecuta en su sección crítica, ningún otro proceso puede ejecutarse en la sección crítica.
  • Progreso : si ningún proceso se está ejecutando en la sección crítica y otros procesos están esperando fuera de la sección crítica, entonces solo aquellos procesos que no se están ejecutando en su sección restante pueden participar en la decisión de cuál ingresará a continuación en la sección crítica, y la selección puede no se pospone indefinidamente.
  • Espera limitada : debe existir un límite en la cantidad de veces que otros procesos pueden ingresar a sus secciones críticas después de que un proceso haya realizado una solicitud para ingresar a su sección crítica y antes de que se conceda esa solicitud.

Solución de Peterson: 

La solución de Peterson es una solución clásica basada en software para el problema de la sección crítica. En la solución de Peterson, tenemos dos variables compartidas:

  • bandera booleana[i]: Inicializado a FALSO, inicialmente nadie está interesado en ingresar a la sección crítica
  • turno int: El proceso cuyo turno es entrar en la sección crítica.

peterson  

 La solución de Peterson conserva las tres condiciones:

  • La exclusión mutua está asegurada ya que solo un proceso puede acceder a la sección crítica en cualquier momento.
  • El progreso también está asegurado, ya que un proceso fuera de la sección crítica no impide que otros procesos ingresen a la sección crítica.
  • La espera limitada se conserva ya que cada proceso tiene una oportunidad justa.

Desventajas de la solución de Peterson:

  • Implica una espera ocupada. (En la solución de Peterson, la declaración de código: «while (flag [j] && turn == j);» es responsable de esto. La espera ocupada no se favorece porque desperdicia ciclos de CPU que podrían usarse para realizar otras tareas).
  • Está limitado a 2 procesos.
  • La solución de Peterson no se puede utilizar en arquitecturas de CPU modernas.

Semáforos:

Un semáforo es un mecanismo de señalización y un hilo que está esperando un semáforo puede ser señalado por otro hilo. Esto es diferente a un mutex ya que el mutex solo puede ser señalado por el hilo que se llama función de espera.

Un semáforo utiliza dos operaciones atómicas, espera y señal para la sincronización del proceso.
Un semáforo es una variable entera a la que solo se puede acceder a través de dos operaciones wait() y signal().
Hay dos tipos de semáforos: semáforos binarios y semáforos de conteo.

  • Semáforos binarios: solo pueden ser 0 o 1. También se conocen como bloqueos mutex, ya que los bloqueos pueden proporcionar exclusión mutua. Todos los procesos pueden compartir el mismo semáforo de exclusión mutua que se inicializa en 1. Luego, un proceso debe esperar hasta que el bloqueo se convierta en 0. Luego, el proceso puede convertir el semáforo de exclusión mutua en 1 y comenzar su sección crítica. Cuando completa su sección crítica, puede restablecer el valor del semáforo mutex a 0 y algún otro proceso puede ingresar a su sección crítica.
  • Semáforos Contadores: Pueden tener cualquier valor y no están restringidos sobre un dominio determinado. Se pueden utilizar para controlar el acceso a un recurso que tiene una limitación en el número de accesos simultáneos. El semáforo se puede inicializar con el número de instancias del recurso. Cada vez que un proceso quiere utilizar ese recurso, comprueba si el número de instancias restantes es mayor que cero, es decir, el proceso tiene una instancia disponible. Luego, el proceso puede ingresar a su sección crítica, disminuyendo así el valor del semáforo de conteo en 1. Una vez que el proceso finaliza con el uso de la instancia del recurso, puede salir de la sección crítica, agregando así 1 al número de instancias disponibles. del recurso

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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