La concurrencia de
procesos se refiere a las situaciones en las que dos o más procesos puedan
coincidir en el acceso a un recurso compartido o, dicho de otra forma, que
requieran coordinarse en su ejecución. Para evitar dicha coincidencia, el
sistema operativo ofrece mecanismos de arbitraje que permiten coordinar la
ejecución de los procesos.
Un ejemplo de un problema
de concurrencia sería el siguiente: Dados dos procesos A y B, suponiendo que
ambos se ejecutan indefinidamente en el tiempo, el proceso A debe recibir
tiempo de ejecución antes que B, tras esto, el proceso B debe recibir su
oportunidad de ejecución, dando paso de nuevo al proceso A y así sucesivamente
Hay dos formas básicas de interacción entre los procesos:
§ Relaciones
de competencia: Dados
dos procesos A y B, ambos procesos tienen objetivos diferentes y compiten por
los recursos para conseguirlos. Por ejemplo, dos procesos desean modificar el
contenido de un mismo fichero, pero no deben hacerlo de manera simultánea o
quedará en un estado incoherente.
§ Relaciones
de cooperación: Dados
dos procesos A y B, ambos con un mismo objetivo, se ponen de acuerdo a
la hora de emplear los recursos existentes para alcanzarlos. Por ejemplo, si el
proceso A produce un objeto que es consumido por el proceso B, hasta que el
proceso A no produzca, el proceso B no debe consumir y viceversa.
Los
mecanismos de arbitraje que ofrece el sistema operativo son básicamente dos:
§ Mecanismos de sincronización: el sistema operativo
ofrece mecanismos que permiten a los procesos coordinar su ejecución para
conseguir el objetivo sin que sucedan situaciones no deseadas, como por ejemplo
que dos o más procesos coincidan simultáneamente en el acceso a un cierto
recurso que no se puede compartir.
§ Mecanismos de mensajería: el sistema operativo
ofrece mecanismos de comunicación entre procesos mediante mensajes. El
intercambio de mensajes entre procesos permite coordinarlos.
Los mecanismos de sincronización los podemos catalogar en dos
categorías:
§ Optimistas:
Este mecanismo considera que la frecuencia de acceso a un cierto recurso
compartido es baja. Este tipo tiene mas consumo de memoria, ya que
tiene que copiar el recurso compartido y en caso de interferencia en el hilo
tiene que volver a ejecutarlo y consume mas recursos.
§ Pesimistas:
Este mecanismo permite coordinar la ejecución de dos o más procesos que acceden
al recurso compartido con una frecuencia alta.
Dependerá del criterio del
programador el tipo de mecanismo que utilice ya que puede que no elija el tipo
correcto. Por ejemplo, puede que la frecuencia de acceso a un cierto recurso
sea alta y el programador le asigna un mecanismo optimista, esto provocaría no
obtener el resultado esperado.
No hay comentarios:
Publicar un comentario