Sistemas Operativos
Por: 15-04-2009 por jdjapon | Categorías asociadas: Capitulo 6

EnEn los sistemas operativos multiprogramados surge el concepto de proceso, asociado a la ejecución de un programa. En general, un proceso es un programa en  ejecución, representado básicamente por un contador de programa, y su contexto de ejecución, que puede ser más o menos amplio. Así, un proceso incluye en su contexto el estado de la pila, el estado de la memoria y el estado de la E/S.

En algunos sistemas es posible determinar el contexto propio de un proceso en el momento de su creación, como ocurre con la llamada al sistema clone() de Linux. En adelante, sin perder generalidad, utilizaremos siempre el término proceso, independientemente de cuál sea su contexto.




Por: 14-04-2009 por skarmijos | Categorías asociadas: Capitulo 6, Paralelo "B"

SINCRONIZACION DE PROCESOS

Un proceso cooperativo  es aquel que puede afectar o verse afectado por otros procesos que estén ejecutándose en el sistema. Los procesos cooperativos pueden compartir directamente un espacio de direcciones lógico o compartir los datos sólo a través de archivos o mensajes. El primer caso se consigue mediante el uso de procesos ligeros o hebras. El acceso concurrente a datos compartidos puede dar lugar a incoherencia de los datos.

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. La característica importante del sistema es que, cuando dos procesos no pueden ejecutar su sección crítica al mismo tiempo. Cada proceso debe solicitar permiso para entrar en su sección crítica, la selección de código que implementa esta solicitud es la sección de entrada. La sección crítica puede ir seguida de una sección de salida. El código restante se encuentra en la sección restante. La solución deberá satisfacer los siguientes requisitos: exclusión mutua, progreso, espera limitada. Se usan dos métodos generales para gestionar las secciones críticas en los sistemas operativos:

Kernel apropiativos.-  permite que un proceso sea desalojado  mientras se está ejecutando en modo kernel.

Kernel no apropiativos.- no permite que un proceso que se está ejecutando en modo kernel sea desalojado; el proceso en modo kernel se ejecutará hasta que salga de dicho modo, hasta que se bloquee o hasta que ceda voluntariamente el control de la CPU. Un kernel no apropiativo esta esencialmente libre de condiciones de carrera en lo que respecta a las estructuras de datos del kernel, ya que solo hay un proceso activo en el kernel en cada momento, por lo que los kernel apropiativos deben ser diseñados cuidadosamente para asegurar que los datos compartidos del kernel no se vean afectados  por posibles condiciones de carrera.

Un kernel apropiativo es más adecuado para la programación en tiempo real, ya que permite a un proceso en tiempo real desalojar a un proceso que se esté ejecutando actualmente en el kernel, además que puede tener una mejor capacidad de respuesta ya que existe menos riesgo de que un proceso en modo kernel se ejecute durante un periodo de tiempo arbitrariamente largo.

Una solución clásica al problema de la sección crítica es la solución de Peterson, que se basa en restringir dos procesos que se van alternando la ejecución de sus secciones criticas y de sus secciones restantes. Cualquier solución al problema de la sección crítica requiere una herramienta muy simple, un cerrojo; de esta manera se evita las condiciones de carrera requiriendo que las regiones críticas se protejan mediante cerrojos, es decir, un proceso debe adquirir un cerrojo antes de entrar en una sección critica y liberarlo cuando salga de la misma. El soporte hardware puede facilitar cualquier tarea de programación y mejorar la eficiencia del sistema, por lo que muchos sistemas informáticos modernos proporcionan instrucciones hardware especiales que nos permiten consultar y modificar el contenido de una palabra o intercambiar los contenidos de dos palabras atómicamente, es decir, como una unidad de trabajo ininterrumpida. Una herramienta de sincronización es el semáforo, un semáforo S es una variable entera a la que, dejando aparte la inicialización  solo se accede mediante dos operaciones atómicas estándar: wait() y signal(), cuando un proceso modifica el valor del semáforo, ningún otro proceso puede modificar simultáneamente el valor de dicho semáforo. El sistema operativo diferencia entre semáforos contadores y viarios. El valor de un semáforo contador puede variar en un dominio no restringido, mientras que el valor de un semáforo binario solo puede ser 0 o 1, en algunos casos estos semáforos se conocen como cerrojos mutex, ya que proporcionan exclusión mutua.

Los semáforos contadores se pueden usar para controlar el acceso a un determinado recurso formado por un número finito de instancias, se inicializa con el número de recursos disponibles. La principal desventaja de la definición de semáforo dada aquí es que requiere una espera activa. Mientras un  proceso está en su sección critica, cualquier otro proceso que intente entrar en su sección crítica debe ejecutar continuamente un bucle en el código de entrada, la espera activa desperdicia ciclos de CPU que algunos otros procesos podrían usar de forma productiva, este tipo de semáforo se denomina cerrojo de bucle sin fin. La lista de procesos es espera puede implementarse fácilmente mediante un campo de enlace en cada PCB. La implementación de un semáforo con una cola de espera puede dar lugar a una situación en la que dos o más procesos estén esperando indefinidamente a que se produzca un suceso que solo puede producirse como consecuencias de las operaciones afectadas por otro de los procesos en espera, el suceso es la ejecución signal, cuando llega a un estado así se dice que los procesos se han interbloqueado. Un problema con los interbloqueos es el bloqueo indefinido o muerte por inanición que es aquella en la que algunos procesos esperan de forma indefinida dentro del semáforo, puede producirse si añadimos y eliminamos los procesos a la lista asociada con el semáforo utilizando un esquema LIFO.

Se han definido problemas de sincronización como es el de bucle limitado, problema de los lectores escritores el cual se daría cuando algunos procesos pueden querer leer la base de datos y los otros pueden desear actualizarla. Este problema presenta variantes en las cuales se utiliza prioridades, la más sencilla requiere que ningún lector se mantenga en espera a menos que un escritor haya obtenido ya permiso para utilizar el objeto compartido, el segundo problema se trata sobre si un escritor está esperando para acceder al objeto, ningún proceso lector nuevo puede iniciar la lectura. Problema de la cena de filósofos 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 produzca interbloqueos ni bloqueos indefinidos.

Para afrontar estos problemas se puede utilizar los monitores que proporcionan mecanismos de sincronización para compartir tipos abstractos de datos, las variables de condición proporcionan un método mediante que un procedimiento de un monitor puede bloquear su ejecución hasta recibir la señal de que puede continuar.  Una transacción es una unidad de programa que se debe ejecutar atómicamente, para asegurarlo a pesar de fallos se puede usar un registro de escritura anticipada. Para asegurar la serialización cuando se solapa la ejecución de varias transacciones, se debe emplear un esquema de control de concurrencia, estos esquemas operan retardando una operación o cancelando la transacción que ejecuto la operación, entre estos métodos consta los protocolos de bloqueo y los esquemas de ordenación mediante marcas temporales.




Por: 14-04-2009 por rasisalima | Categorías asociadas: Capitulo 6, Paralelo "B"

Capitulo 6
Sincronización de procesos
Un proceso cooperativo es aquel que puede afectar o verse afectado por otro proceso que estén ejecutándose en el sistema. Los procesos cooperativos pueden compartir directamente  un espacio de dirección lógico o compartir los datos solo a través de archivos o mensajes. El primer paso se consigue mediante el uso de procesos ligeros o hebras. El acceso concurrente a datos  compartidos puede dar lugar a incoherencias de datos.
6.1    Fundamentos
Donde varios procesos manipulan y acceden a los mismos datos concurrentemente y resultado de la ejecución depende del orden concreto en que se produzcan loa accesos,  se conoce como condición de carrera. Para protegerse frente a este tipo de condiciones, necesitamos garantizar que solo un proceso cada vez pueda manipular la variable. Para conseguir tal garantía tenemos que sincronizar de alguna manera los procesos.
6.2    El problema de la sección critica
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. A característica principal del sistema es que, cuando un proceso está ejecutando su sección critica, otro proceso no puede ejecutar su correspondiente sección crítica. Cada proceso debe solicitar permisos para entrar en su sección crítica la sección de código que implementa esta solicitud es la sección de entrada. La sección crítica puede ir seguida de una sección de salida. El código restante se encuentra en la sección restante.
Cualquier solución al problema se la sección crítica deberá satisfacer los tres requisitos siguientes:
1.    Exclusión mutua. Si el proceso está ejecutándose en su sección crítica, los demás procesos no pueden estar ejecutando sus secciones críticas.
2.    Progreso. Si ningún proceso está ejecutando su sección crítica y algunos procesos desean entrar en sus correspondientes secciones críticas, solo 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 critica, y esta sección no se puede posponer indefinidamente.
3.    Espera limitada. Existe un límite en el número de veces que se permite que otros procesos entren en su secciones críticas después de que un proceso haya hecho una solicitud para entrar en su sección critica 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) los Kernels apropiativos y (2) los kernels no apropiativos. Un kernel apropiativo permite que un proceso sea desalojado mientras se está ejecutando en modo kernel. Un kernel no apropiativo no permite que un proceso que se está ejecutando en modo kernel sea desalojado, el proceso en modo kernel se ejecuta hasta que salga que se bloque o hasta que seda voluntariamente el control de la CPU.
6.3    Solución de Peterson
Una solución clásica basada en software al problema de la sección critica conocida con el nombre de solución de Peterson. Debido a la arquitectura informáticas modernas ejecutan las instrucciones básicas en lenguaje maquina, como load y store, no hay garantías de que la solución de Peterson funcione, se restringe a dos procesos que van alternando las ejecuciones críticas y sus secciones restantes.
La solución de de Peterson requiere que los dos procesos  compartan dos elementos de datos:
Si ambos procesos intentan entrar al mismo tiempo. Solo una de estas asignaciones permanecerán, la otra tendrá lugar, pero será sobre escrita inmediatamente. El valor que adopte decidirá cuál de los dos procesos podrá entrar primero en su sección crítica.
Demostrar que estas soluciones son concretas:
1.    La exclusión mutua se conserva.
2.    El requisito de proceso se satisface.
3.    El requisito de espera limitada se cumple.
6.4        Hardware de sincronización
Cualquier solución al problema de la sección crítica requiere una herramienta muy simple un cerrojo. Las condiciones de carrera se evitan requiriendo que las regiones críticas se protejan mediante cerrojos. Un proceso debe adquirir un cerrojo antes de entrar en un sección crítica y liberarlo cuando salga de la misma.
El soporte hardware puede facilitar cualquier tarea de programación y mejorar la eficiencia de la tarea. El sistema de la sección crítica podría resolverse de forma simple en un entorno de un solo procesador si pudiéramos impedir que se produjeran interrupciones mientras se está modificando una variable compartida. Esta es el método que emplean los kernels  no apropiativos.
En un sistema multiprocesador puede consumir mucho tiempo ya que hay que pasar el mensaje a todos los procesadores. Los sistemas informáticos modernos proporcionan instrucciones hardware especiales que nos permiten consultar y modificar el contenido de una palabra o intercambiar los contenidos de dos palabras atómicamente, como una unidad de trabajo ininterrumpible.
Para probar que se cumple el requisito de tiempo de espera limitado, observamos que, cuando un proceso deja su sección crítica, exploramos la matriz en el orden cíclico  y seleccionamos el primer proceso que se encuentra en la sección de entrada.
6.5    Semáforos
Un semáforo S es un variable entrada a la que, dejamos aparte la iniciación, solo se accede mediante dos operaciones atómicas estándar: wait () y signal (). Originalmente. La operación wait () se denomina P (Probar); mientras que signal ()se denomina originalmente V (incrementar).
Todas las modificaciones del valor entero del semáforo en las operaciones deben ejecutarse de forma indivisible. Cuando un proceso modifica el valor del semáforo, ningún otro proceso puede modificar simultáneamente el valor.
6.5.1    Utilización
El valor de un semáforo  contador puede variaren un dominio no restringido, un semáforo binario solo puede ser 0 o 1, los semáforos binarios se conocen como cerrojos mútex, ya que son cerrojos que proporcionan exclusión mutua.
Podemos usar semáforos binarios para abordar el problema de la sección crítica en el caso de múltiples procesos. Los semáforos controladores se pueden usar para controlar el acceso a un determinado recurso formado por un número finito de instancias.
6.5.2    Implementación
La primera desventaja de la definición de semáforos  es que requiere una espera activa. Mientras un proceso está en su sección critica, cualquier otro proceso que intente entrar en su sección crítica debe ejecutar continuamente un bucle en el código de entrada.
La espera activa desperdicia ciclos de CPU que algunos otros procesos podrían usar de forma productiva, este tipo de semáforos también se denominan cerrojos mediante bucle sin fin ya que el proceso se mantienen en un bucle sin fin. Cuando se espera que los cerrojos se mantengan durante un periodo de tiempo corto, los cerrojos mediante bucle sin fin pueden resultar útiles.
Cuando un proceso ejecuta la operación wait() y determina que el valor del semáforo no es positivo, tiene que esperar. Sin embargo, en lugar de entrar en  una espera activa el proceso puede bloquearse a sí mismo.
En un entorno multiprocesador, hay que deshabilitar las interrupciones en cada proceso; si no se hace así, las instrucciones de los diferentes procesos pueden intercalarse se forma arbitraria.
6.5.3    interbloqueos e inanición
La implementación de un semáforo con una cola de espera puede dar lugar a una situación en la que dos o más procesos estén esperando indefinidamente a que se produzca un suceso que solo puede producirse con consecuencia de la operación efectuada por otro de los procesos en espera. Cuando se llega a un estado así se dice que estos procesos se han interbloqueado.
Otro problema con los interbloqueos es el del bloqueo indefinido o muerte por inanición, una situación en la que algunos procesos esperan de forma indefinida dentro de un semáforo.
6.6    Problemas clásicos de sincronización
Problema del búfer limitado.- Se utiliza para ilustrar la potencia de las primitivas de sincronización, presenta una simetría entre el productor y el consumidor: donde el productor genera los búferes llenos para el consumidor o como un consumidor que genera búfer vacios para el productor.
Problema de los lectores escritores.-  imagina una base de datos que debe ser compartida por varios procesos concurrentemente. Algunos de estos procesos quieren simplemente leer la base de datos mientras que otros pueden desear actualizar. Diferenciamos estos dos tipos de procesos denominado a los primeros lectores y a los otros escritores. Obviamente si dos lectores acceden simultáneamente a los datos compartidos, esto no dará lugar a ningún problema. Sin embargo, si un escritor y algún otro proceso accede simultáneamente a la base de datos, el caos esta asegurado.
Para asegurar que estos procesos no afloren, requerimos que los procesos escritores tengan acceso exclusivo a la base de datos compartida.
Problema de la cena de los filósofos.- considere cinco filósofos que gastan su vida en pensar y comer. Los filósofos comparten una mesa redonda con cinco sillas. En el centro de la mesa hay una fuente de arroz y la mesa se ha puesto solo con cinco palillos. Cuando un filosofo piensa no se relaciona con sus colegas. Debes en cuando un filósofo tiene hambre y trata de los palillos más próximos a él. Un filósofo solo puede coger un palillo cada vez. Obviamente no puede coger un palillo que haya cogido antes un vecino de mesa. Cuando un filósofo a conseguido dos palillos come sin soltarlos. Cuando termina de comer los coloca sobre la mesa y vuelve a pensar.
Las soluciones posibles son las siguientes:
•    Permitir como máximo haya cuatro filósofos sentados en la mesa simultáneamente
•    Permitir a cada filósofo coger sus palillos solo si ambos palillos están disponibles.
•    Utilizar una solución asimétrica es decir, un filosofo impar coge primero el palillo de su izquierda y luego el que está a su derecha, mientras que un filósofo par coge primero el palillo de su derecha y luego el de la izquierda.
6.7    Monitores
Aunque los semáforos proporcionan un mecanismo adecuado y efectivo para el proceso de sincronización un  uso incorrecto de los mismos puede dar lugar a errores de temporización que son difíciles de detectar, dado que estos errores solo ocurren si tienen lugar algunas secuencias de ejecución concretas y estas secuencias no siempre se producen.
Para abordar tales errores los investigadores han desarrollado estructuras de lenguaje de alto nivel. Como es el tipo monitor.
6.7.1    Utilización
Un tipo abstracto de datos, agrupa una serie de datos privados con un conjunto de métodos públicos que se utilizan para operar sobre dichos datos. 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. El tipo de monitor también contiene una serie de variables cuyo valor definen el estado de una instancia de dicho tipo, junto con los cuerpos de los procedimientos o funciones que operan sobre dicha variable.
La estructura del monitor asegura que solo un proceso esté activo cada vez dentro del monitor.
6.7.2    Solución al problema de la cena de los filósofos usando monitores
Esta solución impone la restricción de que un filósofo puede coger sus palillos solo si ambos están disponibles, para esto necesitamos diferenciar entre tres estados en los que puede hallarse un filosofo.
Esta solución asegura que nunca dos vecinos de mesa estarán comiendo simultáneamente y que no se produzcan interbloqueos.
6.9    Transacciones atómicas
La exclusión mutua de sección crítica asegura que se ejecuten atómicamente. Es decir, si dos secciones críticas se ejecutan de forma concurrente, el resultado es equivalente a su ejecución secuencial en algún orden desconocido. Aunque esta propiedad resulta útil un numeroso dominio de aplicación, en muchos casos sesearíamos asegurarnos de que una sección crítica forme una sola unidad lógica de trabajo, que se ejecuta por completo o que no se ejecuta en absoluto.
El problema de la coherencia de los datos, junto con el del almacenamiento y la recuperación de los mismos, tienen una gran importancia en los sistemas de base de datos.
6.9.1    Modelo del sistema
Una colección de instrucciones que realiza una sola función lógica se denomina transacción. Una cuestión importante en el proceso de transacción es la conservación de la atomicidad, incluso en el caso de que se produzca fallos dentro del sistema informático.
Podemos clasificar los diversos tipos de medios de almacenamiento atendiendo a su velocidad su capacidad y su resistencia a los fallos.
•    Almacenamiento volátil
•    Almacenamiento no volátil
•    Almacenamiento estable
6.9.2    Recuperación basada en registros
Una forma de seguridad consiste en guardar en un disco de almacenamiento estable la información que describe todas las modificaciones realizadas por las transacciones en los distintos datos a los que haya accedido. Cada entrada del registro describe una única operación de escritura de la transacción y consta de los campos siguientes:
•    Nombre de la transacción
•    Nombre del elemento de datos
•    Valor antiguo
•    Nuevo valor
6.9.3    Puntos de comprobación
Cuando se produce un fallo del sistema, debemos consultar el registro para determinar aquellas transacciones que necesitan ser rehechas y aquellas que tienen que deshacerse. En principio, necesitamos revisar el registro completo para identificar todas las transacciones. Este método tiene dos inconvenientes:
1.    El proceso de búsqueda consume mucho tiempo.
2.    La mayor parte de las transacciones que, desacuerdo con nuestro algoritmo, va a haber que rehacer ya abran actualizado los datos que le registro indica que hay que modificar.
El sistema realiza periódicamente puntos de comprobación, lo que requiere la siguiente secuencia de comprobaciones:
1.    Evitar todas las entradas del registro que actualmente se encuentra en un medio de almacenamiento volátil a un medio de almacenamiento estable.
2.    Enviar todos los datos modificados que residan en el medio de almacenamiento volátil al medio de almacenamiento estable
3.    Enviar una entrada de registro al almacenamiento estable.
6.9.4    Transacciones atómicas concurrentes
Dada que cada transacción es atómica, la ejecución concurrente de transacciones debe ser equivalente al caso en que las transacciones se ejecutan en serie siguiendo un orden arbitrario. Esta propiedad denominada serializarían se puede mantener simplemente ejecutando cada transacción dentro de una sección crítica.
Aunque este esquema asegura la atomicidad de todas las transacciones que se estén ejecutando de forma concurrente, es bastante restrictivo. Para garantizar la serialización se utilizan distintos algoritmos de control de concurrencia, los cuales son:
•    Serialización
•    Protocolo de bloqueo
o    Compartido
o    Exclusivo
•    Protocolo basado en marcas temporales




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.




Por: 14-04-2009 por jccapa | Categorías asociadas: Capitulo 6

Sincronización de Procesos

-         Un proceso cooperativo es aquel que puede afectar o verse afectado por otros procesos que estén ejecutándose en el sistema.

-         Los archivos cooperativos pueden compartir directamente un espacio de direcciones lógico (es decir tanto código como datos) o compartir los datos solo a través de archivos o mensajes.

Fundamentos

-         Hemos desarrollado un modelo de sistema formado por procesos o hebras secuenciales cooperativas, los cuales se ejecutan de manera asíncrona posiblemente compartiendo datos.

El problema de la sección critica

-         La característica principal del sistema es que, cuando un proceso esta ejecutando su sección critica, ningún otro proceso puede ejecutar su correspondiente sección crítica.

-         Es decir, dos procesos no pueden ejecutar su sección crítica al mismo tiempo.

-         Cualquier solución al problema de la sección critica deberá satisfacer los tres requisitos siguientes:

·         Exclusión mutua. Si el proceso Pi esta ejecutando su sección crítica, los demás procesos no pueden estar ejecutando sus secciones criticas.

·         Progreso.

·         Espera limitada. Existe un límite que es permitido un proceso para que ejecute su sección crítica.     

 

Solución de Peterson

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

-         Los procesos se enumeran como P0 y P1.

-         La solución de Peterson requiere que los dos procesos compartan dos elementos de datos.

 

Hardware de sincronización

-         En general podemos afirmar que cualquier solución al problema de la sección crítica requiere una herramienta muy simple, un cerrojo.

-         Es decir, un proceso debe adquirir un cerrojo antes de entrar en una sección crítica y liberarlo cuando salga de la misma. 

 

Semáforos

-         Un semáforo S es una variable entera a la que, dejando aparte la inicialización, solo se accede mediante dos operaciones atómicas estándar: wait () y signal ().

-         Utilización

·         Los sistemas operativos diferencian a menudo entre semáforos contadores y semáforos binarios.

·         El valor de un semáforo contador puede variar en un dominio no restringido, mientras que el valor de un semáforo binario solo puede ser 0 o 1.

·         Los semáforos contadores se pueden usar para controlar el acceso a un determinado recurso formado por un número finito de instancias.  

-         Implementación

·         La principal desventaja de la definición de semáforo dada aquí es que requiere una espera activa.

·         Mientras un proceso esta en sus sección critica, cualquier otro proceso que intente entrar en su sección critica debe ejecutar continuamente un bucle en el código de entrada.

·         Este bucle continuo plantea claramente un problema en un sistema real de multiprogramación, donde una sola CPU se comparte entre muchos procesos.

-         Interbloqueos e inanición

·         La implementación de un semáforo con una cola de espera puede dar lugar a una situación en la que dos o más procesos estén esperando indefinidamente.

·         El suceso en cuestión es la ejecución de una operación signal (). Cuando se llega a un estado así, se dice que estos procesos se han interbloqueado.

·         Decimos que un conjunto de procesos esta en un estado de interbloqueo cuando todos los procesos del conjunto están esperando un suceso que solo puede producirse como consecuencia de las acciones de otro proceso del conjunto. 

 

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.

 

 

 

 

Monitores

-         Aunque los semáforos proporcionan un mecanismo adecuado y efectivo para el proceso de sincronización, un uso incorrecto de los mismos puede dar lugar a errores de temporización que son difíciles de detectar.

-         Utilización

·         La representación de un tipo de monitor no puede ser utilizada directamente por los diversos procesos.

·         La estructura del monitor asegura que solo un proceso este activo cada vez dentro del monitor.

Ejemplos de sincronización

-         A continuación se describe los mecanismos de sincronización proporcionados por los sistemas operativos Solaris, Windows XP y Linux.

-         Sincronización en Solaris

·         Para controlar el acceso a las secciones criticas, Solaris proporciona mutéx adaptativos, variables de condición, semáforos, bloqueos o cerrojos lector-escritor y colas de bloqueo.

·         En u sistema multiprocesador, un mutéx adaptativo se inicia como un semáforo estándar, implementado como un cerrojo de bucle sin fin.

·         En un sistema monoprocesador, la hebra que mantiene el cerrojo nunca estará ejecutándose cuando otra hebra comprueba el cerrojo, ya que solo puede haber una hebra ejecutándose cada vez.

·         Solaris utiliza colas de bloqueos para ordenar la lista de hebras en espera de adquirir un mutéx adaptativo o un cerrojo lector-escritor.   

-         Sincronización en Windows XP

·         El sistema Windows XP es un kernel multihebra que proporciona soporte para aplicaciones en tiempo real y múltiples procesadores.

·         Para la sincronización de hebras fuera del kernel, Windows XP proporciona objetos despachadores.

·         Los objetos despachadores pueden estar en estado señalizado o en estado no señalizado.

·         Un estado señalizado indica que el objeto esta disponible y que una hebra no se bloqueara cuando adquiera el objeto.

·         Un estado no señalizado indica que el objeto no esta disponible y que una hebra se bloqueara cuando intente adquirir el objeto.

-         Sincronización en Linux

·         Ahora el kernel de Linux es completamente un kernel apropiativo, de modo que una tarea puede ser desalojada aun cuando este ejecutándose en el kernel.

·         El kernel de Linux proporciona bloqueos mediante bucles sin fin y semáforos para establecer bloqueos en el kernel.

·         Linux utiliza un método interesante para activar y desactivar los mecanismos de desalojo del kernel: proporciona dos llamadas al sistema.

·         Cuando sea necesario mantener un bloqueo durante un periodo de tiempo largo, resulta más apropiado utilizar semáforos.

 

 

Transacciones atómicas

-         La exclusión mutua de secciones críticas asegura que estas se ejecutan atómicamente. Es decir, si dos secciones críticas se ejecutan de forma concurrente, el resultado es equivalente a su ejecución secuencial en algún orden desconocido.

-         Modelo del sistema

·         Una colección de instrucciones  (u operaciones) que realiza una sola función lógica se denomina transacción.

·         Podemos pensar en una transacción como en una unidad de programa que accede a elementos de datos que residen en un disco, dentro de algunos determinados archivos.

-         Recuperación basada en registro

·         Una forma de asegurar la atomicidad consiste en grabar en un dispositivo de almacenamiento estable la información que describa todas las modificaciones realizadas por la transacción en los distintos datos a los que haya accedido.

·         El método mas extendido para conseguir esta forma de protección es el registro de escritura anticipada.

·         En este caso el sistema mantiene en un medio de almacenamiento estable una estructura de datos denominada registro.

-         Puntos de comprobación

·         Este método tiene, fundamentalmente, dos inconvenientes:<strong style=”mso-bidi-font-weight


Comments Off      Leer más