COMUNICACIÓN ENTRE PROCESOS
Los procesos que ejecutan de forma concurrente en un sistema se pueden clasificar como procesos independientes o cooperantes. Un proceso independiente es aquel que ejecuta sin requerir la ayuda o cooperación de otros procesos. Un claro ejemplo de procesos independientes son los diferentes intérpretes de mandatos que se ejecutan de forma simultánea en un sistema. Los procesos son cooperantes cuando están diseñados para trabajar conjuntamente en alguna actividad, para lo que deben ser capaces de comunicarse e interactuar entre ellos. Tanto si los procesos son independientes como cooperantes, pueden producirse una serie de interacciones entre ellos. Estas interacciones pueden ser de dos tipos:
Interacciones motivadas porque los procesos comparten o compiten por el acceso a recursos físicos o lógicos. Esta situación aparece en los distintos tipos de procesos anteriormente comentados. Por ejemplo, dos procesos totalmente independientes pueden competir por el acceso a disco. En este caso, el sistema operativo deberá encargarse de que los dos procesos accedan ordenadamente sin que se cree ningún conflicto. Esta situación también aparece cuando varios procesos desean modificar el contenido de un registro de una base de datos. Aquí es el gestor de la base de datos el que se tendrá que encargar de ordenar los distintos accesos al registro.
Interacción motivada porque los procesos se comunican y sincronizan entre sí para alcanzar un objetivo común. Por ejemplo, un compilador se puede construir mediante dos procesos: el compilador propiamente dicho, que se encarga de generar código ensamblador, y el proceso ensamblador, que obtiene código en lenguaje máquina a partir del ensamblador.
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. Algunos de estos problemas constituirán el núcleo fundamental de las prácticas propuestas en este capítulo
El problema de la
sección crítica:
Este 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.
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 se
representa la estructura clásica de este tipo de procesos.
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 (véase
Figura 4.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 modificador,
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 (véase Figura 4.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.
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.



Muy buena info..Brou
ResponderEliminar