SINCRONIZACIÓN DE PROCESOS
EL PROBLEMA DE LA SECCIÓN CRÍTICA
Cada proceso tiene un
segmento de código, llamado
sección crítica, en el que el
proceso puede modificar
variables comunes, actualizar
una tabla, escribir en un
archivo, etc.
Dos procesos no pueden
ejecutar su sección crítica al
mismo tiempo.
EL PROBLEMA DE LA SECCIÓN CRÍTICA
Cualquier solución a este problema deberá tener
3 requisitos:
Exclusión mutua. Si el proceso P está
ejecutándose en su sección crítica, los demás
procesos no pueden estar ejecutando sus
secciones críticas.
EL PROBLEMA DE LA SECCIÓN CRÍTICA
Progreso. Si ningún proceso está ejecutando
su sección crítica y algunos procesos desean
entrar en sus correspondientes secciones
críticas, sólo aquellos procesos que no estén
ejecutando sus secciones restantes pueden
participar en la decisión de cuál será el
siguiente que entre en su sección crítica, y esta
selección no se puede posponer
indefinidamente.
EL PROBLEMA DE LA SECCIÓN CRÍTICA
Espera limitada. Existe un límite en el
número de veces que se permite que otros
procesos entren en sus secciones críticas
después de que un proceso haya hecho una
solicitud para entrar en su sección crítica y
antes de que la misma haya sido concedida.
EL PROBLEMA DE LA SECCIÓN CRÍTICA
En un instante pueden estar activos varios procesos en modo kernel en el sistema, pudiendo producir posibles condiciones de carrera.
Se usan dos métodos generales para gestionar las secciones críticas en los sistemas operativos, cuando se encuentran ejecutando en modo kernel:
Kernels apropiativos. Un kernel apropiativo permite que un proceso sea desalojado mientras se está ejecutando. Debe ser diseñado para asegurar que los datos compartidos del kernel no se vean afectados por posibles condiciones de carrera de los procesos.
EL PROBLEMA DE LA SECCIÓN CRÍTICA
Kernels no apropiativos. Un kernel no apropiativo
no permite que un proceso que se esté ejecutando en
modo kernel sea desalojado; se ejecutará hasta que
salga de dicho modo, hasta que se bloquee o hasta
que ceda voluntariamente el control de la CPU.
Ejemplos:
No apropiativos: Windows XP, 2000, UNIX
tradicional, Linux versiones previas a 2.6
Apropiativos: Linux a partir de 2.6, SOLARIS
SOLUCIÓN DE PETERSON
No hay garantías de que la solución de Peterson
funcione correctamente en arquitecturas
informáticas modernas.
La solución de Peterson se restringe a dos
procesos que van alternando la ejecución de sus
secciones críticas y de sus secciones restantes: Pi,
Pj.
Esta solución requiere 2 estructuras de datos:
SOLUCIÓN DE PETERSON
La estructura del proceso Pi
SOLUCIÓN DE PETERSON
Para demostrar que esta solución es correcta, se
tiene que cumplir que:
La exclusión mutua se conserva.
El requisito de progreso se satisface.
El requisito de espera limitada se cumple
HARDWARE DE SINCRONIZACIÓN
Las regiones críticas deben protegerse mediante
cerrojos.
Un proceso debe colocar un cerrojo antes de
entrar en sección crítica y liberarlo cuando salga
de la misma.
Se deben implementar funciones a nivel de
instrucciones de máquina que cumplan con los 3
requisitos para resolver el problema de la sección
crítica.
SEMÁFOROS
Son herramientas más simples de implementar que
los cerrojos por instrucciones de hardware.
Un semáforo es una variable entera a la que sólo se
puede acceder por 2 operaciones: wait() y signal().
Pueden ser semáforos binarios (cerrojos mútex) o
semáforos contador.
SEMÁFOROS
Se puede usar semáforos binarios para abordar el
problema de la sección crítica en el caso de
múltiples procesos, usando un semáforo mútex,
inicializado con el valor 1 y cada proceso Pi se
organiza de esta forma:
SEMÁFOROS
Los semáforos contadores se pueden usar para
controlar el acceso a un recurso formado por un
número finito de instancias.
El semáforo se inicializa con el número de
recursos disponibles.
Cada proceso que desee usar el recurso ejecuta
una operación wait () en el semáforo
(decrementando la cuenta).
SEMÁFOROS
Cuando un proceso libera el recurso, ejecuta una
operación signal () (incrementando la cuenta).
Cuando la cuenta del semáforo llega a 0, todos las
instancias del recurso estarán en uso. Los
procesos que deseen usar una instancia del
recurso se bloquearán hasta que la cuenta sea
mayor que 0.
PRINCIPALES PROBLEMAS DE
SINCRONIZACIÓN
Problema del buffer limitado
Problema de los lectores – escritores
Los procesos escritores tengan acceso exclusivo a la
base de datos compartida.
El primer problema de los lectores-escritores,
requiere que ningún lector se mantenga en espera a
menos que un escritor haya obtenido ya permiso.
PRINCIPALES PROBLEMAS DE
SINCRONIZACIÓN
El segundo problema de los lectores-escritores
requiere que, una vez que un escritor está preparado,
dicho escritor realice la escritura tan pronto como sea
posible
Problema de la cena de los filósofos
Considere cinco filósofos que gastan sus vidas en
pensar y comer. Los filósofos comparten una mesa
redonda con cinco sillas, una para cada filósofo. En el
centro de la mesa hay una fuente de arroz y la mesa
se ha puesto con sólo cinco palillos
Cuando un filósofo piensa, no se relaciona con sus colegas. De vez en cuando, un filósofo siente hambre v trata de tomar los palillos más próximos a él (los palillos que se encuentran entre él y sus vecinos de la izquierda y la derecha).
Un filósofo sólo puede coger un palillo cada vez. Obviamente, no puede coger un palillo que esté en manos de un vecino de mesa.
Cuando un filósofo hambriento ha conseguido dos palillos, come sin soltar sus palillos. Cuando termina de comer, los coloca de nuevo sobre la mesa y vuelve a pensar
PRINCIPALES PROBLEMAS DE
SINCRONIZACIÓN
Formas de corregir los problemas de sincronización.
Los monitores proporcionan mecanismos de sincronización
para compartir tipos abstractos de datos.
Las variables de condición proporcionan un método
mediante el que un procedimiento de un monitor puede
bloquear su ejecución hasta recibir la señal de que puede
continuar.
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 a datos
compartidos.
PRINCIPALES PROBLEMAS DE
SINCRONIZACIÓN
Transacciones atómicas
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
ejecuta ninguna de las operaciones.
Para asegurar la atomicidad a pesar de los fallos del
sistema, podemos usar un registro de escritura anticipada.
PRINCIPALES PROBLEMAS DE
SINCRONIZACIÓN
Todas las actualizaciones se escriben en el registro, que se
almacena en un medio de almacenamiento estable.
Si se produce un fallo catastrófico del sistema, la informa-
ción contenida en el registro se usa para restaurar el estado
de los elementos de datos actualizados (undo y redo).
Para disminuir el trabajo de buscar en el registro después
de haberse producido un fallo del sistema, podemos usar un
mecanismo de puntos de comprobación (checkpoint).
PRINCIPALES PROBLEMAS DE
SINCRONIZACIÓN
Los métodos más utilizados para el control de
transacciones concurrentes son:
Protocolos de bloqueo (uso de cerrojos)
Esquemas de ordenación mediante marcas temporales
(timestamp).
Top Related