¿Cuáles son los problemas clásicos de comunicación y sincronización de
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.
• 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.
Ejemplo:
El
problema del consumidor productor: 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 dato. 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. Los que son
utilizados o consumidos por otros procesos, que se denominan consumidores.
Ejemplo:
El
problema de los lectores-escritores:
En
este problema existe un determinado objeto, 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.
• 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.
Ejemplo:
Problemas: Existe un recurso (archivo, registro, etc.)
que va a ser utilizado y compartido por una serie de procesos
concurrentes, algunos procesos acceden
sin modificarlo (lectores). Otros procesos acceden para modificarlo
(escritores). Restricciones en estos problemas: 1 escritor exclusivamente
Múltiples lectores Se requieren servicios de sincronización para que lectores y
escritores se sincronicen en el acceso al recurso.
Comunicación
cliente-servidor: 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. Cuando los
procesos se 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.
Algunos ejemplos de aplicación computacionales del modelo
cliente servidor son: El correo electrónico, un servidor de impresión, y la
World Wide Web.
Ejemplo:
¿Cuáles son los procesos de
sincronización entre procesos?
Sin una sincronización adecuada entre procesos, la actualización de
variables compartidas puede inducir a errores de tiempo relacionados con la
concurrencia que son con frecuencia difíciles de depurar. Una de las causas
principales de este problema es que procesos concurrentes puedan observar
valores temporalmente inconsistentes de una variable compartida mientras se
actualizan. Una aproximación para resolver este problema es realizar
actualizaciones de variables compartidas de manera mutuamente exclusiva. Se
pueden mejorar permitiendo que a lo más un proceso entre a la vez en la sección
crítica de código en la que se actualiza una variable compartida o estructura
de datos en particular.
Para que los procesos puedan sincronizarse es necesario disponer de
servicios que permitan bloquear o suspender bajo determinadas circunstancias la
ejecución de un proceso. Los principales mecanismos de sincronización que
ofrecen los sistemas operativos son:
- Señales.
- Tuberías.
- Semáforos.
- MUTEX y
variables condicionales.
- Paso de mensajes.
Tuberías (TIPES): Conceptualmente, cada proceso ve la tubería como un conducto con dos
extremos, uno de los cuales se utiliza para escribir o insertar datos y el otro
para extraer o leer datos de la tubería. La escritura se realiza mediante el
servicio que se utiliza para escribir datos en un archivo. De igual forma, la
lectura se lleva a cabo mediante el servicio que se emplea para leer de un
archivo.
Ejemplos:
Semáforos:
Un
semáforo es un mecanismo de sincronización que se utiliza generalmente en
sistemas con memoria compartida, bien sea un monoprocesador o un
multiprocesador. Su uso en un multicomputador depende del sistema operativo en
particular. Un semáforo es un objeto con un valor entero al que se le puede
asignar un valor inicial no negativo y al que sólo se puede acceder utilizando
dos operaciones atómicas: wait y signal (también llamadas Down o up,
respectivamente).
Semáforos sin nombre. Permiten sincronizar a los procesos ligeros
que ejecutan dentro de un mismo proceso o a los procesos que lo heredan a
través de la llamada fork.
• Semáforos con nombre. En este caso, el semáforo lleva asociado un
nombre que sigue la convención de nombrado que se emplea para archivos. Con
este tipo de semáforos se pueden sincronizar procesos sin necesidad de que
tengan que heredar el semáforo utilizando la llamada fork.
MUTEX y variables condicionales:
Los
MUTEX y las variables condicionales son mecanismos especialmente concebidos
para la sincronización de procesos ligeros. Un MUTEX es el mecanismo de
sincronización de procesos ligeros más sencillo y eficiente. Los MUTEX se
emplean para obtener acceso exclusivo a recursos compartidos y para asegurar la
exclusión mutua sobre secciones críticas. Sobre un MUTEX se pueden realizar dos
operaciones atómicas básicas:
•
LOCK: intenta bloquear el MUTEX. Si el MUTEX ya está bloqueado por otro
proceso, el proceso que realiza la operación se bloquea. En caso contrario, se
bloquea el MUTEX sin bloquear al proceso.
•
UNLOCK: desbloquea el MUTEX. Si existen procesos bloqueados en él, se
desbloqueará a uno de ellos, que será el nuevo proceso que adquiera el MUTEX.
La operación UNLOCK sobre un MUTEX debe ejecutarla el proceso ligero que
adquirió con anterioridad el MUTEX mediante la operación LOCK. Esto es
diferente a lo que ocurre con las operaciones wait y signal sobre un semáforo.
¿Qué es POXIS?
Es un estándar de interfaces de Sistema
Operativo, basado en el popular sistema operativo UNIX. Su principal objetivo
es permitir la portabilidad de aplicaciones a nivel de código fuente, es decir,
que sea posible portar una aplicación de un computador a otro sin más que
recompilar su código. Junto a las interfaces de servicios del sistema, se
estandarizan también perfiles de entornos de aplicaciones que permitirán a los
implementadores desarrollar Sistemas Operativos POSIX de tiempo real para una
gran variedad de plataformas, desde los sistemas empotrados pequeños hasta los
sistemas de tiempo real grandes. El estándar define interfaces en diferentes lenguajes de programación. En
particular, las interfaces de tiempo real están siendo definidas para C y Ada,
que son los lenguajes estándar de programación más importantes para los
sistemas prácticos de tiempo real.
Señales
POSIX permiten:
Un proceso puede bloquearse mediante
el servicio “pause” y esperar una señal de otro proceso enviada con “kill”.
Desventajas: Las
señales tienen comportamiento asíncrono, podría recibir una señal en cualquier
momento aunque no la espere
Las señales no se encolan, sólo la
última de un tipo, con lo cual se podrían perder eventos de sincronización
importantes.
No se pueden usar para sincronizar procesos, excepto casos muy simples
Resumen
de la unidad 6:
La comunicación entre procesos es una función básica de los sistemas
operativos. La comunicación se establece siguiendo una serie de
reglas (protocolos de comunicación). Los protocolos desarrollados para internet
son los mayormente usados: IP (capa de red), protocolo de control de
transmisión (capa de transporte) y
protocolo de transferencia de archivos, protocolo de transferencia de
hipertexto (capa de aplicación).
La sincronización es la transmisión y recepción de
señales que tiene por objeto llevar a cabo el trabajo de un grupo de procesos
cooperativos. Es la coordinación y cooperación de un conjunto de procesos para
asegurar la comparación de recursos de cómputo. La sincronización entre procesos
es necesaria para prevenir y/o corregir errores de sincronización debidos al
acceso concurrente a recursos compartidos, tales como estructuras de datos o
dispositivos de E/S, de procesos contendientes.
Por ejemplo: Un sistema operativo multitarea, su programa
se compone de múltiples partes denominada therads las cuales se ejecuta de
forma paralela debido a esto cuando dos o más therads intentan acceder a la ves
un mismo recurso; por ejemplo una zona
de memoria compartida, este resultado puede ser en el mejor de los casos
impredecible por eso surgen los sistemas de sincronización entre procesos; esto
permite establecer una sincronización entre dos o más therads y procesos de una
forma consiste sobre todo fiable y predecible en O/S2 estos sistemas están
conformados por los semáforos.
La interacción entre procesos se plantea una serie de
situaciones clásicas de comunicación sincronizada, esta situación con su
problema se describe a continuación: la necesidad de comunicar y sincronizar
procesos, algunos de estos problemas contribuirá el núcleo fundamental de la práctica
propuesta.
Los procesos que ejecuta de forma concurrente en un
sistema se puede clasificar como procesos independientes o cooperantes es aquel
que ejecuta sin requerir la ayuda de cooperación de otro proceso. Ejemplo: de
proceso independiente son los diferentes intérpretes de mandato que se ejecuta
de formas simultáneas.
Para que los procesos puedan sincronizarse es necesario
disponer de servicios que permitan bloquear o suspender bajo determinadas
circunstancias la ejecución de un proceso. Los principales mecanismos de
sincronización que ofrecen los sistemas operativos son:
Señales
Tuberías
Semáforos
MUTEX y
variables condicionales
Paso de
mensajes
0 comentarios:
Publicar un comentario