sábado, 3 de julio de 2010

SINCRONIZACIÓN ENTRE PROCESOS

Un proceso es cooperativo si puede afectar o ser afectado por los otros procesos que se están ejecutando en el sistema.

La cooperación entre procesos requiere: la ejecución concurrente de los mismos, mecanismos de comunicación y mecanismos de sincronización. Al haber procesos concurrentes se deben emplear mecanismos para asegurar la consistencia de los datos.

Como ejemplo, supongamos que tenemos 3 procesos concurrentes que quieren modificar un mismo archivo. Si los 3 acceden a este al mismo tiempo el archivo quedará con valores incorrectos. Para resolver problemas como este se ideó la sección crítica, que es el segmento de código que accede a los recursos. Sólo puede haber una sección crítica en ejecución por vez, así nos aseguramos que los datos quedan consistentes.

La sección crítica

El problema de la seción crítica consiste en diseñar un protocolo que los procesos puedan usar para cooperar de esta forma. Cualquier solución al problema de la sección crítica deberá satisfacer los tres requisitos siguiente:

• Exclusión mutua.- Si el proceso Pi está ejecutándose en su sección crítica, los demás procesos no pueden estar ejecutando sus secciones críticas.

• 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.

• 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.

Se usan dos métodos generales para gestionar las secciones críticas en los sistemas operativos:

1. Kernels apropiativos.- Permite que un proceso sea desalojado mientras se está ejecutando en modo kernel.

2. Kernels no apropiativos.- No apropiativo no permite que un proceso que se esté ejecutando en modo kernel sea desalojado.

Hardware de sincronización

En sistemas de un procesador, el problema de las secciones críticas podría ser resuelto simplemente si pudiéramos deshabilitar las interrupciones mientras una variable compartida está siendo actualizada.

Esta solución no es factible para un sistema con varios procesadores debido a la demora que implica el pasaje de mensajes.

En muchos sistemas existen instrucciones de hardware que pueden ser usadas para resolver el problema de las secciones críticas.

Estas instrucciones permiten ejecutar atómicamente las operaciones de:

• chequear y modificar el contenido de una palabra, o

• intercambiar el contenido de dos palabras

Semáforos

Las soluciones por hardware presentadas no son fáciles de generalizar a problemas más complejos.

Esta dificultad se puede superar usando una herramienta de sincronización llamada semáforo.

Un semáforo S es una variable entera que solo es accedida a través de dos operaciones atómicas: wait y signal.

wait(S): while S <= 0 do no-op

S := S - 1;

signal(S): S := S +1;

Problemas clásicos de sincronización

Buffer finito

Lectores y escritores

Filósofos comensales

Buffer finito

Buffer de tamaño N

Semáforo mutex inicializado en 1

Semáforo full inicializado en 0

Semáforo empty inicializado en N

Lectores y escritores

Una zona de memoria es compartida por varios procesos concurrentes

Lectores – sólo lee datos; no efectúan actualizaciones de datos

Escritores – puede leer y escribir

Problema – permitir a múltiples lectores leer simultáneamente; sólo un escritor puede acceder a
los datos en forma simultánea.

Recursos Compartidos

Datos

Semáforo mutex inicializado en 1.

Semáforo wrt inicializado en 1.

Entero readcount inicializado en 0.

Problema de los Lectores

3 variantes:

(1) Los lectores tienen prioridad
Muerte por inanición de los escritores

(2) Los escritores tienen prioridad
Muerte por inanición de los lectores

(3) Lectores y Escritores tienen la misma Prioridad
No hay problemas de inanición

El problema de los filósofos comensales

Recursos compartidos

Fuente de arroz (datos)

Semáforos chopstick [5] inicializados en 1

Monitores

Son mecanismos de sincronización de nivel más alto que semáforos. La construcción se realiza a nivel de lenguaje de programación que controla el acceso a datos compartidos.

Un tipo monitor tiene un conjunto de operaciones definidas por el programador que gozan de la característica de exclusión mutua dentro del monitor.

No hay comentarios:

Publicar un comentario

2009 Rodriguez Time - Powered by Blogger
Blogger Templates by Deluxe Templates
Wordpress theme by Dirty Blue