Download - Comunicación y sicronización entre procesos
UNIVERSIDAD NACIONAL EXPERIMENTAL“FRANCISCO DE MIRANADA “
ÁREA CIENCIA DE LA EDUCACIÓNPROGRAMA:EDUCACIÓN
U.C: SISTEMAS OPERATIVOS
Sincronizaciónentre Procesos
PROFESORA:LICDA. GLORIA MELÉNDEZ
Sincronización entre procesosIntroducción sincronización entre procesos
Sincronización entre procesos
Señalización entre procesos
Comunicación entre procesos
Variables Compartidas
Exclusión Mutua
Semáforos
Monitores
Mensajes
Solución por Hardware de Exclusión Mutua
InterbloqueoReferencias Bibliográficas
La sincronización entre procesos concurrentes es esencial para preservar
las relaciones de precedencia y para evitar los problemas de temporización
relacionados con la concurrencia. Los procesos deben sincronizarse unos con otros
cuando van a utilizar recursos compartidos, tales como estructuras de datos comunes
o dispositivos físicos. Dado que el sistema operativo no conoce, ni necesita conocer, la
semántica de las actividades del proceso. Los propios procesos deben encargarse de
sincronizar adecuadamente sus operaciones.
Ante todo un punto fundamental en las tecnologías de diseños de sistemas
operativos es la concurrencia. Cuando se ejecutan varios procesos concurrentemente,
en el caso real de un sistema multiprocesador aparecen cuestiones de resolución de
conflictos y de cooperación.
Introducción a la Sincronización entre procesos
Los procesos concurrentes pueden interactuar de varias formas:
Los procesos que no tienen conocimientos unos de otros pueden competir por recursos
tales como: el tiempo del procesador o de los dispositivos de E/S.
Los procesos pueden tener conocimiento indirecto de los otros, porque comparten el
acceso a unos objetos comunes, tales como: un bloque de memoria principal o un archivo.
Los procesos pueden tener conocimiento directo de los otros y cooperar mediante
intercambio de información.
Los puntos clave son la exclusión mutua y el interbloqueo.
Introducción a la Sincronización entre procesos
La sincronización entre procesos viene dada por la necesidad de coordinar
procesos concurrentes (los cuales son procesos que se encuentran activos durante un
tiempo determinado), y así, optimar su presencia en los sistemas. Este tipo de
administración, de la acción de los procesos, en forma explícita del sistema operativo
infiere que este no necesitará conocer lo detalles de ciertas tareas que se correrán
dentro de ella y será responsabilidad de los programadores que los algoritmos de
sincronización se encuentren bien diseñados para que no tenga problemas y vayan a
causar un error en el sistema y se guinde.
Las formas de interacción explícita entre procesos pueden realizarse en varias
formas dependiendo de las necesidades y el nivel de integración de las distintas tareas
para lograr el trabajo requerido.
Introducción a la Sincronización entre procesos
Sincronización entre procesos
Son una serie de protocolos que garantizan la integridad y consistencia en el
uso de los recursos reutilizables en serie, por el uso de varios procesos concurrentes.
Estos recursos reutilizables en serie son aquellos que solo pueden ser utilizados por un
proceso a la vez y que el podría ver afectado su trabajo si dos o mas procesos
concurrentes tratan de utilizarlos.
Definición
El ejemplo más claro es el de la impresora que sólo puede imprimir una
página a la vez y de acuerdo a nuestra forma de trabajo, una página deberá ser impresa
por una sola aplicación o proceso, por lo tanto si otro proceso requiere de su uso tendrá
que esperar hasta que se libere o se lo permita el otro proceso.
Ejemplo
Señalización entre procesos
Es la manera más sencilla de interacción entre procesos debido a su
simplicidad de implantación. Esto no permite enviar información, pero es útil en
caso de necesitar realizar tareas coordinadas sencillas.
Comunicación entre procesos
Este tipo de interacción entre procesos trata de proveer un medio más
completo para la transmisión de información entre procesos, la coordinación de
tareas que utilicen recursos de uso colectivo para garantizar que el trabajo de
uno no afecte la integridad del recurso. Por ejemplo, los "pipes" y la memoria
compartida.
Variables Compartidas
Es una forma sencilla y habitual de comunicación entre procesos
cooperativos. Cuando un conjunto de procesos tienen acceso a un espacio común
de direcciones, puede utilizar variables compartidas para una serie de cometidos,
por ejemplo, indicadores de señalización y para acumulación de resultados
colectivos.
Sin embargo, la actualización sin restricciones de variables compartidas
puede conducir a inconsistencias. Tales errores suelen ser dependientes de la
temporización específica y del modo de entrelazarse las acciones de los procesos.
Como resultado, los errores inducidos por la concurrencia pueden ser
extremadamente difíciles de detectar, reproducir y depurar.
El hecho de que un espacio de memoria pueda ser accedida por
varios procesos podría traer problemas dentro de los sistemas. Por ejemplo,
cuando tenemos un dato y un proceso, para modificarlo debe esperar cierta
condición y lo observa, por lo que procede a tomar la decisión de modificar ese
valor, si justo en ese momento ese proceso es suspendido (sin que haya
logrado modificar el valor), y se ejecuta otro que modifique el valor en
cuestión, cuando se vuelve a ejecutar el primer proceso y termina su
modificación ese acto se estará realizando bajo condiciones distintas a las que
lo motivaron a tomar la decisión y ese valor que había colocado el otro proceso
se pierde.
Continuación de Variables Compartidas
Exclusión Mutua
Sí se presenta un problema de inconsistencia de datos en el área de las
variables compartidas, se debe garantizar que cuando un proceso necesite
modificar un dato de la sección crítica los demás procesos no lo hagan, para eso se
restringe el uso a los demás procesos y para hacer modificaciones a las variables
compartidas cuando otro lo está realizando, a esto se le llama exclusión mutua.
Por otra parte, cuando un proceso requiere evitar que los demás
procesos no utilicen las variables compartidas procede a notificárselo al sistema
desde un principio hasta un fin explícitamente descrito, a éste segmento del
proceso se le llama sección crítica. Por lo tanto, un sólo proceso puede estar en su
sección crítica a la vez y el sistema operativo debe garantizarlo.
Continuación de Exclusión Mutua
En cierto sentido, la actualización de una variable compartida puede ser
considerada como una sección critica.
La sección critica es una secuencia de instrucciones con un comienzo y
un final claramente marcados que, generalmente, delimita la actualización de una
o más variables compartidas. Cuando un proceso entra a una sección crítica, debe
completar todas las instrucciones incluidas en ella, antes de que se pueda
permitir a cualquier otro proceso entrar a la misma sección critica. Sólo el
proceso que ejecuta la sección critica tiene permitido el acceso a la variable
compartida; los restantes procesos deberían tenerlo prohibido hasta la
terminación. A esto se le suele llamar exclusión mutua, en la cual un solo proceso
excluye temporalmente a todos los demás de utilizar un recurso compartido con
el fin de asegurar la integridad del sistema
Cabe destacar, que si el recurso compartido es una variable, la exclusión
mutua asegura como máximo un proceso cada vez tenga acceso a ella durante las
actualizaciones críticas que conducen a valores temporalmente inconsistentes.
Consiguientemente, los restantes procesos sólo ven valores consistentes de las
variables compartidas. En el caso de compartir dispositivos, la necesidad de exclusión
mutua es incluso más obvia cuando se considera los problemas que puede provocar
su uso incontrolado: la salida impresa procedente de varios programas puede
aparecer irrecuperablemente entremezclada sobre un único formulario, o la válvula
de un conducto puede ser obligada a estar a la vez abierta y cerrada por dos procesos
concurrentes pero sin sincronización. Cuando estas operaciones se realizan en modo
mutuamente exclusivo. Solo un programa en cada punto tiene permitido el control de
un dispositivo reutilizable en serie.
Continuación de Exclusión Mutua
Para definir la sección crítica y eliminar los problemas de la exclusión mutua se deberá tomar en cuenta lo siguiente:
Continuación de Exclusión Mutua
Asegurar exclusión mutua entre los procesos al acceder al recurso compartido protegido.
No hacer suposiciones con respecto a las velocidades y prioridades relativas de los procesos en conflicto.
Garantizar que el aborto o terminación de cualquier proceso fuera de su sección crítica no afecte a la capacidad de los restantes procesos contendientes para acceder al recurso compartido.
Cuando más de un proceso desee entrar a la sección crítica, conceder la entrada a solo uno de ellos en tiempo finito.
El modo más simple de asegurar la exclusión mutua es descartar la
concurrencia. Este método es demasiado drástico, ya que también anula todas
las mejoras del rendimiento, que posibilita la ejecución concurrente de
programas. Lo que realmente se busca es conceder temporalmente a un
proceso que necesita completar una sección crítica el acceso exclusivo a un
recurso compartido.
Continuación de Exclusión Mutua
En muchas estrategias de exclusión mutua, cada proceso observa el
siguiente protocolo básico.
...negociación del protocolo;// El ganador continua sección crítica;// Uso exclusivo del recurso protocolo de liberación;// liberación el recurso...
Un proceso que desea entrar a una sección critica negocia primero con
todos los restantes interesados para asegurarse que no haya ninguna otra actividad
conflictiva en progreso, y que todos los procesos relacionados estén al tanto de la
temporal e inminente no disponibilidad del recurso. Una vez alcanzando el
consenso, el proceso ganador comienza a ejecutar su sección critica de código. Al
terminar, el proceso informa al resto de los contendientes que el recurso esta
disponible y puede iniciarse otra ronda de negociaciones.
Continuación de Exclusión Mutua
Semáforos
Son una herramienta fácil de implementar y asegura la exclusión mutua
en los sistemas multiprocesos. Consiste en una variable que almacena un número
entero que será utilizado para indicar si hay alguien en una sección crítica o no.
Para el control de esto hay dos funciones que permiten lograr el acceso a la sección
crítica por parte de los procesos, esto implica que ellos deben estar muy bien
demarcados en cuanto a sus secciones críticas.
El problema es claro, cuando se decide que hay que entrar a la sección
crítica se debe ejecutar una modificación de este semáforo para indicarlo, pero
dentro de un comando del microprocesador indivisible. Este es, para que no haya
la posibilidad de suspensión del proceso justo en ese momento (que es la
posibilidad problema).
Para ellos se plantean dos funciones básicas y sencillas de utilizar:
Wait (semáforo): que se encarga de activar el semáforo para evitar que otro
proceso entre en la sección crítica. Internamente cuenta con la premisa de que
una vez tomada la decisión de activar el semáforo se ejecutará dicha activación
en un comando indivisible para el microprocesador.
Signal (semáforo): que se encarga de liberar el semáforo para que otro
pueda acceder a él.
Continuación de Semáforos
Continuación de Semáforos
Como es de esperarse pueden existir varias secciones criticas dentro de los
procesos que no necesariamente tengan que acceder a la misma información por
lo tanto no se debería considerar una exclusión mutua en esos casos.
Por ejemplo, si una tarea va a acceder a una variable A y otra a una variable B,
no habría ningún problema en que ambos accedieran a los datos al mismo instante
(aparente). Es por eso que las funciones Wait y Signal poseen un parámetro
(semáforo) de tal forma que se puedan definir tantos semáforos como variables o
grupos de variables compartibles hayan dentro de un sistema.
Continuación de Semáforos
La implementación de estas funciones queda así:
Wait(s): while (!(s>0)) {}; s - -;Signal(s): s++;
Por lo tanto, si un proceso quiere hacer uso de un semáforo para implementar una sección crítica será:{ ... Wait (variable_semáforo_1); Sección Crítica; Signal (variable_semáforo_1); ...}
Monitores
Un monitor es, esencialmente, una colección de datos y de
procedimientos para su manipulación junto con una secuencia de inicialización.
Las variables de datos globales son generalmente privadas al monitor por lo que
sólo son accesibles a los procedimientos de éste. Los procedimientos del monitor
podrán ser públicos o privados.
Un monitor puede considerarse como una estructura estática que se
activa únicamente cuando alguno de sus procedimientos públicos es llamado por
un proceso en ejecución y se dice, entonces, que el proceso en cuestión entra o
tiene acceso al monitor.
Una característica básica de los monitores es proporcionar control sobre
las operaciones realizadas y sobre los elementos compartidos con el fin de prevenir
actuaciones dañinas o sin significado. De esta forma, se limitan los tipos de
actuaciones proporcionando un conjunto de procedimientos de manipulación
fiables y bien probados. Éstos avanzan un paso en este sentido haciendo los datos
críticos accesibles indirecta y exclusivamente mediante un conjunto de
procedimientos públicos disponibles.
Los monitores encapsulan los datos utilizados por los procesos
concurrentes y permiten su manipulación sólo por medio de operaciones
adecuadas y sincronizadas. Nunca existirá peligro de actualización inconsistente
por entrelazamiento de llamadas concurrentes ya que los procesos del monitor
siempre se ejecutarán en exclusión mutua.
Continuación de Monitores
Mensajes
Un mensaje es una colección de información que puede ser
intercambiada entre un proceso emisor y un proceso receptor.
Un mensaje puede contener datos, órdenes de ejecución e, incluso,
código a transmitir entre dos o más procesos. Aunque, en general, el contenido
de un mensaje quedaría dividido en dos campos bien separados; Por un lado, la
cabecera que habitualmente tiene un formato fijo para cada sistema operativo-y,
por otro lado, el cuerpo del mensaje que contiene el mensaje en sí y cuya
longitud puede variar incluso dentro de un mismo SO. Las operaciones de
mensaje típicas proporcionadas por el SO son: enviar (send) y recibir (receive).
Mensajes
Las implementaciones del envío y recepción de mensajes pueden diferir
en una serie de detalles pero todas ellas mantienen la importancia de un
conjunto de cuestiones que son:
1) Denominación o direccionamiento
2) Copia
3) Intercambio síncrono vs intercambio asíncrono.
4) Longitud
Solución por Hardware de Exclusión Mutua
Existe una forma de implementar la exclusión mutua utilizando
directamente las funciones de hardware. Se trata de habilitar y deshabilitar las
interrupciones de hardware, vía que es utilizada para el control de la
conmutación entre procesos. Claro, su efectividad es debida a que cuando se
deshabilita las interrupciones nadie más podrá utilizar los recursos del sistema
hasta que se vuelvan a habilitar las interrupciones. Ya los semáforos
desaparecen pero todos los recursos son considerados como un "todo" donde
mientras uno lo usa los demás quedan excluidos de tal posibilidad, aunque las
variables implicadas sean distintas.
Solución por Hardware de Exclusión Mutua
Así existen las funciones de Hardware:
DI: para deshabilitar las interrupciones.EI: para habilitar las interrupciones.De esta forma el proceso queda:...DISección Crítica;EI...Aunque ciertos procesadores cuentan con otros funciones diseñadas con el fin de satisfacer las necesidades de la exclusión mutua esta es la forma que está presente en casi todos los microprocesadores y microcontroladores existentes en el mercado.
Interbloqueo
Una situación de interbloqueo tiene lugar cuando ninguno de los procesos
que compiten por los recursos del sistema o interactúan entre sí puede avanzar por
carecer de algún recurso o esperar a que se produzca algún tipo de evento.
Deben darse tres condiciones para que se produzca interbloqueo
1. Que exista acceso a algún recurso en exclusión mutua.
2. Que un proceso pueda retener los recursos que le han sido asignados mientras
espera que se le asignen los que necesitan.
3. Que ningún proceso pueda ser obligado a abandonar los recursos que retenga.
Estas tres condiciones de interbloqueo son condiciones necesarias pero no suficientes, es decir, pueden producirse tales situaciones y que el sistema no evolucione a un interbloqueo.
LA RED, D (2001). Sistema Operativos. Universidad Nacional del Noroeste , Argentina
RUIZ, P (2004). Sistema Operativos. California, USA: Commons.
Referencias Bibliográficas