Sistemas Operativos
Por: 14-04-2009 por mariuximaza | Categorías asociadas: Capitulo 6

En una colección de procesos secuenciales que comparten datos cooperativamente, es necesario proporcionar mecanismos de exclusión mutua.
Una solución consiste en garantizar que una sección crítica de código solo se utiliza por un proceso o hebra cada vez. Existen diferentes algoritmos
para resolver el problema de la sección crítica, suponiendo que sólo haya  disponibles bloqueos del almacenamiento.
La principal desventaja de estas soluciones codificadas por el programador es que todas ellas requieren una espera activa. Los semáforos permiten
resolver este problema. Los semáforos se pueden emplear para solucionar varios problemas de sincronización y se pueden implementar de forma eficiente,
especialmente si se dispone de soporte hardware para ejecutar las operaciones atómicamente.
Clásicamente, se han definido diversos problemas de sincronización (como el problema del búfer limitado, el problema de los procesos lectores-escritos,
y el problema de la cena de los filósofos) que son importantes principalmente como ejemplos de una amplia clase de problemas de control de concurrencia.

Problemas clásicos de sincronización

- Estos problemas se utilizan probar casi todos los nuevos esquemas de sincronización propuestos.
- Problema del búfer limitado
- Habitualmente se utiliza para ilustrar la potencia de las primitivas de sincronización.
- El problema de los lectores-escritores
- Este problema se ha utilizado para poder probar casi todas las nuevas primitivas de sincronización.
- El problema de los lectores y escritores presenta diversas variantes, todas las cuales utilizan prioridades.
- Problema de la cena de los filósofos

Este problema de cena de filósofos se considera un problema clásico de sincronización, no por su importancia practica ni porque los informáticos tengan aversión a los filósofos, sino porque es un  ejemplo de una amplia clase de problemas de control de concurrencia.
Es una representación sencilla de la necesidad de repartir varios recursos entre varios procesos de una forma que no se produzcan interbloqueos ni bloqueos indefinidos.
Estos problemas clásicos se utilizan para probar casi todos los nuevos esquemas de sincronización propuestos.
El sistema operativo debe proporcionar los medios de protección frente a los errores de temporización se han propuesto diversas estructuras para afrontar estos problemas.
Los monitores proporcionan mecanismos de sincronización para compartir tipos abstractos de datos. Las variables de condición proporcionan soporte para la sincronización.
Por ejemplo, SOLARIS, Windows XP y LINUX proporcionan mecanismos como semáforos, mútex, bloqueos mediante bucles sin fin y variables de condición para controlar
el acceso o datos compartidos. La API de Pthreads proporciona soporte para bloqueos mútex y variables de condición.
Una transacción es una unidad de programa que se debe ejecutar atómicamente; es decir todas las operaciones asociadas con ella se ejecutan hasta completarse, o no se
realiza la ejecución de alguna operación. Para asegurar la atomicidad a pesar de los fallos del sistema, podemos usar un registro de escritura anticipada; escribiendo en el
registro todas las actualizaciones, que se almacena en un medio estable de almacenamiento. Si se produce un fallo catastrófico del sistema la información contenida en el
registro se usa para restaurar el estado de los elementos de los datos actualizados, lo que se consigue atravez de las operaciones de deshacer (undo) y rehacer (redo). Para
disminuir el trabajo de buscar en el registro después de haberse producido un fallo en el sistema, podemos usar un mecanismo de puntos de comparación. Los métodos más
habituales utilizados son los protocolos de bloqueo y los esquemas de ordenación mediante marcas temporales.


      Leer más


Usted debería Ingresar para comentar.