Semáforos en sistemas concurrentes
42 Questions
3 Views

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson

Questions and Answers

¿Cuál de las siguientes afirmaciones describe con mayor precisión el comportamiento de la operación sem_wait(s) en un semáforo s?

  • Si el valor de `s` es mayor que 0, lo decrementa. Si es 0, el proceso continúa sin bloquearse.
  • Si el valor de `s` es 0, bloquea el proceso hasta que `s` sea mayor que 0, luego lo decrementa. Si `s` es mayor que 0, lo decrementa directamente. (correct)
  • Siempre decrementa el valor de `s` en una unidad, independientemente de su valor actual.
  • Incrementa el valor de `s` en una unidad y, si hay procesos bloqueados esperando en `s`, reanuda uno de ellos.

Considerando un semáforo s con un valor inicial de 2, y asumiendo que se han completado 5 llamadas a sem_signal(s) y 3 llamadas a sem_wait(s), ¿cuál es el valor actual de s?

  • 6
  • 10
  • 4 (correct)
  • 0

¿Qué condición debe cumplirse para que un proceso se bloquee al intentar ejecutar sem_wait(s) sobre un semáforo s?

  • El valor de `s` debe ser igual a 0. (correct)
  • El valor de `s` debe ser mayor que 1.
  • No hay otros procesos esperando en `s`.
  • El valor de `s` debe ser menor que 0.

¿Cuál de las siguientes opciones describe un escenario imposible según las propiedades de los semáforos binarios?

<p>El valor del semáforo es 1 y hay un proceso bloqueado esperando en él. (D)</p> Signup and view all the answers

Si en un sistema concurrente, múltiples procesos comparten un semáforo, ¿cómo garantiza el diseño del semáforo que no haya condiciones de carrera al modificar su valor?

<p>Implementando <code>sem_signal</code> y <code>sem_wait</code> como operaciones atómicas o utilizando mecanismos de bloqueo interno para asegurar la exclusión mutua. (B)</p> Signup and view all the answers

¿Cuál de las siguientes afirmaciones describe mejor la restricción sobre las interfoliaciones de las sentencias E (escritura) y L (lectura) en los procesos Productor y Consumidor?

<p>Las interfoliaciones válidas deben alternar las sentencias E y L, comenzando con E, para asegurar que cada valor producido sea consumido correctamente. (D)</p> Signup and view all the answers

Si la sentencia x := a (E) se retrasa indefinidamente en el proceso Productor, ¿cuál es el resultado más probable en el proceso Consumidor?

<p>El proceso Consumidor continuará utilizando el último valor conocido de <code>b</code> indefinidamente. (C)</p> Signup and view all the answers

Considerando la necesidad de alternar las sentencias E y L, ¿qué problema podría surgir si múltiples procesos Consumidor intentan leer la variable x simultáneamente?

<p>Se podría producir una condición de carrera, donde múltiples consumidores lean el mismo valor antes de que el productor pueda actualizar <code>x</code>. (D)</p> Signup and view all the answers

¿Qué modificación en el proceso Productor podría mitigar los problemas causados por retrasos en la ejecución de la sentencia E?

<p>Añadir un bucle de reintento que asegure que la sentencia E se ejecuta eventualmente. (D)</p> Signup and view all the answers

Supongamos que se introduce un búfer de tamaño fijo entre el proceso Productor y el proceso Consumidor. ¿Cómo afectaría esto a la necesidad de alternar estrictamente las sentencias E y L?

<p>Eliminaría la necesidad de alternar E y L, ya que el búfer puede almacenar múltiples valores temporalmente. (B)</p> Signup and view all the answers

¿Cuál es la principal desventaja de utilizar dos variables lógicas independientes (p0sc, p1sc) en lugar de una sola para controlar el acceso a la sección crítica en un sistema concurrente?

<p>Introduce una condición de carrera que puede llevar a que ambos procesos accedan simultáneamente a la sección crítica, violando la exclusión mutua. (D)</p> Signup and view all the answers

En el pseudocódigo presentado, si p0sc y p1sc son ambas true, ¿qué problema fundamental de concurrencia se manifiesta?

<p>Exclusión mutua violada, permitiendo que ambos procesos accedan a la sección crítica simultáneamente. (D)</p> Signup and view all the answers

Considerando la propiedad de progreso en sistemas concurrentes, ¿cuál de las siguientes afirmaciones describe un escenario en el que el uso de dos variables booleanas independientes (p0sc, p1sc) podría aún fallar en garantizar el progreso?

<p>Si ambos procesos intentan entrar en la sección crítica al mismo tiempo, pueden entrar simultáneamente. (C)</p> Signup and view all the answers

¿Cuál es la implicación de que los procesos no tengan que entrar de forma necesariamente alterna a la sección crítica al usar dos variables independientes?

<p>Se mejora la eficiencia al permitir que un proceso acceda repetidamente a la sección crítica si el otro no lo necesita. (C)</p> Signup and view all the answers

En el contexto de la corrección del pseudocódigo, ¿qué significa que la propiedad de progreso 'sí se cumple'?

<p>Que el algoritmo garantiza que todos los procesos eventualmente accederán a la sección crítica, sin bloqueos indefinidos. (B)</p> Signup and view all the answers

Supongamos que el proceso P0 establece p0sc := true y, antes de entrar a la sección crítica, es interrumpido y el proceso P1 establece p1sc := true. ¿Qué estado concurrente problemático puede surgir inmediatamente después?

<p>Violación de la exclusión mutua, ya que ambos procesos podrían entrar en la sección crítica. (C)</p> Signup and view all the answers

Considerando la solución propuesta con las variables p0sc y p1sc, ¿cuál es el principal riesgo si un proceso modifica su variable a false prematuramente?

<p>El proceso podría reingresar a la sección crítica antes de que el otro proceso tenga la oportunidad. (B)</p> Signup and view all the answers

¿Qué cambio en el pseudocódigo podría mitigar el riesgo de que ambos procesos entren simultáneamente a la sección crítica?

<p>Introducir una variable de turno (turn) que determine qué proceso tiene prioridad para entrar. (D)</p> Signup and view all the answers

¿Cuál es la principal razón por la que la primera versión del código presentado no garantiza la exclusión mutua en la sección crítica?

<p>Ambos procesos pueden leer <code>p01sc</code> como <code>false</code> simultáneamente antes de que cualquiera la establezca como <code>true</code>. (A)</p> Signup and view all the answers

En el contexto del código provisto, ¿qué significa que p01sc valga true?

<p>Señala que al menos uno de los procesos, P0 o P1, está actualmente ejecutando dentro de la sección crítica. (C)</p> Signup and view all the answers

Considerando la secuencia de eventos que lleva al fallo de exclusión mutua, ¿cuál es el paso crítico en el que se produce la violación de la exclusión mutua?

<p>Cuando ambos procesos leen <code>p01sc</code> como <code>false</code> y proceden a entrar en la sección crítica antes de que el otro actualice <code>p01sc</code> a <code>true</code>. (B)</p> Signup and view all the answers

Si se implementara un semáforo en lugar de la variable booleana compartida, ¿qué operación correspondería a p01sc := true en el código original?

<p>La operación <code>wait</code> (o <code>acquire</code>) en el semáforo. (D)</p> Signup and view all the answers

¿Qué cambio en el diseño del sistema podría mitigar el riesgo de que ambos procesos entren en la sección crítica simultáneamente?

<p>Usar una operación atómica de 'test-and-set' sobre la variable <code>p01sc</code>, garantizando que la lectura y modificación ocurran como una sola acción indivisible. (C)</p> Signup and view all the answers

En términos de los principios de concurrencia, ¿qué condición necesaria para la exclusión mutua NO se cumple en la versión inicial del código?

<p>Exclusión Mutua: Solo un proceso puede estar en la sección crítica en un momento dado. (B)</p> Signup and view all the answers

Si se utilizara un mutex en lugar de la variable booleana compartida, ¿cuál sería la principal ventaja en términos de corrección y seguridad?

<p>El mutex garantizaría la exclusión mutua de forma más robusta al ser implementado típicamente con operaciones atómicas a nivel de hardware. (D)</p> Signup and view all the answers

Considerando el problema de la exclusión mutua en sistemas concurrentes, ¿cómo afectaría la introducción de una sección no crítica más larga en uno de los procesos al riesgo de violación de la exclusión mutua en el código dado?

<p>No afectaría significativamente, ya que el riesgo de violación de la exclusión mutua depende principalmente de la velocidad con la que los procesos acceden a la sección crítica. (C)</p> Signup and view all the answers

¿Cuál de las siguientes afirmaciones describe mejor la implicación de que turno0b valga true durante el intervalo (s, t] en la demostración de exclusión mutua?

<p>Significa que el proceso 0 no pudo entrar en su sección crítica (SC) entre s y t, y que en s el proceso 1 fue el último en asignar valor a <code>turno0</code>. (D)</p> Signup and view all the answers

En la demostración de exclusión mutua, ¿qué condición no se menciona como verdadera durante el intervalo de tiempo (s, t], asumiendo que ambos procesos están en su sección crítica (SC) en el instante t?

<p>El proceso con el identificador más bajo tiene prioridad para acceder a la sección crítica. (C)</p> Signup and view all the answers

Considerando el argumento de espera limitada, ¿cuál es la razón principal por la que el proceso 1 no puede volver a entrar en la sección crítica (SC) mientras el proceso 0 permanece en espera ocupada?

<p>El proceso 1 no puede volver a entrar porque debe pasar por la asignación de <code>true</code> a <code>turno0</code>, lo que inevitablemente permitirá que el proceso 0 entre en la SC después de un tiempo finito. (B)</p> Signup and view all the answers

¿Cuál es la conclusión principal derivada de la demostración de exclusión mutua presentada?

<p>La exclusión mutua se cumple, lo que significa que no puede existir ningún instante en el cual ambos procesos estén simultáneamente en su sección crítica. (D)</p> Signup and view all the answers

En el contexto de la espera limitada, ¿cuál es el peor escenario posible (m) en términos de cuántas veces el proceso 1 puede entrar a su sección crítica antes que el proceso 0, si el proceso 0 está en espera ocupada?

<p>m = 1, lo que significa que el proceso 1 puede entrar una vez a la sección crítica antes que el proceso 0. (C)</p> Signup and view all the answers

¿Cuál de las siguientes opciones describe una condición necesaria para que la demostración de exclusión mutua sea válida?

<p>Que las asignaciones a la variable <code>turno0</code> sean atómicas. (A)</p> Signup and view all the answers

Si la condición de espera del proceso 0 se cumple en el intervalo (s, t], ¿qué se puede inferir sobre el estado del proceso 1 durante ese mismo intervalo?

<p>El proceso 1 no estaba en SC en s, ni ha podido entrar a SC durante (s, t], ya que p0sc y turno0 valen true. (A)</p> Signup and view all the answers

¿Por qué la demostración de exclusión mutua considera importante el intervalo de tiempo (s, t]?

<p>Porque representa el intervalo entre el último acceso a una variable compartida antes de que ambos procesos supuestamente entren en la sección crítica y el momento en que se asume que ambos están en ella. (D)</p> Signup and view all the answers

¿Cuál de las siguientes afirmaciones describe con mayor precisión el propósito del semáforo puede_leer en el código proporcionado?

<p>Sincroniza al <code>Productor</code> y al <code>Consumidor</code>, asegurando que <code>x</code> tenga un valor escrito antes de que se intente leerlo. (C)</p> Signup and view all the answers

Considerando el valor inicial del semáforo puede_leer y las operaciones sem_wait y sem_signal, ¿qué problema potencial se evita en este escenario de concurrencia?

<p>La lectura de un valor no inicializado de <code>x</code> por parte del <code>Consumidor</code>. (C)</p> Signup and view all the answers

¿Qué implicación tiene el grafo de dependencia presentado en el texto con respecto al orden de ejecución de las sentencias E y L?

<p>El grafo de dependencia garantiza que <code>E</code> se ejecute siempre antes que <code>L</code>, eliminando cualquier posibilidad de inconsistencia. (B)</p> Signup and view all the answers

Si el semáforo puede_leer se inicializara con el valor 1 en lugar de 0, ¿cuál sería la consecuencia más probable en la ejecución del programa?

<p>El <code>Consumidor</code> podría leer un valor no válido de <code>x</code> en la primera iteración. (B)</p> Signup and view all the answers

En un escenario donde múltiples Productores y Consumidores compartieran la variable x y el semáforo puede_leer, ¿qué modificación sería necesaria para mantener la sincronización correcta?

<p>Se requeriría un mutex para proteger la variable <code>x</code> de accesos concurrentes. (D)</p> Signup and view all the answers

Si se eliminara la operación sem_signal(puede_leer) del proceso Productor, ¿qué problema surgiría en el proceso Consumidor?

<p>El proceso <code>Consumidor</code> quedaría bloqueado indefinidamente en la operación <code>sem_wait(puede_leer)</code>. (A)</p> Signup and view all the answers

Supongamos que la función ProducirValor() en el proceso Productor es reemplazada por una función que ocasionalmente tarda mucho tiempo en retornar. ¿Cómo afectaría esto al proceso Consumidor en el esquema actual?

<p>El <code>Consumidor</code> esperaría indefinidamente hasta que <code>ProducirValor()</code> retorne y el <code>Productor</code> señalice el semáforo. (D)</p> Signup and view all the answers

¿Cuál es la principal limitación de la solución de espera única implementada con el semáforo puede_leer en términos de escalabilidad?

<p>No puede manejar múltiples <code>Productores</code> escribiendo en <code>x</code> concurrentemente. (B)</p> Signup and view all the answers

Flashcards

sem_wait(s)

Bloquea el proceso si s es 0 y reduce s en 1 cuando s es mayor que 0.

sem_signal(s)

Incrementa el valor de s en 1. Si hay procesos esperando, reanuda uno de ellos.

Valor del Semáforo

El valor no es negativo. Solo hay procesos esperando cuando el valor es 0.

Invariante del Semáforo

vt = v0 + ns - nw, donde vt es el valor actual, v0 es el valor inicial, ns es el número de signals y nw es el número de waits.

Signup and view all the flashcards

Función de sem_signal

Incrementa el valor del semáforo y, si hay procesos esperando, despierta a uno.

Signup and view all the flashcards

Variables p0sc y p1sc

Variables lógicas usadas para indicar si un proceso está en la sección crítica.

Signup and view all the flashcards

Significado de 'true' en p0sc/p1sc

Un valor 'true' indica que el proceso correspondiente está actualmente dentro de su sección crítica.

Signup and view all the flashcards

Espera mutua

Cada proceso espera a que la variable del otro proceso sea 'false' antes de entrar a su sección crítica.

Signup and view all the flashcards

Asignación de 'psc' a 'true'

Asignar 'true' a su propia variable 'psc' antes de entrar a la sección crítica.

Signup and view all the flashcards

Asignación de 'psc' a 'false'

Asignar 'false' a su propia variable 'psc' después de salir de la sección crítica.

Signup and view all the flashcards

Propiedad de progreso

La propiedad de progreso se cumple, ya que los procesos no necesitan alternarse obligatoriamente.

Signup and view all the flashcards

Independencia de variables

El uso de dos variables independientes permite que los procesos accedan a la sección crítica sin un orden estricto.

Signup and view all the flashcards

Corrección del pseudocódigo

La versión del pseudocódigo con 'p0sc' y 'p1sc', aunque mejora, aún tiene problemas y no es completamente correcta.

Signup and view all the flashcards

¿Qué es 'p01sc'?

Una variable lógica compartida que indica si algún proceso (0 o 1) está en la sección crítica.

Signup and view all the flashcards

Significado de 'p01sc = true'

Si 'p01sc' es verdadero, significa que la sección crítica está ocupada y ningún otro proceso puede entrar.

Signup and view all the flashcards

Significado de 'p01sc = false'

Si 'p01sc' es falso, indica que ningún proceso está actualmente en la sección crítica.

Signup and view all the flashcards

¿Qué es 'exclusión mutua'?

La exclusión mutua es la propiedad que garantiza que solo un proceso pueda estar en la sección crítica en un momento dado.

Signup and view all the flashcards

¿Cuál es el fallo en el código?

El problema ocurre cuando ambos procesos (0 y 1) leen 'p01sc' como falso casi simultáneamente, antes de que alguno pueda establecerlo a verdadero.

Signup and view all the flashcards

¿Cómo se viola la exclusión mutua?

Los procesos pueden entrar en la sección crítica simultáneamente si ambos ven 'p01sc' como 'false' antes de que alguno lo cambie a 'true'.

Signup and view all the flashcards

Secuencia de eventos problemática

  1. Proceso 0 lee p01sc (false); 2) Proceso 1 lee p01sc (false); 3) Proceso 0 escribe p01sc (true); 4) Proceso 1 escribe p01sc (true).
Signup and view all the flashcards

¿Qué es 'pseudocódigo'?

El pseudocódigo es una descripción informal de un algoritmo, más legible que el código real pero menos preciso.

Signup and view all the flashcards

Semáforo 'puede_leer'

Un semáforo (puede_leer) que indica si un valor ha sido escrito pero aún no leído.

Signup and view all the flashcards

Productor (en concurrencia)

Un proceso que genera datos o valores.

Signup and view all the flashcards

Valor inicial de 'puede_leer'

Establece el valor del semáforo 'puede_leer' en 0 inicialmente.

Signup and view all the flashcards

Consumidor (en concurrencia)

Un proceso que recibe y utiliza los datos o valores generados por el productor.

Signup and view all the flashcards

Variable 'a' en Productor

Una variable local dentro del proceso Productor usada para almacenar el valor generado antes de ser transmitido.

Signup and view all the flashcards

Proceso Productor

El proceso que escribe el valor en la variable compartida 'x'.

Signup and view all the flashcards

Variable 'b' en Consumidor

Una variable local dentro del proceso Consumidor usada para recibir el valor del productor.

Signup and view all the flashcards

sem_wait(puede_leer)

Espera a que el semáforo 'puede_leer' sea mayor que 0 antes de leer 'x'.

Signup and view all the flashcards

b := x

Asigna el valor de 'x' a la variable local 'b' en el proceso Consumidor.

Signup and view all the flashcards

Interfoliación (en concurrencia)

El orden específico en que las sentencias de diferentes procesos se ejecutan en un entorno concurrente.

Signup and view all the flashcards

Proceso Consumidor

El proceso que lee el valor de la variable compartida 'x'.

Signup and view all the flashcards

sem_signal(puede_leer)

Señaliza al semáforo 'puede_leer', permitiendo al consumidor leer 'x'.

Signup and view all the flashcards

Espera Única

Asegura que la escritura (E) en 'x' ocurra antes que la lectura (L) de 'x'.

Signup and view all the flashcards

¿Qué implica 't' en exclusión mutua?

Instante en que ambos procesos (0 y 1) están en su sección crítica (SC).

Signup and view all the flashcards

¿Qué es 's' en la demostración?

La última operación de asignación (atómica) a la variable turno0 antes del tiempo t.

Signup and view all the flashcards

¿Qué ocurre entre 's' y 't'?

En el intervalo (s, t], ninguna variable compartida cambia porque los procesos están en espera ocupada o en la sección crítica.

Signup and view all the flashcards

¿Qué valor tienen p0sc y p1sc en (s, t]?

Durante el intervalo (s, t], las variables p0sc y p1sc valen true, indicando la intención de entrar a la sección crítica.

Signup and view all the flashcards

Si el proceso 0 asignó en 's'...

Si el proceso 0 ejecutó la línea 5 (asignación a turno0) en 's', no pudo entrar a SC entre 's' y 't'.

Signup and view all the flashcards

¿Quién asignó a turno0 si el proceso 0 no entró?

Si el proceso 0 no entró en SC durante (s, t], entonces el proceso 1 fue el último en asignar valor a turno0 en 's'.

Signup and view all the flashcards

¿Cuál es la cota de espera limitada?

El número máximo de veces que otro proceso puede entrar a la sección crítica mientras uno espera es 1.

Signup and view all the flashcards

¿Qué se demuestra con todo esto?

La exclusión mutua se cumple porque no puede existir un instante en el cual ambos procesos estén simultáneamente en la sección crítica.

Signup and view all the flashcards

Study Notes

Sincronización en Memoria Compartida

  • Se exploran soluciones de exclusión mutua y sincronización basadas en el uso de memoria compartida entre procesos.
  • Estas soluciones se dividen en:
    • Soluciones de bajo nivel con espera ocupada, basadas en instrucciones de lectura/escritura directa y bucles de espera.
    • Soluciones de alto nivel, con una capa de software que ofrece una interfaz y bloquea procesos en espera.

Soluciones de Bajo Nivel con Espera Ocupada

  • Un proceso en espera entra en un bucle indefinido revisando continuamente si una condición se cumple.
  • Se clasifican en:
    • Soluciones Software: Operaciones de lectura/escritura de datos simples en memoria compartida.
    • Soluciones Hardware (cerrojos): Instrucciones de máquina específicas dentro del repertorio de los procesadores.

Soluciones de Alto Nivel

  • Las soluciones de bajo nivel son propensas a errores, generan algoritmos complejos y afectan al rendimiento de la CPU.
  • Las soluciones de alto nivel incluyen:
    • Semáforos: Construidos sobre soluciones de bajo nivel, utilizan servicios del SO para bloquear y reactivar procesos.
    • Regiones críticas condicionales: Soluciones de nivel superior a los semáforos, implementables sobre estos.
    • Monitores: Soluciones de alto nivel implementables en lenguajes orientados a objetos (Java, Python).

Estructura de los Procesos con Secciones Críticas

  • Un proceso con una sección crítica (SC) se estructura en tres etapas:
    • Protocolo de Entrada (PE): Instrucciones incluyendo posibles esperas para acceder a la SC.
    • Sección Crítica (SC): Instrucciones ejecutadas por un solo proceso a la vez.
    • Protocolo de Salida (PS): Instrucciones que permiten a otros procesos saber que la SC está libre.
  • Las sentencias fuera de estas etapas se denominan Resto de Sentencias (RS).

Acceso Repetitivo a las Secciones Críticas

  • Se simplifica el análisis asumiendo que cada proceso tiene una única SC contigua y se ejecuta en un bucle infinito con dos pasos: SC (con PE y PS) y RS.
  • El proceso puede finalizar en la sección RS.

Diagrama de Estados de un Proceso

  • Un proceso pasa por los estados de Protocolo de Entrada, Sección Crítica, Protocolo de Salida y Resto de Sentencias.
  • Solo se puede terminar en Resto de Sentencias.
  • En el Protocolo de Entrada se introducen esperas para garantizar la exclusión mutua en la Sección Crítica.

Comportamiento de los Procesos

  • Para implementar soluciones correctas, se asume que los procesos terminan su sección crítica en un tiempo finito.
  • Durante la sección crítica, un proceso no debe finalizar, abortar, entrar en bucle infinito o ser bloqueado externamente.
  • Se busca minimizar el tiempo en SC.

Propiedades para Exclusión Mutua

  • Un algoritmo de Exclusión Mutua debe ser correcto cumpliendo tres propiedades mínimas:
    • Exclusión mutua: Un solo proceso puede ejecutar una sentencia de la SC en un momento dado.
    • Progreso: Si ningún proceso está en la SC, y algunos compiten, uno debe poder acceder en un tiempo finito
    • Espera limitada: Un proceso tiene un límite máximo en el número de veces que otros procesos pueden entrar a la SC mientras espera.
  • Además, se valoran propiedades deseables como eficiencia y equidad.

Refinamiento Sucesivo de Dijkstra

  • Es una serie de algoritmos que resuelven el problema de la exclusión mutua.
  • Comienza con una versión simple incorrecta y realiza mejoras sucesivas. La versión final correcta es el Algoritmo de Dekker.
  • Se asumen dos procesos (P0 y P1) ejecutando un bucle infinito con PE, SC, PS y otras sentencias.

Algoritmo de Dekker

  • Es un algoritmo correcto para la exclusión mutua y es el resultado del refinamiento sucesivo de Djikstra.
  • Cada proceso incluye una espera de cortesía si ambos coinciden en el PE.
  • Para evitar interbloqueos, la espera de cortesía la realiza un proceso de forma alterna.
  • Un variable permite determinar el fin de la espera de cortesía.

Algoritmo de Peterson

  • Es un algoritmo correcto para exclusión mutua y más simple que el de Dekker.
  • Utiliza variables lógicas que expresan la presencia en el PE o SC, más una variable de turno para resolver el interbloqueo.
  • Se asigna a la variable de turno al inicio del PE dando preferencia al primer proceso en llegar.
  • A diferencia de Dekker, el PE usa un solo bucle en lugar de bucles anidados.

Soluciones Hardware con Espera Ocupada (Cerrojos)

  • Los cerrojos son una solución hardware para la exclusión mutua y la sincronización, basada en espera ocupada.
  • La espera ocupada es un bucle ejecutado hasta que ningún otro proceso esté en la sección crítica.
  • Un valor lógico compartido (cerrojo) indica si un proceso está en la SC. El cerrojo se actualiza en el protocolo de salida.
  • Se requiere de instrucciones hardware especificas.

La Instrucción TestAndSet

  • Instrucción máquina atómica (indivisible) disponible en algunos procesadores.
  • Admite la dirección de memoria de una variable lógica como cerrojo.
  • Lee el valor anterior del cerrojo, lo pone a true y devuelve el valor anterior, todo de forma atómica.

Desventajas de los Cerrojos

  • Las esperas consumen tiempo de CPU.
  • El acceso directo a los cerrojos puede llevar a errores.
  • No garantizan equidad.

Uso de los Cerrojos

  • Se usan restringidamente en componentes de software del sistema operativo o librerías de tiempo real.
  • La ejecución de la SC debe llevar un intervalo corto de tiempo ya que las esperas ocupadas son cortas y la CPU no se desaprovecha tanto.

Semáforos para Sincronización

  • Solucionan o aminoran los problemas de soluciones de bajo nivel y tienen un uso más amplio.
  • No se utiliza espera ocupada, si no bloqueo de procesos utilizando la CPU de forma mucho mas eficiente.
  • Resuelven el problema de exclusión mutua de forma sencilla utilizando esquemas sencillos.
  • Un estructura de datos a las se accede únicamente mediante subprogramas específicos mejorando la seguridad de los programas.

Bloqueo y Desbloqueo de Procesos

  • Los semáforos exigen que los procesos bloqueados no ocupen la CPU.
  • Un proceso elige quedarse bloqueado.
  • Un proceso en ejecución elige que se desbloquee otro proceso bloquedo.
  • Se permite varios conjuntos de procesos bloqueados simultáneos.
  • Necesita servicios externos proporcionados por el SO

Estructura de un Semáforo

  • Un semáforo es una instancia de una estructura de datos con:
    • Un conjunto de procesos bloqueados esperando al semáforo.
    • Un valor natural (entero no negativo) llamado valor del semáforo.

Operaciones del Semáforo

  • sem_wait(s): Bloquea el proceso si s es 0. Disminuir el valor en uno
  • sem_signal(s): Aumenta el valor dese uno. Reactiva a uno de los procesos esperando.

Invariante de un Semáforo

  • Dado un semáforo s en el tiempo t, su valor es el valor inicial + llamadas a sem_signal - llamadas a sem_wait >= 0
  • Los cuatro valores son enteros
  • La igualdad se cumple cuando no se esta ejecutando ni sem_wait ni sem_signal
  • No cuentan sem_wait no completadas

Implementación sem _wat sem_signal

  • Exclusión mutua sobre cada semáforo.

Patrones de Uso de Semáforos

  • Esquema para solucionar la sincronización de un problema típico sencillo.
  • Espera única: un proceso espera a que otro complete una sentencia.
  • Exclusión mutua: acceso a una sección por parte de un número aleatorio de procesos.
  • Problema del Productor/Consumidor: similar al de espera única pero repetida en un bucle.

Espera Única

  • Un proceso "consumidor" lee una variable compartida.
  • La sentencias deben de ser atómicas.

Espera Única: Solución con semáforo

  • Se utiliza un semáforo cuyo valor es 1 solo cuando existe un valor para leer.

Espera Única : Verificación

  • En cualquier instante, el número que se a ejecutado sem_signal se escribe después de E donde ns es menor o igual #E
  • Se sigue para ver el invariante del monitor.

Uso de Semáforos para Exclusión Mutua

  • Un semáforo se inicializa a 1 y se usa wait antes de la sección crítica y signal después de la sección crítica.

Verificación de Exclusión Mutua

  • El número de procesos ejecutándose con un semáforo es: 0 <= nsc = nw - nw

Sincronización tipo Productor/Consumidor

  • El problema de Productor/Consumidor es igual al que ya se conoce pero con lecturas y escrituras repetidas.

Solution Del Problema de Productores y Consumidores

  • Se utiliza uno nuevo inicial izado en 1

Limitaciones de los semáforos

  • Los problemas complejos con sincronización pueden ser difíciles de verificar.
  • Al igual que los errores pueden provocar estados incorrectos.

Monitores como Mecansimo de Alto Nivel

  • Se evita variables globales, se hacen explícitas las variables y las operaciones están protegidas. Esto permite tener acceso estructurado y encapsulación.

Estructura y Functionalidad de un Monitor

  • El acceso es garantizado de forma mutua garantizando la sicnronización.

Ventajas sobre los Semáforos

  • Los monitores hacen que los problemas sean más fáciles de ver.

Sintaxis de Un Monitor

  • Se declara especificando las variables permanentes, los procedimientos del monitor y el código inicializado.

Componentes de Un Monitor

  • Variables permanentes:
    • Pueden ser accedidas del código.
    • permanecen sin modificaciones.
  • Procedimientos
    • Toman nuevos valores
  • Código de inicialización
    • Fija un valor inicial.

Cola Del Monitor Para Exclusiones Mutuas

  • Si el proceso que va a ser afectado no es el que se necesita entonces se bloquea y se añade a una cola.
  • Cuando un proceso abandone el monitor y están todos libres, la cola seguirá como FIFO para garantizar la validez.

Estructura de UN Semáforo

  • La exclusividad mutua se garantiza pero los procesos bloqueados no ocupan la CPU.
  • Un hilo se solicita el bloqueo para la espera.
  • Se utiliza cola dependiendo de que variable se necesite para la siguiente operación y se guarda con el orden de que se necesita.

Monitores para la sincronización

  • Implementar sincronizaciones donde se requieran de facilidades.
  • con semáforos solo existe bloqueo o activaciones pero con esto se puede bloquear y activar selectivamente.

Diseño para la verificación de monitores

  • Un usuario sólo tiene acceso a las variables mediante un conjunto de funciones
  • Es un recurso compartido al cual se accede de forma concurrente
  • Exclusión mutua con los accesos a procedimientos.

Cond

  • Variable tipo condición para hacer al SO saber cuando un proceso espere y libere al monitor.
  • Wait y Signal:
    • El proceso llama a wait indicando que espera una condición
    • Otro proceso llama a señal una vez que la condición se ha cumplido
  • Los procesos que hagan wait liberan la seguridad del monitor permitiendo que puedan entrar otros.

Semántica Y Exclusividad Mutua

  • Un subproceso se solicita el bloqueo para la espera indicandole con prioridad al SO.
  • Señal:
    • Hay tipos de procedimientos de señal, a veces un programa funciona con un semáforo pero no con otro, y viceversa.
      • Signal Y Continuar, el programa señal intenta hacer el signal pero otro programa ocupa ese valor por lo que a veces da errores por la espera.
      • Signal Y Salida, el monitor señal libera el camino, pero el asignante es quien ejecuta.
      • Signal y esperar por una condición.

Colas De Prioridad

  • El planificador se le notifica del código dependiente de los tiempos por lo que así se puede poner uno con mayor o menor capacidad de tiempo.
  • Se usan para la espera en FIFO.

El Problema de Los Escritores y Lectores

  • Hay procesos que leen la estructura de datos, pero no pueden hacer nada más, su código simplemente lee y debe de ser hecho de forma concurrente, los escritores se van al último ciclo de la operación.
  • Para implementar la sincronización correctamente se usaran 4 procedimientos.
  • Para implementar se supone que el monitor se le llama cuando un proceso entra en modo lectura, para implementar se supone que si hay mas de 0 escritores, se espera a que no haya ninguno activo.

Cola De Urgencias

  • Se tiene más prioridad en un monitor de espera con señal.

Studying That Suits You

Use AI to generate personalized quizzes and flashcards to suit your learning preferences.

Quiz Team

Related Documents

Description

Este cuestionario explora el comportamiento y las propiedades de los semáforos en sistemas concurrentes. Aborda las operaciones sem_wait y sem_signal, condiciones de bloqueo, y el uso de semáforos binarios. También cubre cómo los semáforos previenen condiciones de carrera.

More Like This

Use Quizgecko on...
Browser
Browser