Problemas clásicos de comunicación y sincronización
La interacción entre
procesos se plantea en una serie de situaciones clásicas de comunicación y
sincronización. Estas situaciones, junto con sus problemas, se describen a
continuación para demostrar la necesidad de comunicar y sincronizar procesos.
El problema de la sección crítica
Éste es uno de los
problemas que con mayor frecuencia aparece cuando se ejecutan procesos
concurrentes tanto si son cooperantes como independientes. Considérese un
sistema compuesto por n procesos {P1, P2, ..., PN} en el que cada uno tiene un fragmento de código, que se denomina sección crítica. Dentro de la sección crítica, los procesos pueden estar
accediendo y modificando variables comunes, registros de una base de datos, un
archivo, en general cualquier recurso compartido. La característica más
importante de este sistema es que cuando un proceso se encuentra ejecutando
código de la sección crítica, ningún otro proceso puede ejecutar en su sección.
Para resolver el
problema de la sección crítica es necesario utilizar algún mecanismo de sincronización que permita a los procesos cooperar entre ellos sin problemas. Este
mecanismo debe proteger el código de la sección crítica y su funcionamiento
básico es el siguiente:
·
Cada proceso debe
solicitar permiso para entrar en la sección crítica mediante algún fragmento de
código, que se denomina de forma genérica entrada en la sección
crítica.
·
Cuando un proceso
sale de la sección crítica debe indicarlo mediante otro fragmento de código,
que se denomina salida de la sección
crítica. Este fragmento
permitirá que otros procesos entren a ejecutar el código de la sección crítica.
La estructura general, por
tanto, de cualquier mecanismo que pretenda resolver el problema de la sección
crítica es la siguiente:
Entrada en la sección crítica
Código de la sección crítica
Salida de la sección crítica
Cualquier solución que se
utilice para resolver este problema debe cumplir los tres requisitos
siguientes:
·
Exclusión mutua: si un proceso está
ejecutando código de la sección crítica, ningún otro proceso lo podrá hacer.
·
Progreso: si ningún proceso está
ejecutando dentro de la sección crítica, la decisión de qué proceso entra en la
sección se hará sobre los procesos que desean entrar. Los procesos que no
quieren entrar no pueden formar parte de esta decisión. Además, esta decisión
debe realizarse en tiempo finito.
·
Espera acotada: debe haber un
límite en el número de veces que se permite que los demás procesos entren a
ejecutar código de la sección crítica después de que un proceso haya efectuado
una solicitud de entrada y antes de que se conceda la suya.
Problema del productor-consumidor
El problema del
productor-consumidor es uno de los problemas más habituales que surge cuando se
programan aplicaciones utilizando procesos concurrentes. En este tipo de
problemas, uno o más procesos, que se denominan productores, generan cierto tipo de
datos que son utilizados o consumidos por otros procesos, que se denominan consumidores. Un claro ejemplo de este tipo de problemas es el del compilador
que se describió anteriormente. En este ejemplo el compilador hace las
funciones de productor al generar el código ensamblador que consumirá el
proceso ensamblador para generar el código máquina. En la Figura 1.1 se
representa la estructura clásica de este tipo de procesos.
Figura 1.1. Estructura
clásica de procesos productor-consumidor.
En esta clase de problemas
es necesario disponer de algún mecanismo de comunicación que permita a los
procesos productor y consumidor intercambiar información. Ambos procesos,
además, deben sincronizar su acceso al mecanismo de comunicación para que la
interacción entre ellos no sea problemática: cuando el mecanismo de
comunicación se llene, el proceso productor se deberá quedar bloqueado hasta
que haya hueco para seguir insertando elementos. A su vez, el proceso
consumidor deberá quedarse bloqueado cuando el mecanismo de comunicación este
vacío, ya que en este caso no podrá continuar su ejecución al no disponer de
información a consumir. Por tanto, este tipo de problema requiere servicios
para que los procesos puedan comunicarse y servicios para que se sincronicen a
la hora de acceder al mecanismo de comunicación.
El problema de los lectores-escritores
En este problema existe un
determinado objeto (vea Figura 1.2), que puede ser un archivo, un registro
dentro de un archivo, etc., que va a ser utilizado y compartido por una serie
de procesos concurrentes. Algunos de estos procesos sólo van a acceder al
objeto sin modificarlo, mientras que otros van a acceder al objeto para
modificar su contenido. Esta actualización implica leerlo, modificar su
contenido y escribirlo. A los primeros procesos se les denomina lectores y a los segundos se les denomina escritores. En este tipo de
problemas existe una serie de restricciones que han de seguirse:
·
Sólo se permite que
un escritor tenga acceso al objeto al mismo tiempo. Mientras el escritor esté
accediendo al objeto, ningún otro proceso lector ni escritor podrá acceder a
él.
·
Se permite, sin
embargo, que múltiples lectores tengan acceso al objeto, ya que ellos nunca van
a modificar el contenido del mismo.
En este tipo de problemas
es necesario disponer de servicios de sincronización que permitan a los
procesos lectores y escritores sincronizarse adecuadamente en el acceso al
objeto.
Comunicación cliente-servidor
En el modelo
cliente-servidor, los procesos llamados servidores ofrecen una serie de
servicios a otros procesos que se denominan clientes (vea Figura 1.3). El
proceso servidor puede residir en la misma máquina que el cliente o en una
distinta, en cuyo caso la comunicación deberá realizarse a través de una red de
interconexión. Muchas aplicaciones y servicios de red, como el correo
electrónico y la transferencia de archivos, se basan en este modelo.
Figura 1.2. Procesos
lectores y escritores.
Figura 1.3. Comunicación
cliente-servidor.
En este tipo de
aplicaciones es necesario que el sistema operativo ofrezca servicios que
permitan comunicarse a los procesos cliente y servidor. Cuando los procesos
ejecutan en la misma máquina, se pueden emplear técnicas basadas en memoria
compartida o archivos. Sin embargo, este modelo de comunicación suele emplearse
en aplicaciones que ejecutan en computadores que no comparten memoria y, por
tanto, se usan técnicas basadas en paso de mensajes.
No comments:
Post a Comment