Investigación de: Sincronización de Procesos Sistemas Operativos
Enviado por klimbo3445 • 5 de Abril de 2018 • 3.067 Palabras (13 Páginas) • 545 Visitas
...
Ninguna otra instrucción se ejecutará, por lo que no se producirán modificaciones inesperadas de la variable compartida.
Desactivar las interrupciones en un sistema puede consumir mucho tiempo, ya que hay que pasar el mensaje a todos los procesadores.
Muchos sistemas proveen soporte hardware para resolver el problema de la exclusión mutua.
Una solución en máquinas con un solo procesador es deshabilitar las interrupciones.
Las máquinas actuales proveen instrucciones atómicas especiales.
Mutex locks
En un sistema multiprogramado con un único procesador, los procesos se intercalan en el tiempo (i.e. Round Robin) para dar apariencia de ejecución simultánea. Aunque no se consigue un procesador en paralelo real, y aunque se produce un sobrecargado en la cpu por el hecho de tener que cambiar de tarea constantemente, las ventajas de todo esto son muy elevadas. Ejemplo: avion-torre, chat's, etc.
Uno de los grandes problemas que nos podemos encontrar es que el hecho de compartir recursos está lleno de riesgos. Por ejemplo, si dos procesos hacen uso al mismo tiempo de una variable global y ambos llevan a cabo tanto operaciones de lectura como de escritura sobre dicha variable, el orden en que se ejecuten estas lecturas y escrituras es crítico, puesto que se verá afectado el valor de la variable.
Los algoritmos de exclusión mutua se usan en programación concurrente para evitar el uso simultáneo de recursos comunes, como variables globales, por fragmentos de código conocidos como secciones críticas.
Requisitos para la exclusión mutua
Sólo un proceso, de todos los que poseen secciones críticas por el mismo recurso compartido, debe tener permiso para entrar en ella en un momento dado.
Un proceso que se interrumpe en una sección no crítica debe hacerlo sin interferir con los otros procesos.
Un proceso no debe poder solicitar acceso a una sección crítica para después ser demorado indefinidamente, no puede permitirse el interbloqueo o la inanición.
Si ningún proceso está en su sección crítica, cualquier proceso que solicite entrar en la suya debe poder hacerlo sin demora.
No se debe suponer sobre la velocidad relativa de los procesos o el número de procesadores.
Un proceso permanece en su sección crítica por un tiempo finito.
Una manera de satisfacer los requisitos de exclusión mutua es dejar la responsabilidad a los procesos que deseen ejecutar concurrentemente. Tanto si son programas del sistema como de aplicación, los procesos deben coordinarse unos con otros para cumplir la exclusión mutua, sin ayuda del lenguaje de programación o del sistema operativo. Estos métodos se conocen como soluciones por software.
Para solucionar el problema de la exclusión mutua vamos a tener tres tipos de soluciones:
Soluciones software.
Soluciones hardware.
Soluciones aportadas por el Sistema Operativo
Algunos ejemplos de algoritmos clásicos de exclusión mutua son:
El algoritmo de Dekker.
El algoritmo de Peterson.
Semáforos
Un semáforo es una variable especial (o tipo abstracto de datos) que constituye el método clásico para restringir o permitir el acceso a recursos compartidos (por ejemplo, un recurso de almacenamiento del sistema o variables del código fuente) en un entorno de multiprocesamiento (en el que se ejecutarán varios procesos concurrentemente). Fueron inventados por Edsger Dijkstra en 1965 y se usaron por primera vez en el sistema operativo THEOS
Aplicaciones
Los semáforos se emplean para permitir el acceso a diferentes partes de programas (llamados secciones críticas) donde se manipulan variables o recursos que deben ser accedidos de forma especial. Según el valor con que son inicializados se permiten a más o menos procesos utilizar el recurso de forma simultánea.
Un tipo simple de semáforo es el binario, que puede tomar solamente los valores 0 y 1. Se inicializan en 1 y son usados cuando sólo un proceso puede acceder a un recurso a la vez. Son esencialmente lo mismo que los mutex. Cuando el recurso está disponible, un proceso accede y decrementa el valor del semáforo con la operación P. El valor queda entonces en 0, lo que hace que si otro proceso intenta decrementarlo tenga que esperar. Cuando el proceso que decrementó el semáforo realiza una operación V, algún proceso que estaba esperando comienza a utilizar el recurso.
Para hacer que dos procesos se ejecuten en una secuencia predeterminada puede usarse un semáforo inicializado en 0. El proceso que debe ejecutar primero en la secuencia realiza la operación V sobre el semáforo antes del código que debe ser ejecutado después del otro proceso. Éste ejecuta la operación P. Si el segundo proceso en la secuencia es programado para ejecutar antes que el otro, al hacer P dormirá hasta que el primer proceso de la secuencia pase por su operación V. Este modo de uso se denomina señalación (signaling), y se usa para que un proceso o hilo de ejecución le haga saber a otro que algo ha sucedido.
---------------------------------------------------------------
Enfoques alternativos
Existen tres tipos de enfoques alternativos:
- Memoria Transicional: Una transacción de memoria es una secuencia de operaciones de lectura y escritura a la memoria que se realiza atómicamente. Se representa:
void update()
{
/* read/write memory */
}
- OpenMP: Es un conjunto de directivas de compilación y API que soporta la programación paralela. El código contenido en el #pragma omp directiva crítico se trata como una sección crítica y se realiza atómicamente.
void update(int value)
...