Procesos Concurrentes: Comunicación, Sección Crítica y Exclusión Mutua en Sistemas Operativos

Enviado por Comunidad Xuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 3,73 KB

Procesos concurrentes

Son comunes a un proceso. Les permiten utilizar el mismo espacio de memoria y rango de direcciones, por lo que simplifican la estructura del programa.

El concepto de hilos forma parte de algunos lenguajes de programación (como Java), que permiten realizar programas con hilos o hebras. Las interfaces gráficas suelen usar este método.

Comunicación entre procesos

Cuando hay más de un proceso ejecutándose de manera concurrente, es necesario que haya comunicación entre los distintos procesos. Lo hacen de la siguiente manera:

1.4.1 Sección crítica

Es, en programación concurrente, la porción de código de un programa encargada de gestionar o manipular un recurso crítico o no compartible. Por ejemplo, el driver de un periférico. Solo un proceso puede estar en la sección crítica a la vez. El método más común para evitar esta situación es la denominada exclusión mutua.

1.4.2 Exclusión mutua

Los algoritmos de exclusión mutua se usan en programación para evitar que los fragmentos conocidos como secciones críticas accedan al mismo tiempo a un recurso que no puede ser compartido. Estos recursos suelen ser IRQs, colas de espera y otros tipos de datos que se emplean para la comunicación entre el código de un dispositivo o servicio y el de un programa en ejecución. Esta parte del S.O. es muy importante porque funciona de manera adecuada.

La mayoría de los métodos de exclusión mutua intentan reducir la latencia y la espera en las colas correspondientes, es decir, aligerar la realización de los procesos. A pesar de que esta es necesaria, existen efectos colaterales derivados de ésta:

  • Interbloqueo: el efecto que provoca un proceso al intentar monopolizar un recurso determinado.

Algoritmos para implementar la exclusión mutua y evitar el interbloqueo

  • Semáforos: son variables de tipo binario (0/1) que disponen de una condición que registra si un recurso está disponible o no. 1 = dispositivo disponible; 0 = dispositivo ocupado. Cada dispositivo tiene asociada una de éstas.

Sobre esta variable semáforo se pueden realizar 3 posibles acciones:

  • Inicialización: esta operación se produce cuando se inicializa el dispositivo, normalmente con el valor 1.
  • Bloqueo (wait): en este caso se plantea una condición en la cual: si la variable semáforo es 1, se puede utilizar el dispositivo, procediendo a realizar la operación llamada down, con lo cual la variable semáforo pasa a valer 0. Si, por el contrario, la variable semáforo vale 0, entonces el proceso queda bloqueado (wait) hasta que se comprueba que la variable semáforo es 1.
  • Signal: en este caso se comprueba desde la cola de espera que la variable semáforo vale 0 y se realiza la operación up, con lo cual se liberaliza el dispositivo y la variable semáforo vale 1. Este método solo evita la exclusión mutua.
  • Monitores: son un conjunto de procedimientos que proporcionan acceso a un recurso determinado evitando la exclusión mutua y el interbloqueo, enviando señales de expulsión a los procesos que intenten monopolizar un recurso o dispositivo. Los monitores también proporcionan un mecanismo de sincronización de tareas a base de utilizar señales, evitando que se produzca un bloqueo de un proceso sobre un recurso.

Sistema entre los procesos que lo solicitan

  • Planificador a largo plazo: consiste en determinar qué trabajos se admiten en el sistema para ser ejecutados y son almacenados automáticamente en memoria. Por otro lado,